summaryrefslogtreecommitdiffstats
path: root/js/src/tests/test262/language/statements/for-await-of/async-from-sync-iterator-continuation-abrupt-completion-get-constructor.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/src/tests/test262/language/statements/for-await-of/async-from-sync-iterator-continuation-abrupt-completion-get-constructor.js')
-rw-r--r--js/src/tests/test262/language/statements/for-await-of/async-from-sync-iterator-continuation-abrupt-completion-get-constructor.js55
1 files changed, 55 insertions, 0 deletions
diff --git a/js/src/tests/test262/language/statements/for-await-of/async-from-sync-iterator-continuation-abrupt-completion-get-constructor.js b/js/src/tests/test262/language/statements/for-await-of/async-from-sync-iterator-continuation-abrupt-completion-get-constructor.js
new file mode 100644
index 0000000000..132f8e80f7
--- /dev/null
+++ b/js/src/tests/test262/language/statements/for-await-of/async-from-sync-iterator-continuation-abrupt-completion-get-constructor.js
@@ -0,0 +1,55 @@
+// |reftest| async
+// Copyright (C) 2019 André Bargull. All rights reserved.
+// This code is governed by the BSD license found in the LICENSE file.
+
+/*---
+esid: sec-asyncfromsynciteratorcontinuation
+description: >
+ Reject promise when PromiseResolve in AsyncFromSyncIteratorContinuation throws.
+info: |
+ 25.1.4.4 AsyncFromSyncIteratorContinuation ( result, promiseCapability )
+ ...
+ 5. Let valueWrapper be PromiseResolve(%Promise%, « value »).
+ 6. IfAbruptRejectPromise(valueWrapper, promiseCapability).
+ ...
+
+includes: [compareArray.js]
+flags: [async]
+features: [async-iteration]
+---*/
+
+var expected = [
+ "start",
+
+ // `valueWrapper` promise rejected.
+ "tick 1",
+
+ // `Await(nextResult)` in 13.7.5.13 done.
+ "tick 2",
+
+ // catch handler executed.
+ "catch",
+];
+
+var actual = [];
+
+async function f() {
+ var p = Promise.resolve(0);
+ Object.defineProperty(p, "constructor", {
+ get() {
+ throw new Error();
+ }
+ });
+ actual.push("start");
+ for await (var x of [p]);
+ actual.push("never reached");
+}
+
+Promise.resolve(0)
+ .then(() => actual.push("tick 1"))
+ .then(() => actual.push("tick 2"))
+ .then(() => {
+ assert.compareArray(actual, expected);
+}).then($DONE, $DONE);
+
+f().catch(() => actual.push("catch"));