// |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"));