Skip to content

Commit ecc35b7

Browse files
committed
Halt on first error. Update $ERROR to conform to expected thrown errors.
1 parent 665bdef commit ecc35b7

File tree

6 files changed

+49
-15
lines changed

6 files changed

+49
-15
lines changed

lib/runners/console.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,15 +8,27 @@ var fs = require('fs');
88
var cp = require('child_process');
99
var counter = 0;
1010

11+
var test262Error = function() {
12+
function Test262Error(message) {
13+
if (message) this.message = message;
14+
}
15+
16+
Test262Error.prototype.name = "Test262Error";
17+
18+
Test262Error.prototype.toString = function () {
19+
return "Test262Error: " + this.message;
20+
};
21+
}.toString().slice(14, -1);
22+
1123
var doneFn = function $DONE(err) {
1224
if(err) $ERROR(err);
1325
$LOG('test262/done');
1426
}.toString()
1527

1628
var errorFn = function $ERROR(err) {
1729
if(typeof err === "object" && err !== null && "name" in err)
18-
$LOG("test262/error " + err.name + ": " + err.message)
19-
else $LOG("test262/error Error: " + err);
30+
throw err;
31+
else throw new Test262Error(err);
2032
}.toString()
2133

2234
var batchDoneFn = function $DONE(err) {
@@ -40,6 +52,7 @@ function ConsoleRunner(args) {
4052
if(args.batch) {
4153
// Done comes from the parent context
4254
this.deps = [
55+
test262Error,
4356
errorFn,
4457
this.logFn
4558
]
@@ -51,6 +64,7 @@ function ConsoleRunner(args) {
5164
}
5265
} else {
5366
this.deps = [
67+
test262Error,
5468
doneFn,
5569
errorFn,
5670
this.logFn

lib/runners/node-ip.js

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,14 @@ module.exports = NodeRunner;
66
var vm = require('vm');
77
var Runner = require('../runner');
88

9+
function Test262Error(message) {
10+
if (message) this.message = message;
11+
}
12+
13+
Test262Error.prototype.toString = function () {
14+
return this.message;
15+
};
16+
917
function NodeRunner() { Runner.apply(this, arguments); }
1018
NodeRunner.prototype = Object.create(Runner.prototype);
1119
NodeRunner.prototype.execute = function(test, cb) {
@@ -15,17 +23,21 @@ NodeRunner.prototype.execute = function(test, cb) {
1523

1624
var context = {
1725
$ERROR: function(err) {
18-
error = err;
26+
if(typeof err === "object" && err !== null && "name" in err)
27+
throw err;
28+
else throw new Test262Error(err);
1929
},
2030
$DONE: function(err) {
21-
if(err) context.$ERROR(err);
31+
error = err;
2232
result.doneCalled = true;
2333
},
2434
$LOG: function(log) {
2535
result.log.push(log);
2636
},
27-
process: process
37+
process: process,
38+
Test262Error: Test262Error
2839
}
40+
2941
try {
3042
vm.runInNewContext(contents, context, {displayErrors: false});
3143
} catch(e) {

lib/runners/node.js

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@ function NodeRunner(args) {
2121

2222
this._instance = cp.spawn(parts[0], parts.slice(1));
2323

24-
2524
var results = { log: [] };
2625

2726
_(this._instance.stdout).flatMap(function(data) {

lib/runners/nodehost.js

Lines changed: 15 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,29 @@
11
var vm = require('vm');
22

3+
function Test262Error(message) {
4+
if (message) this.message = message;
5+
}
6+
7+
Test262Error.prototype.toString = function () {
8+
return "Test262Error: " + this.message;
9+
};
10+
311
process.stdin.resume();
412
process.stdin.on('data', function(test) {
513
var result = { log: [] }
6-
var error;
714
var context = {
815
$ERROR: function(err) {
9-
error = err;
16+
if(typeof err === "object" && err !== null && "name" in err)
17+
throw err;
18+
else throw new Test262Error(err);
1019
},
11-
$DONE: function(err) {
12-
if(err) context.$ERROR(err);
20+
$DONE: function(error) {
1321
if(error) {
1422
if(typeof error === 'object') {
1523
if(error.hasOwnProperty('stack')) {
1624
console.log("test262/error " + error.stack);
1725
} else {
18-
console.log("test262/error " + (error.name || Test262Error) + ": " + error.message);
26+
console.log("test262/error " + (error.name || "Test262Error") + ": " + error.message);
1927
}
2028
} else {
2129
console.log('test262/error Error: ' + error);
@@ -26,7 +34,8 @@ process.stdin.on('data', function(test) {
2634
$LOG: function(log) {
2735
console.log(log);
2836
},
29-
process: process
37+
process: process,
38+
Test262Error: Test262Error
3039
}
3140

3241
try {

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "test262-harness",
33
"repository": "bterlson/test262-harness",
4-
"version": "1.5.1",
4+
"version": "1.5.2",
55
"description": "Node-based harness for test262",
66
"main": "index.js",
77
"bin": {

test/expected.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,8 @@ var all = [
77
{ file: 'test/collateral/bothStrict.js', strictMode: true, pass: true },
88
{ file: 'test/collateral/strict.js', strictMode: true, pass: true },
99
{ file: 'test/collateral/noStrict.js', strictMode: false, pass: true },
10-
{ file: 'test/collateral/error.js', strictMode: false, pass: false, errorMessage: 'failure message', errorName: 'Error' },
11-
{ file: 'test/collateral/error.js', strictMode: true, pass: false, errorMessage: 'failure message', errorName: 'Error' },
10+
{ file: 'test/collateral/error.js', strictMode: false, pass: false, errorMessage: 'failure message', errorName: 'Test262Error' },
11+
{ file: 'test/collateral/error.js', strictMode: true, pass: false, errorMessage: 'failure message', errorName: 'Test262Error' },
1212
{ file: 'test/collateral/thrownError.js', strictMode: false, pass: false, errorMessage: 'failure message', errorName: 'Error', topOfStack: "foo" },
1313
{ file: 'test/collateral/thrownError.js', strictMode: true, pass: false, errorMessage: 'failure message', errorName: 'Error', topOfStack: "foo" },
1414
]

0 commit comments

Comments
 (0)