first test cases. found and fixed a bug in Title::isCssJsSubpage
authordaniel <daniel.kinzler@wikimedia.de>
Wed, 18 Apr 2012 13:02:21 +0000 (15:02 +0200)
committerdaniel <daniel.kinzler@wikimedia.de>
Wed, 18 Apr 2012 13:02:21 +0000 (15:02 +0200)
includes/Title.php
tests/phpunit/includes/ContentHandlerTest.php [new file with mode: 0644]
tests/phpunit/includes/TitleMethodsTest.php

index 6152f1c..2145590 100644 (file)
@@ -974,6 +974,8 @@ class Title {
      * This is generally true for pages in the MediaWiki namespace having CONTENT_MODEL_CSS
      * or CONTENT_MODEL_JAVASCRIPT.
      *
+     * This method does *not* return true for per-user JS/CSS. Use isCssJsSubpage() for that!
+     *
      * Note that this method should not return true for pages that contain and show "inactive" CSS or JS.
         *
         * @return Bool
@@ -997,7 +999,8 @@ class Title {
         */
        public function isCssJsSubpage() {
                return ( NS_USER == $this->mNamespace && $this->isSubpage()
-            && $this->isCssOrJsPage() );
+                && ( $this->hasContentModel( CONTENT_MODEL_CSS )
+                    || $this->hasContentModel( CONTENT_MODEL_JAVASCRIPT ) ) );
        }
 
        /**
diff --git a/tests/phpunit/includes/ContentHandlerTest.php b/tests/phpunit/includes/ContentHandlerTest.php
new file mode 100644 (file)
index 0000000..3bd9fb9
--- /dev/null
@@ -0,0 +1,33 @@
+<?php
+
+class ContentHandlerTest extends MediaWikiTestCase {
+
+    public function dataGetDefaultModelFor() {
+        return array(
+            array( 'Foo', CONTENT_MODEL_WIKITEXT ),
+            array( 'Foo.js', CONTENT_MODEL_WIKITEXT ),
+            array( 'Foo/bar.js', CONTENT_MODEL_WIKITEXT ),
+            array( 'User:Foo', CONTENT_MODEL_WIKITEXT ),
+            array( 'User:Foo.js', CONTENT_MODEL_WIKITEXT ),
+            array( 'User:Foo/bar.js', CONTENT_MODEL_JAVASCRIPT ),
+            array( 'User:Foo/bar.css', CONTENT_MODEL_CSS ),
+            array( 'User talk:Foo/bar.css', CONTENT_MODEL_WIKITEXT ),
+            array( 'User:Foo/bar.js.xxx', CONTENT_MODEL_WIKITEXT ),
+            array( 'User:Foo/bar.xxx', CONTENT_MODEL_WIKITEXT ),
+            array( 'MediaWiki:Foo.js', CONTENT_MODEL_JAVASCRIPT ),
+            array( 'MediaWiki:Foo.css', CONTENT_MODEL_CSS ),
+            array( 'MediaWiki:Foo.JS', CONTENT_MODEL_WIKITEXT ),
+            array( 'MediaWiki:Foo.CSS', CONTENT_MODEL_WIKITEXT ),
+            array( 'MediaWiki:Foo.css.xxx', CONTENT_MODEL_WIKITEXT ),
+        );
+    }
+
+    /**
+     * @dataProvider dataGetDefaultModelFor
+     */
+    public function testGetDefaultModelFor( $title, $expectedModelName ) {
+        $title = Title::newFromText( $title );
+        $this->assertEquals( $expectedModelName, ContentHandler::getDefaultModelFor( $title ) );
+    }
+
+}
index 2f1103e..11c11ff 100644 (file)
@@ -21,8 +21,8 @@ class TitleMethodsTest extends MediaWikiTestCase {
                $titleA = Title::newFromText( $titleA );
                $titleB = Title::newFromText( $titleB );
 
-               $this->assertEquals( $titleA->equals( $titleB ), $expectedBool );
-               $this->assertEquals( $titleB->equals( $titleA ), $expectedBool );
+               $this->assertEquals( $expectedBool, $titleA->equals( $titleB ) );
+               $this->assertEquals( $expectedBool, $titleB->equals( $titleA ) );
        }
 
        public function dataInNamespace() {
@@ -43,7 +43,7 @@ class TitleMethodsTest extends MediaWikiTestCase {
         */
        public function testInNamespace( $title, $ns, $expectedBool ) {
                $title = Title::newFromText( $title );
-               $this->assertEquals( $title->inNamespace( $ns ), $expectedBool );
+               $this->assertEquals( $expectedBool, $title->inNamespace( $ns ) );
        }
 
        public function testInNamespaces() {
@@ -72,7 +72,99 @@ class TitleMethodsTest extends MediaWikiTestCase {
         */
        public function testHasSubjectNamespace( $title, $ns, $expectedBool ) {
                $title = Title::newFromText( $title );
-               $this->assertEquals( $title->hasSubjectNamespace( $ns ), $expectedBool );
+               $this->assertEquals( $expectedBool, $title->hasSubjectNamespace( $ns ) );
        }
 
+
+    public function dataGetContentModelName() {
+        return array(
+            array( 'Foo', CONTENT_MODEL_WIKITEXT ),
+            array( 'Foo.js', CONTENT_MODEL_WIKITEXT ),
+            array( 'Foo/bar.js', CONTENT_MODEL_WIKITEXT ),
+            array( 'User:Foo', CONTENT_MODEL_WIKITEXT ),
+            array( 'User:Foo.js', CONTENT_MODEL_WIKITEXT ),
+            array( 'User:Foo/bar.js', CONTENT_MODEL_JAVASCRIPT ),
+            array( 'User:Foo/bar.css', CONTENT_MODEL_CSS ),
+            array( 'User talk:Foo/bar.css', CONTENT_MODEL_WIKITEXT ),
+            array( 'User:Foo/bar.js.xxx', CONTENT_MODEL_WIKITEXT ),
+            array( 'User:Foo/bar.xxx', CONTENT_MODEL_WIKITEXT ),
+            array( 'MediaWiki:Foo.js', CONTENT_MODEL_JAVASCRIPT ),
+            array( 'MediaWiki:Foo.css', CONTENT_MODEL_CSS ),
+            array( 'MediaWiki:Foo.JS', CONTENT_MODEL_WIKITEXT ),
+            array( 'MediaWiki:Foo.CSS', CONTENT_MODEL_WIKITEXT ),
+            array( 'MediaWiki:Foo.css.xxx', CONTENT_MODEL_WIKITEXT ),
+        );
+    }
+
+    /**
+     * @dataProvider dataGetContentModelName
+     */
+    public function testGetContentModelName( $title, $expectedModelName ) {
+        $title = Title::newFromText( $title );
+        $this->assertEquals( $expectedModelName, $title->getContentModelName() );
+    }
+
+    /**
+     * @dataProvider dataGetContentModelName
+     */
+    public function testHasContentModel( $title, $expectedModelName ) {
+        $title = Title::newFromText( $title );
+        $this->assertTrue( $title->hasContentModel( $expectedModelName ) );
+    }
+
+    public function dataIsCssOrJsPage() {
+        return array(
+            array( 'Foo', false ),
+            array( 'Foo.js', false ),
+            array( 'Foo/bar.js', false ),
+            array( 'User:Foo', false ),
+            array( 'User:Foo.js', false ),
+            array( 'User:Foo/bar.js', false ),
+            array( 'User:Foo/bar.css', false ),
+            array( 'User talk:Foo/bar.css', false ),
+            array( 'User:Foo/bar.js.xxx', false ),
+            array( 'User:Foo/bar.xxx', false ),
+            array( 'MediaWiki:Foo.js', true ),
+            array( 'MediaWiki:Foo.css', true ),
+            array( 'MediaWiki:Foo.JS', false ),
+            array( 'MediaWiki:Foo.CSS', false ),
+            array( 'MediaWiki:Foo.css.xxx', false ),
+        );
+    }
+
+    /**
+     * @dataProvider dataIsCssOrJsPage
+     */
+    public function testIsCssOrJsPage( $title, $expectedBool ) {
+        $title = Title::newFromText( $title );
+        $this->assertEquals( $expectedBool, $title->isCssOrJsPage() );
+    }
+
+
+    public function dataIsCssJsSubpage() {
+        return array(
+            array( 'Foo', false ),
+            array( 'Foo.js', false ),
+            array( 'Foo/bar.js', false ),
+            array( 'User:Foo', false ),
+            array( 'User:Foo.js', false ),
+            array( 'User:Foo/bar.js', true ),
+            array( 'User:Foo/bar.css', true ),
+            array( 'User talk:Foo/bar.css', false ),
+            array( 'User:Foo/bar.js.xxx', false ),
+            array( 'User:Foo/bar.xxx', false ),
+            array( 'MediaWiki:Foo.js', false ),
+            array( 'User:Foo/bar.JS', false ),
+            array( 'User:Foo/bar.CSS', false ),
+        );
+    }
+
+    /**
+     * @dataProvider dataIsCssJsSubpage
+     */
+    public function testIsCssJsSubpage( $title, $expectedBool ) {
+        $title = Title::newFromText( $title );
+        $this->assertEquals( $expectedBool, $title->isCssJsSubpage() );
+    }
+
 }