'use strict'; const common = require('../../common'); const assert = require('assert'); const path = require('path'); const spawnSync = require('child_process').spawnSync; const binding = path.resolve(__dirname, `./build/${common.buildType}/binding`); Object.defineProperty(globalThis, 'interrupt', { get: () => { return null; }, set: () => { throw new Error('should not calling into js'); }, }); if (process.argv[2] === 'child-busyloop') { (function childMain() { const addon = require(binding); addon[process.argv[3]](); while (true) { /** wait for interrupt */ } })(); return; } if (process.argv[2] === 'child-idle') { (function childMain() { const addon = require(binding); addon[process.argv[3]](); // wait for interrupt setTimeout(() => {}, 10_000_000); })(); return; } for (const type of ['busyloop', 'idle']) { { const child = spawnSync(process.execPath, [ __filename, `child-${type}`, 'scheduleInterrupt' ]); assert.strictEqual(child.status, 0, `${type} should exit with code 0`); } { const child = spawnSync(process.execPath, [ __filename, `child-${type}`, 'ScheduleInterruptWithJS' ]); assert(common.nodeProcessAborted(child.status, child.signal)); } }