Added node modules
This commit is contained in:
320
node_modules/mocha/bin/_mocha
generated
vendored
Executable file
320
node_modules/mocha/bin/_mocha
generated
vendored
Executable file
@@ -0,0 +1,320 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Module dependencies.
|
||||
*/
|
||||
|
||||
var program = require('commander')
|
||||
, exec = require('child_process').exec
|
||||
, path = require('path')
|
||||
, resolve = path.resolve
|
||||
, mocha = require('../')
|
||||
, utils = mocha.utils
|
||||
, reporters = mocha.reporters
|
||||
, interfaces = mocha.interfaces
|
||||
, Runner = mocha.Runner
|
||||
, Suite = mocha.Suite
|
||||
, vm = require('vm')
|
||||
, fs = require('fs')
|
||||
, join = path.join
|
||||
, cwd = process.cwd();
|
||||
|
||||
/**
|
||||
* Files.
|
||||
*/
|
||||
|
||||
var files = [];
|
||||
|
||||
/**
|
||||
* Images.
|
||||
*/
|
||||
|
||||
var images = {
|
||||
fail: __dirname + '/../images/error.png'
|
||||
, pass: __dirname + '/../images/ok.png'
|
||||
};
|
||||
|
||||
// options
|
||||
|
||||
program
|
||||
.version(mocha.version)
|
||||
.usage('[options] [files]')
|
||||
.option('-r, --require <name>', 'require the given module')
|
||||
.option('-R, --reporter <name>', 'specify the reporter to use', 'dot')
|
||||
.option('-u, --ui <name>', 'specify user-interface (bdd|tdd|exports)', 'bdd')
|
||||
.option('-g, --grep <pattern>', 'only run tests matching <pattern>')
|
||||
.option('-t, --timeout <ms>', 'set test-case timeout in milliseconds [2000]')
|
||||
.option('-s, --slow <ms>', '"slow" test threshold in milliseconds [75]', parseInt)
|
||||
.option('-w, --watch', 'watch files for changes')
|
||||
.option('-c, --colors', 'force enabling of colors')
|
||||
.option('-C, --no-colors', 'force disabling of colors')
|
||||
.option('-G, --growl', 'enable growl notification support')
|
||||
.option('-d, --debug', "enable node's debugger")
|
||||
.option('-b, --bail', "bail after first test failure")
|
||||
.option('--globals <names>', 'allow the given comma-delimited global [names]', list, [])
|
||||
.option('--ignore-leaks', 'ignore global variable leaks')
|
||||
.option('--interfaces', 'display available interfaces')
|
||||
.option('--reporters', 'display available reporters')
|
||||
|
||||
program.name = 'mocha';
|
||||
|
||||
// --reporters
|
||||
|
||||
program.on('reporters', function(){
|
||||
console.log();
|
||||
console.log(' dot - dot matrix');
|
||||
console.log(' doc - html documentation');
|
||||
console.log(' spec - hierarchical spec list');
|
||||
console.log(' json - single json object');
|
||||
console.log(' progress - progress bar');
|
||||
console.log(' list - spec-style listing');
|
||||
console.log(' tap - test-anything-protocol');
|
||||
console.log(' landing - unicode landing strip');
|
||||
console.log(' xunit - xunit reportert');
|
||||
console.log(' teamcity - teamcity ci support');
|
||||
console.log(' json-stream - newline delimited json events');
|
||||
console.log();
|
||||
process.exit();
|
||||
});
|
||||
|
||||
// --interfaces
|
||||
|
||||
program.on('interfaces', function(){
|
||||
console.log('');
|
||||
console.log(' bdd');
|
||||
console.log(' tdd');
|
||||
console.log(' qunit');
|
||||
console.log(' exports');
|
||||
console.log('');
|
||||
process.exit();
|
||||
});
|
||||
|
||||
// -r, --require
|
||||
|
||||
module.paths.push(cwd, join(cwd, 'node_modules'));
|
||||
|
||||
program.on('require', function(mod){
|
||||
var abs = path.existsSync(mod)
|
||||
|| path.existsSync(mod + '.js');
|
||||
|
||||
if (abs) mod = join(cwd, mod);
|
||||
require(mod);
|
||||
});
|
||||
|
||||
// mocha.opts support
|
||||
|
||||
try {
|
||||
var opts = fs.readFileSync('test/mocha.opts', 'utf8')
|
||||
.trim()
|
||||
.split(/\s+/);
|
||||
|
||||
process.argv = process.argv
|
||||
.slice(0, 2)
|
||||
.concat(opts.concat(process.argv.slice(2)));
|
||||
} catch (err) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
// parse args
|
||||
|
||||
program.parse(process.argv);
|
||||
|
||||
// infinite stack traces
|
||||
|
||||
Error.stackTraceLimit = Infinity; // TODO: config
|
||||
|
||||
// reporter
|
||||
|
||||
var suite = new Suite('')
|
||||
, Base = require('../lib/reporters/base')
|
||||
, Reporter = require('../lib/reporters/' + program.reporter)
|
||||
, ui = interfaces[program.ui](suite);
|
||||
|
||||
// --no-colors
|
||||
|
||||
if (!program.colors) Base.useColors = false;
|
||||
|
||||
// --colors
|
||||
|
||||
if (~process.argv.indexOf('--colors') ||
|
||||
~process.argv.indexOf('-c')) {
|
||||
Base.useColors = true;
|
||||
}
|
||||
|
||||
// --slow <ms>
|
||||
|
||||
if (program.slow) Base.slow = program.slow;
|
||||
|
||||
// --timeout
|
||||
|
||||
if (program.timeout) suite.timeout(program.timeout);
|
||||
|
||||
// --bail
|
||||
|
||||
suite.bail(program.bail);
|
||||
|
||||
// files
|
||||
|
||||
var files = program.args
|
||||
, re = /\.js$/;
|
||||
|
||||
// coffee-script support
|
||||
|
||||
try {
|
||||
require('coffee-script');
|
||||
re = /\.(js|coffee)$/;
|
||||
} catch (err) {
|
||||
// ignore
|
||||
}
|
||||
|
||||
// default files to test/*.{js,coffee}
|
||||
|
||||
if (!files.length) {
|
||||
files = fs.readdirSync('test').filter(function(path){
|
||||
return path.match(re);
|
||||
}).map(function(path){
|
||||
return join('test', path);
|
||||
});
|
||||
}
|
||||
|
||||
// resolve
|
||||
|
||||
files = files.map(function(path){
|
||||
return resolve(path);
|
||||
});
|
||||
|
||||
// --watch
|
||||
|
||||
if (program.watch) {
|
||||
console.log();
|
||||
hideCursor();
|
||||
process.on('SIGINT', function(){
|
||||
showCursor();
|
||||
console.log('\n');
|
||||
process.exit();
|
||||
});
|
||||
|
||||
var frames = [
|
||||
' \033[96m◜ \033[90mwatching\033[0m'
|
||||
, ' \033[96m◠ \033[90mwatching\033[0m'
|
||||
, ' \033[96m◝ \033[90mwatching\033[0m'
|
||||
, ' \033[96m◞ \033[90mwatching\033[0m'
|
||||
, ' \033[96m◡ \033[90mwatching\033[0m'
|
||||
, ' \033[96m◟ \033[90mwatching\033[0m'
|
||||
];
|
||||
|
||||
play(frames);
|
||||
|
||||
utils.watch(utils.files(cwd), function(){
|
||||
stop()
|
||||
suite = suite.clone();
|
||||
ui = interfaces[program.ui](suite);
|
||||
load(files, function(){
|
||||
run(suite, function(){
|
||||
play(frames);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// load
|
||||
|
||||
load(files, function(){
|
||||
run(suite, process.exit);
|
||||
});
|
||||
|
||||
// require test files before
|
||||
// running the root suite
|
||||
|
||||
function load(files, fn) {
|
||||
var pending = files.length;
|
||||
files.forEach(function(file){
|
||||
delete require.cache[file];
|
||||
suite.emit('pre-require', global, file);
|
||||
suite.emit('require', require(file), file);
|
||||
suite.emit('post-require', global, file);
|
||||
--pending || fn();
|
||||
});
|
||||
}
|
||||
|
||||
// run the given suite
|
||||
|
||||
function run(suite, fn) {
|
||||
suite.emit('run');
|
||||
var runner = new Runner(suite);
|
||||
var reporter = new Reporter(runner);
|
||||
runner.globals(program.globals);
|
||||
if (program.ignoreLeaks) runner.ignoreLeaks = true;
|
||||
if (program.grep) runner.grep(new RegExp(program.grep));
|
||||
if (program.growl) growl(runner, reporter);
|
||||
runner.run(fn);
|
||||
}
|
||||
|
||||
// enable growl notifications
|
||||
|
||||
function growl(runner, reporter) {
|
||||
var notify = require('growl');
|
||||
|
||||
runner.on('end', function(){
|
||||
var stats = reporter.stats;
|
||||
if (stats.failures) {
|
||||
var msg = stats.failures + ' of ' + runner.total + ' tests failed';
|
||||
notify(msg, { title: 'Failed', image: images.fail });
|
||||
} else {
|
||||
notify(stats.passes + ' tests passed in ' + stats.duration + 'ms', {
|
||||
title: 'Passed'
|
||||
, image: images.pass
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Parse list.
|
||||
*/
|
||||
|
||||
function list(str) {
|
||||
return str.split(/ *, */);
|
||||
}
|
||||
|
||||
/**
|
||||
* Hide the cursor.
|
||||
*/
|
||||
|
||||
function hideCursor(){
|
||||
process.stdout.write('\033[?25l');
|
||||
};
|
||||
|
||||
/**
|
||||
* Show the cursor.
|
||||
*/
|
||||
|
||||
function showCursor(){
|
||||
process.stdout.write('\033[?25h');
|
||||
};
|
||||
|
||||
/**
|
||||
* Stop play()ing.
|
||||
*/
|
||||
|
||||
function stop() {
|
||||
process.stdout.write('\033[2K');
|
||||
clearInterval(play.timer);
|
||||
}
|
||||
|
||||
/**
|
||||
* Play the given array of strings.
|
||||
*/
|
||||
|
||||
function play(arr, interval) {
|
||||
var len = arr.length
|
||||
, interval = interval || 100
|
||||
, i = 0;
|
||||
|
||||
play.timer = setInterval(function(){
|
||||
var str = arr[i++ % len];
|
||||
process.stdout.write('\r' + str);
|
||||
}, interval);
|
||||
}
|
||||
Reference in New Issue
Block a user