/*! * Nodeunit * Copyright (c) 2010 Caolan McMahon * MIT Licensed */ /** * Module dependencies */ var async = require('../deps/async'), types = require('./types'), utils = require('./utils'), core = require('./core'), reporters = require('./reporters'), assert = require('./assert'), path = require('path'), events = require('events'); /** * Export sub-modules. */ exports.types = types; exports.utils = utils; exports.reporters = reporters; exports.assert = assert; // backwards compatibility exports.testrunner = { run: function () { console.log( 'WARNING: nodeunit.testrunner is going to be deprecated, please ' + 'use nodeunit.reporters.default instead!' ); return reporters['default'].run.apply(this, arguments); } }; /** * Export all core functions */ for (var k in core) { exports[k] = core[k]; }; /** * Load modules from paths array and run all exported tests in series. If a path * is a directory, load all supported file types inside it as modules. This only * reads 1 level deep in the directory and does not recurse through * sub-directories. * * @param {Array} paths * @param {Object} opt * @api public */ exports.runFiles = function (paths, opt) { var all_assertions = []; var options = types.options(opt); var start = new Date().getTime(); if (!paths.length) { return options.done(types.assertionList(all_assertions)); } utils.modulePaths(paths, function (err, files) { if (err) throw err; async.concatSeries(files, function (file, cb) { var name = path.basename(file); exports.runModule(name, require(file), options, cb); }, function (err, all_assertions) { var end = new Date().getTime(); exports.done() options.done(types.assertionList(all_assertions, end - start)); }); }); }; /* Export all prototypes from events.EventEmitter */ var label; for (label in events.EventEmitter.prototype) { exports[label] = events.EventEmitter.prototype[label]; } /* Emit event 'complete' on completion of a test suite. */ exports.complete = function(name, assertions) { exports.emit('complete', name, assertions); }; /* Emit event 'complete' on completion of all tests. */ exports.done = function() { exports.emit('done'); }; module.exports = exports;