exam
Version:
Clustered JavaScript test runner with builtin assertions.
71 lines (59 loc) • 1.87 kB
JavaScript
/*
Usage:
exam-cover [EXAM_ARGS] [-- ISTANBUL_ARGS]
Description:
Run exam tests using the istanbul cover command.
In addition to exam options, exam-cover supports arguments for
checking coverage after the test suite has been instrumented
and executed:
--statements <minimum> Requires at least <minimum> statement coverage
--branches <minimum> Requires at least <minimum> branch coverage
--functions <minimum> Requires at least <minimum> function coverage
--lines <minimum> Requires at least <minimum> line coverage
*/
var spawn = require('child_process').spawn
var examDir = __dirname
var examCli = examDir + '/exam.js'
var istanbulCli = require.resolve('istanbul/lib/cli.js')
var args = process.argv
var dashes = args.indexOf('--') + 1
args.splice(0, 2, 'cover', examCli, '--')
if (dashes) {
args.splice(dashes, 1)
var istanbulArgs = args.splice(dashes, args.length - dashes)
istanbulArgs.splice(0, 0, 2, 0)
args.splice.apply(args, istanbulArgs)
}
var coverArgs = []
var checkCoverageArgs = ['check-coverage']
// Iterate over the arguments, removing minimum coverage requirement options
// and saving them for the check-coverage command.
for (var i = 0, l = args.length; i < l; i++) {
var arg = args[i]
switch (arg) {
case '--statements':
case '--branches':
case '--functions':
case '--lines':
checkCoverageArgs.push(arg, args[++i] || 0)
break
default:
coverArgs.push(arg)
break
}
}
var cover = module.exports = spawn(istanbulCli, coverArgs, {
stdio: 'inherit'
})
cover.on('exit', function (coverCode) {
if (checkCoverageArgs.length < 2) {
return process.exit(coverCode)
}
var check = spawn(istanbulCli, checkCoverageArgs, {
stdio: 'inherit'
})
check.on('exit', function (checkCode) {
process.exit(checkCode || coverCode)
})
})