/*! * Nodeunit * Copyright (c) 2010 Caolan McMahon * MIT Licensed */ /** * Module dependencies */ var nodeunit = require('../nodeunit'), utils = require('../utils'), fs = require('fs'), track = require('../track'), path = require('path'), AssertionError = require('../assert').AssertionError; /** * Reporter info string */ exports.info = "Reporter for eclipse plugin"; /** * Run all tests within each module, reporting the results to the command-line. * * @param {Array} files * @api public */ exports.run = function (files, options, callback) { var start = new Date().getTime(); var paths = files.map(function (p) { if (p.indexOf('/') === 0) { return p; } return path.resolve(p); }); var tracker = track.createTracker(function (tracker) { if (tracker.unfinished()) { console.log(''); console.log('FAILURES: Undone tests (or their setups/teardowns): '); var names = tracker.names(); for (var i = 0; i < names.length; i += 1) { console.log('- ' + names[i]); } console.log(''); console.log('To fix this, make sure all tests call test.done()'); process.reallyExit(tracker.unfinished()); } }); nodeunit.runFiles(paths, { testspec: undefined, moduleStart: function (name) { console.log('\n' + name); }, testDone: function (name, assertions) { tracker.remove(name); if (!assertions.failures()) { console.log('✔ ' + name); } else { console.log('✖ ' + name + '\n'); assertions.forEach(function (a) { if (a.failed()) { a = utils.betterErrors(a); if (a.error instanceof AssertionError && a.message) { console.log( 'Assertion Message: ' + a.message ); } console.log(a.error.stack + '\n'); } }); } }, done: function (assertions, end) { var end = end || new Date().getTime(); var duration = end - start; if (assertions.failures()) { console.log( '\n' + 'FAILURES: ' + assertions.failures() + '/' + assertions.length + ' assertions failed (' + assertions.duration + 'ms)' ); } else { console.log( '\n' + 'OK: ' + assertions.length + ' assertions (' + assertions.duration + 'ms)' ); } if (callback) callback(assertions.failures() ? new Error('We have got test failures.') : undefined); }, testStart: function (name) { tracker.put(name); } }); };