mirror of https://github.com/nodejs/node.git
58 lines
2.3 KiB
JavaScript
58 lines
2.3 KiB
JavaScript
'use strict';
|
|
|
|
if (process.argv[2] === 'child') {
|
|
const common = require('../../common');
|
|
const test_general = require(`./build/${common.buildType}/test_general`);
|
|
|
|
// The second argument to `envCleanupWrap()` is an index into the global
|
|
// static string array named `env_cleanup_finalizer_messages` on the native
|
|
// side. A reverse mapping is reproduced here for clarity.
|
|
const finalizerMessages = {
|
|
'simple wrap': 0,
|
|
'wrap, removeWrap': 1,
|
|
'first wrap': 2,
|
|
'second wrap': 3
|
|
};
|
|
|
|
// We attach the three objects we will test to `module.exports` to ensure they
|
|
// will not be garbage-collected before the process exits.
|
|
|
|
// Make sure the finalizer for a simple wrap will be called at env cleanup.
|
|
module.exports['simple wrap'] =
|
|
test_general.envCleanupWrap({}, finalizerMessages['simple wrap']);
|
|
|
|
// Make sure that a removed wrap does not result in a call to its finalizer at
|
|
// env cleanup.
|
|
module.exports['wrap, removeWrap'] =
|
|
test_general.envCleanupWrap({}, finalizerMessages['wrap, removeWrap']);
|
|
test_general.removeWrap(module.exports['wrap, removeWrap']);
|
|
|
|
// Make sure that only the latest attached version of a re-wrapped item's
|
|
// finalizer gets called at env cleanup.
|
|
module.exports['first wrap'] =
|
|
test_general.envCleanupWrap({}, finalizerMessages['first wrap']),
|
|
test_general.removeWrap(module.exports['first wrap']);
|
|
test_general.envCleanupWrap(module.exports['first wrap'],
|
|
finalizerMessages['second wrap']);
|
|
} else {
|
|
const assert = require('assert');
|
|
const { spawnSync } = require('child_process');
|
|
|
|
const child = spawnSync(process.execPath, [__filename, 'child'], {
|
|
stdio: [ process.stdin, 'pipe', process.stderr ]
|
|
});
|
|
|
|
// Grab the child's output and construct an object whose keys are the rows of
|
|
// the output and whose values are `true`, so we can compare the output while
|
|
// ignoring the order in which the lines of it were produced.
|
|
assert.deepStrictEqual(
|
|
child.stdout.toString().split(/\r\n|\r|\n/g).reduce((obj, item) =>
|
|
Object.assign(obj, item ? { [item]: true } : {}), {}), {
|
|
'finalize at env cleanup for simple wrap': true,
|
|
'finalize at env cleanup for second wrap': true
|
|
});
|
|
|
|
// Ensure that the child exited successfully.
|
|
assert.strictEqual(child.status, 0);
|
|
}
|