|
1
|
|
|
<?php |
|
2
|
|
|
|
|
3
|
|
|
/** |
|
4
|
|
|
* Class AutomatedLinkTest |
|
5
|
|
|
* Run tests to check the Automated Link Object and it's functionality |
|
6
|
|
|
* |
|
7
|
|
|
* @method void assertTrue(boolean $test, string $message) |
|
8
|
|
|
*/ |
|
9
|
|
|
class AutomatedLinkTest extends SapphireTest { |
|
10
|
|
|
|
|
11
|
|
|
public static $fixture_file = 'fixtures/AutomatedLinkTest.yml'; |
|
12
|
|
|
|
|
13
|
|
|
/** |
|
14
|
|
|
* Test that links are included in the content field |
|
15
|
|
|
*/ |
|
16
|
|
|
public function testInsertion(){ |
|
17
|
|
|
$this->objFromFixture('AutomatedLink','link'); |
|
18
|
|
|
$page = $this->createPage('<p>Checking if phrase is replaced</p>'); |
|
19
|
|
|
$link = $this->getLinkFromPage($page); |
|
20
|
|
|
$this->assertTrue($link->nodeValue === 'phrase', 'Link wasn\'t created'); |
|
21
|
|
|
} |
|
22
|
|
|
|
|
23
|
|
|
/** |
|
24
|
|
|
* Test the individual properties of the automated link |
|
25
|
|
|
*/ |
|
26
|
|
|
public function testProperties(){ |
|
27
|
|
|
$this->objFromFixture('AutomatedLink','link2'); |
|
28
|
|
|
|
|
29
|
|
|
$page = self::createPage('<p>Checking if properties is with correct props</p>'); |
|
30
|
|
|
$link = self::getLinkFromPage($page); |
|
31
|
|
|
|
|
32
|
|
|
$this->assertTrue( $link->nodeValue === 'properties', 'Phrase did not match' ); |
|
33
|
|
|
$this->assertTrue( $link->getAttribute('title') === 'test title', 'Title did not match' ); |
|
34
|
|
|
$this->assertTrue( $link->getAttribute('href') === '#test-anchor', 'Anchor did not match' ); |
|
35
|
|
|
$this->assertTrue( $link->getAttribute('target') === '_blank', 'Target did not match' ); |
|
36
|
|
|
$this->assertTrue( $link->getAttribute('rel') === 'nofollow', 'Rel did not match' ); |
|
37
|
|
|
} |
|
38
|
|
|
|
|
39
|
|
|
/** |
|
40
|
|
|
* Test that the default properties match what we expect |
|
41
|
|
|
*/ |
|
42
|
|
|
public function testDefaultProperties(){ |
|
43
|
|
|
$this->objFromFixture('AutomatedLink','link3'); |
|
44
|
|
|
|
|
45
|
|
|
$page = self::createPage('<p>Checking if default is correct</p>'); |
|
46
|
|
|
$link = self::getLinkFromPage($page); |
|
47
|
|
|
$auto = AutomatedLink::get()->find('Phrase', 'default'); |
|
48
|
|
|
|
|
49
|
|
|
$this->assertTrue( $link->nodeValue === 'default', 'Phrase did not match' ); |
|
50
|
|
|
$this->assertTrue( $link->getAttribute('title') === '', 'Title did not match' ); |
|
51
|
|
|
$this->assertTrue( $link->getAttribute('href') === '#', 'href did not match' ); |
|
52
|
|
|
$this->assertTrue( $link->getAttribute('target') === '', 'Target did not match' ); |
|
53
|
|
|
$this->assertTrue( $link->getAttribute('rel') === '', 'Rel did not match' ); |
|
54
|
|
|
$this->assertTrue( (int) $link->getAttribute('data-id') === $auto->ID, 'data-id did not match' ); |
|
55
|
|
|
} |
|
56
|
|
|
|
|
57
|
|
|
/** |
|
58
|
|
|
* Test that the default properties match what we expect |
|
59
|
|
|
*/ |
|
60
|
|
|
public function testLimitFilter(){ |
|
61
|
|
|
$page = self::createPage('<p>Checking if default is created only twice. default default</p>'); |
|
62
|
|
|
$dom = self::getPageDOM($page); |
|
63
|
|
|
$links = $dom->getElementsByTagName('a'); |
|
64
|
|
|
$this->assertTrue($links->length == 2, 'Was suppose to find 2 link. Found '.$links->length); |
|
65
|
|
|
} |
|
66
|
|
|
|
|
67
|
|
|
/** |
|
68
|
|
|
* Test that the default properties match what we expect |
|
69
|
|
|
*/ |
|
70
|
|
|
public function testDisableFilter(){ |
|
71
|
|
|
GlobalAutoLinkSettings::$enabled = false; |
|
72
|
|
|
$page = self::createPage('<p>Checking if default is created at all when automated links are disabled.</p>'); |
|
73
|
|
|
$links = self::getLinksFromPage($page); |
|
74
|
|
|
$this->assertTrue($links->length < 1, 'Was not suppose to find 0 links. Found '.$links->length); |
|
75
|
|
|
GlobalAutoLinkSettings::$enabled = true; |
|
76
|
|
|
} |
|
77
|
|
|
|
|
78
|
|
|
/** |
|
79
|
|
|
* Renders the passed $page and returns all links found if any |
|
80
|
|
|
* |
|
81
|
|
|
* @param SiteTree $page |
|
82
|
|
|
* @return DOMNameList |
|
83
|
|
|
*/ |
|
84
|
|
|
public static function getLinksFromPage(SiteTree $page){ |
|
85
|
|
|
$dom = self::getPageDOM($page); |
|
|
|
|
|
|
86
|
|
|
return $dom->getElementsByTagName('a'); |
|
87
|
|
|
} |
|
88
|
|
|
|
|
89
|
|
|
/** |
|
90
|
|
|
* Create a DOMDocument out of the $page supplied and |
|
91
|
|
|
* check that it only has 1 link. |
|
92
|
|
|
* If it does return it, else fail the test |
|
93
|
|
|
* |
|
94
|
|
|
* @param SiteTree $page |
|
95
|
|
|
* @return DOMDocument |
|
96
|
|
|
*/ |
|
97
|
|
|
public static function getLinkFromPage(SiteTree $page){ |
|
98
|
|
|
$links = self::getLinksFromPage($page); |
|
99
|
|
|
return ( $links->length != 1 ) ? new DOMElement() : $links->item(0); |
|
100
|
|
|
} |
|
101
|
|
|
|
|
102
|
|
|
/** |
|
103
|
|
|
* Create a dummy object for testing functionality on the SiteTree |
|
104
|
|
|
* |
|
105
|
|
|
* @param string|null $content |
|
106
|
|
|
* @return Page |
|
107
|
|
|
*/ |
|
108
|
|
|
public static function createPage($content=null){ |
|
109
|
|
|
$page = Page::create(array( 'Content' => $content )); |
|
110
|
|
|
$page->write(); |
|
111
|
|
|
return $page; |
|
112
|
|
|
} |
|
113
|
|
|
|
|
114
|
|
|
/** |
|
115
|
|
|
* Render the $page supplied into a DOMDocument object |
|
116
|
|
|
* |
|
117
|
|
|
* @param Page $page |
|
118
|
|
|
* @return DOMDocument |
|
119
|
|
|
*/ |
|
120
|
|
|
public static function getPageDOM(Page $page){ |
|
121
|
|
|
$controller = Page_Controller::create($page); |
|
122
|
|
|
$controller->invokeWithExtensions('addAutomatedLinks'); |
|
123
|
|
|
return AutomatedLink::constructDOMDocument($controller->Content); |
|
124
|
|
|
} |
|
125
|
|
|
} |
|
126
|
|
|
|
|
127
|
|
|
|
|
128
|
|
|
|
It seems like the type of the argument is not accepted by the function/method which you are calling.
In some cases, in particular if PHP’s automatic type-juggling kicks in this might be fine. In other cases, however this might be a bug.
We suggest to add an explicit type cast like in the following example: