blob: 0fb0b25617532dcb9c6a90ecfb569821fd701fd7 [file] [log] [blame]
var EventEmitter = require('events').EventEmitter,
assert = require('assert'),
tests = {};
module.exports = test;
test.run = run;
// ## Test helpers
function test(msg, handler) {
tests[msg] = handler;
}
function run() {
var specs = Object.keys(tests),
specsRemaining = specs.length;
specs.forEach(function(spec) {
var handler = tests[spec];
// grab the set of asserts for this spec
var shoulds = handler(),
keys = Object.keys(shoulds),
remaining = keys.length;
keys.forEach(function(should) {
var em = new EventEmitter(),
to = setTimeout(function() {
assert.fail('never ended');
}, 5000);
em
.on('error', function assertFail(err) { assert.fail(err) })
.on('end', function assertOk() {
clearTimeout(to);
shoulds[should].status = true;
// till we get to 0
if(!(--remaining)) {
console.log([
'',
'» ' + spec,
keys.map(function(k) { return ' » ' + k; }).join('\n'),
'',
' Total: ' + keys.length,
' Failed: ' + keys.map(function(item) { return shoulds[should].status; }).filter(function(status) { return !status; }).length,
''
].join('\n'));
if(!(--specsRemaining)) {
console.log('All done');
}
}
});
shoulds[should](em);
});
});
}