diff options
Diffstat (limited to 'js/src/tests/test262/built-ins/AsyncGeneratorPrototype/return/return-suspendedStart-broken-promise.js')
-rw-r--r-- | js/src/tests/test262/built-ins/AsyncGeneratorPrototype/return/return-suspendedStart-broken-promise.js | 55 |
1 files changed, 55 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/AsyncGeneratorPrototype/return/return-suspendedStart-broken-promise.js b/js/src/tests/test262/built-ins/AsyncGeneratorPrototype/return/return-suspendedStart-broken-promise.js new file mode 100644 index 0000000000..ff35f0af31 --- /dev/null +++ b/js/src/tests/test262/built-ins/AsyncGeneratorPrototype/return/return-suspendedStart-broken-promise.js @@ -0,0 +1,55 @@ +// |reftest| async +// Copyright (C) 2022 Chengzhong Wu. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +esid: sec-asyncgenerator-prototype-return +description: > + A broken promise should reject the returned promise of + AsyncGenerator.prototype.return when the generator's state is suspendedStart. +info: | + AsyncGenerator.prototype.return ( value ) + ... + 8. If state is either suspendedStart or completed, then + a. Set generator.[[AsyncGeneratorState]] to awaiting-return. + b. Perform AsyncGeneratorAwaitReturn(_generator_). + ... + + AsyncGeneratorAwaitReturn ( generator ) + ... + 6. Let promise be Completion(PromiseResolve(%Promise%, completion.[[Value]])). + 7. If promiseCompletion is an abrupt completion, then + a. Set generator.[[AsyncGeneratorState]] to completed. + b. Perform AsyncGeneratorCompleteStep(generator, promiseCompletion, true). + c. Perform AsyncGeneratorDrainQueue(generator). + d. Return unused. + 8. Assert: promiseCompletion.[[Type]] is normal. + 9. Let promise be promiseCompletion.[[Value]]. + ... + +flags: [async] +features: [async-iteration] +---*/ + +var g = async function*() { + throw new Test262Error('Generator must not be resumed.'); +}; + +var it = g(); +let brokenPromise = Promise.resolve(42); +Object.defineProperty(brokenPromise, 'constructor', { + get: function () { + throw new Error('broken promise'); + } +}); + +it.return(brokenPromise) + .then( + () => { + throw new Test262Error("Expected rejection"); + }, + err => { + assert.sameValue(err.message, 'broken promise'); + } + ) + .then($DONE, $DONE); |