Revert "Revert "API: Add a unit test to check all modules' i18n""
[lhc/web/wiklou.git] / tests / phpunit / structure / ResourcesTest.php
index 9178bdb..3282665 100644 (file)
@@ -47,6 +47,9 @@ class ResourcesTest extends MediaWikiTestCase {
        /**
         * Verify that nothing explicitly depends on the 'jquery' and 'mediawiki' modules.
         * They are always loaded, depending on them is unsupported and leads to unexpected behaviour.
+        * TODO Modules can dynamically choose dependencies based on context. This method does not
+        * test such dependencies. The same goes for testMissingDependencies() and
+        * testUnsatisfiableDependencies().
         */
        public function testIllegalDependencies() {
                $data = self::getAllModules();
@@ -57,7 +60,7 @@ class ResourcesTest extends MediaWikiTestCase {
                        foreach ( $illegalDeps as $illegalDep ) {
                                $this->assertNotContains(
                                        $illegalDep,
-                                       $module->getDependencies(),
+                                       $module->getDependencies( $data['context'] ),
                                        "Module '$moduleName' must not depend on '$illegalDep'"
                                );
                        }
@@ -73,7 +76,7 @@ class ResourcesTest extends MediaWikiTestCase {
 
                /** @var ResourceLoaderModule $module */
                foreach ( $data['modules'] as $moduleName => $module ) {
-                       foreach ( $module->getDependencies() as $dep ) {
+                       foreach ( $module->getDependencies( $data['context'] ) as $dep ) {
                                $this->assertContains(
                                        $dep,
                                        $validDeps,
@@ -97,7 +100,7 @@ class ResourcesTest extends MediaWikiTestCase {
                /** @var ResourceLoaderModule $module */
                foreach ( $data['modules'] as $moduleName => $module ) {
                        $moduleTargets = $module->getTargets();
-                       foreach ( $module->getDependencies() as $dep ) {
+                       foreach ( $module->getDependencies( $data['context'] ) as $dep ) {
                                if ( !isset( $data['modules'][$dep] ) ) {
                                        // Missing dependencies reported by testMissingDependencies
                                        continue;
@@ -115,6 +118,22 @@ class ResourcesTest extends MediaWikiTestCase {
                }
        }
 
+       /**
+        * CSSMin::getAllLocalFileReferences should ignore url(...) expressions
+        * that have been commented out.
+        */
+       public function testCommentedLocalFileReferences() {
+               $basepath = __DIR__ . '/../data/css/';
+               $css = file_get_contents( $basepath . 'comments.css' );
+               $files = CSSMin::getAllLocalFileReferences( $css, $basepath );
+               $expected = array( $basepath . 'not-commented.gif' );
+               $this->assertArrayEquals(
+                       $expected,
+                       $files,
+                       'Url(...) expression in comment should be omitted.'
+               );
+       }
+
        /**
         * Get all registered modules from ResouceLoader.
         * @return array
@@ -179,7 +198,14 @@ class ResourcesTest extends MediaWikiTestCase {
                                                        $media,
                                                        $file,
                                                        // XXX: Wrapped in an object to keep it out of PHPUnit output
-                                                       (object)array( 'cssText' => $readStyleFile->invoke( $module, $file, $flip ) ),
+                                                       (object)array(
+                                                               'cssText' => $readStyleFile->invoke(
+                                                                       $module,
+                                                                       $file,
+                                                                       $flip,
+                                                                       $data['context']
+                                                               )
+                                                       ),
                                                );
                                        }
                                }
@@ -206,7 +232,6 @@ class ResourcesTest extends MediaWikiTestCase {
                        'lists' => array(
                                'scripts',
                                'debugScripts',
-                               'loaderScripts',
                                'styles',
                        ),
 
@@ -273,6 +298,25 @@ class ResourcesTest extends MediaWikiTestCase {
                                        ( $file instanceof ResourceLoaderFilePath ? $file->getPath() : $file ),
                                );
                        }
+
+                       // To populate missingLocalFileRefs. Not sure how sane this is inside this test...
+                       $module->readStyleFiles(
+                               $module->getStyleFiles( $data['context'] ),
+                               $module->getFlip( $data['context'] ),
+                               $data['context']
+                       );
+
+                       $property = $reflectedModule->getProperty( 'missingLocalFileRefs' );
+                       $property->setAccessible( true );
+                       $missingLocalFileRefs = $property->getValue( $module );
+
+                       foreach ( $missingLocalFileRefs as $file ) {
+                               $cases[] = array(
+                                       $file,
+                                       $moduleName,
+                                       $file,
+                               );
+                       }
                }
 
                return $cases;