From: Timo Tijhof Date: Fri, 7 Mar 2014 17:18:31 +0000 (+0100) Subject: tests: Add ResourceLoaderTestCase and abstract context creation X-Git-Tag: 1.31.0-rc.0~16655^2~2 X-Git-Url: https://git.cyclocoop.org/%7B%24www_url%7Dadmin/membres/message.php?a=commitdiff_plain;h=9976cef4edfd1b24014f8bece428d43b5163beb0;p=lhc%2Fweb%2Fwiklou.git tests: Add ResourceLoaderTestCase and abstract context creation Change-Id: Ib4b265256e60a2f2109da73dc7edba6a75587ce2 --- diff --git a/tests/TestsAutoLoader.php b/tests/TestsAutoLoader.php index ea4b0f6827..7a048bf17a 100644 --- a/tests/TestsAutoLoader.php +++ b/tests/TestsAutoLoader.php @@ -40,6 +40,9 @@ $wgAutoloadClasses += array( 'MediaWikiPHPUnitCommand' => "$testDir/phpunit/MediaWikiPHPUnitCommand.php", 'MediaWikiPHPUnitTestListener' => "$testDir/phpunit/MediaWikiPHPUnitTestListener.php", 'MediaWikiLangTestCase' => "$testDir/phpunit/MediaWikiLangTestCase.php", + 'ResourceLoaderTestCase' => "$testDir/phpunit/ResourceLoaderTestCase.php", + 'ResourceLoaderTestModule' => "$testDir/phpunit/ResourceLoaderTestCase.php", + 'ResourceLoaderFileModuleTestModule' => "$testDir/phpunit/ResourceLoaderTestCase.php", 'TestUser' => "$testDir/phpunit/includes/TestUser.php", # tests/phpunit/includes diff --git a/tests/phpunit/ResourceLoaderTestCase.php b/tests/phpunit/ResourceLoaderTestCase.php new file mode 100644 index 0000000000..d43247192b --- /dev/null +++ b/tests/phpunit/ResourceLoaderTestCase.php @@ -0,0 +1,38 @@ + 'true', + 'lang' => 'en', + 'modules' => 'startup', + 'only' => 'scripts', + 'skin' => 'vector', + 'target' => 'test', + ) ); + return new ResourceLoaderContext( $resourceLoader, $request ); + } + + protected function setUp() { + parent::setUp(); + + $this->setMwGlobals( array( + // For ResourceLoader::__construct() + 'wgResourceLoaderSources' => array(), + + // For wfScript() + 'wgScriptPath' => '/w', + 'wgScriptExtension' => '.php', + 'wgScript' => '/w/index.php', + 'wgLoadScript' => '/w/load.php', + ) ); + } +} + +/* Stubs */ + +class ResourceLoaderTestModule extends ResourceLoaderModule {} + +class ResourceLoaderFileModuleTestModule extends ResourceLoaderFileModule {} diff --git a/tests/phpunit/includes/ResourceLoaderModuleTest.php b/tests/phpunit/includes/ResourceLoaderModuleTest.php deleted file mode 100644 index 46433191fb..0000000000 --- a/tests/phpunit/includes/ResourceLoaderModuleTest.php +++ /dev/null @@ -1,87 +0,0 @@ - 'false', - 'lang' => 'en', - 'modules' => 'startup', - 'only' => 'scripts', - 'skin' => 'vector', - ) ); - return new ResourceLoaderContext( $resourceLoader, $request ); - } - - /** - * @covers ResourceLoaderModule::getDefinitionSummary - * @covers ResourceLoaderFileModule::getDefinitionSummary - */ - public function testDefinitionSummary() { - $context = self::getResourceLoaderContext(); - - $baseParams = array( - 'scripts' => array( 'foo.js', 'bar.js' ), - 'dependencies' => array( 'jquery', 'mediawiki' ), - 'messages' => array( 'hello', 'world' ), - ); - - $module = new ResourceLoaderFileModule( $baseParams ); - - $jsonSummary = json_encode( $module->getDefinitionSummary( $context ) ); - - // Exactly the same - $module = new ResourceLoaderFileModule( $baseParams ); - - $this->assertEquals( - $jsonSummary, - json_encode( $module->getDefinitionSummary( $context ) ), - 'Instance is insignificant' - ); - - // Re-order dependencies - $module = new ResourceLoaderFileModule( array( - 'dependencies' => array( 'mediawiki', 'jquery' ), - ) + $baseParams ); - - $this->assertEquals( - $jsonSummary, - json_encode( $module->getDefinitionSummary( $context ) ), - 'Order of dependencies is insignificant' - ); - - // Re-order messages - $module = new ResourceLoaderFileModule( array( - 'messages' => array( 'world', 'hello' ), - ) + $baseParams ); - - $this->assertEquals( - $jsonSummary, - json_encode( $module->getDefinitionSummary( $context ) ), - 'Order of messages is insignificant' - ); - - // Re-order scripts - $module = new ResourceLoaderFileModule( array( - 'scripts' => array( 'bar.js', 'foo.js' ), - ) + $baseParams ); - - $this->assertNotEquals( - $jsonSummary, - json_encode( $module->getDefinitionSummary( $context ) ), - 'Order of scripts is significant' - ); - - // Subclass - $module = new ResourceLoaderFileModuleTestModule( $baseParams ); - - $this->assertNotEquals( - $jsonSummary, - json_encode( $module->getDefinitionSummary( $context ) ), - 'Class is significant' - ); - } -} - -class ResourceLoaderFileModuleTestModule extends ResourceLoaderFileModule {} diff --git a/tests/phpunit/includes/ResourceLoaderTest.php b/tests/phpunit/includes/ResourceLoaderTest.php deleted file mode 100644 index ca8b2b6efe..0000000000 --- a/tests/phpunit/includes/ResourceLoaderTest.php +++ /dev/null @@ -1,149 +0,0 @@ -setMwGlobals( array( - 'wgResourceLoaderLESSFunctions' => array( - 'test-sum' => function ( $frame, $less ) { - $sum = 0; - foreach ( $frame[2] as $arg ) { - $sum += (int)$arg[1]; - } - return $sum; - }, - ), - 'wgResourceLoaderLESSImportPaths' => array( - dirname( __DIR__ ) . '/data/less/common', - ), - 'wgResourceLoaderLESSVars' => array( - 'foo' => '2px', - 'Foo' => '#eeeeee', - 'bar' => 5, - ), - ) ); - } - - /* Hook Methods */ - - /** - * ResourceLoaderRegisterModules hook - */ - public static function resourceLoaderRegisterModules( &$resourceLoader ) { - self::$resourceLoaderRegisterModulesHook = true; - - return true; - } - - /* Provider Methods */ - public static function provideValidModules() { - return array( - array( 'TEST.validModule1', new ResourceLoaderTestModule() ), - ); - } - - public static function provideResourceLoaderContext() { - $resourceLoader = new ResourceLoader(); - $request = new FauxRequest(); - return array( - array( new ResourceLoaderContext( $resourceLoader, $request ) ), - ); - } - - /* Test Methods */ - - /** - * Ensures that the ResourceLoaderRegisterModules hook is called when a new ResourceLoader object is constructed - * @covers ResourceLoader::__construct - */ - public function testCreatingNewResourceLoaderCallsRegistrationHook() { - self::$resourceLoaderRegisterModulesHook = false; - $resourceLoader = new ResourceLoader(); - $this->assertTrue( self::$resourceLoaderRegisterModulesHook ); - - return $resourceLoader; - } - - /** - * @dataProvider provideValidModules - * @depends testCreatingNewResourceLoaderCallsRegistrationHook - * @covers ResourceLoader::register - * @covers ResourceLoader::getModule - */ - public function testRegisteredValidModulesAreAccessible( - $name, ResourceLoaderModule $module, ResourceLoader $resourceLoader - ) { - $resourceLoader->register( $name, $module ); - $this->assertEquals( $module, $resourceLoader->getModule( $name ) ); - } - - /** - * @dataProvider provideResourceLoaderContext - * @covers ResourceLoaderFileModule::compileLessFile - */ - public function testLessFileCompilation( $context ) { - $basePath = __DIR__ . '/../data/less/module'; - $module = new ResourceLoaderFileModule( array( - 'localBasePath' => $basePath, - 'styles' => array( 'styles.less' ), - ) ); - $styles = $module->getStyles( $context ); - $this->assertStringEqualsFile( $basePath . '/styles.css', $styles['all'] ); - } - - /** - * @dataProvider providePackedModules - * @covers ResourceLoader::makePackedModulesString - */ - public function testMakePackedModulesString( $desc, $modules, $packed ) { - $this->assertEquals( $packed, ResourceLoader::makePackedModulesString( $modules ), $desc ); - } - - /** - * @dataProvider providePackedModules - * @covers ResourceLoaderContext::expandModuleNames - */ - public function testexpandModuleNames( $desc, $modules, $packed ) { - $this->assertEquals( $modules, ResourceLoaderContext::expandModuleNames( $packed ), $desc ); - } - - public static function providePackedModules() { - return array( - array( - 'Example from makePackedModulesString doc comment', - array( 'foo.bar', 'foo.baz', 'bar.baz', 'bar.quux' ), - 'foo.bar,baz|bar.baz,quux', - ), - array( - 'Example from expandModuleNames doc comment', - array( 'jquery.foo', 'jquery.bar', 'jquery.ui.baz', 'jquery.ui.quux' ), - 'jquery.foo,bar|jquery.ui.baz,quux', - ), - array( - 'Regression fixed in r88706 with dotless names', - array( 'foo', 'bar', 'baz' ), - 'foo,bar,baz', - ), - array( - 'Prefixless modules after a prefixed module', - array( 'single.module', 'foobar', 'foobaz' ), - 'single.module|foobar,foobaz', - ), - ); - } -} - -/* Stubs */ - -class ResourceLoaderTestModule extends ResourceLoaderModule { -} - -/* Hooks */ -global $wgHooks; -$wgHooks['ResourceLoaderRegisterModules'][] = 'ResourceLoaderTest::resourceLoaderRegisterModules'; diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php new file mode 100644 index 0000000000..b25e9b061a --- /dev/null +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderModuleTest.php @@ -0,0 +1,73 @@ + array( 'foo.js', 'bar.js' ), + 'dependencies' => array( 'jquery', 'mediawiki' ), + 'messages' => array( 'hello', 'world' ), + ); + + $module = new ResourceLoaderFileModule( $baseParams ); + + $jsonSummary = json_encode( $module->getDefinitionSummary( $context ) ); + + // Exactly the same + $module = new ResourceLoaderFileModule( $baseParams ); + + $this->assertEquals( + $jsonSummary, + json_encode( $module->getDefinitionSummary( $context ) ), + 'Instance is insignificant' + ); + + // Re-order dependencies + $module = new ResourceLoaderFileModule( array( + 'dependencies' => array( 'mediawiki', 'jquery' ), + ) + $baseParams ); + + $this->assertEquals( + $jsonSummary, + json_encode( $module->getDefinitionSummary( $context ) ), + 'Order of dependencies is insignificant' + ); + + // Re-order messages + $module = new ResourceLoaderFileModule( array( + 'messages' => array( 'world', 'hello' ), + ) + $baseParams ); + + $this->assertEquals( + $jsonSummary, + json_encode( $module->getDefinitionSummary( $context ) ), + 'Order of messages is insignificant' + ); + + // Re-order scripts + $module = new ResourceLoaderFileModule( array( + 'scripts' => array( 'bar.js', 'foo.js' ), + ) + $baseParams ); + + $this->assertNotEquals( + $jsonSummary, + json_encode( $module->getDefinitionSummary( $context ) ), + 'Order of scripts is significant' + ); + + // Subclass + $module = new ResourceLoaderFileModuleTestModule( $baseParams ); + + $this->assertNotEquals( + $jsonSummary, + json_encode( $module->getDefinitionSummary( $context ) ), + 'Class is significant' + ); + } +} diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php new file mode 100644 index 0000000000..ab0c8d9b14 --- /dev/null +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php @@ -0,0 +1,136 @@ +setMwGlobals( array( + 'wgResourceLoaderLESSFunctions' => array( + 'test-sum' => function ( $frame, $less ) { + $sum = 0; + foreach ( $frame[2] as $arg ) { + $sum += (int)$arg[1]; + } + return $sum; + }, + ), + 'wgResourceLoaderLESSImportPaths' => array( + dirname( dirname( __DIR__ ) ) . '/data/less/common', + ), + 'wgResourceLoaderLESSVars' => array( + 'foo' => '2px', + 'Foo' => '#eeeeee', + 'bar' => 5, + ), + ) ); + } + + /* Hook Methods */ + + /** + * ResourceLoaderRegisterModules hook + */ + public static function resourceLoaderRegisterModules( &$resourceLoader ) { + self::$resourceLoaderRegisterModulesHook = true; + + return true; + } + + /* Provider Methods */ + public static function provideValidModules() { + return array( + array( 'TEST.validModule1', new ResourceLoaderTestModule() ), + ); + } + + /* Test Methods */ + + /** + * Ensures that the ResourceLoaderRegisterModules hook is called when a new ResourceLoader object is constructed + * @covers ResourceLoader::__construct + */ + public function testCreatingNewResourceLoaderCallsRegistrationHook() { + self::$resourceLoaderRegisterModulesHook = false; + $resourceLoader = new ResourceLoader(); + $this->assertTrue( self::$resourceLoaderRegisterModulesHook ); + + return $resourceLoader; + } + + /** + * @dataProvider provideValidModules + * @depends testCreatingNewResourceLoaderCallsRegistrationHook + * @covers ResourceLoader::register + * @covers ResourceLoader::getModule + */ + public function testRegisteredValidModulesAreAccessible( + $name, ResourceLoaderModule $module, ResourceLoader $resourceLoader + ) { + $resourceLoader->register( $name, $module ); + $this->assertEquals( $module, $resourceLoader->getModule( $name ) ); + } + + /** + * @covers ResourceLoaderFileModule::compileLessFile + */ + public function testLessFileCompilation() { + $context = self::getResourceLoaderContext(); + $basePath = __DIR__ . '/../../data/less/module'; + $module = new ResourceLoaderFileModule( array( + 'localBasePath' => $basePath, + 'styles' => array( 'styles.less' ), + ) ); + $styles = $module->getStyles( $context ); + $this->assertStringEqualsFile( $basePath . '/styles.css', $styles['all'] ); + } + + /** + * @dataProvider providePackedModules + * @covers ResourceLoader::makePackedModulesString + */ + public function testMakePackedModulesString( $desc, $modules, $packed ) { + $this->assertEquals( $packed, ResourceLoader::makePackedModulesString( $modules ), $desc ); + } + + /** + * @dataProvider providePackedModules + * @covers ResourceLoaderContext::expandModuleNames + */ + public function testexpandModuleNames( $desc, $modules, $packed ) { + $this->assertEquals( $modules, ResourceLoaderContext::expandModuleNames( $packed ), $desc ); + } + + public static function providePackedModules() { + return array( + array( + 'Example from makePackedModulesString doc comment', + array( 'foo.bar', 'foo.baz', 'bar.baz', 'bar.quux' ), + 'foo.bar,baz|bar.baz,quux', + ), + array( + 'Example from expandModuleNames doc comment', + array( 'jquery.foo', 'jquery.bar', 'jquery.ui.baz', 'jquery.ui.quux' ), + 'jquery.foo,bar|jquery.ui.baz,quux', + ), + array( + 'Regression fixed in r88706 with dotless names', + array( 'foo', 'bar', 'baz' ), + 'foo,bar,baz', + ), + array( + 'Prefixless modules after a prefixed module', + array( 'single.module', 'foobar', 'foobaz' ), + 'single.module|foobar,foobaz', + ), + ); + } +} + +/* Hooks */ +global $wgHooks; +$wgHooks['ResourceLoaderRegisterModules'][] = 'ResourceLoaderTest::resourceLoaderRegisterModules'; diff --git a/tests/phpunit/structure/StructureTest.php b/tests/phpunit/structure/StructureTest.php index df00d4df22..23932997cc 100644 --- a/tests/phpunit/structure/StructureTest.php +++ b/tests/phpunit/structure/StructureTest.php @@ -22,6 +22,7 @@ class StructureTest extends MediaWikiTestCase { 'ApiQueryContinueTestBase', 'MediaWikiLangTestCase', 'MediaWikiTestCase', + 'ResourceLoaderTestCase', 'PHPUnit_Framework_TestCase', 'DumpTestCase', ) );