X-Git-Url: http://git.heureux-cyclage.org/?a=blobdiff_plain;f=tests%2Fphpunit%2Fstructure%2FResourcesTest.php;h=cce1b7ecfb94ff41e0af8658eabf1da2e9c02ade;hb=57d3f41876599497fcb9c672b88ebad7239353dc;hp=3af805a958b9421db415d29290784ac215a87934;hpb=e0e8ba92262736cb481429358140a96a62fa4cd4;p=lhc%2Fweb%2Fwiklou.git diff --git a/tests/phpunit/structure/ResourcesTest.php b/tests/phpunit/structure/ResourcesTest.php index 3af805a958..cce1b7ecfb 100644 --- a/tests/phpunit/structure/ResourcesTest.php +++ b/tests/phpunit/structure/ResourcesTest.php @@ -3,10 +3,15 @@ * Sanity checks for making sure registered resources are sane. * * @file - * @author Niklas Laxström, 2012 - * @author Antoine Musso, 2012 - * @author Santhosh Thottingal, 2012 - * @author Timo Tijhof, 2012 + * @author Antoine Musso + * @author Niklas Laxström + * @author Santhosh Thottingal + * @author Timo Tijhof + * @copyright © 2012, Antoine Musso + * @copyright © 2012, Niklas Laxström + * @copyright © 2012, Santhosh Thottingal + * @copyright © 2012, Timo Tijhof + * * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later */ class ResourcesTest extends MediaWikiTestCase { @@ -21,27 +26,98 @@ class ResourcesTest extends MediaWikiTestCase { } /** - * This ask the ResouceLoader for all registered files from modules - * created by ResourceLoaderFileModule (or one of its descendants). - * - * - * Since the raw data is stored in protected properties, we have to - * overrride this through ReflectionObject methods. + * @dataProvider provideMediaStylesheets */ - public static function provideResourceFiles() { + public function testStyleMedia( $moduleName, $media, $filename, $css ) { + $cssText = CSSMin::minify( $css->cssText ); + + $this->assertTrue( strpos( $cssText, '@media' ) === false, 'Stylesheets should not both specify "media" and contain @media' ); + } + + /** + * Get all registered modules from ResouceLoader. + */ + protected static function getAllModules() { global $wgEnableJavaScriptTest; // Test existance of test suite files as well // (can't use setUp or setMwGlobals because providers are static) - $live_wgEnableJavaScriptTest = $wgEnableJavaScriptTest; + $org_wgEnableJavaScriptTest = $wgEnableJavaScriptTest; $wgEnableJavaScriptTest = true; - // Array with arguments for the test function - $cases = array(); - // Initialize ResourceLoader $rl = new ResourceLoader(); + $modules = array(); + + foreach ( $rl->getModuleNames() as $moduleName ) { + $modules[$moduleName] = $rl->getModule( $moduleName ); + } + + // Restore settings + $wgEnableJavaScriptTest = $org_wgEnableJavaScriptTest; + + return array( + 'modules' => $modules, + 'resourceloader' => $rl, + 'context' => new ResourceLoaderContext( $rl, new FauxRequest() ) + ); + } + + /** + * Get all stylesheet files from modules that are an instance of + * ResourceLoaderFileModule (or one of its subclasses). + */ + public static function provideMediaStylesheets() { + $data = self::getAllModules(); + $cases = array(); + + foreach ( $data['modules'] as $moduleName => $module ) { + if ( !$module instanceof ResourceLoaderFileModule ) { + continue; + } + + $reflectedModule = new ReflectionObject( $module ); + + $getStyleFiles = $reflectedModule->getMethod( 'getStyleFiles' ); + $getStyleFiles->setAccessible( true ); + + $readStyleFile = $reflectedModule->getMethod( 'readStyleFile' ); + $readStyleFile->setAccessible( true ); + + $styleFiles = $getStyleFiles->invoke( $module, $data['context'] ); + + $flip = $module->getFlip( $data['context'] ); + + foreach ( $styleFiles as $media => $files ) { + if ( $media && $media !== 'all' ) { + foreach ( $files as $file ) { + $cases[] = array( + $moduleName, + $media, + $file, + // XXX: Wrapped in an object to keep it out of PHPUnit output + (object) array( 'cssText' => $readStyleFile->invoke( $module, $file, $flip ) ), + ); + } + } + } + } + + return $cases; + } + + /** + * Get all resource files from modules that are an instance of + * ResourceLoaderFileModule (or one of its subclasses). + * + * Since the raw data is stored in protected properties, we have to + * overrride this through ReflectionObject methods. + */ + public static function provideResourceFiles() { + $data = self::getAllModules(); + $cases = array(); + // See also ResourceLoaderFileModule::__construct $filePathProps = array( // Lists of file paths @@ -60,8 +136,7 @@ class ResourcesTest extends MediaWikiTestCase { ), ); - foreach ( $rl->getModuleNames() as $moduleName ) { - $module = $rl->getModule( $moduleName ); + foreach ( $data['modules'] as $moduleName => $module ) { if ( !$module instanceof ResourceLoaderFileModule ) { continue; } @@ -112,15 +187,12 @@ class ResourcesTest extends MediaWikiTestCase { foreach ( $files as $file ) { $cases[] = array( $method->invoke( $module, $file ), - $module->getName(), + $moduleName, $file, ); } } - // Restore settings - $wgEnableJavaScriptTest = $live_wgEnableJavaScriptTest; - return $cases; } }