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// Flags: --no-warnings 22'use strict'; 23const common = require('../common'); 24const assert = require('assert'); 25const { fork } = require('child_process'); 26const args = ['foo', 'bar']; 27const fixtures = require('../common/fixtures'); 28const debug = require('util').debuglog('test'); 29 30const n = fork(fixtures.path('child-process-spawn-node.js'), args); 31 32assert.strictEqual(n.channel, n._channel); 33assert.deepStrictEqual(args, ['foo', 'bar']); 34 35n.on('message', (m) => { 36 debug('PARENT got message:', m); 37 assert.ok(m.foo); 38}); 39 40// https://github.com/joyent/node/issues/2355 - JSON.stringify(undefined) 41// returns "undefined" but JSON.parse() cannot parse that... 42assert.throws(() => n.send(undefined), { 43 name: 'TypeError', 44 message: 'The "message" argument must be specified', 45 code: 'ERR_MISSING_ARGS' 46}); 47assert.throws(() => n.send(), { 48 name: 'TypeError', 49 message: 'The "message" argument must be specified', 50 code: 'ERR_MISSING_ARGS' 51}); 52 53assert.throws(() => n.send(Symbol()), { 54 name: 'TypeError', 55 message: 'The "message" argument must be one of type string,' + 56 ' object, number, or boolean. Received type symbol (Symbol())', 57 code: 'ERR_INVALID_ARG_TYPE' 58}); 59n.send({ hello: 'world' }); 60 61n.on('exit', common.mustCall((c) => { 62 assert.strictEqual(c, 0); 63})); 64