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