Remove references to non-existent 'execute' right in Title.php
[lhc/web/wiklou.git] / tests / phpunit / includes / SanitizerTest.php
index 90fd482..28e2e30 100644 (file)
@@ -70,11 +70,11 @@ class SanitizerTest extends MediaWikiTestCase {
         * @param Boolean $escaped Wheter sanitizer let the tag in or escape it (ie: '<video>')
         */
        function testRemovehtmltagsOnHtml5Tags( $tag, $escaped ) {
-               global $wgHtml5;
-
-               # Enable HTML5 mode
-               $save = $wgHtml5;
-               $wgHTML5 = true;
+               $this->setMwGlobals( array(
+                       # Enable HTML5 mode
+                       'wgHtml5' => true,
+                       'wgUseTidy' => false
+               ));
 
                if( $escaped ) {
                        $this->assertEquals( "<$tag>",
@@ -85,7 +85,6 @@ class SanitizerTest extends MediaWikiTestCase {
                                Sanitizer::removeHTMLtags( "<$tag>" )
                        );
                }
-               $wgHtml5 = $save;
        }
 
        /**
@@ -103,64 +102,80 @@ class SanitizerTest extends MediaWikiTestCase {
        }
 
        function testSelfClosingTag() {
-               $GLOBALS['wgUseTidy'] = false;
+               $this->setMwGlobals( array(
+                       'wgUseTidy' => false
+               ));
+
                $this->assertEquals(
                        '<div>Hello world</div>',
                        Sanitizer::removeHTMLtags( '<div>Hello world</div />' ),
                        'Self-closing closing div'
                );
        }
-       
-       function testDecodeTagAttributes() {
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=bar' ), array( 'foo' => 'bar' ), 'Unquoted attribute' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( '    foo   =   bar    ' ), array( 'foo' => 'bar' ), 'Spaced attribute' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo="bar"' ), array( 'foo' => 'bar' ), 'Double-quoted attribute' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=\'bar\'' ), array( 'foo' => 'bar' ), 'Single-quoted attribute' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=\'bar\'   baz="foo"' ), array( 'foo' => 'bar', 'baz' => 'foo' ), 'Several attributes' );
-               
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=\'bar\'   baz="foo"' ), array( 'foo' => 'bar', 'baz' => 'foo' ), 'Several attributes' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=\'bar\'   baz="foo"' ), array( 'foo' => 'bar', 'baz' => 'foo' ), 'Several attributes' );
-               
-               $this->assertEquals( Sanitizer::decodeTagAttributes( ':foo=\'bar\'' ), array( ':foo' => 'bar' ), 'Leading :' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( '_foo=\'bar\'' ), array( '_foo' => 'bar' ), 'Leading _' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'Foo=\'bar\'' ), array( 'foo' => 'bar' ), 'Leading capital' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'FOO=BAR' ), array( 'foo' => 'BAR' ), 'Attribute keys are normalized to lowercase' );
-               
-               # Invalid beginning
-               $this->assertEquals( Sanitizer::decodeTagAttributes( '-foo=bar' ), array(), 'Leading - is forbidden' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( '.foo=bar' ), array(), 'Leading . is forbidden' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo-bar=bar' ), array( 'foo-bar' => 'bar' ), 'A - is allowed inside the attribute' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo-=bar' ), array( 'foo-' => 'bar' ), 'A - is allowed inside the attribute' );
-               
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo.bar=baz' ), array( 'foo.bar' => 'baz' ), 'A . is allowed inside the attribute' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo.=baz' ), array( 'foo.' => 'baz' ), 'A . is allowed as last character' );
-               
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo6=baz' ), array( 'foo6' => 'baz' ), 'Numbers are allowed' );
-               
-               # This bit is more relaxed than XML rules, but some extensions use it, like ProofreadPage (see bug 27539)
-               $this->assertEquals( Sanitizer::decodeTagAttributes( '1foo=baz' ), array( '1foo' => 'baz' ), 'Leading numbers are allowed' );
-               
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo$=baz' ), array(), 'Symbols are not allowed' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo@=baz' ), array(), 'Symbols are not allowed' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo~=baz' ), array(), 'Symbols are not allowed' );
-               
-               
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=1[#^`*%w/(' ), array( 'foo' => '1[#^`*%w/(' ), 'All kind of characters are allowed as values' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo="1[#^`*%\'w/("' ), array( 'foo' => '1[#^`*%\'w/(' ), 'Double quotes are allowed if quoted by single quotes' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=\'1[#^`*%"w/(\'' ), array( 'foo' => '1[#^`*%"w/(' ), 'Single quotes are allowed if quoted by double quotes' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=&amp;&quot;' ), array( 'foo' => '&"' ), 'Special chars can be provided as entities' );
-               $this->assertEquals( Sanitizer::decodeTagAttributes( 'foo=&foobar;' ), array( 'foo' => '&foobar;' ), 'Entity-like items are accepted' );
+
+
+       /**
+        * @dataProvider provideTagAttributesToDecode
+        * @cover Sanitizer::decodeTagAttributes
+        */
+       function testDecodeTagAttributes( $expected, $attributes, $message = '' ) {
+               $this->assertEquals( $expected,
+                       Sanitizer::decodeTagAttributes( $attributes ),
+                       $message
+               );
+       }
+
+       function provideTagAttributesToDecode() {
+               return array(
+                       array( array( 'foo' => 'bar' ), 'foo=bar', 'Unquoted attribute' ),
+                       array( array( 'foo' => 'bar' ), '    foo   =   bar    ', 'Spaced attribute' ),
+                       array( array( 'foo' => 'bar' ), 'foo="bar"', 'Double-quoted attribute' ),
+                       array( array( 'foo' => 'bar' ), 'foo=\'bar\'', 'Single-quoted attribute' ),
+                       array( array( 'foo' => 'bar', 'baz' => 'foo' ), 'foo=\'bar\'   baz="foo"', 'Several attributes' ),
+                       array( array( 'foo' => 'bar', 'baz' => 'foo' ), 'foo=\'bar\'   baz="foo"', 'Several attributes' ),
+                       array( array( 'foo' => 'bar', 'baz' => 'foo' ), 'foo=\'bar\'   baz="foo"', 'Several attributes' ),
+                       array( array( ':foo' => 'bar' ), ':foo=\'bar\'', 'Leading :' ),
+                       array( array( '_foo' => 'bar' ), '_foo=\'bar\'', 'Leading _' ),
+                       array( array( 'foo' => 'bar' ), 'Foo=\'bar\'', 'Leading capital' ),
+                       array( array( 'foo' => 'BAR' ), 'FOO=BAR', 'Attribute keys are normalized to lowercase' ),
+
+                       # Invalid beginning
+                       array( array(), '-foo=bar', 'Leading - is forbidden' ),
+                       array( array(), '.foo=bar', 'Leading . is forbidden' ),
+                       array( array( 'foo-bar' => 'bar' ), 'foo-bar=bar', 'A - is allowed inside the attribute' ),
+                       array( array( 'foo-' => 'bar' ), 'foo-=bar', 'A - is allowed inside the attribute' ),
+                       array( array( 'foo.bar' => 'baz' ), 'foo.bar=baz', 'A . is allowed inside the attribute' ),
+                       array( array( 'foo.' => 'baz' ), 'foo.=baz', 'A . is allowed as last character' ),
+                       array( array( 'foo6' => 'baz' ), 'foo6=baz', 'Numbers are allowed' ),
+
+
+                       # This bit is more relaxed than XML rules, but some extensions use
+                       # it, like ProofreadPage (see bug 27539)
+                       array( array( '1foo' => 'baz' ), '1foo=baz', 'Leading numbers are allowed' ),
+                       array( array(), 'foo$=baz', 'Symbols are not allowed' ),
+                       array( array(), 'foo@=baz', 'Symbols are not allowed' ),
+                       array( array(), 'foo~=baz', 'Symbols are not allowed' ),
+                       array( array( 'foo' => '1[#^`*%w/(' ), 'foo=1[#^`*%w/(', 'All kind of characters are allowed as values' ),
+                       array( array( 'foo' => '1[#^`*%\'w/(' ), 'foo="1[#^`*%\'w/("', 'Double quotes are allowed if quoted by single quotes' ),
+                       array( array( 'foo' => '1[#^`*%"w/(' ), 'foo=\'1[#^`*%"w/(\'', 'Single quotes are allowed if quoted by double quotes' ),
+                       array( array( 'foo' => '&"' ), 'foo=&amp;&quot;', 'Special chars can be provided as entities' ),
+                       array( array( 'foo' => '&foobar;' ), 'foo=&foobar;', 'Entity-like items are accepted' ),
+               );
        }
 
        /**
         * @dataProvider provideDeprecatedAttributes
+        * @cover Sanitizer::fixTagAttributes
         */
-       function testDeprecatedAttributesUnaltered( $inputAttr, $inputEl ) {
-
-               $this->assertEquals( " $inputAttr", Sanitizer::fixTagAttributes( $inputAttr, $inputEl ) );
+       function testDeprecatedAttributesUnaltered( $inputAttr, $inputEl, $message = '' ) {
+               $this->assertEquals( " $inputAttr",
+                       Sanitizer::fixTagAttributes( $inputAttr, $inputEl ),
+                       $message
+               );
        }
 
        public static function provideDeprecatedAttributes() {
+               /** array( <attribute>, <element>, [message] ) */
                return array(
                        array( 'clear="left"', 'br' ),
                        array( 'clear="all"', 'br' ),
@@ -178,10 +193,10 @@ class SanitizerTest extends MediaWikiTestCase {
 
        /**
         * @dataProvider provideCssCommentsFixtures
+        * @cover Sanitizer::checkCss
         */
        function testCssCommentsChecking( $expected, $css, $message = '' ) {
-               $this->assertEquals(
-                       $expected,
+               $this->assertEquals( $expected,
                        Sanitizer::checkCss( $css ),
                        $message
                );