| '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}`) |
| // Replace any backslashes with double backslashes because they'll be re- |
| // interpreted back to single backslashes in the command line argument |
| // to the child process. Windows needs this. |
| .replace(/\\/g, '\\\\'); |
| const child = spawnSync(process.execPath, ['-e', `require('${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'); |
| } |