MediaWiki
master
|
00001 <?php 00002 00010 class TitleMethodsTest extends MediaWikiTestCase { 00011 00012 public function setup() { 00013 global $wgExtraNamespaces, $wgNamespaceContentModels, $wgContLang; 00014 00015 parent::setUp(); 00016 00017 $this->mergeMwGlobalArrayValue( 00018 'wgExtraNamespaces', 00019 array( 00020 12302 => 'TEST-JS', 00021 12303 => 'TEST-JS_TALK', 00022 ) 00023 ); 00024 00025 $this->mergeMwGlobalArrayValue( 00026 'wgNamespaceContentModels', 00027 array( 00028 12302 => CONTENT_MODEL_JAVASCRIPT, 00029 ) 00030 ); 00031 00032 MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache 00033 $wgContLang->resetNamespaces(); # reset namespace cache 00034 } 00035 00036 public function teardown() { 00037 global $wgContLang; 00038 00039 parent::tearDown(); 00040 00041 MWNamespace::getCanonicalNamespaces( true ); # reset namespace cache 00042 $wgContLang->resetNamespaces(); # reset namespace cache 00043 } 00044 00045 public static function provideEquals() { 00046 return array( 00047 array( 'Main Page', 'Main Page', true ), 00048 array( 'Main Page', 'Not The Main Page', false ), 00049 array( 'Main Page', 'Project:Main Page', false ), 00050 array( 'File:Example.png', 'Image:Example.png', true ), 00051 array( 'Special:Version', 'Special:Version', true ), 00052 array( 'Special:Version', 'Special:Recentchanges', false ), 00053 array( 'Special:Version', 'Main Page', false ), 00054 ); 00055 } 00056 00060 public function testEquals( $titleA, $titleB, $expectedBool ) { 00061 $titleA = Title::newFromText( $titleA ); 00062 $titleB = Title::newFromText( $titleB ); 00063 00064 $this->assertEquals( $expectedBool, $titleA->equals( $titleB ) ); 00065 $this->assertEquals( $expectedBool, $titleB->equals( $titleA ) ); 00066 } 00067 00068 public static function provideInNamespace() { 00069 return array( 00070 array( 'Main Page', NS_MAIN, true ), 00071 array( 'Main Page', NS_TALK, false ), 00072 array( 'Main Page', NS_USER, false ), 00073 array( 'User:Foo', NS_USER, true ), 00074 array( 'User:Foo', NS_USER_TALK, false ), 00075 array( 'User:Foo', NS_TEMPLATE, false ), 00076 array( 'User_talk:Foo', NS_USER_TALK, true ), 00077 array( 'User_talk:Foo', NS_USER, false ), 00078 ); 00079 } 00080 00084 public function testInNamespace( $title, $ns, $expectedBool ) { 00085 $title = Title::newFromText( $title ); 00086 $this->assertEquals( $expectedBool, $title->inNamespace( $ns ) ); 00087 } 00088 00089 public function testInNamespaces() { 00090 $mainpage = Title::newFromText( 'Main Page' ); 00091 $this->assertTrue( $mainpage->inNamespaces( NS_MAIN, NS_USER ) ); 00092 $this->assertTrue( $mainpage->inNamespaces( array( NS_MAIN, NS_USER ) ) ); 00093 $this->assertTrue( $mainpage->inNamespaces( array( NS_USER, NS_MAIN ) ) ); 00094 $this->assertFalse( $mainpage->inNamespaces( array( NS_PROJECT, NS_TEMPLATE ) ) ); 00095 } 00096 00097 public static function provideHasSubjectNamespace() { 00098 return array( 00099 array( 'Main Page', NS_MAIN, true ), 00100 array( 'Main Page', NS_TALK, true ), 00101 array( 'Main Page', NS_USER, false ), 00102 array( 'User:Foo', NS_USER, true ), 00103 array( 'User:Foo', NS_USER_TALK, true ), 00104 array( 'User:Foo', NS_TEMPLATE, false ), 00105 array( 'User_talk:Foo', NS_USER_TALK, true ), 00106 array( 'User_talk:Foo', NS_USER, true ), 00107 ); 00108 } 00109 00113 public function testHasSubjectNamespace( $title, $ns, $expectedBool ) { 00114 $title = Title::newFromText( $title ); 00115 $this->assertEquals( $expectedBool, $title->hasSubjectNamespace( $ns ) ); 00116 } 00117 00118 public function dataGetContentModel() { 00119 return array( 00120 array( 'Help:Foo', CONTENT_MODEL_WIKITEXT ), 00121 array( 'Help:Foo.js', CONTENT_MODEL_WIKITEXT ), 00122 array( 'Help:Foo/bar.js', CONTENT_MODEL_WIKITEXT ), 00123 array( 'User:Foo', CONTENT_MODEL_WIKITEXT ), 00124 array( 'User:Foo.js', CONTENT_MODEL_WIKITEXT ), 00125 array( 'User:Foo/bar.js', CONTENT_MODEL_JAVASCRIPT ), 00126 array( 'User:Foo/bar.css', CONTENT_MODEL_CSS ), 00127 array( 'User talk:Foo/bar.css', CONTENT_MODEL_WIKITEXT ), 00128 array( 'User:Foo/bar.js.xxx', CONTENT_MODEL_WIKITEXT ), 00129 array( 'User:Foo/bar.xxx', CONTENT_MODEL_WIKITEXT ), 00130 array( 'MediaWiki:Foo.js', CONTENT_MODEL_JAVASCRIPT ), 00131 array( 'MediaWiki:Foo.css', CONTENT_MODEL_CSS ), 00132 array( 'MediaWiki:Foo/bar.css', CONTENT_MODEL_CSS ), 00133 array( 'MediaWiki:Foo.JS', CONTENT_MODEL_WIKITEXT ), 00134 array( 'MediaWiki:Foo.CSS', CONTENT_MODEL_WIKITEXT ), 00135 array( 'MediaWiki:Foo.css.xxx', CONTENT_MODEL_WIKITEXT ), 00136 array( 'TEST-JS:Foo', CONTENT_MODEL_JAVASCRIPT ), 00137 array( 'TEST-JS:Foo.js', CONTENT_MODEL_JAVASCRIPT ), 00138 array( 'TEST-JS:Foo/bar.js', CONTENT_MODEL_JAVASCRIPT ), 00139 array( 'TEST-JS_TALK:Foo.js', CONTENT_MODEL_WIKITEXT ), 00140 ); 00141 } 00142 00146 public function testGetContentModel( $title, $expectedModelId ) { 00147 $title = Title::newFromText( $title ); 00148 $this->assertEquals( $expectedModelId, $title->getContentModel() ); 00149 } 00150 00154 public function testHasContentModel( $title, $expectedModelId ) { 00155 $title = Title::newFromText( $title ); 00156 $this->assertTrue( $title->hasContentModel( $expectedModelId ) ); 00157 } 00158 00159 public static function provideIsCssOrJsPage() { 00160 return array( 00161 array( 'Help:Foo', false ), 00162 array( 'Help:Foo.js', false ), 00163 array( 'Help:Foo/bar.js', false ), 00164 array( 'User:Foo', false ), 00165 array( 'User:Foo.js', false ), 00166 array( 'User:Foo/bar.js', false ), 00167 array( 'User:Foo/bar.css', false ), 00168 array( 'User talk:Foo/bar.css', false ), 00169 array( 'User:Foo/bar.js.xxx', false ), 00170 array( 'User:Foo/bar.xxx', false ), 00171 array( 'MediaWiki:Foo.js', true ), 00172 array( 'MediaWiki:Foo.css', true ), 00173 array( 'MediaWiki:Foo.JS', false ), 00174 array( 'MediaWiki:Foo.CSS', false ), 00175 array( 'MediaWiki:Foo.css.xxx', false ), 00176 array( 'TEST-JS:Foo', false ), 00177 array( 'TEST-JS:Foo.js', false ), 00178 ); 00179 } 00180 00184 public function testIsCssOrJsPage( $title, $expectedBool ) { 00185 $title = Title::newFromText( $title ); 00186 $this->assertEquals( $expectedBool, $title->isCssOrJsPage() ); 00187 } 00188 00189 00190 public static function provideIsCssJsSubpage() { 00191 return array( 00192 array( 'Help:Foo', false ), 00193 array( 'Help:Foo.js', false ), 00194 array( 'Help:Foo/bar.js', false ), 00195 array( 'User:Foo', false ), 00196 array( 'User:Foo.js', false ), 00197 array( 'User:Foo/bar.js', true ), 00198 array( 'User:Foo/bar.css', true ), 00199 array( 'User talk:Foo/bar.css', false ), 00200 array( 'User:Foo/bar.js.xxx', false ), 00201 array( 'User:Foo/bar.xxx', false ), 00202 array( 'MediaWiki:Foo.js', false ), 00203 array( 'User:Foo/bar.JS', false ), 00204 array( 'User:Foo/bar.CSS', false ), 00205 array( 'TEST-JS:Foo', false ), 00206 array( 'TEST-JS:Foo.js', false ), 00207 ); 00208 } 00209 00213 public function testIsCssJsSubpage( $title, $expectedBool ) { 00214 $title = Title::newFromText( $title ); 00215 $this->assertEquals( $expectedBool, $title->isCssJsSubpage() ); 00216 } 00217 00218 public static function provideIsCssSubpage() { 00219 return array( 00220 array( 'Help:Foo', false ), 00221 array( 'Help:Foo.css', false ), 00222 array( 'User:Foo', false ), 00223 array( 'User:Foo.js', false ), 00224 array( 'User:Foo.css', false ), 00225 array( 'User:Foo/bar.js', false ), 00226 array( 'User:Foo/bar.css', true ), 00227 ); 00228 } 00229 00233 public function testIsCssSubpage( $title, $expectedBool ) { 00234 $title = Title::newFromText( $title ); 00235 $this->assertEquals( $expectedBool, $title->isCssSubpage() ); 00236 } 00237 00238 public static function provideIsJsSubpage() { 00239 return array( 00240 array( 'Help:Foo', false ), 00241 array( 'Help:Foo.css', false ), 00242 array( 'User:Foo', false ), 00243 array( 'User:Foo.js', false ), 00244 array( 'User:Foo.css', false ), 00245 array( 'User:Foo/bar.js', true ), 00246 array( 'User:Foo/bar.css', false ), 00247 ); 00248 } 00249 00253 public function testIsJsSubpage( $title, $expectedBool ) { 00254 $title = Title::newFromText( $title ); 00255 $this->assertEquals( $expectedBool, $title->isJsSubpage() ); 00256 } 00257 00258 public static function provideIsWikitextPage() { 00259 return array( 00260 array( 'Help:Foo', true ), 00261 array( 'Help:Foo.js', true ), 00262 array( 'Help:Foo/bar.js', true ), 00263 array( 'User:Foo', true ), 00264 array( 'User:Foo.js', true ), 00265 array( 'User:Foo/bar.js', false ), 00266 array( 'User:Foo/bar.css', false ), 00267 array( 'User talk:Foo/bar.css', true ), 00268 array( 'User:Foo/bar.js.xxx', true ), 00269 array( 'User:Foo/bar.xxx', true ), 00270 array( 'MediaWiki:Foo.js', false ), 00271 array( 'MediaWiki:Foo.css', false ), 00272 array( 'MediaWiki:Foo/bar.css', false ), 00273 array( 'User:Foo/bar.JS', true ), 00274 array( 'User:Foo/bar.CSS', true ), 00275 array( 'TEST-JS:Foo', false ), 00276 array( 'TEST-JS:Foo.js', false ), 00277 array( 'TEST-JS_TALK:Foo.js', true ), 00278 ); 00279 } 00280 00284 public function testIsWikitextPage( $title, $expectedBool ) { 00285 $title = Title::newFromText( $title ); 00286 $this->assertEquals( $expectedBool, $title->isWikitextPage() ); 00287 } 00288 00289 }