mirror of
https://github.com/nodejs/node.git
synced 2024-11-21 10:59:27 +00:00
47ad609d64
PR-URL: https://github.com/nodejs/node/pull/55441 Reviewed-By: Chengzhong Wu <legendecas@gmail.com> Reviewed-By: Luigi Pinca <luigipinca@gmail.com>
51 lines
1.9 KiB
JavaScript
51 lines
1.9 KiB
JavaScript
'use strict';
|
|
// Test API calls for instance data.
|
|
|
|
const common = require('../../common');
|
|
|
|
if (module !== require.main) {
|
|
// When required as a module, run the tests.
|
|
const test_instance_data =
|
|
require(`./build/${common.buildType}/test_instance_data`);
|
|
|
|
// Test that instance data can be used in an async work callback.
|
|
new Promise((resolve) => test_instance_data.asyncWorkCallback(resolve))
|
|
|
|
// Test that the buffer finalizer can access the instance data.
|
|
.then(() => new Promise((resolve) => {
|
|
test_instance_data.testBufferFinalizer(resolve);
|
|
global.gc();
|
|
}))
|
|
|
|
// Test that the thread-safe function can access the instance data.
|
|
.then(() => new Promise((resolve) =>
|
|
test_instance_data.testThreadsafeFunction(common.mustCall(),
|
|
common.mustCall(resolve))));
|
|
} else {
|
|
// When launched as a script, run tests in either a child process or in a
|
|
// worker thread.
|
|
const assert = require('assert');
|
|
const requireAs = require('../../common/require-as');
|
|
const runOptions = { stdio: ['inherit', 'pipe', 'inherit'] };
|
|
const { spawnSync } = require('child_process');
|
|
|
|
// Run tests in a child process.
|
|
requireAs(__filename, ['--expose-gc'], runOptions, 'child');
|
|
|
|
// Run tests in a worker thread in a child process.
|
|
requireAs(__filename, ['--expose-gc'], runOptions, 'worker');
|
|
|
|
function testProcessExit(addonName) {
|
|
// Make sure that process exit is clean when the instance data has
|
|
// references to JS objects.
|
|
const path = require.resolve(`./build/${common.buildType}/${addonName}`);
|
|
const child = spawnSync(process.execPath, ['-e', `require(${JSON.stringify(path)});`]);
|
|
assert.strictEqual(child.signal, null);
|
|
assert.strictEqual(child.status, 0);
|
|
assert.strictEqual(child.stderr.toString(), 'addon_free');
|
|
}
|
|
|
|
testProcessExit('test_ref_then_set');
|
|
testProcessExit('test_set_then_ref');
|
|
}
|