| Index: test/mjsunit/harmony/async-debug-caught-exception-cases.js
|
| diff --git a/test/mjsunit/harmony/async-debug-caught-exception-cases.js b/test/mjsunit/harmony/async-debug-caught-exception-cases.js
|
| index 316267ed74d309a54530819f54eafb1c91b49d79..0b658dd81562fc78c1b62ac1cc0d811d83f55f07 100644
|
| --- a/test/mjsunit/harmony/async-debug-caught-exception-cases.js
|
| +++ b/test/mjsunit/harmony/async-debug-caught-exception-cases.js
|
| @@ -31,6 +31,19 @@ function rejectConstructor() {
|
|
|
| async function argThrower(x = (() => { throw "d"; })()) { } // Exception d
|
|
|
| +async function awaitThrow() {
|
| + await undefined;
|
| + throw "e"; // Exception e
|
| +}
|
| +
|
| +function constructorThrow() {
|
| + return new Promise((resolve, reject) =>
|
| + Promise.resolve().then(() =>
|
| + reject("f") // Exception f
|
| + )
|
| + );
|
| +}
|
| +
|
| function suppressThrow() {
|
| return thrower();
|
| }
|
| @@ -80,7 +93,43 @@ async function indirectAwaitCatch(producer) {
|
| }
|
| }
|
|
|
| -let catches = [caught, indirectCaught, indirectAwaitCatch];
|
| +function switchCatch(producer) {
|
| + let resolve;
|
| + let promise = new Promise(r => resolve = r);
|
| + async function localCaught() {
|
| + try {
|
| + await promise; // force switching to localUncaught and back
|
| + await producer();
|
| + } catch (e) { }
|
| + }
|
| + async function localUncaught() {
|
| + await undefined;
|
| + resolve();
|
| + }
|
| + localCaught();
|
| + localUncaught();
|
| +}
|
| +
|
| +function switchDotCatch(producer) {
|
| + let resolve;
|
| + let promise = new Promise(r => resolve = r);
|
| + async function localCaught() {
|
| + await promise; // force switching to localUncaught and back
|
| + await producer();
|
| + }
|
| + async function localUncaught() {
|
| + await undefined;
|
| + resolve();
|
| + }
|
| + localCaught().catch(() => {});
|
| + localUncaught();
|
| +}
|
| +
|
| +let catches = [caught,
|
| + indirectCaught,
|
| + indirectAwaitCatch,
|
| + switchCatch,
|
| + switchDotCatch];
|
| let noncatches = [uncaught, indirectUncaught];
|
| let lateCatches = [dotCatch,
|
| indirectReturnDotCatch,
|
| @@ -89,18 +138,19 @@ let lateCatches = [dotCatch,
|
|
|
| let throws = [thrower, reject, argThrower, suppressThrow];
|
| let nonthrows = [awaitReturn, scalar, nothing];
|
| +let lateThrows = [awaitThrow, constructorThrow];
|
| let uncatchable = [rejectConstructor];
|
|
|
| let cases = [];
|
|
|
| -for (let producer of throws) {
|
| +for (let producer of throws.concat(lateThrows)) {
|
| for (let consumer of catches) {
|
| cases.push({ producer, consumer, expectedEvents: 1, caught: true });
|
| cases.push({ producer, consumer, expectedEvents: 0, caught: false });
|
| }
|
| }
|
|
|
| -for (let producer of throws) {
|
| +for (let producer of throws.concat(lateThrows)) {
|
| for (let consumer of noncatches) {
|
| cases.push({ producer, consumer, expectedEvents: 1, caught: true });
|
| cases.push({ producer, consumer, expectedEvents: 1, caught: false });
|
| @@ -121,6 +171,13 @@ for (let producer of uncatchable) {
|
| }
|
| }
|
|
|
| +for (let producer of lateThrows) {
|
| + for (let consumer of lateCatches) {
|
| + cases.push({ producer, consumer, expectedEvents: 1, caught: true });
|
| + cases.push({ producer, consumer, expectedEvents: 0, caught: false });
|
| + }
|
| +}
|
| +
|
| for (let producer of throws) {
|
| for (let consumer of lateCatches) {
|
| cases.push({ producer, consumer, expectedEvents: 1, caught: true });
|
|
|