MediaWiki
REL1_23
|
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'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 }