Files
node/test/parallel/test-preload.js
T
Ali Ijaz Sheikh 1514b82355 src: add -r/--require flags for preloading modules
This patch adds a command line option (-r/--require) that allows one
to provide modules on the command line that will be 'required' during
node startup. This can be useful for debugging, tracing, memory leak
analysis etc. to be preloaded without explicit changes to the user
script. The option can be repeated to preload multiple modules.

PR-URL: https://github.com/iojs/io.js/pull/881
Reviewed-By: Trevor Norris <trev.norris@gmail.com>
Reviewed-By: Chris Dickinson <christopher.s.dickinson@gmail.com>
Reviewed-By: Rod Vagg <rod@vagg.org>
2015-03-19 21:42:16 +11:00

75 lines
2.0 KiB
JavaScript

var common = require('../common'),
assert = require('assert'),
path = require('path'),
child_process = require('child_process');
var nodeBinary = process.argv[0];
var preloadOption = function(preloads) {
var option = '';
preloads.forEach(function(preload, index) {
// TODO: randomly pick -r or --require
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')
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');
});