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