Core: Test all factory use cases from intro.js

There is a lot of logic in intro.js; now we test four cases:
1. (implicitly, via QUnit tests) A real browser with window being the global
2. Browserify where there are both global & window variables.
3. Node with jsdom where window is passed manually to the jQuery factory.
4. Pure Node with incorrect window passed; jQuery should throw then.

Previously the second & fourth case was not tested and the third was tested
in a way that interfered with the main test environment.

We now also test if in the Browserify case we're not creating a jQuery global
by default.

Fixes gh-2181
Closes gh-2234
This commit is contained in:
Michał Gołębiowski
2015-04-26 19:33:05 +02:00
parent ff18d8e206
commit ab40725879
13 changed files with 152 additions and 44 deletions

View File

@@ -0,0 +1,19 @@
/* jshint node: true */
"use strict";
var ensureGlobalNotCreated = require( "./lib/ensure_global_not_created" ),
jQueryFactory = require( "../../dist/jquery.js" );
try {
jQueryFactory( {} );
console.error( "The jQuery factory should reject window without a document" );
process.exit( 1 );
} catch ( e ) {
if ( e.message === "jQuery requires a window with a document" ) {
ensureGlobalNotCreated( module.exports );
process.exit( 0 );
}
console.error( "An unexpected error thrown; message: ", e.message );
process.exit( 1 );
}

View File

@@ -0,0 +1,17 @@
/* jshint node: true */
"use strict";
require( "jsdom" ).env( "", function( errors, window ) {
if ( errors ) {
console.error( errors );
process.exit( 1 );
}
var ensureJQuery = require( "./lib/ensure_jquery" ),
ensureGlobalNotCreated = require( "./lib/ensure_global_not_created" ),
jQuery = require( "../../dist/jquery.js" )( window );
ensureJQuery( jQuery );
ensureGlobalNotCreated( module.exports );
} );

View File

@@ -0,0 +1,20 @@
/* jshint node: true */
"use strict";
require( "jsdom" ).env( "", function( errors, window ) {
if ( errors ) {
console.error( errors );
process.exit( 1 );
}
// Pretend the window is a global.
global.window = window;
var ensureJQuery = require( "./lib/ensure_jquery" ),
ensureGlobalNotCreated = require( "./lib/ensure_global_not_created" ),
jQuery = require( "../../dist/jquery.js" );
ensureJQuery( jQuery );
ensureGlobalNotCreated( module.exports, window );
} );

View File

@@ -0,0 +1,17 @@
/* jshint node: true */
"use strict";
// Ensure the jQuery property on global/window/module.exports/etc. was not
// created in a CommonJS environment.
// `global` is always checked in addition to passed parameters.
module.exports = function ensureGlobalNotCreated() {
var args = [].slice.call( arguments ).concat( global );
args.forEach( function( object ) {
if ( object.jQuery ) {
console.error( "A jQuery global was created in a CommonJS environment." );
process.exit( 1 );
}
} );
};

View File

@@ -0,0 +1,11 @@
/* jshint node: true */
"use strict";
// Check if the object we got is the jQuery object by invoking a basic API.
module.exports = function ensureJQuery( jQuery ) {
if ( !/^jQuery/.test( jQuery.expando ) ) {
console.error( "jQuery.expando was not detected, the jQuery bootstrap process has failed" );
process.exit( 1 );
}
};