var tap = require('tap') var pz = require('../promzard.js') var spawn = require('child_process').spawn tap.test('run the example', function (t) { var example = require.resolve('../example/index.js') var node = process.execPath var expect = { "name": "example", "version": "0.0.0", "description": "testing description", "main": "test-entry.js", "directories": { "example": "example", "test": "test" }, "dependencies": {}, "devDependencies": { "tap": "~0.2.5" }, "scripts": { "test": "tap test/*.js" }, "repository": { "type": "git", "url": "git://github.com/substack/example.git" }, "homepage": "https://github.com/substack/example", "keywords": [ "fugazi", "function", "waiting", "room" ], "author": { "name": "James Halliday", "email": "mail@substack.net", "url": "http://substack.net" }, "license": "MIT", "engine": { "node": ">=0.6" } } console.error('%s %s', node, example) var c = spawn(node, [example], { customFds: [-1,-1,-1] }) var output = '' c.stdout.on('data', function (d) { output += d respond() }) var actual = '' c.stderr.on('data', function (d) { actual += d }) function respond () { console.error('respond', output) if (output.match(/description: $/)) { c.stdin.write('testing description\n') return } if (output.match(/entry point: \(index\.js\) $/)) { c.stdin.write('test-entry.js\n') return } if (output.match(/keywords: $/)) { c.stdin.write('fugazi function waiting room\n') // "read" module is weird on node >= 0.10 when not a TTY // requires explicit ending for reasons. // could dig in, but really just wanna make tests pass, whatever. c.stdin.end() return } } c.on('exit', function () { console.error('exit event') }) c.on('close', function () { console.error('actual', actual) actual = JSON.parse(actual) t.deepEqual(actual, expect) t.end() }) })