Skip to content

Commit 4506693

Browse files
committed
[io.js] Update jsdom and get jest working on io.js
This gets jest working on io.js 1.8.x and 2.0.x. io.js is reconciling with the Node Foundation so users who are still on Node are on the upgrade path that converges with io.js anyway. What this means is the jest version probably should be bumped to 0.5.0, where 0.4.x is a maintenance branch for legacy Node (typically with semver, a major version bump is required but 0.x.x releases are considered a free-for-all). This diff is near the minimal amount of work to bring jest up to date and pass all of its tests. - Upgraded npm dependencies. The major update is jsdom from 0.10.3 to 5.4.3. This lets us drop the indirect contextify dependency. - Removed harmonize, since io.js uses modern V8 and enables stable ES6 features by default - Removed the `--harmony` flag from the TestRunner for the same reason (trivia: i added that line once upon a time, let me delete it) - Replaced jsdom's `run` with io.js's built-in `vm` module - Added support for curried arguments in the fake `nextTick` implementation, which io.js itself relies on - Updated the HasteModuleLoader to handle Node built-in modules before `node_modules` -- this fixes an issue I was getting with graceful-fs trying to require smalloc. - Patched coffeescript to use Array.isArray instead of `instanceof Array`. Working on getting that merged upstream. Also mocked out JSDomEnvironment under __mocks__ instead of doing it in each test. Each test used to implement its own JSDomEnvironment. This diff removes the copy-pasted code and introduces a shared mock under __mocks__. Test Plan: ``` nvm install iojs-1 rm -fr node_modules && npm install nvm install iojs-2 rm -fr node_modules && npm install ```
1 parent 3afa11b commit 4506693

17 files changed

+123
-143
lines changed

.travis.yml

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
language: node_js
22
node_js:
3-
- "0.10"
3+
- "iojs-v1"
4+
- "iojs-v2"
45
sudo: false

bin/jest.js

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
'use strict';
1111

1212
var fs = require('fs');
13-
var harmonize = require('harmonize');
1413
var optimist = require('optimist');
1514
var path = require('path');
1615

@@ -36,8 +35,6 @@ function _wrapDesc(desc) {
3635
}, ['']).join(indent);
3736
}
3837

39-
harmonize();
40-
4138
var argv = optimist
4239
.usage('Usage: $0 [--config=<pathToConfigFile>] [TestPathRegExp]')
4340
.options({

package.json

Lines changed: 17 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -4,32 +4,31 @@
44
"version": "0.4.13",
55
"main": "src/jest.js",
66
"dependencies": {
7-
"coffee-script": "^1.8.0",
8-
"cover": "~0.2.8",
9-
"diff": "~1.0.4",
10-
"graceful-fs": "^2.0.3",
11-
"harmonize": "1.4.2",
12-
"istanbul": "^0.3.2",
13-
"jasmine-only": "0.1.0",
14-
"jasmine-pit": "~2.0.0",
15-
"jsdom": "~0.10.3",
7+
"coffee-script": "jashkenas/coffeescript",
8+
"cover": "^0.2.9",
9+
"diff": "^1.4.0",
10+
"graceful-fs": "^3.0.8",
11+
"istanbul": "^0.3.15",
12+
"jasmine-only": "^0.1.1",
13+
"jasmine-pit": "^2.0.2",
14+
"jsdom": "^5.4.3",
15+
"lodash.template": "^3.6.1",
1616
"node-haste": "^1.2.8",
17-
"node-worker-pool": "~2.4.2",
18-
"optimist": "~0.6.0",
19-
"bluebird": "~2.9.30",
20-
"resolve": "~0.6.1",
21-
"through": "^2.3.4",
22-
"lodash.template": "^3.0.0"
17+
"node-worker-pool": "^2.4.4",
18+
"optimist": "^0.6.1",
19+
"bluebird": "^2.9.30",
20+
"resolve": "^1.1.6",
21+
"through": "^2.3.7"
2322
},
2423
"devDependencies": {
25-
"jshint": "~2.5.0",
26-
"node-find-files": "0.0.2"
24+
"jshint": "^2.8.0",
25+
"node-find-files": "0.0.4"
2726
},
2827
"bin": {
2928
"jest": "./bin/jest.js"
3029
},
3130
"engines": {
32-
"node": "0.8.x || 0.10.x"
31+
"node": ">= 1"
3332
},
3433
"repository": {
3534
"type": "git",

src/HasteModuleLoader/HasteModuleLoader.js

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -132,15 +132,6 @@ function Loader(config, environment, resourceMap) {
132132
}
133133

134134
if (_configUnmockListRegExpCache === null) {
135-
// Node must have been run with --harmony in order for WeakMap to be
136-
// available prior to version 0.12
137-
if (typeof WeakMap !== 'function') {
138-
throw new Error(
139-
'Please run node with the --harmony flag! jest requires WeakMap ' +
140-
'which is only available with the --harmony flag in node < v0.12'
141-
);
142-
}
143-
144135
_configUnmockListRegExpCache = new WeakMap();
145136
}
146137

@@ -860,14 +851,14 @@ Loader.prototype.requireModule = function(currPath, moduleName,
860851
modulePath = manualMockResource.path;
861852
}
862853

863-
if (!modulePath) {
864-
modulePath = this._moduleNameToPath(currPath, moduleName);
865-
}
866-
867854
if (NODE_CORE_MODULES[moduleName]) {
868855
return require(moduleName);
869856
}
870857

858+
if (!modulePath) {
859+
modulePath = this._moduleNameToPath(currPath, moduleName);
860+
}
861+
871862
// Always natively require the jasmine runner.
872863
if (modulePath.indexOf(VENDOR_PATH) === 0) {
873864
return require(modulePath);
@@ -1035,6 +1026,10 @@ Loader.prototype.resetModuleRegistry = function() {
10351026
this._environment.fakeTimers.runAllTicks();
10361027
}.bind(this),
10371028

1029+
runAllImmediates: function() {
1030+
this._environment.fakeTimers.runAllImmediates();
1031+
}.bind(this),
1032+
10381033
runAllTimers: function() {
10391034
this._environment.fakeTimers.runAllTimers();
10401035
}.bind(this),

src/HasteModuleLoader/__tests__/HasteModuleLoader-NODE_PATH-test.js

Lines changed: 4 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88
'use strict';
99

1010
jest.autoMockOff();
11+
jest.mock('../../JSDomEnvironment');
1112

1213
var path = require('path');
1314
var Promise = require('bluebird');
1415
var utils = require('../../lib/utils');
1516

1617
describe('HasteModuleLoader', function() {
1718
var HasteModuleLoader;
18-
var mockEnvironment;
19+
var JSDomEnvironment;
1920
var resourceMap;
2021

2122
var CONFIG = utils.normalizeConfig({
@@ -30,6 +31,7 @@ describe('HasteModuleLoader', function() {
3031
return buildLoader();
3132
});
3233
} else {
34+
var mockEnvironment = new JSDomEnvironment(CONFIG);
3335
return Promise.resolve(
3436
new HasteModuleLoader(CONFIG, mockEnvironment, resourceMap)
3537
);
@@ -39,16 +41,7 @@ describe('HasteModuleLoader', function() {
3941
function initHasteModuleLoader(nodePath) {
4042
process.env.NODE_PATH = nodePath;
4143
HasteModuleLoader = require('../HasteModuleLoader');
42-
mockEnvironment = {
43-
global: {
44-
console: {},
45-
mockClearTimers: jest.genMockFn()
46-
},
47-
runSourceText: jest.genMockFn().mockImplementation(function(codeStr) {
48-
/* jshint evil:true */
49-
return (new Function('return ' + codeStr))();
50-
})
51-
};
44+
JSDomEnvironment = require('../../JSDomEnvironment');
5245
}
5346

5447
pit('uses NODE_PATH to find modules', function() {

src/HasteModuleLoader/__tests__/HasteModuleLoader-genMockFromModule-test.js

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88
'use strict';
99

1010
jest.autoMockOff();
11+
jest.mock('../../JSDomEnvironment');
1112

1213
var path = require('path');
1314
var Promise = require('bluebird');
1415
var utils = require('../../lib/utils');
1516

1617
describe('nodeHasteModuleLoader', function() {
1718
var HasteModuleLoader;
18-
var mockEnvironment;
19+
var JSDomEnvironment;
1920
var resourceMap;
2021

2122
var CONFIG = utils.normalizeConfig({
@@ -30,6 +31,7 @@ describe('nodeHasteModuleLoader', function() {
3031
return buildLoader();
3132
});
3233
} else {
34+
var mockEnvironment = new JSDomEnvironment(CONFIG);
3335
return Promise.resolve(
3436
new HasteModuleLoader(CONFIG, mockEnvironment, resourceMap)
3537
);
@@ -38,17 +40,7 @@ describe('nodeHasteModuleLoader', function() {
3840

3941
beforeEach(function() {
4042
HasteModuleLoader = require('../HasteModuleLoader');
41-
42-
mockEnvironment = {
43-
global: {
44-
console: {},
45-
mockClearTimers: jest.genMockFn()
46-
},
47-
runSourceText: jest.genMockFn().mockImplementation(function(codeStr) {
48-
/* jshint evil:true */
49-
return (new Function('return ' + codeStr))();
50-
})
51-
};
43+
JSDomEnvironment = require('../../JSDomEnvironment');
5244
});
5345

5446
describe('genMockFromModule', function() {

src/HasteModuleLoader/__tests__/HasteModuleLoader-hasDependency-test.js

Lines changed: 3 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
'use strict';
99

1010
jest.autoMockOff();
11+
jest.mock('../../JSDomEnvironment');
1112

1213
describe('nodeHasteModuleLoader', function() {
1314
var HasteModuleLoader;
@@ -42,18 +43,10 @@ describe('nodeHasteModuleLoader', function() {
4243
}
4344

4445
beforeEach(function() {
46+
var JSDomEnvironment = require('../../JSDomEnvironment');
4547
HasteModuleLoader = require('../HasteModuleLoader');
4648

47-
mockEnvironment = {
48-
global: {
49-
console: {},
50-
mockClearTimers: jest.genMockFn()
51-
},
52-
runSourceText: jest.genMockFn().mockImplementation(function(codeStr) {
53-
/* jshint evil: true */
54-
return (new Function('return ' + codeStr))();
55-
})
56-
};
49+
mockEnvironment = new JSDomEnvironment(mockConfig);
5750
resources = {};
5851
});
5952

src/HasteModuleLoader/__tests__/HasteModuleLoader-requireMock-test.js

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88
'use strict';
99

1010
jest.autoMockOff();
11+
jest.mock('../../JSDomEnvironment');
1112

1213
var path = require('path');
1314
var Promise = require('bluebird');
1415
var utils = require('../../lib/utils');
1516

1617
describe('HasteModuleLoader', function() {
1718
var HasteModuleLoader;
18-
var mockEnvironment;
19+
var JSDomEnvironment;
1920
var resourceMap;
2021

2122
var CONFIG = utils.normalizeConfig({
@@ -30,6 +31,7 @@ describe('HasteModuleLoader', function() {
3031
return buildLoader();
3132
});
3233
} else {
34+
var mockEnvironment = new JSDomEnvironment(CONFIG);
3335
return Promise.resolve(
3436
new HasteModuleLoader(CONFIG, mockEnvironment, resourceMap)
3537
);
@@ -38,17 +40,7 @@ describe('HasteModuleLoader', function() {
3840

3941
beforeEach(function() {
4042
HasteModuleLoader = require('../HasteModuleLoader');
41-
42-
mockEnvironment = {
43-
global: {
44-
console: {},
45-
mockClearTimers: jest.genMockFn()
46-
},
47-
runSourceText: jest.genMockFn().mockImplementation(function(codeStr) {
48-
/* jshint evil:true */
49-
return (new Function('return ' + codeStr))();
50-
})
51-
};
43+
JSDomEnvironment = require('../../JSDomEnvironment');
5244
});
5345

5446
describe('requireMock', function() {

src/HasteModuleLoader/__tests__/HasteModuleLoader-requireModule-test.js

Lines changed: 4 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88
'use strict';
99

1010
jest.autoMockOff();
11+
jest.mock('../../JSDomEnvironment');
1112

1213
var path = require('path');
1314
var Promise = require('bluebird');
1415
var utils = require('../../lib/utils');
1516

1617
describe('HasteModuleLoader', function() {
1718
var HasteModuleLoader;
18-
var mockEnvironment;
19+
var JSDomEnvironment;
1920
var resourceMap;
2021

2122
var CONFIG = utils.normalizeConfig({
@@ -30,6 +31,7 @@ describe('HasteModuleLoader', function() {
3031
return buildLoader();
3132
});
3233
} else {
34+
var mockEnvironment = new JSDomEnvironment(CONFIG);
3335
return Promise.resolve(
3436
new HasteModuleLoader(CONFIG, mockEnvironment, resourceMap)
3537
);
@@ -38,18 +40,7 @@ describe('HasteModuleLoader', function() {
3840

3941
beforeEach(function() {
4042
HasteModuleLoader = require('../HasteModuleLoader');
41-
42-
mockEnvironment = {
43-
global: {
44-
console: {},
45-
mockClearTimers: jest.genMockFn(),
46-
JSON: JSON
47-
},
48-
runSourceText: jest.genMockFn().mockImplementation(function(codeStr) {
49-
/* jshint evil:true */
50-
return (new Function('return ' + codeStr))();
51-
})
52-
};
43+
JSDomEnvironment = require('../../JSDomEnvironment');
5344
});
5445

5546
describe('requireModule', function() {

src/HasteModuleLoader/__tests__/HasteModuleLoader-requireModuleOrMock-test.js

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,15 @@
88
'use strict';
99

1010
jest.autoMockOff();
11+
jest.mock('../../JSDomEnvironment');
1112

1213
var path = require('path');
1314
var Promise = require('bluebird');
1415
var utils = require('../../lib/utils');
1516

1617
describe('HasteModuleLoader', function() {
1718
var HasteModuleLoader;
18-
var mockEnvironment;
19+
var JSDomEnvironment;
1920
var resourceMap;
2021

2122
var CONFIG = utils.normalizeConfig({
@@ -30,6 +31,7 @@ describe('HasteModuleLoader', function() {
3031
return buildLoader();
3132
});
3233
} else {
34+
var mockEnvironment = new JSDomEnvironment(CONFIG);
3335
return Promise.resolve(
3436
new HasteModuleLoader(CONFIG, mockEnvironment, resourceMap)
3537
);
@@ -38,17 +40,7 @@ describe('HasteModuleLoader', function() {
3840

3941
beforeEach(function() {
4042
HasteModuleLoader = require('../HasteModuleLoader');
41-
42-
mockEnvironment = {
43-
global: {
44-
console: {},
45-
mockClearTimers: jest.genMockFn()
46-
},
47-
runSourceText: jest.genMockFn().mockImplementation(function(codeStr) {
48-
/* jshint evil:true */
49-
return (new Function('return ' + codeStr))();
50-
})
51-
};
43+
JSDomEnvironment = require('../../JSDomEnvironment');
5244
});
5345

5446
describe('requireModuleOrMock', function() {

0 commit comments

Comments
 (0)