|
|
|
'use strict';
|
|
|
|
var chalk = require('chalk');
|
|
|
|
var figures = require('figures');
|
|
|
|
var Squeak = require('squeak');
|
|
|
|
var plur = require('plur');
|
|
|
|
var Runner = require('./lib/runner');
|
|
|
|
var log = new Squeak({separator: ' '});
|
|
|
|
var runner = new Runner();
|
|
|
|
|
|
|
|
log.type('success', {
|
|
|
|
color: 'green',
|
|
|
|
prefix: figures.tick
|
|
|
|
});
|
|
|
|
|
|
|
|
log.type('error', {
|
|
|
|
color: 'red',
|
|
|
|
prefix: figures.cross
|
|
|
|
});
|
|
|
|
|
|
|
|
function test(err, title) {
|
|
|
|
if (err) {
|
|
|
|
log.error(title, chalk.red(err.message));
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
log.success(title);
|
|
|
|
}
|
|
|
|
|
|
|
|
function stack(results) {
|
|
|
|
var i = 0;
|
|
|
|
|
|
|
|
results.forEach(function (result) {
|
|
|
|
if (!result.error) {
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
i++;
|
|
|
|
|
|
|
|
log.writelpad(chalk.red(i + '.', result.title));
|
|
|
|
log.writelpad(chalk.red(result.error.stack));
|
|
|
|
log.write();
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
|
|
|
function exit(stats, results) {
|
|
|
|
if (stats.testCount > 0) {
|
|
|
|
log.write();
|
|
|
|
}
|
|
|
|
|
|
|
|
if (stats.failCount === 0) {
|
|
|
|
log.writelpad(chalk.green(stats.passCount, plur('test', stats.passCount), 'passed'));
|
|
|
|
} else {
|
|
|
|
log.writelpad(chalk.red(stats.failCount, plur('test', stats.failCount), 'failed'));
|
|
|
|
}
|
|
|
|
|
|
|
|
log.write();
|
|
|
|
|
|
|
|
if (stats.failCount > 0) {
|
|
|
|
stack(results);
|
|
|
|
}
|
|
|
|
|
|
|
|
process.exit(stats.failCount > 0 ? 1 : 0);
|
|
|
|
}
|
|
|
|
|
|
|
|
setImmediate(function () {
|
|
|
|
runner.on('test', test);
|
|
|
|
runner.run(exit);
|
|
|
|
});
|
|
|
|
|
|
|
|
module.exports = runner.addTest.bind(runner);
|
|
|
|
module.exports.serial = runner.addSerialTest.bind(runner);
|