diff --git a/test/language/expressions/async-arrow-function/try-reject-finally-reject.js b/test/language/expressions/async-arrow-function/try-reject-finally-reject.js new file mode 100644 index 0000000000000000000000000000000000000000..6c9531e66ce19b09c7193c42ec8277698c417019 --- /dev/null +++ b/test/language/expressions/async-arrow-function/try-reject-finally-reject.js @@ -0,0 +1,27 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer rejecting an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +var f = async() => { + try { + await new Promise(function(resolve, reject) { + reject("early-reject"); + }); + } finally { + await new Promise(function(resolve, reject) { + reject("override"); + }); + } +}; + +f().then($DONE, function(value) { + assert.sameValue(value, "override", "Awaited rejection in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/expressions/async-arrow-function/try-reject-finally-return.js b/test/language/expressions/async-arrow-function/try-reject-finally-return.js new file mode 100644 index 0000000000000000000000000000000000000000..71e4e1410fb32d2038fb0a456b391bfee2127222 --- /dev/null +++ b/test/language/expressions/async-arrow-function/try-reject-finally-return.js @@ -0,0 +1,25 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer rejecting an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +var f = async() => { + try { + await new Promise(function(resolve, reject) { + reject("early-reject"); + }); + } finally { + return "override"; + } +}; + +f().then(function(value) { + assert.sameValue(value, "override", "Return in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/expressions/async-arrow-function/try-reject-finally-throw.js b/test/language/expressions/async-arrow-function/try-reject-finally-throw.js new file mode 100644 index 0000000000000000000000000000000000000000..a058272f2cf839d6a84fe113a2aed5d579f0b74d --- /dev/null +++ b/test/language/expressions/async-arrow-function/try-reject-finally-throw.js @@ -0,0 +1,25 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer rejecting an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +var f = async() => { + try { + await new Promise(function(resolve, reject) { + reject("early-reject"); + }); + } finally { + throw "override"; + } +}; + +f().then($DONE, function(value) { + assert.sameValue(value, "override", "Exception thrown in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/expressions/async-arrow-function/try-return-finally-reject.js b/test/language/expressions/async-arrow-function/try-return-finally-reject.js new file mode 100644 index 0000000000000000000000000000000000000000..115e23100128263627783a375a441116f7c97199 --- /dev/null +++ b/test/language/expressions/async-arrow-function/try-return-finally-reject.js @@ -0,0 +1,25 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer resolving an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +var f = async() => { + try { + return "early-return"; + } finally { + await new Promise(function(resolve, reject) { + reject("override"); + }); + } +}; + +f().then($DONE, function(value) { + assert.sameValue(value, "override", "Awaited rejection in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/expressions/async-arrow-function/try-return-finally-return.js b/test/language/expressions/async-arrow-function/try-return-finally-return.js new file mode 100644 index 0000000000000000000000000000000000000000..4b0798f9b727cd77ab3c5614de112027a3e437c7 --- /dev/null +++ b/test/language/expressions/async-arrow-function/try-return-finally-return.js @@ -0,0 +1,25 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer resolving an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +var f = async() => { + try { + return "early-return"; + } finally { + return await new Promise(function(resolve, reject) { + resolve("override"); + }); + } +}; + +f().then(function(value) { + assert.sameValue(value, "override", "Return in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/expressions/async-arrow-function/try-return-finally-throw.js b/test/language/expressions/async-arrow-function/try-return-finally-throw.js new file mode 100644 index 0000000000000000000000000000000000000000..ab6d6a8c44f104808df07c63fa71953013d9fc78 --- /dev/null +++ b/test/language/expressions/async-arrow-function/try-return-finally-throw.js @@ -0,0 +1,23 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer resolving an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +var f = async() => { + try { + return "early-return"; + } finally { + throw "override"; + } +}; + +f().then($DONE, function(value) { + assert.sameValue(value, "override", "Exception thrown in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/expressions/async-arrow-function/try-throw-finally-reject.js b/test/language/expressions/async-arrow-function/try-throw-finally-reject.js new file mode 100644 index 0000000000000000000000000000000000000000..7c5e2f32abbe41cd7b914a4f0fa202ba787c14de --- /dev/null +++ b/test/language/expressions/async-arrow-function/try-throw-finally-reject.js @@ -0,0 +1,25 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer rejecting an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +var f = async() => { + try { + throw "early-throw"; + } finally { + await new Promise(function(resolve, reject) { + reject("override"); + }); + } +}; + +f().then($DONE, function(value) { + assert.sameValue(value, "override", "Awaited rejection in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/expressions/async-arrow-function/try-throw-finally-return.js b/test/language/expressions/async-arrow-function/try-throw-finally-return.js new file mode 100644 index 0000000000000000000000000000000000000000..a34cb3d1944fcefc7fe65db911c6329de37ced1b --- /dev/null +++ b/test/language/expressions/async-arrow-function/try-throw-finally-return.js @@ -0,0 +1,25 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer rejecting an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +var f = async() => { + try { + throw "early-throw"; + } finally { + return await new Promise(function(resolve, reject) { + resolve("override"); + }); + } +}; + +f().then(function(value) { + assert.sameValue(value, "override", "Return in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/expressions/async-arrow-function/try-throw-finally-throw.js b/test/language/expressions/async-arrow-function/try-throw-finally-throw.js new file mode 100644 index 0000000000000000000000000000000000000000..59b8bfd73beb1ce74460a7867784528c64e46f57 --- /dev/null +++ b/test/language/expressions/async-arrow-function/try-throw-finally-throw.js @@ -0,0 +1,23 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer rejecting an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +var f = async() => { + try { + throw "early-throw"; + } finally { + throw "override"; + } +}; + +f().then($DONE, function(value) { + assert.sameValue(value, "override", "Exception thrown in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/expressions/async-function/try-reject-finally-reject.js b/test/language/expressions/async-function/try-reject-finally-reject.js new file mode 100644 index 0000000000000000000000000000000000000000..7e15c23b789557d4fcf89d832ee1db972b4d36f8 --- /dev/null +++ b/test/language/expressions/async-function/try-reject-finally-reject.js @@ -0,0 +1,27 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer rejecting an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +var f = async function() { + try { + await new Promise(function(resolve, reject) { + reject("early-reject"); + }); + } finally { + await new Promise(function(resolve, reject) { + reject("override"); + }); + } +}; + +f().then($DONE, function(value) { + assert.sameValue(value, "override", "Awaited rejection in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/expressions/async-function/try-reject-finally-return.js b/test/language/expressions/async-function/try-reject-finally-return.js new file mode 100644 index 0000000000000000000000000000000000000000..21f96918ae3497b9a769bf582b6fd8b503522b4b --- /dev/null +++ b/test/language/expressions/async-function/try-reject-finally-return.js @@ -0,0 +1,25 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer rejecting an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +var f = async function() { + try { + await new Promise(function(resolve, reject) { + reject("early-reject"); + }); + } finally { + return "override"; + } +}; + +f().then(function(value) { + assert.sameValue(value, "override", "Return in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/expressions/async-function/try-reject-finally-throw.js b/test/language/expressions/async-function/try-reject-finally-throw.js new file mode 100644 index 0000000000000000000000000000000000000000..d5ed694908266ecbcd750ae2ddb045bf4d461c87 --- /dev/null +++ b/test/language/expressions/async-function/try-reject-finally-throw.js @@ -0,0 +1,25 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer rejecting an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +var f = async function() { + try { + await new Promise(function(resolve, reject) { + reject("early-reject"); + }); + } finally { + throw "override"; + } +}; + +f().then($DONE, function(value) { + assert.sameValue(value, "override", "Exception thrown in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/expressions/async-function/try-return-finally-reject.js b/test/language/expressions/async-function/try-return-finally-reject.js new file mode 100644 index 0000000000000000000000000000000000000000..e7a1df90fa58220ba6b0328f6e71ee6e4ae82d43 --- /dev/null +++ b/test/language/expressions/async-function/try-return-finally-reject.js @@ -0,0 +1,25 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer resolving an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +var f = async function() { + try { + return "early-return"; + } finally { + await new Promise(function(resolve, reject) { + reject("override"); + }); + } +}; + +f().then($DONE, function(value) { + assert.sameValue(value, "override", "Awaited rejection in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/expressions/async-function/try-return-finally-return.js b/test/language/expressions/async-function/try-return-finally-return.js new file mode 100644 index 0000000000000000000000000000000000000000..3727e4b94b5b824e8268f1ab05e919821ca9a5b0 --- /dev/null +++ b/test/language/expressions/async-function/try-return-finally-return.js @@ -0,0 +1,25 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer resolving an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +var f = async function() { + try { + return "early-return"; + } finally { + return await new Promise(function(resolve, reject) { + resolve("override"); + }); + } +}; + +f().then(function(value) { + assert.sameValue(value, "override", "Return in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/expressions/async-function/try-return-finally-throw.js b/test/language/expressions/async-function/try-return-finally-throw.js new file mode 100644 index 0000000000000000000000000000000000000000..e41fc34358ed753c869a7344c58946e0fb05622b --- /dev/null +++ b/test/language/expressions/async-function/try-return-finally-throw.js @@ -0,0 +1,23 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer resolving an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +var f = async function() { + try { + return "early-return"; + } finally { + throw "override"; + } +}; + +f().then($DONE, function(value) { + assert.sameValue(value, "override", "Exception thrown in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/expressions/async-function/try-throw-finally-reject.js b/test/language/expressions/async-function/try-throw-finally-reject.js new file mode 100644 index 0000000000000000000000000000000000000000..3ff3c5eb72c7a598a5f7a3a41038dea8edd5e055 --- /dev/null +++ b/test/language/expressions/async-function/try-throw-finally-reject.js @@ -0,0 +1,25 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer rejecting an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +var f = async function() { + try { + throw "early-throw"; + } finally { + await new Promise(function(resolve, reject) { + reject("override"); + }); + } +}; + +f().then($DONE, function(value) { + assert.sameValue(value, "override", "Awaited rejection in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/expressions/async-function/try-throw-finally-return.js b/test/language/expressions/async-function/try-throw-finally-return.js new file mode 100644 index 0000000000000000000000000000000000000000..dc28e980a656678e124e7dcba8c21771dcc3cdb5 --- /dev/null +++ b/test/language/expressions/async-function/try-throw-finally-return.js @@ -0,0 +1,25 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer rejecting an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +var f = async function() { + try { + throw "early-throw"; + } finally { + return await new Promise(function(resolve, reject) { + resolve("override"); + }); + } +}; + +f().then(function(value) { + assert.sameValue(value, "override", "Return in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/expressions/async-function/try-throw-finally-throw.js b/test/language/expressions/async-function/try-throw-finally-throw.js new file mode 100644 index 0000000000000000000000000000000000000000..5ffcc04827050d27d03df0ec7d1681bf13b19d41 --- /dev/null +++ b/test/language/expressions/async-function/try-throw-finally-throw.js @@ -0,0 +1,23 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer rejecting an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +var f = async function() { + try { + throw "early-throw"; + } finally { + throw "override"; + } +}; + +f().then($DONE, function(value) { + assert.sameValue(value, "override", "Exception thrown in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/statements/async-function/try-reject-finally-reject.js b/test/language/statements/async-function/try-reject-finally-reject.js new file mode 100644 index 0000000000000000000000000000000000000000..f8c4f79c481bb42bb1c02ca26572af246964e75b --- /dev/null +++ b/test/language/statements/async-function/try-reject-finally-reject.js @@ -0,0 +1,27 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer rejecting an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +async function f() { + try { + await new Promise(function(resolve, reject) { + reject("early-reject"); + }); + } finally { + await new Promise(function(resolve, reject) { + reject("override"); + }); + } +} + +f().then($DONE, function(value) { + assert.sameValue(value, "override", "Awaited rejection in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/statements/async-function/try-reject-finally-return.js b/test/language/statements/async-function/try-reject-finally-return.js new file mode 100644 index 0000000000000000000000000000000000000000..bf522673bfb5830b2cabb9728c91913a2bb90296 --- /dev/null +++ b/test/language/statements/async-function/try-reject-finally-return.js @@ -0,0 +1,25 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer rejecting an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +async function f() { + try { + await new Promise(function(resolve, reject) { + reject("early-reject"); + }); + } finally { + return "override"; + } +} + +f().then(function(value) { + assert.sameValue(value, "override", "Return in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/statements/async-function/try-reject-finally-throw.js b/test/language/statements/async-function/try-reject-finally-throw.js new file mode 100644 index 0000000000000000000000000000000000000000..4211cf29d7a1ed86309c2f04421ed894fe667016 --- /dev/null +++ b/test/language/statements/async-function/try-reject-finally-throw.js @@ -0,0 +1,25 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer rejecting an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +async function f() { + try { + await new Promise(function(resolve, reject) { + reject("early-reject"); + }); + } finally { + throw "override"; + } +} + +f().then($DONE, function(value) { + assert.sameValue(value, "override", "Exception thrown in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/statements/async-function/try-return-finally-reject.js b/test/language/statements/async-function/try-return-finally-reject.js new file mode 100644 index 0000000000000000000000000000000000000000..b477407a515f266fd85a1ba5112598dc572592d3 --- /dev/null +++ b/test/language/statements/async-function/try-return-finally-reject.js @@ -0,0 +1,25 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer resolving an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +async function f() { + try { + return "early-return"; + } finally { + await new Promise(function(resolve, reject) { + reject("override"); + }); + } +} + +f().then($DONE, function(value) { + assert.sameValue(value, "override", "Awaited rejection in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/statements/async-function/try-return-finally-return.js b/test/language/statements/async-function/try-return-finally-return.js new file mode 100644 index 0000000000000000000000000000000000000000..60c0e73cd661009ab24d012a1e273398c8702559 --- /dev/null +++ b/test/language/statements/async-function/try-return-finally-return.js @@ -0,0 +1,25 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer resolving an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +async function f() { + try { + return "early-return"; + } finally { + return await new Promise(function(resolve, reject) { + resolve("override"); + }); + } +} + +f().then(function(value) { + assert.sameValue(value, "override", "Return in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/statements/async-function/try-return-finally-throw.js b/test/language/statements/async-function/try-return-finally-throw.js new file mode 100644 index 0000000000000000000000000000000000000000..8e03895cd3afdd2d84b67f2b92e1e741eb3744b8 --- /dev/null +++ b/test/language/statements/async-function/try-return-finally-throw.js @@ -0,0 +1,23 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer resolving an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +async function f() { + try { + return "early-return"; + } finally { + throw "override"; + } +} + +f().then($DONE, function(value) { + assert.sameValue(value, "override", "Exception thrown in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/statements/async-function/try-throw-finally-reject.js b/test/language/statements/async-function/try-throw-finally-reject.js new file mode 100644 index 0000000000000000000000000000000000000000..590b39292741248d7979cdb38717164ecca3897c --- /dev/null +++ b/test/language/statements/async-function/try-throw-finally-reject.js @@ -0,0 +1,25 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer rejecting an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +async function f() { + try { + throw "early-throw"; + } finally { + await new Promise(function(resolve, reject) { + reject("override"); + }); + } +} + +f().then($DONE, function(value) { + assert.sameValue(value, "override", "Awaited rejection in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/statements/async-function/try-throw-finally-return.js b/test/language/statements/async-function/try-throw-finally-return.js new file mode 100644 index 0000000000000000000000000000000000000000..73f4da6a88c8042c17b21073b0a738edc21d1f20 --- /dev/null +++ b/test/language/statements/async-function/try-throw-finally-return.js @@ -0,0 +1,25 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer rejecting an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +async function f() { + try { + throw "early-throw"; + } finally { + return await new Promise(function(resolve, reject) { + resolve("override"); + }); + } +} + +f().then(function(value) { + assert.sameValue(value, "override", "Return in finally block"); +}).then($DONE, $DONE); diff --git a/test/language/statements/async-function/try-throw-finally-throw.js b/test/language/statements/async-function/try-throw-finally-throw.js new file mode 100644 index 0000000000000000000000000000000000000000..9d560a14fccecc19b3604f12e19147eb78034b0f --- /dev/null +++ b/test/language/statements/async-function/try-throw-finally-throw.js @@ -0,0 +1,23 @@ +// Copyright 2017 Caitlin Potter. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +author: Caitlin Potter <caitp@igalia.com> +esid: pending +description: > + Implementations must defer rejecting an async function's Promise until after + all finally blocks have been evaluated. +flags: [async] +---*/ + +async function f() { + try { + throw "early-throw"; + } finally { + throw "override"; + } +} + +f().then($DONE, function(value) { + assert.sameValue(value, "override", "Exception thrown in finally block"); +}).then($DONE, $DONE);