| |
| 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); |
| }); |
| }); |
| } |