'use strict'; const common = require('../common'); const assert = require('assert'); const path = require('path'); const child_process = require('child_process'); var nodeBinary = process.argv[0]; var preloadOption = function(preloads) { var option = ''; preloads.forEach(function(preload, index) { option += '-r ' + preload + ' '; }); return option; }; var fixture = function(name) { return path.join(__dirname, '../fixtures/' + name); }; var fixtureA = fixture('printA.js'); var fixtureB = fixture('printB.js'); var fixtureC = fixture('printC.js'); const fixtureD = fixture('define-global.js'); var fixtureThrows = fixture('throws_error4.js'); // test preloading a single module works child_process.exec(nodeBinary + ' ' + preloadOption([fixtureA]) + ' ' + fixtureB, function(err, stdout, stderr) { if (err) throw err; assert.equal(stdout, 'A\nB\n'); }); // test preloading multiple modules works child_process.exec(nodeBinary + ' ' + preloadOption([fixtureA, fixtureB]) + ' ' + fixtureC, function(err, stdout, stderr) { if (err) throw err; assert.equal(stdout, 'A\nB\nC\n'); }); // test that preloading a throwing module aborts child_process.exec(nodeBinary + ' ' + preloadOption([fixtureA, fixtureThrows]) + ' ' + fixtureB, function(err, stdout, stderr) { if (err) { assert.equal(stdout, 'A\n'); } else { throw new Error('Preload should have failed'); } }); // test that preload can be used with --eval child_process.exec(nodeBinary + ' ' + preloadOption([fixtureA]) + '-e "console.log(\'hello\');"', function(err, stdout, stderr) { if (err) throw err; assert.equal(stdout, 'A\nhello\n'); }); // test that preload placement at other points in the cmdline // also test that duplicated preload only gets loaded once child_process.exec(nodeBinary + ' ' + preloadOption([fixtureA]) + '-e "console.log(\'hello\');" ' + preloadOption([fixtureA, fixtureB]), function(err, stdout, stderr) { if (err) throw err; assert.equal(stdout, 'A\nB\nhello\n'); }); // test that preload works with -i const interactive = child_process.exec(nodeBinary + ' ' + preloadOption([fixtureD]) + '-i', common.mustCall(function(err, stdout, stderr) { assert.ifError(err); assert.strictEqual(stdout, `> 'test'\n> `); })); interactive.stdin.write('a\n'); interactive.stdin.write('process.exit()\n'); child_process.exec(nodeBinary + ' ' + '--require ' + fixture('cluster-preload.js') + ' ' + fixture('cluster-preload-test.js'), function(err, stdout, stderr) { if (err) throw err; assert.ok(/worker terminated with code 43/.test(stdout)); }); // https://github.com/nodejs/node/issues/1691 process.chdir(path.join(__dirname, '../fixtures/')); child_process.exec(nodeBinary + ' ' + '--expose_debug_as=v8debug ' + '--require ' + fixture('cluster-preload.js') + ' ' + 'cluster-preload-test.js', function(err, stdout, stderr) { if (err) throw err; assert.ok(/worker terminated with code 43/.test(stdout)); });