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