'use strict'; const common = require('../common'); const assert = require('assert'); const { spawnSync } = require('child_process'); const { setTimeout } = require('timers/promises'); if (process.argv[2] === 'child') { const test = require('node:test'); if (process.argv[3] === 'abortSignal') { assert.throws(() => test({ signal: {} }), { code: 'ERR_INVALID_ARG_TYPE', name: 'TypeError' }); let testSignal; test({ timeout: 10 }, common.mustCall(async ({ signal }) => { assert.strictEqual(signal.aborted, false); testSignal = signal; await setTimeout(50); })).finally(common.mustCall(() => { test(() => assert.strictEqual(testSignal.aborted, true)); })); // TODO(benjamingr) add more tests to describe + AbortSignal // this just tests the parameter is passed test.describe('Abort Signal in describe', common.mustCall(({ signal }) => { test.it('Supports AbortSignal', () => { assert.strictEqual(signal.aborted, false); }); })); } else assert.fail('unreachable'); } else { const child = spawnSync(process.execPath, [__filename, 'child', 'abortSignal']); const stdout = child.stdout.toString(); assert.match(stdout, /pass 2$/m); assert.match(stdout, /fail 0$/m); assert.match(stdout, /cancelled 1$/m); assert.strictEqual(child.status, 1); assert.strictEqual(child.signal, null); }