diff --git a/Gruntfile.js b/Gruntfile.js index c05b42546..97289a0ac 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -14,7 +14,18 @@ module.exports = function( grunt ) { var fs = require( "fs" ), stripJSONComments = require( "strip-json-comments" ), gzip = require( "gzip-js" ), - srcHintOptions = readOptionalJSON( "src/.jshintrc" ); + srcHintOptions = readOptionalJSON( "src/.jshintrc" ), + newNode = !/^v0/.test( process.version ), + + // Allow to skip jsdom-related tests in Node.js < 1.0.0 + runJsdomTests = newNode || ( function() { + try { + require( "jsdom" ); + return true; + } catch ( e ) { + return false; + } + } )(); // The concatenated file won't pass onevar // But our modules can @@ -182,9 +193,14 @@ module.exports = function( grunt ) { grunt.registerTask( "lint", [ "jsonlint", "jshint", "jscs" ] ); - grunt.registerTask( "test_fast", [ "node_smoke_tests" ] ); + // Don't run Node-related tests in Node.js < 1.0.0 as they require an old + // jsdom version that needs compiling, making it harder for people to compile + // jQuery on Windows. (see gh-2519) + grunt.registerTask( "test_fast", runJsdomTests ? [ "node_smoke_tests" ] : [] ); - grunt.registerTask( "test", [ "test_fast", "promises_aplus_tests" ] ); + grunt.registerTask( "test", [ "test_fast" ].concat( + runJsdomTests ? [ "promises_aplus_tests" ] : [] + ) ); // Short list as a high frequency watch task grunt.registerTask( "dev", [ "build:*:*", "lint", "uglify", "remove_map_comment", "dist:*" ] ); diff --git a/build/tasks/install_jsdom.js b/build/tasks/install_jsdom.js deleted file mode 100644 index 73142b654..000000000 --- a/build/tasks/install_jsdom.js +++ /dev/null @@ -1,27 +0,0 @@ -module.exports = function( grunt ) { - grunt.registerTask( "jsdom", function() { - var current, - pkg = grunt.config( "pkg" ), - version = pkg.jsdomVersions[ - - // Unfortunately, this is currently the only - // way to tell the difference between Node and iojs - /^v0/.test( process.version ) ? "node" : "iojs" - ]; - - try { - current = require( "jsdom/package.json" ).version; - if ( current === version ) { - return; - } - } catch ( e ) {} - - // Use npm on the command-line - // There is no local npm - grunt.util.spawn( { - cmd: "npm", - args: [ "install", "jsdom@" + version ], - opts: { stdio: "inherit" } - }, this.async() ); - } ); -}; diff --git a/build/tasks/install_old_jsdom.js b/build/tasks/install_old_jsdom.js new file mode 100644 index 000000000..271e0cbe0 --- /dev/null +++ b/build/tasks/install_old_jsdom.js @@ -0,0 +1,20 @@ +module.exports = function( grunt ) { + + "use strict"; + + // Run this task to run jsdom-related tests on Node.js < 1.0.0. + grunt.registerTask( "old_jsdom", function() { + if ( !/^v0/.test( process.version ) ) { + console.warn( "The old_jsdom task doesn\'t need to be run in io.js or new Node.js" ); + return; + } + + // Use npm on the command-line + // There is no local npm + grunt.util.spawn( { + cmd: "npm", + args: [ "install", "jsdom@3" ], + opts: { stdio: "inherit" } + }, this.async() ); + } ); +}; diff --git a/build/tasks/node_smoke_tests.js b/build/tasks/node_smoke_tests.js index 9334516d9..1b860b140 100644 --- a/build/tasks/node_smoke_tests.js +++ b/build/tasks/node_smoke_tests.js @@ -5,7 +5,7 @@ module.exports = function( grunt ) { var fs = require( "fs" ), spawnTest = require( "./lib/spawn_test.js" ), testsDir = "./test/node_smoke_tests/", - nodeSmokeTests = [ "jsdom", "babel:nodeSmokeTests" ]; + nodeSmokeTests = [ "babel: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 diff --git a/package.json b/package.json index 27ca0757f..c513b892d 100644 --- a/package.json +++ b/package.json @@ -39,6 +39,7 @@ "grunt-jsonlint": "1.0.4", "grunt-npmcopy": "0.1.0", "gzip-js": "0.3.2", + "jsdom": "5.6.1", "load-grunt-tasks": "1.0.0", "native-promise-only": "0.7.8-a", "promises-aplus-tests": "2.1.0", @@ -52,10 +53,6 @@ "testswarm": "1.1.0", "win-spawn": "2.0.0" }, - "jsdomVersions": { - "node": "3.1.2", - "iojs": "5.3.0" - }, "scripts": { "build": "npm install && grunt", "start": "grunt watch",