UNPKG

callback

Version:

Expressive, terse, functions for aynchronous and callback functions

93 lines (74 loc) 2.08 kB
var colors = require('colors') , fileToTest = process.argv.length > 2 ? process.argv[2] : undefined if(!fileToTest) { console.log('File must be specified!'.red) console.log('node outcomes.js <file.js> [-p: pin outcome]') process.exit(1) } var fs = require('fs') , path = require('path') , buf = [] , spawn = require('child_process').spawn , child = spawn('node', [ fileToTest ]) //time for Commander!!! , pin = process.argv.length > 3 && process.argv[3] === '-p' , quiet = process.argv.length > 3 && process.argv[3] === '-q' child.stderr.on('data', function(data){ buf.push(data) if(!quiet) { process.stderr.write(data) } }) child.stdout.on('data', function(data){ buf.push(data) if(!quiet) { process.stdout.write(data) } }) /* function write(data) { process.stdout.write(data) buf.push(data) child.stdin.write(data) } function writeLine(data) { write(data + '\n') } */ var passed = false process.on('exit', function(){ if(!passed) process.exit(1) }) child.on('exit', function (code) { var actual = buf.join('') , adjFile = fileToTest.replace(/\\/g, '/') , dir = path.dirname(adjFile) , file = path.basename(adjFile, '.js') + '.txt' , fPath = path.join(dir, file) if(pin) { pinOutcome(fPath, actual) } if(!testOutcome(fPath, actual)) { } }) function pinOutcome(file, actual) { fs.writeFileSync(file, actual) console.log('pinned'.yellow, fileToTest, 'outcome to'.yellow, file) } function testOutcome(file, actual) { var outcome = fs.readFileSync(file).toString() , name = path.basename(file, '.txt') passed = (actual === outcome) if(passed) { if(!quiet) { console.log('----------'.underline) } console.log(name, 'passed'.green) } else { console.log(name, 'failed!'.red) console.log('Expected>>'.red + outcome + '<<'.red) console.log('Actual >>'.red + actual + '<<'.red) } if(!quiet) { console.log('----------'.underline) } return passed }