| // Copyright (C) 2019 Leo Balter. All rights reserved. |
| // This code is governed by the BSD license found in the LICENSE file. |
| |
| /*--- |
| esid: sec-promise.allsettled |
| description: > |
| Throws a TypeError if either resolve or reject capability is not callable. |
| info: | |
| Promise.allSettled ( iterable ) |
| |
| ... |
| 3. Let promiseCapability be ? NewPromiseCapability(C). |
| ... |
| |
| NewPromiseCapability ( C ) |
| |
| ... |
| 5. Let executor be CreateBuiltinFunction(steps, « [[Capability]] »). |
| 6. Set executor.[[Capability]] to promiseCapability. |
| 7. Let promise be ? Construct(C, « executor »). |
| 8. If IsCallable(promiseCapability.[[Resolve]]) is false, throw a TypeError exception. |
| 9. If IsCallable(promiseCapability.[[Reject]]) is false, throw a TypeError exception. |
| ... |
| features: [Promise.allSettled] |
| ---*/ |
| |
| var checkPoint = ''; |
| function fn1(executor) { |
| checkPoint += 'a'; |
| } |
| Object.defineProperty(fn1, 'resolve', { |
| get() { throw new Test262Error(); } |
| }); |
| assert.throws(TypeError, function() { |
| Promise.allSettled.call(fn1, []); |
| }, 'executor not called at all'); |
| assert.sameValue(checkPoint, 'a', 'executor not called at all'); |
| |
| checkPoint = ''; |
| function fn2(executor) { |
| checkPoint += 'a'; |
| executor(); |
| checkPoint += 'b'; |
| } |
| Object.defineProperty(fn2, 'resolve', { |
| get() { throw new Test262Error(); } |
| }); |
| assert.throws(TypeError, function() { |
| Promise.allSettled.call(fn2, []); |
| }, 'executor called with no arguments'); |
| assert.sameValue(checkPoint, 'ab', 'executor called with no arguments'); |
| |
| checkPoint = ''; |
| function fn3(executor) { |
| checkPoint += 'a'; |
| executor(undefined, undefined); |
| checkPoint += 'b'; |
| } |
| Object.defineProperty(fn3, 'resolve', { |
| get() { throw new Test262Error(); } |
| }); |
| assert.throws(TypeError, function() { |
| Promise.allSettled.call(fn3, []); |
| }, 'executor called with (undefined, undefined)'); |
| assert.sameValue(checkPoint, 'ab', 'executor called with (undefined, undefined)'); |
| |
| checkPoint = ''; |
| function fn4(executor) { |
| checkPoint += 'a'; |
| executor(undefined, function() {}); |
| checkPoint += 'b'; |
| } |
| Object.defineProperty(fn4, 'resolve', { |
| get() { throw new Test262Error(); } |
| }); |
| assert.throws(TypeError, function() { |
| Promise.allSettled.call(fn4, []); |
| }, 'executor called with (undefined, function)'); |
| assert.sameValue(checkPoint, 'ab', 'executor called with (undefined, function)'); |
| |
| checkPoint = ''; |
| function fn5(executor) { |
| checkPoint += 'a'; |
| executor(function() {}, undefined); |
| checkPoint += 'b'; |
| } |
| Object.defineProperty(fn5, 'resolve', { |
| get() { throw new Test262Error(); } |
| }); |
| assert.throws(TypeError, function() { |
| Promise.allSettled.call(fn5, []); |
| }, 'executor called with (function, undefined)'); |
| assert.sameValue(checkPoint, 'ab', 'executor called with (function, undefined)'); |
| |
| checkPoint = ''; |
| function fn6(executor) { |
| checkPoint += 'a'; |
| executor(123, 'invalid value'); |
| checkPoint += 'b'; |
| } |
| Object.defineProperty(fn6, 'resolve', { |
| get() { throw new Test262Error(); } |
| }); |
| assert.throws(TypeError, function() { |
| Promise.allSettled.call(fn6, []); |
| }, 'executor called with (Number, String)'); |
| assert.sameValue(checkPoint, 'ab', 'executor called with (Number, String)'); |