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