diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-19 00:47:55 +0000 |
commit | 26a029d407be480d791972afb5975cf62c9360a6 (patch) | |
tree | f435a8308119effd964b339f76abb83a57c29483 /js/src/tests/test262/built-ins/AsyncGeneratorPrototype/return/return-state-completed-broken-promise.js | |
parent | Initial commit. (diff) | |
download | firefox-26a029d407be480d791972afb5975cf62c9360a6.tar.xz firefox-26a029d407be480d791972afb5975cf62c9360a6.zip |
Adding upstream version 124.0.1.upstream/124.0.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'js/src/tests/test262/built-ins/AsyncGeneratorPrototype/return/return-state-completed-broken-promise.js')
-rw-r--r-- | js/src/tests/test262/built-ins/AsyncGeneratorPrototype/return/return-state-completed-broken-promise.js | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/js/src/tests/test262/built-ins/AsyncGeneratorPrototype/return/return-state-completed-broken-promise.js b/js/src/tests/test262/built-ins/AsyncGeneratorPrototype/return/return-state-completed-broken-promise.js new file mode 100644 index 0000000000..ad7b3cd6e5 --- /dev/null +++ b/js/src/tests/test262/built-ins/AsyncGeneratorPrototype/return/return-state-completed-broken-promise.js @@ -0,0 +1,63 @@ +// |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 is completed. +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] +---*/ + +let unblock; +let blocking = new Promise(resolve => { unblock = resolve; }); +let unblocked = false; +var g = async function*() { + await blocking; + unblocked = true; +}; + +var it = g(); +let brokenPromise = Promise.resolve(42); +Object.defineProperty(brokenPromise, 'constructor', { + get: function () { + throw new Error('broken promise'); + } +}); + +it.next(); +it.return(brokenPromise) + .then( + () => { + throw new Test262Error("Expected rejection"); + }, + err => { + assert(unblocked, false, 'return should be rejected before generator is resumed'); + assert.sameValue(err.message, 'broken promise'); + } + ) + .then($DONE, $DONE); + +unblock(); |