diff options
author | Michał Gołębiowski <m.goleb@gmail.com> | 2015-04-26 19:33:05 +0200 |
---|---|---|
committer | Michał Gołębiowski <m.goleb@gmail.com> | 2015-04-27 22:44:47 +0200 |
commit | ab407258795bfa05756b009058757f8b42aa9c53 (patch) | |
tree | f96c0057a86c7d53deae69dd442ae55311263ee8 /test | |
parent | ff18d8e2060ae7c15c7694dc6bcbbeb9cbfbdaa4 (diff) | |
download | jquery-ab407258795bfa05756b009058757f8b42aa9c53.tar.gz jquery-ab407258795bfa05756b009058757f8b42aa9c53.zip |
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
Diffstat (limited to 'test')
-rw-r--r-- | test/node_smoke_tests/document_missing.js | 19 | ||||
-rw-r--r-- | test/node_smoke_tests/document_passed.js | 17 | ||||
-rw-r--r-- | test/node_smoke_tests/document_present_originally.js | 20 | ||||
-rw-r--r-- | test/node_smoke_tests/lib/ensure_global_not_created.js | 17 | ||||
-rw-r--r-- | test/node_smoke_tests/lib/ensure_jquery.js | 11 | ||||
-rw-r--r-- | test/promises_aplus_adapter.js (renamed from test/promises-aplus-adapter.js) | 9 |
6 files changed, 88 insertions, 5 deletions
diff --git a/test/node_smoke_tests/document_missing.js b/test/node_smoke_tests/document_missing.js new file mode 100644 index 000000000..0a0bda350 --- /dev/null +++ b/test/node_smoke_tests/document_missing.js @@ -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 ); +} diff --git a/test/node_smoke_tests/document_passed.js b/test/node_smoke_tests/document_passed.js new file mode 100644 index 000000000..5bbddb718 --- /dev/null +++ b/test/node_smoke_tests/document_passed.js @@ -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 ); +} ); diff --git a/test/node_smoke_tests/document_present_originally.js b/test/node_smoke_tests/document_present_originally.js new file mode 100644 index 000000000..76fa88e86 --- /dev/null +++ b/test/node_smoke_tests/document_present_originally.js @@ -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 ); +} ); diff --git a/test/node_smoke_tests/lib/ensure_global_not_created.js b/test/node_smoke_tests/lib/ensure_global_not_created.js new file mode 100644 index 000000000..e2ce98309 --- /dev/null +++ b/test/node_smoke_tests/lib/ensure_global_not_created.js @@ -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 ); + } + } ); +}; diff --git a/test/node_smoke_tests/lib/ensure_jquery.js b/test/node_smoke_tests/lib/ensure_jquery.js new file mode 100644 index 000000000..f121f6652 --- /dev/null +++ b/test/node_smoke_tests/lib/ensure_jquery.js @@ -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 ); + } +}; diff --git a/test/promises-aplus-adapter.js b/test/promises_aplus_adapter.js index bb1587337..decc3e0f0 100644 --- a/test/promises-aplus-adapter.js +++ b/test/promises_aplus_adapter.js @@ -1,4 +1,5 @@ -/*jshint es3:false, node:true */ +/* jshint node: true */ + "use strict"; require( "jsdom" ).env( "", function ( errors, window ) { @@ -13,11 +14,9 @@ require( "jsdom" ).env( "", function ( errors, window ) { var deferred = jQuery.Deferred(); return { - get promise() { - return deferred.promise(); - }, + promise: deferred.promise(), resolve: deferred.resolve.bind( deferred ), reject: deferred.reject.bind( deferred ) }; }; -}); +} ); |