| // Flags: --expose-gc |
| 'use strict'; |
| |
| const common = require('../common'); |
| const { aborted } = require('util'); |
| const assert = require('assert'); |
| const { getEventListeners } = require('events'); |
| const { spawn } = require('child_process'); |
| |
| { |
| // Test aborted works when provided a resource |
| const ac = new AbortController(); |
| aborted(ac.signal, {}).then(common.mustCall()); |
| ac.abort(); |
| assert.strictEqual(ac.signal.aborted, true); |
| assert.strictEqual(getEventListeners(ac.signal, 'abort').length, 0); |
| } |
| |
| { |
| // Test aborted with gc cleanup |
| const ac = new AbortController(); |
| aborted(ac.signal, {}).then(common.mustNotCall()); |
| setImmediate(() => { |
| global.gc(); |
| ac.abort(); |
| assert.strictEqual(ac.signal.aborted, true); |
| assert.strictEqual(getEventListeners(ac.signal, 'abort').length, 0); |
| }); |
| } |
| |
| { |
| // Fails with error if not provided abort signal |
| Promise.all([{}, null, undefined, Symbol(), [], 1, 0, 1n, true, false, 'a', () => {}].map((sig) => |
| assert.rejects(aborted(sig, {}), { |
| code: 'ERR_INVALID_ARG_TYPE', |
| }) |
| )).then(common.mustCall()); |
| } |
| |
| { |
| // Fails if not provided a resource |
| const ac = new AbortController(); |
| Promise.all([null, undefined, 0, 1, 0n, 1n, Symbol(), '', 'a'].map((resource) => |
| assert.rejects(aborted(ac.signal, resource), { |
| code: 'ERR_INVALID_ARG_TYPE', |
| }) |
| )).then(common.mustCall()); |
| } |
| |
| { |
| const childProcess = spawn(process.execPath, ['--input-type=module']); |
| childProcess.on('exit', common.mustCall((code) => { |
| assert.strictEqual(code, 13); |
| })); |
| childProcess.stdin.end(` |
| import { aborted } from 'node:util'; |
| await aborted(new AbortController().signal, {}); |
| `); |
| } |