( function ( $, mw, QUnit ) {
'use strict';
- var addons;
+ var addons, nested;
/**
* Make a safe copy of localEnv:
( function () {
var orgModule = QUnit.module;
QUnit.module = function ( name, localEnv, executeNow ) {
- var orgBeforeEach, orgAfterEach;
- if ( QUnit.config.moduleStack.length ) {
+ var orgBeforeEach, orgAfterEach, orgExecute;
+ if ( nested ) {
// In a nested module, don't re-run our handlers.
return orgModule.apply( this, arguments );
}
executeNow = localEnv;
localEnv = undefined;
}
+ if ( executeNow ) {
+ // Wrap executeNow() so that we can detect nested modules
+ orgExecute = executeNow;
+ executeNow = function () {
+ var ret;
+ nested = true;
+ ret = orgExecute.apply( this, arguments );
+ nested = false;
+ return ret;
+ };
+ }
localEnv = localEnv || {};
orgBeforeEach = localEnv.beforeEach;
var orgModule = QUnit.module;
QUnit.module = function ( name, localEnv, executeNow ) {
var orgBeforeEach, orgAfterEach;
- if ( QUnit.config.moduleStack.length ) {
+ if ( nested ) {
// In a nested module, don't re-run our handlers.
return orgModule.apply( this, arguments );
}
// Test should use fake XHR, wait for requests, or call abort()
$activeLen = $.active;
if ( $activeLen !== undefined && $activeLen !== 0 ) {
- pending = $.grep( ajaxRequests, function ( ajax ) {
+ pending = ajaxRequests.filter( function ( ajax ) {
return ajax.xhr.state() === 'pending';
} );
if ( pending.length !== $activeLen ) {
mw.log.warn( 'Pending requests does not match jQuery.active count' );
}
// Force requests to stop to give the next test a clean start
- $.each( ajaxRequests, function ( i, ajax ) {
+ ajaxRequests.forEach( function ( ajax, i ) {
mw.log.warn(
'AJAX request #' + i + ' (state: ' + ajax.xhr.state() + ')',
ajax.options