var assert = require('assert'), fs = require('fs'), path = require('path'), nodeunit = require('../lib/nodeunit'); var setup = function (fn) { return function (test) { process.chdir(__dirname); var env = { mock_module1: require(__dirname + '/fixtures/mock_module1'), mock_module2: require(__dirname + '/fixtures/mock_module2'), mock_module3: require(__dirname + '/fixtures/dir/mock_module3'), mock_module4: require(__dirname + '/fixtures/dir/mock_module4') }; fn.call(env, test); }; }; exports.testRunFiles = setup(function (test) { test.expect(28); var runModule_copy = nodeunit.runModule; var runModule_calls = []; var modules = []; var opts = { moduleStart: function () { return 'moduleStart'; }, testDone: function () { return 'testDone'; }, testReady: function () { return 'testReady'; }, testStart: function () { return 'testStart'; }, log: function () { return 'log'; }, done: function (assertions) { test.equals(assertions.failures(), 0, 'failures'); test.equals(assertions.length, 4, 'length'); test.ok(typeof assertions.duration === "number"); var called_with = function (name) { return runModule_calls.some(function (m) { return m.name === name; }); }; test.ok(called_with('mock_module1'), 'mock_module1 ran'); test.ok(called_with('mock_module2'), 'mock_module2 ran'); test.ok(called_with('mock_module3'), 'mock_module3 ran'); test.ok(called_with('mock_module4'), 'mock_module4 ran'); test.equals(runModule_calls.length, 4); nodeunit.runModule = runModule_copy; test.done(); } }; nodeunit.runModule = function (name, mod, options, callback) { test.equals(options.testDone, opts.testDone); test.equals(options.testReady, opts.testReady); test.equals(options.testStart, opts.testStart); test.equals(options.log, opts.log); test.ok(typeof name === "string"); runModule_calls.push(mod); var m = [{failed: function () { return false; }}]; modules.push(m); callback(null, m); }; nodeunit.runFiles( [__dirname + '/fixtures/mock_module1.js', __dirname + '/fixtures/mock_module2.js', __dirname + '/fixtures/dir'], opts ); }); exports.testRunFilesEmpty = function (test) { test.expect(3); nodeunit.runFiles([], { moduleStart: function () { test.ok(false, 'should not be called'); }, testDone: function () { test.ok(false, 'should not be called'); }, testReady: function () { test.ok(false, 'should not be called'); }, testStart: function () { test.ok(false, 'should not be called'); }, log: function () { test.ok(false, 'should not be called'); }, done: function (assertions) { test.equals(assertions.failures(), 0, 'failures'); test.equals(assertions.length, 0, 'length'); test.ok(typeof assertions.duration === "number"); test.done(); } }); }; exports.testEmptyDir = function (test) { var dir2 = __dirname + '/fixtures/dir2'; // git doesn't like empty directories, so we have to create one path.exists(dir2, function (exists) { if (!exists) { fs.mkdirSync(dir2, 0777); } // runFiles on empty directory: nodeunit.runFiles([dir2], { moduleStart: function () { test.ok(false, 'should not be called'); }, testDone: function () { test.ok(false, 'should not be called'); }, testReady: function () { test.ok(false, 'should not be called'); }, testStart: function () { test.ok(false, 'should not be called'); }, log: function () { test.ok(false, 'should not be called'); }, done: function (assertions) { test.equals(assertions.failures(), 0, 'failures'); test.equals(assertions.length, 0, 'length'); test.ok(typeof assertions.duration === "number"); test.done(); } }); }); }; var CoffeeScript; try { CoffeeScript = require('coffee-script'); if (CoffeeScript.register != null) { CoffeeScript.register(); } } catch (e) { } if (CoffeeScript) { exports.testCoffeeScript = function (test) { process.chdir(__dirname); var env = { mock_coffee_module: require(__dirname + '/fixtures/coffee/mock_coffee_module') }; test.expect(10); var runModule_copy = nodeunit.runModule; var runModule_calls = []; var modules = []; var opts = { moduleStart: function () { return 'moduleStart'; }, testDone: function () { return 'testDone'; }, testReady: function () { return 'testReady'; }, testStart: function () { return 'testStart'; }, log: function () { return 'log'; }, done: function (assertions) { test.equals(assertions.failures(), 0, 'failures'); test.equals(assertions.length, 1, 'length'); test.ok(typeof assertions.duration === "number"); var called_with = function (name) { return runModule_calls.some(function (m) { return m.name === name; }); }; test.ok( called_with('mock_coffee_15'), 'mock_coffee_module ran' ); test.equals(runModule_calls.length, 1); nodeunit.runModule = runModule_copy; test.done(); } }; nodeunit.runModule = function (name, mod, options, callback) { test.equals(options.testDone, opts.testDone); test.equals(options.testReady, opts.testReady); test.equals(options.testStart, opts.testStart); test.equals(options.log, opts.log); test.ok(typeof name === "string"); runModule_calls.push(mod); var m = [{failed: function () { return false; }}]; modules.push(m); callback(null, m); }; nodeunit.runFiles( [__dirname + '/fixtures/coffee/mock_coffee_module.coffee'], opts ); }; }