MediaWiki  master
TitleMethodsTest.php
Go to the documentation of this file.
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 }