aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichał Gołębiowski <m.goleb@gmail.com>2015-08-03 20:28:37 +0200
committerMichał Gołębiowski <m.goleb@gmail.com>2015-09-08 17:42:38 +0200
commitdbb2daa8c3a458e3525d310440f4365548edc138 (patch)
tree6344f8e8bdc184a20e2f178e7c4151a783215d7e
parentf9ef427d355a8a2b531aed5d112dfa4f9692105c (diff)
downloadjquery-dbb2daa8c3a458e3525d310440f4365548edc138.tar.gz
jquery-dbb2daa8c3a458e3525d310440f4365548edc138.zip
Build: Don't install jsdom 3 on Node.js 0.10 & 0.12 by default
jsdom 3 requires Python & Visual Studio on Windows which is a significant barrier to contributors. Newer jsdom versions don't require pre-compiling but work only on io.js. This commit installs the new jsdom everywhere (it does install in old Node.js, it just won't work) and executes Node-related tests only on newer Nodes or if a working jsdom version is installed. The latter can be achieved by running the `old_jsdom` task. Node.js is merging with io.js soon so this will become a smaller problem over time. One drawback is our Jenkins setup runs on Node 0.10 so it won't be running Node tests anymore. We have Travis set up on io.js, though so all PRs have those tests run. When the new LTS Node.js arrives (as it soon merges with io.js) we should update our Jenkins infrastructure so that it runs on this new version. Fixes gh-2519 Closes gh-2526
-rw-r--r--Gruntfile.js22
-rw-r--r--build/tasks/install_jsdom.js27
-rw-r--r--build/tasks/install_old_jsdom.js20
-rw-r--r--build/tasks/node_smoke_tests.js2
-rw-r--r--package.json5
5 files changed, 41 insertions, 35 deletions
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",