mirror of https://github.com/lukechilds/node.git
Browse Source
Tests for child_process.spawn() use new API Test for deprecated child_process.spawn() APIv0.7.4-release
Bert Belder
15 years ago
committed by
Ryan Dahl
8 changed files with 168 additions and 22 deletions
@ -0,0 +1,51 @@ |
|||||
|
common = require("../common"); |
||||
|
assert = common.assert |
||||
|
spawn = require('child_process').spawn, |
||||
|
path = require('path'); |
||||
|
|
||||
|
var returns = 0; |
||||
|
|
||||
|
/* |
||||
|
Spawns 'pwd' with given options, then test |
||||
|
- whether the exit code equals forCode, |
||||
|
- optionally whether the stdout result (after removing traling whitespace) matches forData |
||||
|
*/ |
||||
|
function testCwd(options, forCode, forData) { |
||||
|
var data = ""; |
||||
|
|
||||
|
var child = spawn('pwd', [], options); |
||||
|
child.stdout.setEncoding('utf8'); |
||||
|
|
||||
|
child.stdout.addListener('data', function(chunk) { |
||||
|
data += chunk; |
||||
|
}); |
||||
|
|
||||
|
child.addListener('exit', function(code, signal) { |
||||
|
forData && assert.strictEqual(forData, data.replace(/[\s\r\n]+$/, '')) |
||||
|
assert.strictEqual(forCode, code); |
||||
|
returns--; |
||||
|
}); |
||||
|
|
||||
|
returns++; |
||||
|
} |
||||
|
|
||||
|
// Assume these exist, and 'pwd' gives us the right directory back
|
||||
|
testCwd( { cwd: '/bin' }, 0, '/bin' ); |
||||
|
testCwd( { cwd: '/dev' }, 0, '/dev' ); |
||||
|
testCwd( { cwd: '/' }, 0, '/' ); |
||||
|
|
||||
|
// Assume this doesn't exist, we expect exitcode=127
|
||||
|
testCwd( { cwd: 'does-not-exist' }, 127 ); |
||||
|
|
||||
|
// Spawn() shouldn't try to chdir() so this should just work
|
||||
|
testCwd( undefined, 0 ); |
||||
|
testCwd( { }, 0 ); |
||||
|
testCwd( { cwd: '' }, 0 ); |
||||
|
testCwd( { cwd: undefined }, 0 ); |
||||
|
testCwd( { cwd: null }, 0 ); |
||||
|
|
||||
|
// Check whether all tests actually returned
|
||||
|
assert.notEqual(0, returns); |
||||
|
process.addListener('exit', function () { |
||||
|
assert.equal(0, returns); |
||||
|
}); |
@ -0,0 +1,59 @@ |
|||||
|
var common = require("../common"); |
||||
|
var assert = common.assert; |
||||
|
var spawn = require('child_process').spawn; |
||||
|
var path = require('path'); |
||||
|
var fs = require('fs'); |
||||
|
var exits = 0; |
||||
|
|
||||
|
// Test `env` parameter for child_process.spawn(path, args, env, customFds) deprecated api
|
||||
|
(function() { |
||||
|
var response = ""; |
||||
|
var child = spawn('/usr/bin/env', [], {'HELLO' : 'WORLD'}); |
||||
|
|
||||
|
child.stdout.setEncoding('utf8'); |
||||
|
|
||||
|
child.stdout.addListener("data", function (chunk) { |
||||
|
response += chunk; |
||||
|
}); |
||||
|
|
||||
|
process.addListener('exit', function () { |
||||
|
assert.ok(response.indexOf('HELLO=WORLD') >= 0); |
||||
|
exits++; |
||||
|
}); |
||||
|
})(); |
||||
|
|
||||
|
// Test `customFds` parameter for child_process.spawn(path, args, env, customFds) deprecated api
|
||||
|
(function() { |
||||
|
var expected = "hello world"; |
||||
|
var helloPath = path.join(common.fixturesDir, "hello.txt"); |
||||
|
|
||||
|
fs.open(helloPath, 'w', 400, function (err, fd) { |
||||
|
if (err) throw err; |
||||
|
|
||||
|
var child = spawn('/bin/echo', [expected], undefined, [-1, fd]); |
||||
|
|
||||
|
assert.notEqual(child.stdin, null); |
||||
|
assert.equal(child.stdout, null); |
||||
|
assert.notEqual(child.stderr, null); |
||||
|
|
||||
|
child.addListener('exit', function (err) { |
||||
|
if (err) throw err; |
||||
|
|
||||
|
fs.close(fd, function (error) { |
||||
|
if (error) throw error; |
||||
|
|
||||
|
fs.readFile(helloPath, function (err, data) { |
||||
|
if (err) throw err; |
||||
|
|
||||
|
assert.equal(data.toString(), expected + "\n"); |
||||
|
exits++; |
||||
|
}); |
||||
|
}); |
||||
|
}); |
||||
|
}); |
||||
|
})(); |
||||
|
|
||||
|
// Check if all child processes exited
|
||||
|
process.addListener('exit', function () { |
||||
|
assert.equal(2, exits); |
||||
|
}); |
Loading…
Reference in new issue