test: split test in parallel/sequential
[platform/upstream/nodejs.git] / test / parallel / test-child-process-stdin.js
1 // Copyright Joyent, Inc. and other Node contributors.
2 //
3 // Permission is hereby granted, free of charge, to any person obtaining a
4 // copy of this software and associated documentation files (the
5 // "Software"), to deal in the Software without restriction, including
6 // without limitation the rights to use, copy, modify, merge, publish,
7 // distribute, sublicense, and/or sell copies of the Software, and to permit
8 // persons to whom the Software is furnished to do so, subject to the
9 // following conditions:
10 //
11 // The above copyright notice and this permission notice shall be included
12 // in all copies or substantial portions of the Software.
13 //
14 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
15 // OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
17 // NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
18 // DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
19 // OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
20 // USE OR OTHER DEALINGS IN THE SOFTWARE.
21
22 var common = require('../common');
23 var assert = require('assert');
24
25 var spawn = require('child_process').spawn;
26 var is_windows = process.platform === 'win32';
27
28 var cat = spawn(is_windows ? 'more' : 'cat');
29 cat.stdin.write('hello');
30 cat.stdin.write(' ');
31 cat.stdin.write('world');
32
33 assert.ok(cat.stdin.writable);
34 assert.ok(!cat.stdin.readable);
35
36 cat.stdin.end();
37
38 var response = '';
39 var exitStatus = -1;
40 var closed = false;
41
42 var gotStdoutEOF = false;
43
44 cat.stdout.setEncoding('utf8');
45 cat.stdout.on('data', function(chunk) {
46   console.log('stdout: ' + chunk);
47   response += chunk;
48 });
49
50 cat.stdout.on('end', function() {
51   gotStdoutEOF = true;
52 });
53
54
55 var gotStderrEOF = false;
56
57 cat.stderr.on('data', function(chunk) {
58   // shouldn't get any stderr output
59   assert.ok(false);
60 });
61
62 cat.stderr.on('end', function(chunk) {
63   gotStderrEOF = true;
64 });
65
66
67 cat.on('exit', function(status) {
68   console.log('exit event');
69   exitStatus = status;
70 });
71
72 cat.on('close', function () {
73   closed = true;
74   if (is_windows) {
75     assert.equal('hello world\r\n', response);
76   } else {
77     assert.equal('hello world', response);
78   }
79 });
80
81 process.on('exit', function() {
82   assert.equal(0, exitStatus);
83   assert(closed);
84   if (is_windows) {
85     assert.equal('hello world\r\n', response);
86   } else {
87     assert.equal('hello world', response);
88   }
89 });