setMwGlobals( [ 'wgArticlePath' => '/wiki/$1', 'wgServer' => '//example.org', 'wgCanonicalServer' => 'http://example.org', 'wgScriptPath' => '/w', 'wgScript' => '/w/index.php', ] ); $this->factory = MediaWikiServices::getInstance()->getLinkRendererFactory(); } public function testMergeAttribs() { $target = new TitleValue( NS_SPECIAL, 'Blankpage' ); $linkRenderer = $this->factory->create(); $link = $linkRenderer->makeBrokenLink( $target, null, [ // Appended to class 'class' => 'foobar', // Suppresses href attribute 'href' => false, // Extra attribute 'bar' => 'baz' ] ); $this->assertEquals( '' . 'Special:BlankPage', $link ); } public function testMakeKnownLink() { $target = new TitleValue( NS_MAIN, 'Foobar' ); $linkRenderer = $this->factory->create(); // Query added $this->assertEquals( 'Foobar', $linkRenderer->makeKnownLink( $target, null, [], [ 'foo' => 'bar' ] ) ); // forcearticlepath $linkRenderer->setForceArticlePath( true ); $this->assertEquals( 'Foobar', $linkRenderer->makeKnownLink( $target, null, [], [ 'foo' => 'bar' ] ) ); // expand = HTTPS $linkRenderer->setForceArticlePath( false ); $linkRenderer->setExpandURLs( PROTO_HTTPS ); $this->assertEquals( 'Foobar', $linkRenderer->makeKnownLink( $target ) ); } public function testMakeBrokenLink() { $target = new TitleValue( NS_MAIN, 'Foobar' ); $special = new TitleValue( NS_SPECIAL, 'Foobar' ); $linkRenderer = $this->factory->create(); // action=edit&redlink=1 added $this->assertEquals( 'Foobar', $linkRenderer->makeBrokenLink( $target ) ); // action=edit&redlink=1 not added due to action query parameter $this->assertEquals( 'Foobar', $linkRenderer->makeBrokenLink( $target, null, [], [ 'action' => 'foobar' ] ) ); // action=edit&redlink=1 not added due to NS_SPECIAL $this->assertEquals( 'Special:Foobar', $linkRenderer->makeBrokenLink( $special ) ); // fragment stripped $this->assertEquals( 'Foobar', $linkRenderer->makeBrokenLink( $target->createFragmentTarget( 'foobar' ) ) ); } public function testMakeLink() { $linkRenderer = $this->factory->create(); $foobar = new TitleValue( NS_SPECIAL, 'Foobar' ); $blankpage = new TitleValue( NS_SPECIAL, 'Blankpage' ); $this->assertEquals( 'foo', $linkRenderer->makeLink( $foobar, 'foo' ) ); $this->assertEquals( 'blank', $linkRenderer->makeLink( $blankpage, 'blank' ) ); $this->assertEquals( '<script>evil()</script>', $linkRenderer->makeLink( $foobar, '' ) ); $this->assertEquals( '', $linkRenderer->makeLink( $foobar, new HtmlArmor( '' ) ) ); } public function testGetLinkClasses() { $wanCache = ObjectCache::getMainWANInstance(); $titleFormatter = MediaWikiServices::getInstance()->getTitleFormatter(); $linkCache = new LinkCache( $titleFormatter, $wanCache ); $foobarTitle = new TitleValue( NS_MAIN, 'FooBar' ); $redirectTitle = new TitleValue( NS_MAIN, 'Redirect' ); $userTitle = new TitleValue( NS_USER, 'Someuser' ); $linkCache->addGoodLinkObj( 1, // id $foobarTitle, 10, // len 0 // redir ); $linkCache->addGoodLinkObj( 2, // id $redirectTitle, 10, // len 1 // redir ); $linkCache->addGoodLinkObj( 3, // id $userTitle, 10, // len 0 // redir ); $linkRenderer = new LinkRenderer( $titleFormatter, $linkCache ); $linkRenderer->setStubThreshold( 0 ); $this->assertEquals( '', $linkRenderer->getLinkClasses( $foobarTitle ) ); $linkRenderer->setStubThreshold( 20 ); $this->assertEquals( 'stub', $linkRenderer->getLinkClasses( $foobarTitle ) ); $linkRenderer->setStubThreshold( 0 ); $this->assertEquals( 'mw-redirect', $linkRenderer->getLinkClasses( $redirectTitle ) ); $linkRenderer->setStubThreshold( 20 ); $this->assertEquals( '', $linkRenderer->getLinkClasses( $userTitle ) ); } }