blob: 8f7034c44e86aecfdc1771e17b7336de486441b7 [file] [log] [blame]
/**
* Module dependencies
*/
var nodeunit = require('../nodeunit'),
path = require('path'),
assert = require('tap').assert,
TapProducer = require('tap').Producer,
fs = require('fs');
/**
* Reporter info string
*/
exports.info = "TAP output";
/**
* Run all tests within each module, reporting the results to the command-line.
*
* @param {Array} files
* @api public
*/
exports.run = function (files, options, callback) {
if (!options) {
// load default options
var content = fs.readFileSync(
__dirname + '/../../bin/nodeunit.json', 'utf8'
);
options = JSON.parse(content);
}
var paths = files.map(function (p) {
return path.resolve(p);
});
var output = new TapProducer();
output.pipe(process.stdout);
nodeunit.runFiles(paths, {
testStart: function (name) {
output.write(name.toString());
},
testDone: function (name, assertions) {
assertions.forEach(function (e) {
var extra = {};
if (e.error) {
extra.error = {
name: e.error.name,
message: e.error.message,
stack: e.error.stack.split(/\n/).filter(function (line) {
// exclude line of "types.js"
return ! RegExp(/types.js:83:39/).test(line);
}).join('\n')
};
extra.wanted = e.error.expected;
extra.found = e.error.actual;
}
output.write(assert(e.passed(), e.message, extra));
});
},
done: function (assertions) {
output.end();
if (callback) callback(assertions.failures() ? new Error('We have got test failures.') : undefined);
}
});
};