mirror of
https://github.com/jquery/jquery.git
synced 2024-10-05 11:34:18 +00:00
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:
parent
ff18d8e206
commit
ab40725879
@ -158,9 +158,9 @@ module.exports = function( grunt ) {
|
||||
|
||||
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:*" ] );
|
||||
|
16
build/tasks/lib/spawn_test.js
Normal file
16
build/tasks/lib/spawn_test.js
Normal file
@ -0,0 +1,16 @@
|
||||
/* 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 );
|
||||
} );
|
||||
} ;
|
@ -1,16 +0,0 @@
|
||||
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();
|
||||
});
|
||||
});
|
||||
};
|
31
build/tasks/node_smoke_tests.js
Normal file
31
build/tasks/node_smoke_tests.js
Normal file
@ -0,0 +1,31 @@
|
||||
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 );
|
||||
};
|
@ -1,20 +0,0 @@
|
||||
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 );
|
||||
});
|
||||
});
|
||||
};
|
13
build/tasks/promises_aplus_tests.js
Normal file
13
build/tasks/promises_aplus_tests.js
Normal file
@ -0,0 +1,13 @@
|
||||
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"
|
||||
);
|
||||
} );
|
||||
};
|
@ -52,7 +52,8 @@
|
||||
"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",
|
||||
|
19
test/node_smoke_tests/document_missing.js
Normal file
19
test/node_smoke_tests/document_missing.js
Normal 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 );
|
||||
}
|
17
test/node_smoke_tests/document_passed.js
Normal file
17
test/node_smoke_tests/document_passed.js
Normal 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 );
|
||||
} );
|
20
test/node_smoke_tests/document_present_originally.js
Normal file
20
test/node_smoke_tests/document_present_originally.js
Normal 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 );
|
||||
} );
|
17
test/node_smoke_tests/lib/ensure_global_not_created.js
Normal file
17
test/node_smoke_tests/lib/ensure_global_not_created.js
Normal 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 );
|
||||
}
|
||||
} );
|
||||
};
|
11
test/node_smoke_tests/lib/ensure_jquery.js
Normal file
11
test/node_smoke_tests/lib/ensure_jquery.js
Normal 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 );
|
||||
}
|
||||
};
|
@ -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 )
|
||||
};
|
||||
};
|
||||
});
|
||||
} );
|
Loading…
Reference in New Issue
Block a user