Merge "Improve some documentation of AuthManager's additions"
[lhc/web/wiklou.git] / tests / phpunit / includes / linker / LinkRendererTest.php
1 <?php
2
3 use MediaWiki\Linker\LinkRenderer;
4 use MediaWiki\MediaWikiServices;
5
6 /**
7 * @covers LinkRenderer
8 */
9 class LinkRendererTest extends MediaWikiLangTestCase {
10
11 /**
12 * @var TitleFormatter
13 */
14 private $titleFormatter;
15
16 public function setUp() {
17 parent::setUp();
18 $this->setMwGlobals( [
19 'wgArticlePath' => '/wiki/$1',
20 'wgServer' => '//example.org',
21 'wgCanonicalServer' => 'http://example.org',
22 'wgScriptPath' => '/w',
23 'wgScript' => '/w/index.php',
24 ] );
25 $this->titleFormatter = MediaWikiServices::getInstance()->getTitleFormatter();
26 }
27
28 public function testMergeAttribs() {
29 $target = new TitleValue( NS_SPECIAL, 'Blankpage' );
30 $linkRenderer = new LinkRenderer( $this->titleFormatter );
31 $link = $linkRenderer->makeBrokenLink( $target, null, [
32 // Appended to class
33 'class' => 'foobar',
34 // Suppresses href attribute
35 'href' => false,
36 // Extra attribute
37 'bar' => 'baz'
38 ] );
39 $this->assertEquals(
40 '<a href="/wiki/Special:BlankPage" class="new foobar" '
41 . 'title="Special:BlankPage (page does not exist)" bar="baz">'
42 . 'Special:BlankPage</a>',
43 $link
44 );
45 }
46
47 public function testMakeKnownLink() {
48 $target = new TitleValue( NS_MAIN, 'Foobar' );
49 $linkRenderer = new LinkRenderer( $this->titleFormatter );
50
51 // Query added
52 $this->assertEquals(
53 '<a href="/w/index.php?title=Foobar&amp;foo=bar" '. 'title="Foobar">Foobar</a>',
54 $linkRenderer->makeKnownLink( $target, null, [], [ 'foo' => 'bar' ] )
55 );
56
57 // forcearticlepath
58 $linkRenderer->setForceArticlePath( true );
59 $this->assertEquals(
60 '<a href="/wiki/Foobar?foo=bar" title="Foobar">Foobar</a>',
61 $linkRenderer->makeKnownLink( $target, null, [], [ 'foo' => 'bar' ] )
62 );
63
64 // expand = HTTPS
65 $linkRenderer->setForceArticlePath( false );
66 $linkRenderer->setExpandURLs( PROTO_HTTPS );
67 $this->assertEquals(
68 '<a href="https://example.org/wiki/Foobar" title="Foobar">Foobar</a>',
69 $linkRenderer->makeKnownLink( $target )
70 );
71 }
72
73 public function testMakeBrokenLink() {
74 $target = new TitleValue( NS_MAIN, 'Foobar' );
75 $special = new TitleValue( NS_SPECIAL, 'Foobar' );
76 $linkRenderer = new LinkRenderer( $this->titleFormatter );
77
78 // action=edit&redlink=1 added
79 $this->assertEquals(
80 '<a href="/w/index.php?title=Foobar&amp;action=edit&amp;redlink=1" '
81 . 'class="new" title="Foobar (page does not exist)">Foobar</a>',
82 $linkRenderer->makeBrokenLink( $target )
83 );
84
85 // action=edit&redlink=1 not added due to action query parameter
86 $this->assertEquals(
87 '<a href="/w/index.php?title=Foobar&amp;action=foobar" class="new" '
88 . 'title="Foobar (page does not exist)">Foobar</a>',
89 $linkRenderer->makeBrokenLink( $target, null, [], [ 'action' => 'foobar' ] )
90 );
91
92 // action=edit&redlink=1 not added due to NS_SPECIAL
93 $this->assertEquals(
94 '<a href="/wiki/Special:Foobar" class="new" title="Special:Foobar '
95 . '(page does not exist)">Special:Foobar</a>',
96 $linkRenderer->makeBrokenLink( $special )
97 );
98
99 // fragment stripped
100 $this->assertEquals(
101 '<a href="/w/index.php?title=Foobar&amp;action=edit&amp;redlink=1" '
102 . 'class="new" title="Foobar (page does not exist)">Foobar</a>',
103 $linkRenderer->makeBrokenLink( $target->createFragmentTarget( 'foobar' ) )
104 );
105 }
106
107 public function testMakeLink() {
108 $linkRenderer = new LinkRenderer( $this->titleFormatter );
109 $foobar = new TitleValue( NS_SPECIAL, 'Foobar' );
110 $blankpage = new TitleValue( NS_SPECIAL, 'Blankpage' );
111 $this->assertEquals(
112 '<a href="/wiki/Special:Foobar" class="new" title="Special:Foobar '
113 . '(page does not exist)">foo</a>',
114 $linkRenderer->makeLink( $foobar, 'foo' )
115 );
116
117 $this->assertEquals(
118 '<a href="/wiki/Special:BlankPage" title="Special:BlankPage">blank</a>',
119 $linkRenderer->makeLink( $blankpage, 'blank' )
120 );
121
122 $this->assertEquals(
123 '<a href="/wiki/Special:Foobar" class="new" title="Special:Foobar '
124 . '(page does not exist)">&lt;script&gt;evil()&lt;/script&gt;</a>',
125 $linkRenderer->makeLink( $foobar, '<script>evil()</script>' )
126 );
127
128 $this->assertEquals(
129 '<a href="/wiki/Special:Foobar" class="new" title="Special:Foobar '
130 . '(page does not exist)"><script>evil()</script></a>',
131 $linkRenderer->makeLink( $foobar, new HtmlArmor( '<script>evil()</script>' ) )
132 );
133 }
134 }