@prantlf/faucet
Version:
Human-readable TAP reporter/formatter.
71 lines (59 loc) • 1.99 kB
JavaScript
const faucet = require('../')
const minimist = require('minimist')
const defined = require('defined')
const argv = minimist(process.argv.slice(2))
const tap = faucet({
verbose: defined(argv.v, argv.verbose, false),
width: defined(argv.w, argv.width, process.stdout.isTTY
? process.stdout.columns - 5
: 0
)
})
process.on('exit', code => {
if (code === 0 && tap.exitCode !== 0) {
process.exit(tap.exitCode)
}
})
process.stdout.on('error', () => {})
if (!process.stdin.isTTY || argv._[0] === '-') {
process.stdin.pipe(tap).pipe(process.stdout)
return
}
const { dirname, join } = require('path')
const tapeCmd = join(dirname(require.resolve('tape')), 'bin/tape')
const { spawn } = require('child_process')
const { existsSync, readdirSync, statSync } = require('fs')
const files = argv._.reduce((acc, file) => {
if (statSync(file).isDirectory()) {
return acc.concat(readdirSync(file).map(x => join(file, x)).filter(jsFile))
} else return acc.concat(file)
}, [])
if (files.length === 0 && existsSync('test')) {
files.push.apply(files, readdirSync('test').map(x => join('test', x)).filter(jsFile))
}
if (files.length === 0 && existsSync('tests')) {
files.push.apply(files, readdirSync('tests').map(x => join('tests', x)).filter(jsFile))
}
if (files.length === 0) {
console.error('usage: `faucet [-v|--verbose] [-w|--width=<number>] [FILES]`\n or `| faucet [-v|--verbose] [-w|--width=<number>]`\n')
console.error(
'No test files or stdin provided and no files in test/ or tests/' +
' directories found.'
)
process.exit(1)
}
const tape = spawn(tapeCmd, files)
tape.stderr.pipe(process.stderr)
tape.stdout.pipe(tap).pipe(process.stdout)
let tapeCode
tape.on('exit', code => tapeCode = code)
process.on('exit', code => {
if (code === 0 && tapeCode !== 0) {
console.error('# non-zero exit from the `tape` command')
process.exit(tapeCode)
}
})
function jsFile (x) {
return /\.js$/i.test(x)
}