3 use MediaWiki\Linker\LinkRenderer
;
4 use MediaWiki\Linker\LinkRendererFactory
;
5 use MediaWiki\MediaWikiServices
;
8 * @covers MediaWiki\Linker\LinkRenderer
10 class LinkRendererTest
extends MediaWikiLangTestCase
{
13 * @var LinkRendererFactory
17 public function setUp() {
19 $this->setMwGlobals( [
20 'wgArticlePath' => '/wiki/$1',
21 'wgServer' => '//example.org',
22 'wgCanonicalServer' => 'http://example.org',
23 'wgScriptPath' => '/w',
24 'wgScript' => '/w/index.php',
26 $this->factory
= MediaWikiServices
::getInstance()->getLinkRendererFactory();
29 public function testMergeAttribs() {
30 $target = new TitleValue( NS_SPECIAL
, 'Blankpage' );
31 $linkRenderer = $this->factory
->create();
32 $link = $linkRenderer->makeBrokenLink( $target, null, [
35 // Suppresses href attribute
41 '<a href="/wiki/Special:BlankPage" class="new foobar" '
42 . 'title="Special:BlankPage (page does not exist)" bar="baz">'
43 . 'Special:BlankPage</a>',
48 public function testMakeKnownLink() {
49 $target = new TitleValue( NS_MAIN
, 'Foobar' );
50 $linkRenderer = $this->factory
->create();
54 '<a href="/w/index.php?title=Foobar&foo=bar" '. 'title="Foobar">Foobar</a>',
55 $linkRenderer->makeKnownLink( $target, null, [], [ 'foo' => 'bar' ] )
59 $linkRenderer->setForceArticlePath( true );
61 '<a href="/wiki/Foobar?foo=bar" title="Foobar">Foobar</a>',
62 $linkRenderer->makeKnownLink( $target, null, [], [ 'foo' => 'bar' ] )
66 $linkRenderer->setForceArticlePath( false );
67 $linkRenderer->setExpandURLs( PROTO_HTTPS
);
69 '<a href="https://example.org/wiki/Foobar" title="Foobar">Foobar</a>',
70 $linkRenderer->makeKnownLink( $target )
74 public function testMakeBrokenLink() {
75 $target = new TitleValue( NS_MAIN
, 'Foobar' );
76 $special = new TitleValue( NS_SPECIAL
, 'Foobar' );
77 $linkRenderer = $this->factory
->create();
79 // action=edit&redlink=1 added
81 '<a href="/w/index.php?title=Foobar&action=edit&redlink=1" '
82 . 'class="new" title="Foobar (page does not exist)">Foobar</a>',
83 $linkRenderer->makeBrokenLink( $target )
86 // action=edit&redlink=1 not added due to action query parameter
88 '<a href="/w/index.php?title=Foobar&action=foobar" class="new" '
89 . 'title="Foobar (page does not exist)">Foobar</a>',
90 $linkRenderer->makeBrokenLink( $target, null, [], [ 'action' => 'foobar' ] )
93 // action=edit&redlink=1 not added due to NS_SPECIAL
95 '<a href="/wiki/Special:Foobar" class="new" title="Special:Foobar '
96 . '(page does not exist)">Special:Foobar</a>',
97 $linkRenderer->makeBrokenLink( $special )
102 '<a href="/w/index.php?title=Foobar&action=edit&redlink=1" '
103 . 'class="new" title="Foobar (page does not exist)">Foobar</a>',
104 $linkRenderer->makeBrokenLink( $target->createFragmentTarget( 'foobar' ) )
108 public function testMakeLink() {
109 $linkRenderer = $this->factory
->create();
110 $foobar = new TitleValue( NS_SPECIAL
, 'Foobar' );
111 $blankpage = new TitleValue( NS_SPECIAL
, 'Blankpage' );
113 '<a href="/wiki/Special:Foobar" class="new" title="Special:Foobar '
114 . '(page does not exist)">foo</a>',
115 $linkRenderer->makeLink( $foobar, 'foo' )
119 '<a href="/wiki/Special:BlankPage" title="Special:BlankPage">blank</a>',
120 $linkRenderer->makeLink( $blankpage, 'blank' )
124 '<a href="/wiki/Special:Foobar" class="new" title="Special:Foobar '
125 . '(page does not exist)"><script>evil()</script></a>',
126 $linkRenderer->makeLink( $foobar, '<script>evil()</script>' )
130 '<a href="/wiki/Special:Foobar" class="new" title="Special:Foobar '
131 . '(page does not exist)"><script>evil()</script></a>',
132 $linkRenderer->makeLink( $foobar, new HtmlArmor( '<script>evil()</script>' ) )
136 public function testGetLinkClasses() {
137 $wanCache = ObjectCache
::getMainWANInstance();
138 $titleFormatter = MediaWikiServices
::getInstance()->getTitleFormatter();
139 $linkCache = new LinkCache( $titleFormatter, $wanCache );
140 $foobarTitle = new TitleValue( NS_MAIN
, 'FooBar' );
141 $redirectTitle = new TitleValue( NS_MAIN
, 'Redirect' );
142 $userTitle = new TitleValue( NS_USER
, 'Someuser' );
143 $linkCache->addGoodLinkObj(
149 $linkCache->addGoodLinkObj(
156 $linkCache->addGoodLinkObj(
163 $linkRenderer = new LinkRenderer( $titleFormatter, $linkCache );
164 $linkRenderer->setStubThreshold( 0 );
167 $linkRenderer->getLinkClasses( $foobarTitle )
170 $linkRenderer->setStubThreshold( 20 );
173 $linkRenderer->getLinkClasses( $foobarTitle )
176 $linkRenderer->setStubThreshold( 0 );
179 $linkRenderer->getLinkClasses( $redirectTitle )
182 $linkRenderer->setStubThreshold( 20 );
185 $linkRenderer->getLinkClasses( $userTitle )