| 'use strict'; |
| const common = require('../../common'); |
| const assert = require('assert'); |
| const { Worker, isMainThread, workerData } = require('worker_threads'); |
| |
| if (isMainThread) { |
| // Load the addon in the main thread first. |
| // This checks that N-API addons can be loaded from multiple contexts |
| // when they are not loaded through NAPI_MODULE(). |
| require(`./build/${common.buildType}/test_worker_terminate`); |
| |
| const counter = new Int32Array(new SharedArrayBuffer(4)); |
| const worker = new Worker(__filename, { workerData: { counter } }); |
| worker.on('exit', common.mustCall(() => { |
| assert.strictEqual(counter[0], 1); |
| })); |
| worker.on('error', common.mustNotCall()); |
| } else { |
| const { Test } = require(`./build/${common.buildType}/test_worker_terminate`); |
| |
| const { counter } = workerData; |
| // Test() tries to call a function and asserts it fails because of a |
| // pending termination exception. |
| Test(() => { |
| Atomics.add(counter, 0, 1); |
| process.exit(); |
| }); |
| } |