More tests for CSSMin::remap
authorBartosz Dziewoński <matma.rex@gmail.com>
Sat, 9 Nov 2013 23:52:14 +0000 (00:52 +0100)
committerOri.livneh <ori@wikimedia.org>
Fri, 29 Nov 2013 18:19:23 +0000 (18:19 +0000)
Also added commented-out tests which should work, but don't.
Making them work in subsequent patch If9082f55.

Change-Id: I65f62493e6d10e7e90af8844f8a26e3982d75f51

tests/phpunit/data/cssmin/green.gif [new file with mode: 0644]
tests/phpunit/data/cssmin/large.png [new file with mode: 0644]
tests/phpunit/data/cssmin/red.gif [new file with mode: 0644]
tests/phpunit/includes/libs/CSSMinTest.php

diff --git a/tests/phpunit/data/cssmin/green.gif b/tests/phpunit/data/cssmin/green.gif
new file mode 100644 (file)
index 0000000..f9e7531
Binary files /dev/null and b/tests/phpunit/data/cssmin/green.gif differ
diff --git a/tests/phpunit/data/cssmin/large.png b/tests/phpunit/data/cssmin/large.png
new file mode 100644 (file)
index 0000000..64bf48a
Binary files /dev/null and b/tests/phpunit/data/cssmin/large.png differ
diff --git a/tests/phpunit/data/cssmin/red.gif b/tests/phpunit/data/cssmin/red.gif
new file mode 100644 (file)
index 0000000..13c43e9
Binary files /dev/null and b/tests/phpunit/data/cssmin/red.gif differ
index 43df5eb..57d43f9 100644 (file)
@@ -69,6 +69,8 @@ class CSSMinTest extends MediaWikiTestCase {
        }
 
        /**
+        * This tests funky parameters to CSSMin::remap. testRemapRemapping tests the basic functionality.
+        *
         * @dataProvider provideRemapCases
         * @covers CSSMin::remap
         */
@@ -111,6 +113,114 @@ class CSSMinTest extends MediaWikiTestCase {
                );
        }
 
+       /**
+        * This tests basic functionality of CSSMin::remap. testRemapRemapping tests funky parameters.
+        *
+        * @dataProvider provideRemapRemappingCases
+        * @covers CSSMin::remap
+        */
+       public function testRemapRemapping( $message, $input, $expectedOutput ) {
+               $localPath = __DIR__ . '/../../data/cssmin/';
+               $remotePath = 'http://localhost/w/';
+
+               $realOutput = CSSMin::remap( $input, $localPath, $remotePath );
+
+               $this->assertEquals(
+                       $expectedOutput,
+                       preg_replace( '/\d+-\d+-\d+T\d+:\d+:\d+Z/', 'timestamp', $realOutput ),
+                       "CSSMin::remap: $message"
+               );
+       }
+
+       public static function provideRemapRemappingCases() {
+               // red.gif and green.gif are one-pixel 35-byte GIFs.
+               // large.png is a 35K PNG that should be non-embeddable.
+               // Full paths start with http://localhost/w/.
+               // Timestamps in output are replaced with 'timestamp'.
+
+               // data: URIs for red.gif and green.gif
+               $red   = 'data:image/gif;base64,R0lGODlhAQABAIAAAP8AADAAACwAAAAAAQABAAACAkQBADs=';
+               $green = 'data:image/gif;base64,R0lGODlhAQABAIAAAACAADAAACwAAAAAAQABAAACAkQBADs=';
+
+               return array(
+                       array(
+                               'Regular file',
+                               'foo { background: url(red.gif); }',
+                               'foo { background: url(http://localhost/w/red.gif?timestamp); }',
+                       ),
+                       array(
+                               'Remote URL',
+                               'foo { background: url(http://example.org/w/foo.png); }',
+                               'foo { background: url(http://example.org/w/foo.png); }',
+                       ),
+                       array(
+                               'Embedded file',
+                               'foo { /* @embed */ background: url(red.gif); }',
+                               "foo { background: url($red); background: url(http://localhost/w/red.gif?timestamp)!ie; }",
+                       ),
+                       array(
+                               'Can not embed remote URLs',
+                               'foo { /* @embed */ background: url(http://example.org/w/foo.png); }',
+                               'foo { /* @embed */ background: url(http://example.org/w/foo.png); }',
+                       ),
+                       // array( // Not supported :(
+                       //      'Embedded file (inline @embed)',
+                       //      'foo { background: /* @embed */ url(red.gif); }',
+                       //      "foo { background: url($red); background: url(http://localhost/w/red.gif?timestamp)!ie; }",
+                       // ),
+                       array(
+                               'Can not embed large files',
+                               'foo { /* @embed */ background: url(large.png); }',
+                               "foo { /* @embed */ background: url(http://localhost/w/large.png?timestamp); }",
+                       ),
+                       // array( // Not supported :(
+                       //      'Two regular files in one rule',
+                       //      'foo { background: url(red.gif), url(green.gif); }',
+                       //      'foo { background: url(http://localhost/w/red.gif?timestamp), url(http://localhost/w/green.gif?timestamp); }',
+                       // ),
+                       // array( // Not supported :(
+                       //      'Two embedded files in one rule',
+                       //      'foo { /* @embed */ background: url(red.gif), url(green.gif); }',
+                       //      "foo { background: url($red), url($green); background: url(http://localhost/w/red.gif?timestamp), url(http://localhost/w/green.gif?timestamp)!ie; }",
+                       // ),
+                       // array( // Not supported :(
+                       //      'Two embedded files in one rule (inline @embed)',
+                       //      'foo { background: /* @embed */ url(red.gif), /* @embed */ url(green.gif); }',
+                       //      "foo { background: url($red), url($green); background: url(http://localhost/w/red.gif?timestamp), url(http://localhost/w/green.gif?timestamp)!ie; }",
+                       // ),
+                       // array( // Not supported :(
+                       //      'Two embedded files in one rule (inline @embed), one too large',
+                       //      'foo { background: /* @embed */ url(red.gif), /* @embed */ url(large.png); }',
+                       //      "foo { background: url($red), url(http://localhost/w/large.png?timestamp); background: url(http://localhost/w/red.gif?timestamp), url(http://localhost/w/large.png?timestamp)!ie; }",
+                       // ),
+                       array(
+                               'Practical example with some noise',
+                               'foo { /* @embed */ background: #f9f9f9 url(red.gif) 0 0 no-repeat; }',
+                               "foo { background: #f9f9f9 url($red) 0 0 no-repeat; background: #f9f9f9 url(http://localhost/w/red.gif?timestamp) 0 0 no-repeat!ie; }",
+                       ),
+                       array(
+                               'Does not mess with other properties',
+                               'foo { color: red; background: url(red.gif); font-size: small; }',
+                               'foo { color: red; background: url(http://localhost/w/red.gif?timestamp); font-size: small; }',
+                       ),
+                       array(
+                               'Spacing and miscellanea not changed (1)',
+                               'foo {   background:    url(red.gif);  }',
+                               'foo {   background:    url(http://localhost/w/red.gif?timestamp);  }',
+                       ),
+                       array(
+                               'Spacing and miscellanea not changed (2)',
+                               'foo {background:url(red.gif)}',
+                               'foo {background:url(http://localhost/w/red.gif?timestamp)};', // <-- This trailing semicolon should not be here!
+                       ),
+                       // array( // Not supported :(
+                       //      'Spaces within url() parentheses are ignored',
+                       //      'foo { background: url( red.gif ); }',
+                       //      'foo { background: url(http://localhost/w/red.gif?timestamp); }',
+                       // ),
+               );
+       }
+
        /**
         * Seperated because they are currently broken (bug 35492)
         *