MediaWiki  REL1_24
MediaWikiPageLinkRendererTest.php
Go to the documentation of this file.
00001 <?php
00029 class MediaWikiPageLinkRendererTest extends MediaWikiTestCase {
00030 
00031     protected function setUp() {
00032         parent::setUp();
00033 
00034         $this->setMwGlobals( array(
00035             'wgContLang' => Language::factory( 'en' ),
00036         ) );
00037     }
00038 
00044     private function getGenderCache() {
00045         $genderCache = $this->getMockBuilder( 'GenderCache' )
00046             ->disableOriginalConstructor()
00047             ->getMock();
00048 
00049         $genderCache->expects( $this->any() )
00050             ->method( 'getGenderOf' )
00051             ->will( $this->returnValue( 'female' ) );
00052 
00053         return $genderCache;
00054     }
00055 
00056     public static function provideGetPageUrl() {
00057         return array(
00058             array(
00059                 new TitleValue( NS_MAIN, 'Foo_Bar' ),
00060                 array(),
00061                 '/Foo_Bar'
00062             ),
00063             array(
00064                 new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ),
00065                 array( 'foo' => 'bar' ),
00066                 '/User:Hansi_Maier?foo=bar#stuff'
00067             ),
00068         );
00069     }
00070 
00074     public function testGetPageUrl( TitleValue $title, $params, $url ) {
00075         // NOTE: was of Feb 2014, MediaWikiPageLinkRenderer *ignores* the
00076         // WikitextTitleFormatter we pass here, and relies on the Linker
00077         // class for generating the link! This may break the test e.g.
00078         // of Linker uses a different language for the namespace names.
00079 
00080         $lang = Language::factory( 'en' );
00081 
00082         $formatter = new MediaWikiTitleCodec( $lang, $this->getGenderCache() );
00083         $renderer = new MediaWikiPageLinkRenderer( $formatter, '/' );
00084         $actual = $renderer->getPageUrl( $title, $params );
00085 
00086         $this->assertEquals( $url, $actual );
00087     }
00088 
00089     public static function provideRenderHtmlLink() {
00090         return array(
00091             array(
00092                 new TitleValue( NS_MAIN, 'Foo_Bar' ),
00093                 'Foo Bar',
00094                 '!<a .*href=".*?Foo_Bar.*?".*?>Foo Bar</a>!'
00095             ),
00096             array(
00097                 //NOTE: Linker doesn't include fragments in "broken" links
00098                 //NOTE: once this no longer uses Linker, we will get "2" instead of "User" for the namespace.
00099                 new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ),
00100                 'Hansi Maier\'s Stuff',
00101                 '!<a .*href=".*?User:Hansi_Maier.*?>Hansi Maier\'s Stuff</a>!'
00102             ),
00103             array(
00104                 //NOTE: Linker doesn't include fragments in "broken" links
00105                 //NOTE: once this no longer uses Linker, we will get "2" instead of "User" for the namespace.
00106                 new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ),
00107                 null,
00108                 '!<a .*href=".*?User:Hansi_Maier.*?>User:Hansi Maier#stuff</a>!'
00109             ),
00110         );
00111     }
00112 
00116     public function testRenderHtmlLink( TitleValue $title, $text, $pattern ) {
00117         // NOTE: was of Feb 2014, MediaWikiPageLinkRenderer *ignores* the
00118         // WikitextTitleFormatter we pass here, and relies on the Linker
00119         // class for generating the link! This may break the test e.g.
00120         // of Linker uses a different language for the namespace names.
00121 
00122         $lang = Language::factory( 'en' );
00123 
00124         $formatter = new MediaWikiTitleCodec( $lang, $this->getGenderCache() );
00125         $renderer = new MediaWikiPageLinkRenderer( $formatter );
00126         $actual = $renderer->renderHtmlLink( $title, $text );
00127 
00128         $this->assertRegExp( $pattern, $actual );
00129     }
00130 
00131     public static function provideRenderWikitextLink() {
00132         return array(
00133             array(
00134                 new TitleValue( NS_MAIN, 'Foo_Bar' ),
00135                 'Foo Bar',
00136                 '[[:0:Foo Bar|Foo Bar]]'
00137             ),
00138             array(
00139                 new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ),
00140                 'Hansi Maier\'s Stuff',
00141                 '[[:2:Hansi Maier#stuff|Hansi Maier&#39;s Stuff]]'
00142             ),
00143             array(
00144                 new TitleValue( NS_USER, 'Hansi_Maier', 'stuff' ),
00145                 null,
00146                 '[[:2:Hansi Maier#stuff|2:Hansi Maier#stuff]]'
00147             ),
00148         );
00149     }
00150 
00154     public function testRenderWikitextLink( TitleValue $title, $text, $expected ) {
00155         $formatter = $this->getMock( 'TitleFormatter' );
00156         $formatter->expects( $this->any() )
00157             ->method( 'getFullText' )
00158             ->will( $this->returnCallback(
00159                 function ( TitleValue $title ) {
00160                     return str_replace( '_', ' ', "$title" );
00161                 }
00162             ));
00163 
00164         $renderer = new MediaWikiPageLinkRenderer( $formatter, '/' );
00165         $actual = $renderer->renderWikitextLink( $title, $text );
00166 
00167         $this->assertEquals( $expected, $actual );
00168     }
00169 }