'use strict'; var chalk = require('chalk'); var figures = require('figures'); var Squeak = require('squeak'); var Runner = require('./lib/runner'); var log = new Squeak({separator: ' '}); var runner = new Runner(); /** * Add log types */ log.type('success', { color: 'green', prefix: figures.tick }); log.type('error', { color: 'red', prefix: figures.cross }); /** * Handle test * * @param {Object} err * @param {String} title * @api private */ function test(err, title) { if (err) { log.error(title, chalk.red(err.message)); return; } log.success(title); } /** * Show stack for each failed test * * @param {Array} results * @api private */ 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(); }); } /** * Show summary and exit * * @param {Object} stats * @param {Array} results * @api private */ function exit(stats, results) { var word; if (stats.testCount > 0 ) { log.write(); } if (stats.failCount === 0) { word = stats.passCount === 1 ? 'test' : 'tests'; log.writelpad(chalk.green(stats.passCount, word, 'passed')); } else { word = stats.failCount === 1 ? 'test' : 'tests'; log.writelpad(chalk.red(stats.failCount, word, '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);