|
|
@ -12,14 +12,18 @@ function Runner(opts) { |
|
|
|
EventEmitter.call(this); |
|
|
|
|
|
|
|
this.results = []; |
|
|
|
this.stats = {}; |
|
|
|
this.stats.failCount = 0; |
|
|
|
this.stats.testCount = 0; |
|
|
|
this.tests = {}; |
|
|
|
this.tests.concurrent = []; |
|
|
|
this.tests.serial = []; |
|
|
|
this.tests.before = []; |
|
|
|
this.tests.after = []; |
|
|
|
|
|
|
|
this.stats = { |
|
|
|
failCount: 0, |
|
|
|
testCount: 0 |
|
|
|
}; |
|
|
|
|
|
|
|
this.tests = { |
|
|
|
concurrent: [], |
|
|
|
serial: [], |
|
|
|
before: [], |
|
|
|
after: [] |
|
|
|
}; |
|
|
|
} |
|
|
|
|
|
|
|
util.inherits(Runner, EventEmitter); |
|
|
@ -44,29 +48,33 @@ Runner.prototype.addAfterHook = function (title, cb) { |
|
|
|
}; |
|
|
|
|
|
|
|
Runner.prototype.concurrent = function (tests) { |
|
|
|
// run all tests
|
|
|
|
tests = tests.map(function (test) { |
|
|
|
// in case of error, don't reject a promise
|
|
|
|
return test.run().catch(function () { |
|
|
|
return; |
|
|
|
}).then(function () { |
|
|
|
this._addTestResult(test); |
|
|
|
}.bind(this)); |
|
|
|
}, this); |
|
|
|
var self = this; |
|
|
|
|
|
|
|
return Promise.all(tests); |
|
|
|
// run all tests
|
|
|
|
return Promise.all(tests.map(function (test) { |
|
|
|
return test.run() |
|
|
|
.catch(function () { |
|
|
|
// in case of error, don't reject a promise
|
|
|
|
return; |
|
|
|
}) |
|
|
|
.then(function () { |
|
|
|
self._addTestResult(test); |
|
|
|
}); |
|
|
|
})); |
|
|
|
}; |
|
|
|
|
|
|
|
Runner.prototype.serial = function (tests) { |
|
|
|
var self = this; |
|
|
|
|
|
|
|
return Promise.resolve(tests).each(function (test) { |
|
|
|
return test.run() |
|
|
|
.catch(function () { |
|
|
|
return; |
|
|
|
}) |
|
|
|
.then(function () { |
|
|
|
this._addTestResult(test); |
|
|
|
}.bind(this)); |
|
|
|
}.bind(this)); |
|
|
|
self._addTestResult(test); |
|
|
|
}); |
|
|
|
}); |
|
|
|
}; |
|
|
|
|
|
|
|
Runner.prototype._addTestResult = function (test) { |
|
|
@ -84,32 +92,29 @@ Runner.prototype._addTestResult = function (test) { |
|
|
|
}; |
|
|
|
|
|
|
|
Runner.prototype.run = function () { |
|
|
|
var concurrent = this.tests.concurrent; |
|
|
|
var serial = this.tests.serial; |
|
|
|
var before = this.tests.before; |
|
|
|
var after = this.tests.after; |
|
|
|
|
|
|
|
var self = this; |
|
|
|
var tests = this.tests; |
|
|
|
var stats = this.stats; |
|
|
|
|
|
|
|
return this.serial(before) |
|
|
|
return this.serial(tests.before) |
|
|
|
.then(function () { |
|
|
|
if (self.stats.failCount > 0) { |
|
|
|
if (stats.failCount > 0) { |
|
|
|
return Promise.reject(); |
|
|
|
} |
|
|
|
}) |
|
|
|
.then(function () { |
|
|
|
return self.serial(serial); |
|
|
|
return self.serial(tests.serial); |
|
|
|
}) |
|
|
|
.then(function () { |
|
|
|
return self.concurrent(concurrent); |
|
|
|
return self.concurrent(tests.concurrent); |
|
|
|
}) |
|
|
|
.then(function () { |
|
|
|
return self.serial(after); |
|
|
|
return self.serial(tests.after); |
|
|
|
}) |
|
|
|
.catch(function () { |
|
|
|
return; |
|
|
|
}) |
|
|
|
.then(function () { |
|
|
|
self.stats.passCount = self.stats.testCount - self.stats.failCount; |
|
|
|
stats.passCount = stats.testCount - stats.failCount; |
|
|
|
}); |
|
|
|
}; |
|
|
|