76 lines
2.6 KiB
JavaScript
76 lines
2.6 KiB
JavaScript
|
#!/usr/bin/env node
|
||
|
|
||
|
/******************************************************************************
|
||
|
Child process that installs node-cleanup for testing zero, one, or multiple (two) concurrent cleanup handlers. It accepts a single argument of serialized JSON having the following (FlowType) structure:
|
||
|
|
||
|
{
|
||
|
handlers; number; // 0, 1, or 2 concurrent cleanup handlers
|
||
|
messages0: object|null; // messages argument for no-cleanup call, if any
|
||
|
messages1: object|null; // messages argument for 1st nodeCleanup() call
|
||
|
messages2: object|null; // messages argument for 2nd nodeCleanup() call
|
||
|
return1: boolean; // return value of 1st cleanup handler
|
||
|
return2: boolean; // return value of 2nd cleanup handler
|
||
|
uninstall: boolean; // whether to uninstall handlers before test
|
||
|
maxDuration: number; // max duration of process in millisecs
|
||
|
}
|
||
|
|
||
|
The process writes behavioral results to stdout for comparison with expectations. The output includes space-delimited strings from the following list, ordered in the string by their order of occurrence:
|
||
|
|
||
|
cleanup1 - the first cleanup handler ran
|
||
|
cleanup2 - the second cleanup handler ran
|
||
|
|
||
|
The process also writes to stderr for comparison with expectations.
|
||
|
******************************************************************************/
|
||
|
|
||
|
//// MODULES //////////////////////////////////////////////////////////////////
|
||
|
|
||
|
var nodeCleanup = require('../../');
|
||
|
|
||
|
//// CONFIGURATION ////////////////////////////////////////////////////////////
|
||
|
|
||
|
var config = JSON.parse(process.argv[2]);
|
||
|
|
||
|
//// CLEANUP HANDLERS /////////////////////////////////////////////////////////
|
||
|
|
||
|
function cleanup1(exitCode, signal) {
|
||
|
process.stdout.write('cleanup1 ');
|
||
|
if (!config.return1)
|
||
|
nodeCleanup.uninstall(); // don't cleanup again
|
||
|
return config.return1;
|
||
|
}
|
||
|
|
||
|
function cleanup2(exitCode, signal) {
|
||
|
process.stdout.write('cleanup2 ');
|
||
|
if (!config.return2)
|
||
|
nodeCleanup.uninstall(); // don't cleanup again
|
||
|
return config.return2;
|
||
|
}
|
||
|
|
||
|
//// MAIN /////////////////////////////////////////////////////////////////////
|
||
|
|
||
|
if (config.handlers === 0) {
|
||
|
if (config.messages0)
|
||
|
nodeCleanup(config.messages0);
|
||
|
else
|
||
|
nodeCleanup();
|
||
|
}
|
||
|
else {
|
||
|
nodeCleanup(cleanup1, config.messages1);
|
||
|
if (config.handlers > 1)
|
||
|
nodeCleanup(cleanup2, config.messages2);
|
||
|
}
|
||
|
|
||
|
if (config.uninstall)
|
||
|
nodeCleanup.uninstall();
|
||
|
|
||
|
setTimeout(function () {
|
||
|
// disconnect IPC so can exit when stdout, stderr,
|
||
|
// child processes, and other resources complete.
|
||
|
process.disconnect();
|
||
|
if (config.exception)
|
||
|
throw new Error("unexpected exception");
|
||
|
process.exit(0);
|
||
|
}, config.maxDuration);
|
||
|
|
||
|
process.send('ready');
|