From 39eda6770eb4813d21ded115240ccf5b7e58c0fd Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Tue, 27 Jun 2017 19:10:03 -0700 Subject: [PATCH] resourceloader: Add more concat test cases for makeModuleResponse Bug: T162719 Change-Id: Ic8d4a022dbe8c7998924fb20d727936e68cb11d2 --- .../resourceloader/ResourceLoaderTest.php | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php index f00253b662..b7b24731ee 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php @@ -165,6 +165,14 @@ class ResourceLoaderTest extends ResourceLoaderTestCase { $this->assertSame( $expected, $rl->isFileModule( 'test' ) ); } + /** + * @covers ResourceLoader::isFileModule + */ + public function testIsFileModuleUnknown() { + $rl = TestingAccessWrapper::newFromObject( new EmptyResourceLoader() ); + $this->assertSame( false, $rl->isFileModule( 'unknown' ) ); + } + /** * @covers ResourceLoader::isModuleRegistered */ @@ -588,6 +596,12 @@ mw.example(); ] ); $context = $this->getResourceLoaderContext( [], $rl ); + $this->assertEquals( + '', + $rl->getCombinedVersion( $context, [] ), + 'empty list' + ); + $this->assertEquals( ResourceLoader::makeHash( self::BLANK_VERSION ), $rl->getCombinedVersion( $context, [ 'foo' ] ), @@ -603,6 +617,88 @@ mw.example(); ); } + public static function provideMakeModuleResponseConcat() { + $testcases = [ + [ + 'modules' => [ + 'foo' => 'foo()', + ], + 'expected' => "foo();\n" . 'mw.loader.state( { + "foo": "ready" +} );', + 'minified' => "foo();" . 'mw.loader.state({"foo":"ready"});', + 'message' => 'Script without semi-colon', + ], + [ + 'modules' => [ + 'foo' => 'foo()', + 'bar' => 'bar()', + ], + 'expected' => "foo();\nbar();\n" . 'mw.loader.state( { + "foo": "ready", + "bar": "ready" +} );', + 'minified' => "foo();bar();" . 'mw.loader.state({"foo":"ready","bar":"ready"});', + 'message' => 'Two scripts without semi-colon', + ], + [ + 'modules' => [ + 'foo' => "foo()\n// bar();" + ], + // FIXME: Invalid code (T162719) + 'expected' => "foo()\n// bar();" . 'mw.loader.state( { + "foo": "ready" +} );', + // FIXME: Invalid code (T162719) + 'minified' => "foo()" . 'mw.loader.state({"foo":"ready"});', + 'message' => 'Script with semi-colon in comment', + ], + ]; + $ret = []; + foreach ( $testcases as $i => $case ) { + $ret["#$i"] = [ + $case['modules'], + $case['expected'], + true, // debug + $case['message'], + ]; + $ret["#$i (minified)"] = [ + $case['modules'], + $case['minified'], + false, // debug + $case['message'], + ]; + } + return $ret; + } + + /** + * Verify how multiple scripts and mw.loader.state() calls are concatenated. + * + * @dataProvider provideMakeModuleResponseConcat + * @covers ResourceLoader::makeModuleResponse + */ + public function testMakeModuleResponseConcat( $scripts, $expected, $debug, $message = null ) { + $rl = new EmptyResourceLoader(); + $modules = array_map( function ( $script ) { + return self::getSimpleModuleMock( $script ); + }, $scripts ); + $rl->register( $modules ); + + $this->setMwGlobals( 'wgResourceLoaderDebug', $debug ); + $context = $this->getResourceLoaderContext( + [ + 'modules' => implode( '|', array_keys( $modules ) ), + 'only' => 'scripts', + ], + $rl + ); + + $response = $rl->makeModuleResponse( $context, $modules ); + $this->assertCount( 0, $rl->getErrors(), 'Error count' ); + $this->assertEquals( $expected, $response, $message ?: 'Response' ); + } + /** * Verify that when building module content in a load.php response, * an exception from one module will not break script output from -- 2.20.1