mirror of https://github.com/lukechilds/node.git
Browse Source
After the child is forked, these file descriptors will get dup2()'d to STDIN, STDIO, and STDERR. (API may be changed.)v0.7.4-release
Orlando Vazquez
15 years ago
committed by
Ryan Dahl
5 changed files with 207 additions and 41 deletions
@ -0,0 +1,11 @@ |
|||
sys = require('sys'); |
|||
|
|||
var regexIn = process.argv[2]; |
|||
var replacement = process.argv[3]; |
|||
var re = new RegExp(regexIn, 'g'); |
|||
var stdin = process.openStdin(); |
|||
|
|||
stdin.addListener("data", function (data) { |
|||
data = data.toString(); |
|||
process.stdout.write(data.replace(re, replacement)); |
|||
}); |
@ -0,0 +1,93 @@ |
|||
require("../common"); |
|||
|
|||
var assert = require('assert'); |
|||
var spawn = require('child_process').spawn; |
|||
var path = require('path'); |
|||
var fs = require('fs'); |
|||
var sys = require('sys'); |
|||
|
|||
function fixtPath(p) { |
|||
return path.join(fixturesDir, p); |
|||
} |
|||
|
|||
var expected = "hello world"; |
|||
|
|||
// Test the equivalent of:
|
|||
// $ /bin/echo "hello world" > hello.txt
|
|||
var helloPath = fixtPath("hello.txt"); |
|||
|
|||
function test1(next) { |
|||
puts("Test 1..."); |
|||
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"); |
|||
puts(' File was written.'); |
|||
next(test3); |
|||
}); |
|||
}); |
|||
}); |
|||
}); |
|||
} |
|||
|
|||
// Test the equivalent of:
|
|||
// $ node ../fixture/stdio-filter.js < hello.txt
|
|||
function test2(next) { |
|||
puts("Test 2..."); |
|||
fs.open(helloPath, 'r', undefined, function (err, fd) { |
|||
var child = spawn(process.argv[0] |
|||
, [fixtPath('stdio-filter.js'), 'o', 'a'] |
|||
, undefined, [fd, -1, -1]); |
|||
|
|||
assert.equal(child.stdin, null); |
|||
var actualData = ''; |
|||
child.stdout.addListener('data', function (data) { |
|||
actualData += data.toString(); |
|||
}); |
|||
child.addListener('exit', function (code) { |
|||
if (err) throw err; |
|||
assert.equal(actualData, "hella warld\n"); |
|||
puts(" File was filtered successfully"); |
|||
fs.close(fd, function () { |
|||
next(test3); |
|||
}); |
|||
}); |
|||
}); |
|||
} |
|||
|
|||
// Test the equivalent of:
|
|||
// $ /bin/echo "hello world" | ../stdio-filter.js a o
|
|||
function test3(next) { |
|||
puts("Test 3..."); |
|||
var filter = spawn(process.argv[0] |
|||
, [fixtPath('stdio-filter.js'), 'o', 'a']); |
|||
var echo = spawn('/bin/echo', [expected], undefined, [-1, filter.fds[0]]); |
|||
var actualData = ''; |
|||
filter.stdout.addListener('data', function(data) { |
|||
puts(" Got data --> " + data); |
|||
actualData += data; |
|||
}); |
|||
filter.addListener('exit', function(code) { |
|||
if (code) throw "Return code was " + code; |
|||
assert.equal(actualData, "hella warld\n"); |
|||
puts(" Talked to another process successfully"); |
|||
}); |
|||
echo.addListener('exit', function(code) { |
|||
if (code) throw "Return code was " + code; |
|||
filter.stdin.end(); |
|||
}); |
|||
} |
|||
|
|||
test1(test2); |
Loading…
Reference in new issue