},
teardown: function () {
mw.loader.store.enabled = false;
+ // Teardown for StringSet shim test
+ if ( this.nativeSet ) {
+ window.Set = this.nativeSet;
+ mw.redefineFallbacksForTest();
+ }
}
} ) );
function isCssImportApplied() {
// Trigger reflow, repaint, redraw, whatever (cross-browser)
$element.css( 'height' );
+ // eslint-disable-next-line no-unused-expressions
el.innerHTML;
el.className = el.className;
+ // eslint-disable-next-line no-unused-expressions
document.documentElement.clientHeight;
return $element.css( prop ) === val;
} );
} );
- QUnit.test( '.using() Error: Circular dependency', function ( assert ) {
+ // Covers mw.loader#sortDependencies (with native Set if available)
+ QUnit.test( '.using() Error: Circular dependency [StringSet default]', function ( assert ) {
var done = assert.async();
mw.loader.register( [
.always( done );
} );
+ // @covers mw.loader#sortDependencies (with fallback shim)
+ QUnit.test( '.using() Error: Circular dependency [StringSet shim]', function ( assert ) {
+ var done = assert.async();
+
+ if ( !window.Set ) {
+ assert.expect( 0 );
+ done();
+ return;
+ }
+
+ this.nativeSet = window.Set;
+ window.Set = undefined;
+ mw.redefineFallbacksForTest();
+
+ mw.loader.register( [
+ [ 'test.shim.circle1', '0', [ 'test.shim.circle2' ] ],
+ [ 'test.shim.circle2', '0', [ 'test.shim.circle3' ] ],
+ [ 'test.shim.circle3', '0', [ 'test.shim.circle1' ] ]
+ ] );
+ mw.loader.using( 'test.shim.circle3' ).then(
+ function done() {
+ assert.ok( false, 'Unexpected resolution, expected error.' );
+ },
+ function fail( e ) {
+ assert.ok( /Circular/.test( String( e ) ), 'Detect circular dependency' );
+ }
+ )
+ .always( done );
+ } );
+
QUnit.test( '.load() - Error: Circular dependency', function ( assert ) {
+ var capture = [];
mw.loader.register( [
[ 'test.circleA', '0', [ 'test.circleB' ] ],
[ 'test.circleB', '0', [ 'test.circleC' ] ],
[ 'test.circleC', '0', [ 'test.circleA' ] ]
] );
- assert.throws( function () {
- mw.loader.load( 'test.circleC' );
- }, /Circular/, 'Detect circular dependency' );
+ this.sandbox.stub( mw, 'track', function ( topic, data ) {
+ capture.push( {
+ topic: topic,
+ error: data.exception && data.exception.message,
+ source: data.source
+ } );
+ } );
+
+ mw.loader.load( 'test.circleC' );
+ assert.deepEqual(
+ [ {
+ topic: 'resourceloader.exception',
+ error: 'Circular reference detected: test.circleB -> test.circleC',
+ source: 'resolve'
+ } ],
+ capture,
+ 'Detect circular dependency'
+ );
} );
QUnit.test( '.using() - Error: Unregistered', function ( assert ) {
).always( done );
} );
- QUnit.test( '.load() - Error: Unregistered (ignored)', function ( assert ) {
- assert.expect( 0 );
- mw.loader.load( 'test.using.unreg2' );
+ QUnit.test( '.load() - Error: Unregistered', function ( assert ) {
+ var capture = [];
+ this.sandbox.stub( mw, 'track', function ( topic, data ) {
+ capture.push( {
+ topic: topic,
+ error: data.exception && data.exception.message,
+ source: data.source
+ } );
+ } );
+
+ mw.loader.load( 'test.load.unreg' );
+ assert.deepEqual(
+ [ {
+ topic: 'resourceloader.exception',
+ error: 'Unknown dependency: test.load.unreg',
+ source: 'resolve'
+ } ],
+ capture
+ );
+ } );
+
+ // Regression test for T36853
+ QUnit.test( '.load() - Error: Missing dependency', function ( assert ) {
+ var capture = [];
+ this.sandbox.stub( mw, 'track', function ( topic, data ) {
+ capture.push( {
+ topic: topic,
+ error: data.exception && data.exception.message,
+ source: data.source
+ } );
+ } );
+
+ mw.loader.register( [
+ [ 'test.load.missingdep1', '0', [ 'test.load.missingdep2' ] ],
+ [ 'test.load.missingdep', '0', [ 'test.load.missingdep1' ] ]
+ ] );
+ mw.loader.load( 'test.load.missingdep' );
+ assert.deepEqual(
+ [ {
+ topic: 'resourceloader.exception',
+ error: 'Unknown dependency: test.load.missingdep2',
+ source: 'resolve'
+ } ],
+ capture
+ );
} );
QUnit.test( '.implement( styles={ "css": [text, ..] } )', function ( assert ) {
assert.ok( true, 'QUnit expected() count dummy' );
},
function ( e, dependencies ) {
- assert.strictEqual( $.isArray( dependencies ), true, 'Expected array of dependencies' );
+ assert.strictEqual( Array.isArray( dependencies ), true, 'Expected array of dependencies' );
assert.deepEqual( dependencies, [ 'test.module7' ], 'Error callback called with module test.module7' );
}
);
assert.ok( true, 'QUnit expected() count dummy' );
},
function ( e, dependencies ) {
- assert.strictEqual( $.isArray( dependencies ), true, 'Expected array of dependencies' );
+ assert.strictEqual( Array.isArray( dependencies ), true, 'Expected array of dependencies' );
dependencies.sort();
assert.deepEqual(
dependencies,