UNPKG

faucet

Version:

human-readable TAP summarizer

74 lines (62 loc) 1.98 kB
#!/usr/bin/env node 'use strict'; var faucet = require('../'); var minimist = require('minimist'); var defined = require('defined'); var which = require('npm-which'); var tapeCmd = which.sync('tape', { cwd: process.cwd() }); var spawn = require('child_process').spawn; var fs = require('fs'); var path = require('path'); var regexTester = require('safe-regex-test'); var jsFile = regexTester(/\.js$/i); var argv = minimist(process.argv.slice(2)); var tap = faucet({ width: defined(argv.w, argv.width, process.stdout.isTTY ? process.stdout.columns - 5 : 0) }); process.on('exit', function (code) { if (code === 0 && tap.exitCode !== 0) { process.exit(tap.exitCode); } }); process.stdout.on('error', function () {}); if (!process.stdin.isTTY || argv._[0] === '-') { process.stdin.pipe(tap).pipe(process.stdout); return; } var files = argv._.reduce(function (acc, file) { if (fs.statSync(file).isDirectory()) { return acc.concat(fs.readdirSync(file).map(function (x) { return path.join(file, x); }).filter(jsFile)); } return acc.concat(file); }, []); if (files.length === 0 && fs.existsSync('test')) { files.push.apply(files, fs.readdirSync('test').map(function (x) { return path.join('test', x); }).filter(jsFile)); } if (files.length === 0 && fs.existsSync('tests')) { files.push.apply(files, fs.readdirSync('tests').map(function (x) { return path.join('tests', x); }).filter(jsFile)); } if (files.length === 0) { console.error('usage: `faucet [FILES]` or `| faucet`\n'); console.error('No test files or stdin provided and no files in test/ or tests/ directories found.'); process.exit(1); } var tape = spawn(tapeCmd, files); tape.stderr.pipe(process.stderr); tape.stdout.pipe(tap).pipe(process.stdout); var tapeCode; tape.on('exit', function (code) { tapeCode = code; }); process.on('exit', function (code) { if (code === 0 && tapeCode !== 0) { console.error('# non-zero exit from the `tape` command'); process.exit(tapeCode); } });