From 7fd977b242728b7871fa8bdce1dc73b378127deb Mon Sep 17 00:00:00 2001 From: jdlrobson Date: Fri, 19 Feb 2016 14:36:50 -0800 Subject: [PATCH] resourceloader: Inverse hasOwn() check to fix require in debug mode Follows-up 94c1162400. Makes require and module work in debug mode. Bug: T108655 Change-Id: I68ea05a31d5bde530e5e80aeff076df6b9924bac --- resources/src/mediawiki/mediawiki.js | 2 +- .../data/defineCallMwLoaderTestCallback.js | 1 + .../data/requireCallMwLoaderTestCallback.js | 2 ++ .../resources/mediawiki/mediawiki.test.js | 20 +++++++++++++++++++ 4 files changed, 24 insertions(+), 1 deletion(-) create mode 100644 tests/qunit/data/defineCallMwLoaderTestCallback.js create mode 100644 tests/qunit/data/requireCallMwLoaderTestCallback.js diff --git a/resources/src/mediawiki/mediawiki.js b/resources/src/mediawiki/mediawiki.js index f282db607c..4aad2bac90 100644 --- a/resources/src/mediawiki/mediawiki.js +++ b/resources/src/mediawiki/mediawiki.js @@ -1193,7 +1193,7 @@ var r = $.Deferred(); pendingRequests.push( function () { - if ( moduleName && !hasOwn.call( registry, moduleName ) ) { + if ( moduleName && hasOwn.call( registry, moduleName ) ) { window.require = mw.loader.require; window.module = registry[ moduleName ].module; } diff --git a/tests/qunit/data/defineCallMwLoaderTestCallback.js b/tests/qunit/data/defineCallMwLoaderTestCallback.js new file mode 100644 index 0000000000..afd886c334 --- /dev/null +++ b/tests/qunit/data/defineCallMwLoaderTestCallback.js @@ -0,0 +1 @@ +module.exports = 'Define worked.'; diff --git a/tests/qunit/data/requireCallMwLoaderTestCallback.js b/tests/qunit/data/requireCallMwLoaderTestCallback.js new file mode 100644 index 0000000000..8bc087b007 --- /dev/null +++ b/tests/qunit/data/requireCallMwLoaderTestCallback.js @@ -0,0 +1,2 @@ +var x = require( 'test.require.define' ); +module.exports = 'Require worked.' + x; diff --git a/tests/qunit/suites/resources/mediawiki/mediawiki.test.js b/tests/qunit/suites/resources/mediawiki/mediawiki.test.js index ce4ea8b147..dd43c553bc 100644 --- a/tests/qunit/suites/resources/mediawiki/mediawiki.test.js +++ b/tests/qunit/suites/resources/mediawiki/mediawiki.test.js @@ -1127,4 +1127,24 @@ }, /is not loaded/, 'Requesting non-existent modules throws error.' ); } ); + QUnit.asyncTest( 'mw.loader require in debug mode', 1, function ( assert ) { + var path = mw.config.get( 'wgScriptPath' ); + mw.loader.register( [ + [ 'test.require.define', '0' ], + [ 'test.require.callback', '0', [ 'test.require.define' ] ] + ] ); + mw.loader.implement( 'test.require.callback', [ QUnit.fixurl( path + '/tests/qunit/data/requireCallMwLoaderTestCallback.js' ) ] ); + mw.loader.implement( 'test.require.define', [ QUnit.fixurl( path + '/tests/qunit/data/defineCallMwLoaderTestCallback.js' ) ] ); + + mw.loader.using( 'test.require.callback', function () { + QUnit.start(); + var exported = mw.loader.require( 'test.require.callback' ); + assert.strictEqual( exported, 'Require worked.Define worked.', + 'module.exports worked in debug mode' ); + }, function () { + QUnit.start(); + assert.ok( false, 'Error callback fired while loader.using "test.require.callback" module' ); + } ); + } ); + }( mediaWiki, jQuery ) ); -- 2.20.1