From 16adb3fe3180f5de3788d9c33ecb5429234569db Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Wed, 5 Apr 2017 18:19:48 -0700 Subject: [PATCH] resourceloader: Improve code coverage * Missing cases for StartupModule::getModuleRegistrations (now 100% covered) - Raw modules are omitted from the manifest. E.g. The base modules ('jquery', 'mediawiki') are raw modules that we don't register client side (they can't load themselves). - Exceptions from getVersionHash() are caught. - Oversized versions are re-hashed. * Missing cases for ResourceLoader::makeLoaderRegisterScript. (now 100% covered) * Missing cases for ResourceLoader::getModule. (now 100% covered) Change-Id: If9717a48195fc6ae776da5d0e86f323d7f60426d --- .../ResourceLoaderStartUpModuleTest.php | 88 ++++++++++++++++++- .../resourceloader/ResourceLoaderTest.php | 42 ++++++++- 2 files changed, 127 insertions(+), 3 deletions(-) diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php index 1b756be629..1e09e92a10 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php @@ -8,7 +8,7 @@ class ResourceLoaderStartUpModuleTest extends ResourceLoaderTestCase { ] ); } - public static function provideGetModuleRegistrations() { + public function provideGetModuleRegistrations() { return [ [ [ 'msg' => 'Empty registry', @@ -33,6 +33,88 @@ mw.loader.register( [ "test.blank", "{blankVer}" ] +] );', + ] ], + [ [ + 'msg' => 'Omit raw modules from registry', + 'modules' => [ + 'test.raw' => new ResourceLoaderTestModule( [ 'isRaw' => true ] ), + 'test.blank' => new ResourceLoaderTestModule(), + ], + 'out' => ' +mw.loader.addSource( { + "local": "/w/load.php" +} ); +mw.loader.register( [ + [ + "test.blank", + "{blankVer}" + ] +] );', + ] ], + [ [ + 'msg' => 'Version falls back gracefully if getVersionHash throws', + 'modules' => [ + 'test.fail' => ( + ( $mock = $this->getMockBuilder( 'ResourceLoaderTestModule' ) + ->setMethods( [ 'getVersionHash' ] )->getMock() ) + && $mock->method( 'getVersionHash' )->will( + $this->throwException( new Exception ) + ) + ) ? $mock : $mock + ], + 'out' => ' +mw.loader.addSource( { + "local": "/w/load.php" +} ); +mw.loader.register( [ + [ + "test.fail", + "" + ] +] ); +mw.loader.state( { + "test.fail": "error" +} );', + ] ], + [ [ + 'msg' => 'Use version from getVersionHash', + 'modules' => [ + 'test.version' => ( + ( $mock = $this->getMockBuilder( 'ResourceLoaderTestModule' ) + ->setMethods( [ 'getVersionHash' ] )->getMock() ) + && $mock->method( 'getVersionHash' )->willReturn( '1234567' ) + ) ? $mock : $mock + ], + 'out' => ' +mw.loader.addSource( { + "local": "/w/load.php" +} ); +mw.loader.register( [ + [ + "test.version", + "1234567" + ] +] );', + ] ], + [ [ + 'msg' => 'Re-hash version from getVersionHash if too long', + 'modules' => [ + 'test.version' => ( + ( $mock = $this->getMockBuilder( 'ResourceLoaderTestModule' ) + ->setMethods( [ 'getVersionHash' ] )->getMock() ) + && $mock->method( 'getVersionHash' )->willReturn( '12345678' ) + ) ? $mock : $mock + ], + 'out' => ' +mw.loader.addSource( { + "local": "/w/load.php" +} ); +mw.loader.register( [ + [ + "test.version", + "016es8l" + ] ] );', ] ], [ [ @@ -303,8 +385,8 @@ mw.loader.register( [ /** * @dataProvider provideGetModuleRegistrations - * @covers ResourceLoaderStartUpModule::compileUnresolvedDependencies * @covers ResourceLoaderStartUpModule::getModuleRegistrations + * @covers ResourceLoaderStartUpModule::compileUnresolvedDependencies * @covers ResourceLoader::makeLoaderRegisterScript */ public function testGetModuleRegistrations( $case ) { @@ -344,6 +426,7 @@ mw.loader.register( [ ]; } /** + * @covers ResourceLoaderStartUpModule::getModuleRegistrations * @dataProvider provideRegistrations */ public function testRegistrationsMinified( $modules ) { @@ -368,6 +451,7 @@ mw.loader.register( [ } /** + * @covers ResourceLoaderStartUpModule::getModuleRegistrations * @dataProvider provideRegistrations */ public function testRegistrationsUnminified( $modules ) { diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php index e0a82d06af..2618e781a1 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php @@ -49,13 +49,26 @@ class ResourceLoaderTest extends ResourceLoaderTestCase { * @covers ResourceLoader::register * @covers ResourceLoader::getModule */ - public function testRegisterValid() { + public function testRegisterValidObject() { $module = new ResourceLoaderTestModule(); $resourceLoader = new EmptyResourceLoader(); $resourceLoader->register( 'test', $module ); $this->assertEquals( $module, $resourceLoader->getModule( 'test' ) ); } + /** + * @covers ResourceLoader::register + * @covers ResourceLoader::getModule + */ + public function testRegisterValidArray() { + $module = new ResourceLoaderTestModule(); + $resourceLoader = new EmptyResourceLoader(); + // Covers case of register() setting $rl->moduleInfos, + // but $rl->modules lazy-populated by getModule() + $resourceLoader->register( 'test', [ 'object' => $module ] ); + $this->assertEquals( $module, $resourceLoader->getModule( 'test' ) ); + } + /** * @covers ResourceLoader::register */ @@ -384,6 +397,33 @@ mw.example(); ); } + /** + * @covers ResourceLoader::makeLoaderRegisterScript + */ + public function testMakeLoaderRegisterScript() { + $this->assertEquals( + 'mw.loader.register( [ + [ + "test.name", + "1234567" + ] +] );', + ResourceLoader::makeLoaderRegisterScript( [ + [ 'test.name', '1234567' ], + ] ), + 'Nested array parameter' + ); + + $this->assertEquals( + 'mw.loader.register( "test.name", "1234567" );', + ResourceLoader::makeLoaderRegisterScript( + 'test.name', + '1234567' + ), + 'Variadic parameters' + ); + } + /** * @covers ResourceLoader::makeLoaderSourcesScript */ -- 2.20.1