grunt.registerTask( "lint", [ "jsonlint", "jshint", "jscs" ] );
- grunt.registerTask( "test_fast", [ "node_smoke_test" ] );
+ grunt.registerTask( "test_fast", [ "node_smoke_tests" ] );
- grunt.registerTask( "test", [ "test_fast", "promises-aplus-tests" ] );
+ grunt.registerTask( "test", [ "test_fast", "promises_aplus_tests" ] );
// Short list as a high frequency watch task
grunt.registerTask( "dev", [ "build:*:*", "lint", "uglify", "remove_map_comment", "dist:*" ] );
--- /dev/null
+/* jshint node: true */
+
+"use strict";
+
+// Run Node with provided parameters: the first one being the Grunt
+// done function and latter ones being files to be tested.
+// See the comment in ../node_smoke_tests.js for more information.
+module.exports = function spawnTest( done ) {
+ var testPaths = [].slice.call( arguments, 1 ),
+ spawn = require( "win-spawn" );
+
+ spawn( "node", testPaths, { stdio: "inherit" } )
+ .on( "close", function( code ) {
+ done( code === 0 );
+ } );
+} ;
+++ /dev/null
-module.exports = function( grunt ) {
-
- "use strict";
-
- grunt.registerTask( "node_smoke_test", function() {
- var done = this.async();
- require( "jsdom" ).env( "", function( errors, window ) {
- if ( errors ) {
- console.error( errors );
- done( false );
- }
- require( "../.." )( window );
- done();
- });
- });
-};
--- /dev/null
+module.exports = function( grunt ) {
+
+ "use strict";
+
+ var fs = require( "fs" ),
+ spawnTest = require( "./lib/spawn_test.js" ),
+ testsDir = "./test/node_smoke_tests/",
+ nodeSmokeTests = [];
+
+ // Fire up all tests defined in test/node_smoke_tests/*.js in spawned sub-processes.
+ // All the files under test/node_smoke_tests/*.js are supposed to exit with 0 code
+ // on success or another one on failure. Spawning in sub-processes is
+ // important so that the tests & the main process don't interfere with
+ // each other, e.g. so that they don't share the require cache.
+
+ fs.readdirSync( testsDir )
+ .filter( function( testFilePath ) {
+ return fs.statSync( testsDir + testFilePath ).isFile();
+ } )
+ .forEach( function( testFilePath ) {
+ var taskName = "node_" + testFilePath.replace( /\.js$/, "" );
+
+ grunt.registerTask( taskName, function() {
+ spawnTest( this.async(), "test/node_smoke_tests/" + testFilePath );
+ } );
+
+ nodeSmokeTests.push( taskName );
+ } );
+
+ grunt.registerTask( "node_smoke_tests", nodeSmokeTests );
+};
+++ /dev/null
-module.exports = function( grunt ) {
-
- "use strict";
-
- var spawn = require( "child_process" ).spawn;
-
- grunt.registerTask( "promises-aplus-tests", function() {
- var done = this.async();
- spawn(
- "node",
- [
- "./node_modules/.bin/promises-aplus-tests",
- "test/promises-aplus-adapter.js"
- ],
- { stdio: "inherit" }
- ).on( "close", function( code ) {
- done( code === 0 );
- });
- });
-};
--- /dev/null
+module.exports = function( grunt ) {
+
+ "use strict";
+
+ var spawnTest = require( "./lib/spawn_test.js" );
+
+ grunt.registerTask( "promises_aplus_tests", function() {
+ spawnTest( this.async(),
+ "./node_modules/.bin/promises-aplus-tests",
+ "test/promises_aplus_adapter.js"
+ );
+ } );
+};
"requirejs": "2.1.15",
"sinon": "1.10.3",
"sizzle": "2.2.0",
- "testswarm": "1.1.0"
+ "testswarm": "1.1.0",
+ "win-spawn": "2.0.0"
},
"scripts": {
"build": "npm install && grunt",
--- /dev/null
+/* 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 );
+}
--- /dev/null
+/* 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 );
+} );
--- /dev/null
+/* 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 );
+} );
--- /dev/null
+/* 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 );
+ }
+ } );
+};
--- /dev/null
+/* 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 );
+ }
+};
+++ /dev/null
-/*jshint es3:false, node:true */
-"use strict";
-
-require( "jsdom" ).env( "", function ( errors, window ) {
- if ( errors ) {
- console.error( errors );
- return;
- }
-
- var jQuery = require( ".." )( window );
-
- exports.deferred = function () {
- var deferred = jQuery.Deferred();
-
- return {
- get promise() {
- return deferred.promise();
- },
- resolve: deferred.resolve.bind( deferred ),
- reject: deferred.reject.bind( deferred )
- };
- };
-});
--- /dev/null
+/* jshint node: true */
+
+"use strict";
+
+require( "jsdom" ).env( "", function ( errors, window ) {
+ if ( errors ) {
+ console.error( errors );
+ return;
+ }
+
+ var jQuery = require( ".." )( window );
+
+ exports.deferred = function () {
+ var deferred = jQuery.Deferred();
+
+ return {
+ promise: deferred.promise(),
+ resolve: deferred.resolve.bind( deferred ),
+ reject: deferred.reject.bind( deferred )
+ };
+ };
+} );