%PDF- %PDF-
Direktori : /www/varak.net/wiki.varak.net/tests/phpunit/includes/title/ |
Current File : //www/varak.net/wiki.varak.net/tests/phpunit/includes/title/MediaWikiPageLinkRendererTest.php |
<?php /** * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * http://www.gnu.org/copyleft/gpl.html * * @file * @author Daniel Kinzler */ /** * @covers MediaWikiPageLinkRenderer * * @group Title * @group Database */ class MediaWikiPageLinkRendererTest extends MediaWikiTestCase { protected function setUp() { parent::setUp(); $this->setMwGlobals( [ 'wgContLang' => Language::factory( 'en' ), ] ); } /** * Returns a mock GenderCache that will return "female" always. * * @return GenderCache */ private function getGenderCache() { $genderCache = $this->getMockBuilder( 'GenderCache' ) ->disableOriginalConstructor() ->getMock(); $genderCache->expects( $this->any() ) ->method( 'getGenderOf' ) ->will( $this->returnValue( 'female' ) ); return $genderCache; } public static function provideGetPageUrl() { return [ [ new TitleValue( NS_MAIN, 'Foo_Bar' ), [], '/Foo_Bar' ], [ new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ), [ 'foo' => 'bar' ], '/User:Hansi_Maier?foo=bar#stuff' ], ]; } /** * @dataProvider provideGetPageUrl */ public function testGetPageUrl( TitleValue $title, $params, $url ) { // NOTE: was of Feb 2014, MediaWikiPageLinkRenderer *ignores* the // WikitextTitleFormatter we pass here, and relies on the Linker // class for generating the link! This may break the test e.g. // of Linker uses a different language for the namespace names. $lang = Language::factory( 'en' ); $formatter = new MediaWikiTitleCodec( $lang, $this->getGenderCache() ); $renderer = new MediaWikiPageLinkRenderer( $formatter, '/' ); $actual = $renderer->getPageUrl( $title, $params ); $this->assertEquals( $url, $actual ); } public static function provideRenderHtmlLink() { return [ [ new TitleValue( NS_MAIN, 'Foo_Bar' ), 'Foo Bar', '!<a .*href=".*?Foo_Bar.*?".*?>Foo Bar</a>!' ], [ // NOTE: Linker doesn't include fragments in "broken" links // NOTE: once this no longer uses Linker, we will get "2" instead of "User" for the namespace. new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ), 'Hansi Maier\'s Stuff', '!<a .*href=".*?User:Hansi_Maier.*?>Hansi Maier\'s Stuff</a>!' ], [ // NOTE: Linker doesn't include fragments in "broken" links // NOTE: once this no longer uses Linker, we will get "2" instead of "User" for the namespace. new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ), null, '!<a .*href=".*?User:Hansi_Maier.*?>User:Hansi Maier#stuff</a>!' ], ]; } /** * @dataProvider provideRenderHtmlLink */ public function testRenderHtmlLink( TitleValue $title, $text, $pattern ) { // NOTE: was of Feb 2014, MediaWikiPageLinkRenderer *ignores* the // WikitextTitleFormatter we pass here, and relies on the Linker // class for generating the link! This may break the test e.g. // of Linker uses a different language for the namespace names. $lang = Language::factory( 'en' ); $formatter = new MediaWikiTitleCodec( $lang, $this->getGenderCache() ); $renderer = new MediaWikiPageLinkRenderer( $formatter ); $actual = $renderer->renderHtmlLink( $title, $text ); $this->assertRegExp( $pattern, $actual ); } public static function provideRenderWikitextLink() { return [ [ new TitleValue( NS_MAIN, 'Foo_Bar' ), 'Foo Bar', '[[:0:Foo Bar|Foo Bar]]' ], [ new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ), 'Hansi Maier\'s Stuff', '[[:2:Hansi Maier#stuff|Hansi Maier's Stuff]]' ], [ new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ), null, '[[:2:Hansi Maier#stuff|2:Hansi Maier#stuff]]' ], ]; } /** * @dataProvider provideRenderWikitextLink */ public function testRenderWikitextLink( TitleValue $title, $text, $expected ) { $formatter = $this->getMock( 'TitleFormatter' ); $formatter->expects( $this->any() ) ->method( 'getFullText' ) ->will( $this->returnCallback( function ( TitleValue $title ) { return str_replace( '_', ' ', "$title" ); } ) ); $renderer = new MediaWikiPageLinkRenderer( $formatter, '/' ); $actual = $renderer->renderWikitextLink( $title, $text ); $this->assertEquals( $expected, $actual ); } }