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