From 23d066618def55361aa32a60ef905287a0e63161 Mon Sep 17 00:00:00 2001 From: Timo Tijhof Date: Tue, 16 Jul 2019 01:15:32 +0100 Subject: [PATCH] resourceloader: Replace some Xml::encodeJs calls with RL's own encodeJson Bug: T32956 Change-Id: I614fe0e80ff308b857639a27d7772f969899b468 --- includes/resourceloader/ResourceLoader.php | 32 ++-- .../ResourceLoaderStartUpModuleTest.php | 138 +++++++++--------- .../resourceloader/ResourceLoaderTest.php | 38 ++--- 3 files changed, 100 insertions(+), 108 deletions(-) diff --git a/includes/resourceloader/ResourceLoader.php b/includes/resourceloader/ResourceLoader.php index 6eb9908a64..f8e76acb8d 100644 --- a/includes/resourceloader/ResourceLoader.php +++ b/includes/resourceloader/ResourceLoader.php @@ -1259,11 +1259,9 @@ MESSAGE; * @return string JavaScript code */ public static function makeMessageSetScript( $messages ) { - return Xml::encodeJsCall( - 'mw.messages.set', - [ (object)$messages ], - self::inDebugMode() - ); + return 'mw.messages.set(' + . self::encodeJsonForScript( (object)$messages ) + . ');'; } /** @@ -1347,11 +1345,9 @@ MESSAGE; if ( !is_array( $states ) ) { $states = [ $states => $state ]; } - return Xml::encodeJsCall( - 'mw.loader.state', - [ $states ], - self::inDebugMode() - ); + return 'mw.loader.state(' + . self::encodeJsonForScript( $states ) + . ');'; } private static function isEmptyObject( stdClass $obj ) { @@ -1435,11 +1431,9 @@ MESSAGE; array_walk( $modules, [ self::class, 'trimArray' ] ); - return Xml::encodeJsCall( - 'mw.loader.register', - [ $modules ], - self::inDebugMode() - ); + return 'mw.loader.register(' + . self::encodeJsonForScript( $modules ) + . ');'; } /** @@ -1460,11 +1454,9 @@ MESSAGE; if ( !is_array( $sources ) ) { $sources = [ $sources => $loadUrl ]; } - return Xml::encodeJsCall( - 'mw.loader.addSource', - [ $sources ], - self::inDebugMode() - ); + return 'mw.loader.addSource(' + . self::encodeJsonForScript( $sources ) + . ');'; } /** diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php index 2691ccc726..213eed2aea 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderStartUpModuleTest.php @@ -14,10 +14,10 @@ class ResourceLoaderStartUpModuleTest extends ResourceLoaderTestCase { 'msg' => 'Empty registry', 'modules' => [], 'out' => ' -mw.loader.addSource( { +mw.loader.addSource({ "local": "/w/load.php" -} ); -mw.loader.register( [] );' +}); +mw.loader.register([]);' ] ], [ [ 'msg' => 'Basic registry', @@ -25,15 +25,15 @@ mw.loader.register( [] );' 'test.blank' => [ 'class' => ResourceLoaderTestModule::class ], ], 'out' => ' -mw.loader.addSource( { +mw.loader.addSource({ "local": "/w/load.php" -} ); -mw.loader.register( [ +}); +mw.loader.register([ [ "test.blank", "{blankVer}" ] -] );', +]);', ] ], [ [ 'msg' => 'Optimise the dependency tree (basic case)', @@ -56,10 +56,10 @@ mw.loader.register( [ ], ], 'out' => ' -mw.loader.addSource( { +mw.loader.addSource({ "local": "/w/load.php" -} ); -mw.loader.register( [ +}); +mw.loader.register([ [ "a", "{blankVer}", @@ -83,7 +83,7 @@ mw.loader.register( [ "d", "{blankVer}" ] -] );', +]);', ] ], [ [ 'msg' => 'Optimise the dependency tree (tolerate unknown deps)', @@ -102,10 +102,10 @@ mw.loader.register( [ ], ], 'out' => ' -mw.loader.addSource( { +mw.loader.addSource({ "local": "/w/load.php" -} ); -mw.loader.register( [ +}); +mw.loader.register([ [ "a", "{blankVer}", @@ -126,7 +126,7 @@ mw.loader.register( [ "c", "{blankVer}" ] -] );', +]);', ] ], [ [ // Regression test for T223402. @@ -154,10 +154,10 @@ mw.loader.register( [ ], ], 'out' => ' -mw.loader.addSource( { +mw.loader.addSource({ "local": "/w/load.php" -} ); -mw.loader.register( [ +}); +mw.loader.register([ [ "top", "{blankVer}", @@ -192,7 +192,7 @@ mw.loader.register( [ "util", "{blankVer}" ] -] );', +]);', ] ], [ [ // Regression test for T223402. @@ -208,10 +208,10 @@ mw.loader.register( [ ], ], 'out' => ' -mw.loader.addSource( { +mw.loader.addSource({ "local": "/w/load.php" -} ); -mw.loader.register( [ +}); +mw.loader.register([ [ "top", "{blankVer}", @@ -224,7 +224,7 @@ mw.loader.register( [ "util", "{blankVer}" ] -] );', +]);', ] ], [ [ 'msg' => 'Version falls back gracefully if getVersionHash throws', @@ -241,18 +241,18 @@ mw.loader.register( [ ] ], 'out' => ' -mw.loader.addSource( { +mw.loader.addSource({ "local": "/w/load.php" -} ); -mw.loader.register( [ +}); +mw.loader.register([ [ "test.fail", "" ] -] ); -mw.loader.state( { +]); +mw.loader.state({ "test.fail": "error" -} );', +});', ] ], [ [ 'msg' => 'Use version from getVersionHash', @@ -267,15 +267,15 @@ mw.loader.state( { ] ], 'out' => ' -mw.loader.addSource( { +mw.loader.addSource({ "local": "/w/load.php" -} ); -mw.loader.register( [ +}); +mw.loader.register([ [ "test.version", "1234567" ] -] );', +]);', ] ], [ [ 'msg' => 'Re-hash version from getVersionHash if too long', @@ -290,15 +290,15 @@ mw.loader.register( [ ], ], 'out' => ' -mw.loader.addSource( { +mw.loader.addSource({ "local": "/w/load.php" -} ); -mw.loader.register( [ +}); +mw.loader.register([ [ "test.version", "016es8l" ] -] );', +]);', ] ], [ [ 'msg' => 'Group signature', @@ -314,10 +314,10 @@ mw.loader.register( [ ], ], 'out' => ' -mw.loader.addSource( { +mw.loader.addSource({ "local": "/w/load.php" -} ); -mw.loader.register( [ +}); +mw.loader.register([ [ "test.blank", "{blankVer}" @@ -334,7 +334,7 @@ mw.loader.register( [ [], "x-bar" ] -] );' +]);' ] ], [ [ 'msg' => 'Different target (non-test should not be registered)', @@ -346,15 +346,15 @@ mw.loader.register( [ ], ], 'out' => ' -mw.loader.addSource( { +mw.loader.addSource({ "local": "/w/load.php" -} ); -mw.loader.register( [ +}); +mw.loader.register([ [ "test.blank", "{blankVer}" ] -] );' +]);' ] ], [ [ 'msg' => 'Safemode disabled (default; register all modules)', @@ -375,10 +375,10 @@ mw.loader.register( [ ], ], 'out' => ' -mw.loader.addSource( { +mw.loader.addSource({ "local": "/w/load.php" -} ); -mw.loader.register( [ +}); +mw.loader.register([ [ "test.blank", "{blankVer}" @@ -395,7 +395,7 @@ mw.loader.register( [ "test.user", "{blankVer}" ] -] );' +]);' ] ], [ [ 'msg' => 'Safemode enabled (filter modules with user/site origin)', @@ -417,10 +417,10 @@ mw.loader.register( [ ], ], 'out' => ' -mw.loader.addSource( { +mw.loader.addSource({ "local": "/w/load.php" -} ); -mw.loader.register( [ +}); +mw.loader.register([ [ "test.blank", "{blankVer}" @@ -429,7 +429,7 @@ mw.loader.register( [ "test.core-generated", "{blankVer}" ] -] );' +]);' ] ], [ [ 'msg' => 'Foreign source', @@ -446,11 +446,11 @@ mw.loader.register( [ ], ], 'out' => ' -mw.loader.addSource( { +mw.loader.addSource({ "local": "/w/load.php", "example": "http://example.org/w/load.php" -} ); -mw.loader.register( [ +}); +mw.loader.register([ [ "test.blank", "{blankVer}", @@ -458,7 +458,7 @@ mw.loader.register( [ null, "example" ] -] );' +]);' ] ], [ [ 'msg' => 'Conditional dependency function', @@ -487,10 +487,10 @@ mw.loader.register( [ ], ], 'out' => ' -mw.loader.addSource( { +mw.loader.addSource({ "local": "/w/load.php" -} ); -mw.loader.register( [ +}); +mw.loader.register([ [ "test.x.core", "{blankVer}" @@ -520,7 +520,7 @@ mw.loader.register( [ 2 ] ] -] );', +]);', ] ], [ [ // This may seem like an edge case, but a plain MediaWiki core install @@ -593,11 +593,11 @@ mw.loader.register( [ ], ], 'out' => ' -mw.loader.addSource( { +mw.loader.addSource({ "local": "/w/load.php", "example": "http://example.org/w/load.php" -} ); -mw.loader.register( [ +}); +mw.loader.register([ [ "test.blank", "{blankVer}" @@ -661,7 +661,7 @@ mw.loader.register( [ "x-bar", "example" ] -] );' +]);' ] ], ]; } @@ -748,10 +748,10 @@ mw.loader.register( [ $rl->register( $modules ); $module = new ResourceLoaderStartUpModule(); $out = -'mw.loader.addSource( { +'mw.loader.addSource({ "local": "/w/load.php" -} ); -mw.loader.register( [ +}); +mw.loader.register([ [ "test.blank", "{blankVer}" @@ -766,7 +766,7 @@ mw.loader.register( [ null, "return !!( window.JSON \u0026\u0026 JSON.parse \u0026\u0026 JSON.stringify);" ] -] );'; +]);'; $this->assertEquals( self::expandPlaceholders( $out ), diff --git a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php index f47bdaf7bf..412272dacc 100644 --- a/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php +++ b/tests/phpunit/includes/resourceloader/ResourceLoaderTest.php @@ -560,12 +560,12 @@ END */ public function testMakeLoaderRegisterScript() { $this->assertEquals( - 'mw.loader.register( [ + 'mw.loader.register([ [ "test.name", "1234567" ] -] );', +]);', ResourceLoader::makeLoaderRegisterScript( [ [ 'test.name', '1234567' ], ] ), @@ -573,7 +573,7 @@ END ); $this->assertEquals( - 'mw.loader.register( [ + 'mw.loader.register([ [ "test.foo", "100" @@ -601,7 +601,7 @@ END null, "return true;" ] -] );', +]);', ResourceLoader::makeLoaderRegisterScript( [ [ 'test.foo', '100' , [], null, null ], [ 'test.bar', '200', [ 'test.unknown' ], null ], @@ -617,29 +617,29 @@ END */ public function testMakeLoaderSourcesScript() { $this->assertEquals( - 'mw.loader.addSource( { + 'mw.loader.addSource({ "local": "/w/load.php" -} );', +});', ResourceLoader::makeLoaderSourcesScript( 'local', '/w/load.php' ) ); $this->assertEquals( - 'mw.loader.addSource( { + 'mw.loader.addSource({ "local": "/w/load.php" -} );', +});', ResourceLoader::makeLoaderSourcesScript( [ 'local' => '/w/load.php' ] ) ); $this->assertEquals( - 'mw.loader.addSource( { + 'mw.loader.addSource({ "local": "/w/load.php", "example": "https://example.org/w/load.php" -} );', +});', ResourceLoader::makeLoaderSourcesScript( [ 'local' => '/w/load.php', 'example' => 'https://example.org/w/load.php' ] ) ); $this->assertEquals( - 'mw.loader.addSource( [] );', + 'mw.loader.addSource([]);', ResourceLoader::makeLoaderSourcesScript( [] ) ); } @@ -747,9 +747,9 @@ END 'modules' => [ 'foo' => 'foo()', ], - 'expected' => "foo()\n" . 'mw.loader.state( { + 'expected' => "foo()\n" . 'mw.loader.state({ "foo": "ready" -} );', +});', 'minified' => "foo()\n" . 'mw.loader.state({"foo":"ready"});', 'message' => 'Script without semi-colon', ], @@ -758,10 +758,10 @@ END 'foo' => 'foo()', 'bar' => 'bar()', ], - 'expected' => "foo()\nbar()\n" . 'mw.loader.state( { + 'expected' => "foo()\nbar()\n" . 'mw.loader.state({ "foo": "ready", "bar": "ready" -} );', +});', 'minified' => "foo()\nbar()\n" . 'mw.loader.state({"foo":"ready","bar":"ready"});', 'message' => 'Two scripts without semi-colon', ], @@ -769,9 +769,9 @@ END 'modules' => [ 'foo' => "foo()\n// bar();" ], - 'expected' => "foo()\n// bar();\n" . 'mw.loader.state( { + 'expected' => "foo()\n// bar();\n" . 'mw.loader.state({ "foo": "ready" -} );', +});', 'minified' => "foo()\n" . 'mw.loader.state({"foo":"ready"});', 'message' => 'Script with semi-colon in comment (T162719)', ], @@ -866,11 +866,11 @@ END $this->assertCount( 1, $errors ); $this->assertRegExp( '/Ferry not found/', $errors[0] ); $this->assertEquals( - "foo();\nbar();\n" . 'mw.loader.state( { + "foo();\nbar();\n" . 'mw.loader.state({ "ferry": "error", "foo": "ready", "bar": "ready" -} );', +});', $response ); } -- 2.20.1