summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/built-ins/AsyncGeneratorPrototype/return/return-suspendedStart-broken-promise.js
diff options
context:
space:
mode:
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.js55
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);