| 'use strict'; |
| const common = require('../common'); |
| const assert = require('assert'); |
| const exec = require('child_process').exec; |
| const { promisify } = require('util'); |
| |
| const execPromisifed = promisify(exec); |
| const invalidArgTypeError = { |
| code: 'ERR_INVALID_ARG_TYPE', |
| name: 'TypeError' |
| }; |
| |
| const waitCommand = common.isWindows ? |
| `${process.execPath} -e "setInterval(()=>{}, 99)"` : |
| 'sleep 2m'; |
| |
| { |
| const ac = new AbortController(); |
| const signal = ac.signal; |
| const promise = execPromisifed(waitCommand, { signal }); |
| assert.rejects(promise, { |
| name: 'AbortError', |
| cause: new DOMException('This operation was aborted', 'AbortError'), |
| }).then(common.mustCall()); |
| ac.abort(); |
| } |
| |
| { |
| const err = new Error('boom'); |
| const ac = new AbortController(); |
| const signal = ac.signal; |
| const promise = execPromisifed(waitCommand, { signal }); |
| assert.rejects(promise, { |
| name: 'AbortError', |
| cause: err |
| }).then(common.mustCall()); |
| ac.abort(err); |
| } |
| |
| { |
| const ac = new AbortController(); |
| const signal = ac.signal; |
| const promise = execPromisifed(waitCommand, { signal }); |
| assert.rejects(promise, { |
| name: 'AbortError', |
| cause: 'boom' |
| }).then(common.mustCall()); |
| ac.abort('boom'); |
| } |
| |
| { |
| assert.throws(() => { |
| execPromisifed(waitCommand, { signal: {} }); |
| }, invalidArgTypeError); |
| } |
| |
| { |
| function signal() {} |
| assert.throws(() => { |
| execPromisifed(waitCommand, { signal }); |
| }, invalidArgTypeError); |
| } |
| |
| { |
| const signal = AbortSignal.abort(); // Abort in advance |
| const promise = execPromisifed(waitCommand, { signal }); |
| |
| assert.rejects(promise, { name: 'AbortError' }) |
| .then(common.mustCall()); |
| } |
| |
| { |
| const err = new Error('boom'); |
| const signal = AbortSignal.abort(err); // Abort in advance |
| const promise = execPromisifed(waitCommand, { signal }); |
| |
| assert.rejects(promise, { name: 'AbortError', cause: err }) |
| .then(common.mustCall()); |
| } |
| |
| { |
| const signal = AbortSignal.abort('boom'); // Abort in advance |
| const promise = execPromisifed(waitCommand, { signal }); |
| |
| assert.rejects(promise, { name: 'AbortError', cause: 'boom' }) |
| .then(common.mustCall()); |
| } |