diff --git a/src/async-generators/yield-promise-reject-next-catch.case b/src/async-generators/yield-promise-reject-next-catch.case new file mode 100644 index 0000000000000000000000000000000000000000..bc056813398cfe54cabdbcc054c6ae0429a4be55 --- /dev/null +++ b/src/async-generators/yield-promise-reject-next-catch.case @@ -0,0 +1,27 @@ +// Copyright (C) 2017 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: yield Promise.reject(value) is treated as throw value +template: default +flags: [async] +---*/ + +//- setup +let error = new Error(); +//- body +yield Promise.reject(error); +yield "unreachable"; +//- assertions +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}).catch(rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}); diff --git a/src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case b/src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case new file mode 100644 index 0000000000000000000000000000000000000000..bca3550a4496a91c3e3f1486811d9179815011d0 --- /dev/null +++ b/src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case @@ -0,0 +1,33 @@ +// Copyright (C) 2017 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: yield * [Promise.reject(value)] is treated as throw value +template: default +flags: [async] +---*/ + +//- setup +let error = new Error(); +async function * readFile() { + yield Promise.reject(error); + yield "unreachable"; +} +//- body +for await (let line of readFile()) { + yield line; +} +//- assertions +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); diff --git a/src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case b/src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case new file mode 100644 index 0000000000000000000000000000000000000000..19774b0943dc5ef2e5e79e92ff34296acdb114ea --- /dev/null +++ b/src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case @@ -0,0 +1,32 @@ +// Copyright (C) 2017 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: yield Promise.reject(value) in for-await-of is treated as throw value +template: default +flags: [async] +---*/ + +//- setup +let error = new Error(); +let iterable = [ + Promise.reject(error), + "unreachable" +]; +//- body +for await (let value of iterable) { + yield value; +} +//- assertions +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); diff --git a/src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case b/src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case new file mode 100644 index 0000000000000000000000000000000000000000..5239f6068bd0f530aad5f388632af49901d20b5d --- /dev/null +++ b/src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case @@ -0,0 +1,31 @@ +// Copyright (C) 2017 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: yield * (async iterator) is treated as throw value +template: default +flags: [async] +---*/ + +//- setup +let error = new Error(); +async function * readFile() { + yield Promise.reject(error); + yield "unreachable"; +} +//- body +yield * readFile(); + +//- assertions +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).then($DONE, $DONE); diff --git a/src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case b/src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case new file mode 100644 index 0000000000000000000000000000000000000000..36fb4da678aa2486b02353fd03687994471dbe54 --- /dev/null +++ b/src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case @@ -0,0 +1,30 @@ +// Copyright (C) 2017 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: yield * (async iterator) is treated as throw value +template: default +flags: [async] +---*/ + +//- setup +let error = new Error(); +let iterable = [ + Promise.reject(error), + "unreachable" +]; +//- body +yield * iterable; +//- assertions +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); diff --git a/src/async-generators/yield-promise-reject-next.case b/src/async-generators/yield-promise-reject-next.case new file mode 100644 index 0000000000000000000000000000000000000000..09a1eba75417e25d79792e12c90faf6a0be59829 --- /dev/null +++ b/src/async-generators/yield-promise-reject-next.case @@ -0,0 +1,27 @@ +// Copyright (C) 2017 the V8 project authors. All rights reserved. +// This code is governed by the BSD license found in the LICENSE file. + +/*--- +desc: yield Promise.reject(value) is treated as throw value +template: default +flags: [async] +---*/ + +//- setup +let error = new Error(); +//- body +yield Promise.reject(error); +yield "unreachable"; +//- assertions +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); diff --git a/test/language/expressions/async-generator/named-yield-promise-reject-next-catch.js b/test/language/expressions/async-generator/named-yield-promise-reject-next-catch.js new file mode 100644 index 0000000000000000000000000000000000000000..59d8be4235bcbe9450b21bc80222b606868cf52c --- /dev/null +++ b/test/language/expressions/async-generator/named-yield-promise-reject-next-catch.js @@ -0,0 +1,43 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-catch.case +// - src/async-generators/default/async-expression-named.template +/*--- +description: yield Promise.reject(value) is treated as throw value (Named async generator expression) +esid: prod-AsyncGeneratorExpression +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorExpression : + async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) { + AsyncGeneratorBody } + +---*/ +let error = new Error(); + + +var callCount = 0; + +var gen = async function *g() { + callCount += 1; + yield Promise.reject(error); + yield "unreachable"; +}; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}).catch(rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/async-generator/named-yield-promise-reject-next-for-await-of-async-iterator.js b/test/language/expressions/async-generator/named-yield-promise-reject-next-for-await-of-async-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..29cbdb6b5aa0cd5c850cf5ef4a54ed6da8d7f6f8 --- /dev/null +++ b/test/language/expressions/async-generator/named-yield-promise-reject-next-for-await-of-async-iterator.js @@ -0,0 +1,49 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case +// - src/async-generators/default/async-expression-named.template +/*--- +description: yield * [Promise.reject(value)] is treated as throw value (Named async generator expression) +esid: prod-AsyncGeneratorExpression +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorExpression : + async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) { + AsyncGeneratorBody } + +---*/ +let error = new Error(); +async function * readFile() { + yield Promise.reject(error); + yield "unreachable"; +} + + +var callCount = 0; + +var gen = async function *g() { + callCount += 1; + for await (let line of readFile()) { + yield line; + } +}; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/async-generator/named-yield-promise-reject-next-for-await-of-sync-iterator.js b/test/language/expressions/async-generator/named-yield-promise-reject-next-for-await-of-sync-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..21bb881198a150a5fdc4b104d74e1fd63b8188d1 --- /dev/null +++ b/test/language/expressions/async-generator/named-yield-promise-reject-next-for-await-of-sync-iterator.js @@ -0,0 +1,48 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case +// - src/async-generators/default/async-expression-named.template +/*--- +description: yield Promise.reject(value) in for-await-of is treated as throw value (Named async generator expression) +esid: prod-AsyncGeneratorExpression +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorExpression : + async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) { + AsyncGeneratorBody } + +---*/ +let error = new Error(); +let iterable = [ + Promise.reject(error), + "unreachable" +]; + + +var callCount = 0; + +var gen = async function *g() { + callCount += 1; + for await (let value of iterable) { + yield value; + } +}; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/async-generator/named-yield-promise-reject-next-yield-star-async-iterator.js b/test/language/expressions/async-generator/named-yield-promise-reject-next-yield-star-async-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..0794cd9f6c73acc9be56dac00d96d48c9fa145c2 --- /dev/null +++ b/test/language/expressions/async-generator/named-yield-promise-reject-next-yield-star-async-iterator.js @@ -0,0 +1,47 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case +// - src/async-generators/default/async-expression-named.template +/*--- +description: yield * (async iterator) is treated as throw value (Named async generator expression) +esid: prod-AsyncGeneratorExpression +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorExpression : + async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) { + AsyncGeneratorBody } + +---*/ +let error = new Error(); +async function * readFile() { + yield Promise.reject(error); + yield "unreachable"; +} + + +var callCount = 0; + +var gen = async function *g() { + callCount += 1; + yield * readFile(); + +}; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).then($DONE, $DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/async-generator/named-yield-promise-reject-next-yield-star-sync-iterator.js b/test/language/expressions/async-generator/named-yield-promise-reject-next-yield-star-sync-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..72e72df6281ae6bfd78487ae02f2de6c4d347bba --- /dev/null +++ b/test/language/expressions/async-generator/named-yield-promise-reject-next-yield-star-sync-iterator.js @@ -0,0 +1,46 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case +// - src/async-generators/default/async-expression-named.template +/*--- +description: yield * (async iterator) is treated as throw value (Named async generator expression) +esid: prod-AsyncGeneratorExpression +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorExpression : + async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) { + AsyncGeneratorBody } + +---*/ +let error = new Error(); +let iterable = [ + Promise.reject(error), + "unreachable" +]; + + +var callCount = 0; + +var gen = async function *g() { + callCount += 1; + yield * iterable; +}; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/async-generator/named-yield-promise-reject-next.js b/test/language/expressions/async-generator/named-yield-promise-reject-next.js new file mode 100644 index 0000000000000000000000000000000000000000..ad22eb20ebe769c3be52983bb708971458b20441 --- /dev/null +++ b/test/language/expressions/async-generator/named-yield-promise-reject-next.js @@ -0,0 +1,43 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next.case +// - src/async-generators/default/async-expression-named.template +/*--- +description: yield Promise.reject(value) is treated as throw value (Named async generator expression) +esid: prod-AsyncGeneratorExpression +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorExpression : + async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) { + AsyncGeneratorBody } + +---*/ +let error = new Error(); + + +var callCount = 0; + +var gen = async function *g() { + callCount += 1; + yield Promise.reject(error); + yield "unreachable"; +}; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/async-generator/yield-promise-reject-next-catch.js b/test/language/expressions/async-generator/yield-promise-reject-next-catch.js new file mode 100644 index 0000000000000000000000000000000000000000..e1e7551dde1289549289dd172b2b92edaa98d76b --- /dev/null +++ b/test/language/expressions/async-generator/yield-promise-reject-next-catch.js @@ -0,0 +1,43 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-catch.case +// - src/async-generators/default/async-expression.template +/*--- +description: yield Promise.reject(value) is treated as throw value (Unnamed async generator expression) +esid: prod-AsyncGeneratorExpression +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorExpression : + async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) { + AsyncGeneratorBody } + +---*/ +let error = new Error(); + + +var callCount = 0; + +var gen = async function *() { + callCount += 1; + yield Promise.reject(error); + yield "unreachable"; +}; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}).catch(rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/async-generator/yield-promise-reject-next-for-await-of-async-iterator.js b/test/language/expressions/async-generator/yield-promise-reject-next-for-await-of-async-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..8e265f1f9c566b491b00df3941996366946a6a03 --- /dev/null +++ b/test/language/expressions/async-generator/yield-promise-reject-next-for-await-of-async-iterator.js @@ -0,0 +1,49 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case +// - src/async-generators/default/async-expression.template +/*--- +description: yield * [Promise.reject(value)] is treated as throw value (Unnamed async generator expression) +esid: prod-AsyncGeneratorExpression +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorExpression : + async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) { + AsyncGeneratorBody } + +---*/ +let error = new Error(); +async function * readFile() { + yield Promise.reject(error); + yield "unreachable"; +} + + +var callCount = 0; + +var gen = async function *() { + callCount += 1; + for await (let line of readFile()) { + yield line; + } +}; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/async-generator/yield-promise-reject-next-for-await-of-sync-iterator.js b/test/language/expressions/async-generator/yield-promise-reject-next-for-await-of-sync-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..7c98b1a8b4883b30c14fe470053441a163b39878 --- /dev/null +++ b/test/language/expressions/async-generator/yield-promise-reject-next-for-await-of-sync-iterator.js @@ -0,0 +1,48 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case +// - src/async-generators/default/async-expression.template +/*--- +description: yield Promise.reject(value) in for-await-of is treated as throw value (Unnamed async generator expression) +esid: prod-AsyncGeneratorExpression +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorExpression : + async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) { + AsyncGeneratorBody } + +---*/ +let error = new Error(); +let iterable = [ + Promise.reject(error), + "unreachable" +]; + + +var callCount = 0; + +var gen = async function *() { + callCount += 1; + for await (let value of iterable) { + yield value; + } +}; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/async-generator/yield-promise-reject-next-yield-star-async-iterator.js b/test/language/expressions/async-generator/yield-promise-reject-next-yield-star-async-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..ae21e98dff996e6b7bff6f7272dd394279cd4a90 --- /dev/null +++ b/test/language/expressions/async-generator/yield-promise-reject-next-yield-star-async-iterator.js @@ -0,0 +1,47 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case +// - src/async-generators/default/async-expression.template +/*--- +description: yield * (async iterator) is treated as throw value (Unnamed async generator expression) +esid: prod-AsyncGeneratorExpression +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorExpression : + async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) { + AsyncGeneratorBody } + +---*/ +let error = new Error(); +async function * readFile() { + yield Promise.reject(error); + yield "unreachable"; +} + + +var callCount = 0; + +var gen = async function *() { + callCount += 1; + yield * readFile(); + +}; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).then($DONE, $DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/async-generator/yield-promise-reject-next-yield-star-sync-iterator.js b/test/language/expressions/async-generator/yield-promise-reject-next-yield-star-sync-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..c910527c004716169489ccf192adb0fd90c08d8f --- /dev/null +++ b/test/language/expressions/async-generator/yield-promise-reject-next-yield-star-sync-iterator.js @@ -0,0 +1,46 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case +// - src/async-generators/default/async-expression.template +/*--- +description: yield * (async iterator) is treated as throw value (Unnamed async generator expression) +esid: prod-AsyncGeneratorExpression +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorExpression : + async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) { + AsyncGeneratorBody } + +---*/ +let error = new Error(); +let iterable = [ + Promise.reject(error), + "unreachable" +]; + + +var callCount = 0; + +var gen = async function *() { + callCount += 1; + yield * iterable; +}; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/async-generator/yield-promise-reject-next.js b/test/language/expressions/async-generator/yield-promise-reject-next.js new file mode 100644 index 0000000000000000000000000000000000000000..a9bdaa6832ff59fe5485cbc10feb24b04b66dabf --- /dev/null +++ b/test/language/expressions/async-generator/yield-promise-reject-next.js @@ -0,0 +1,43 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next.case +// - src/async-generators/default/async-expression.template +/*--- +description: yield Promise.reject(value) is treated as throw value (Unnamed async generator expression) +esid: prod-AsyncGeneratorExpression +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorExpression : + async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) { + AsyncGeneratorBody } + +---*/ +let error = new Error(); + + +var callCount = 0; + +var gen = async function *() { + callCount += 1; + yield Promise.reject(error); + yield "unreachable"; +}; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-catch.js b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-catch.js new file mode 100644 index 0000000000000000000000000000000000000000..d34011e074e39db44ed9d5fba9ff487a567dc836 --- /dev/null +++ b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-catch.js @@ -0,0 +1,50 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-catch.case +// - src/async-generators/default/async-class-expr-static-method.template +/*--- +description: yield Promise.reject(value) is treated as throw value (Static async generator method as a ClassExpression element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); + + +var callCount = 0; + +var C = class { static async *gen() { + callCount += 1; + yield Promise.reject(error); + yield "unreachable"; +}} + +var gen = C.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}).catch(rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-for-await-of-async-iterator.js b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-for-await-of-async-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..f2b2c68d2daed34367a87b527a4656158d1b4dbf --- /dev/null +++ b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-for-await-of-async-iterator.js @@ -0,0 +1,56 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case +// - src/async-generators/default/async-class-expr-static-method.template +/*--- +description: yield * [Promise.reject(value)] is treated as throw value (Static async generator method as a ClassExpression element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +async function * readFile() { + yield Promise.reject(error); + yield "unreachable"; +} + + +var callCount = 0; + +var C = class { static async *gen() { + callCount += 1; + for await (let line of readFile()) { + yield line; + } +}} + +var gen = C.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-for-await-of-sync-iterator.js b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-for-await-of-sync-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..902a52c7f83d1820d9190a8ba19d08932691b310 --- /dev/null +++ b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-for-await-of-sync-iterator.js @@ -0,0 +1,55 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case +// - src/async-generators/default/async-class-expr-static-method.template +/*--- +description: yield Promise.reject(value) in for-await-of is treated as throw value (Static async generator method as a ClassExpression element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +let iterable = [ + Promise.reject(error), + "unreachable" +]; + + +var callCount = 0; + +var C = class { static async *gen() { + callCount += 1; + for await (let value of iterable) { + yield value; + } +}} + +var gen = C.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-yield-star-async-iterator.js b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-yield-star-async-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..9f17fe1245edc2fa74b7bb7d6cc326624e35d584 --- /dev/null +++ b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-yield-star-async-iterator.js @@ -0,0 +1,54 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case +// - src/async-generators/default/async-class-expr-static-method.template +/*--- +description: yield * (async iterator) is treated as throw value (Static async generator method as a ClassExpression element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +async function * readFile() { + yield Promise.reject(error); + yield "unreachable"; +} + + +var callCount = 0; + +var C = class { static async *gen() { + callCount += 1; + yield * readFile(); + +}} + +var gen = C.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).then($DONE, $DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-yield-star-sync-iterator.js b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-yield-star-sync-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..42d7ddc978a8ef1f18377c0dfefc01bc4b573480 --- /dev/null +++ b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next-yield-star-sync-iterator.js @@ -0,0 +1,53 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case +// - src/async-generators/default/async-class-expr-static-method.template +/*--- +description: yield * (async iterator) is treated as throw value (Static async generator method as a ClassExpression element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +let iterable = [ + Promise.reject(error), + "unreachable" +]; + + +var callCount = 0; + +var C = class { static async *gen() { + callCount += 1; + yield * iterable; +}} + +var gen = C.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next.js b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next.js new file mode 100644 index 0000000000000000000000000000000000000000..3e5341be4032f44de53e2e04780be8619d14579d --- /dev/null +++ b/test/language/expressions/class/async-gen-method-static-yield-promise-reject-next.js @@ -0,0 +1,50 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next.case +// - src/async-generators/default/async-class-expr-static-method.template +/*--- +description: yield Promise.reject(value) is treated as throw value (Static async generator method as a ClassExpression element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); + + +var callCount = 0; + +var C = class { static async *gen() { + callCount += 1; + yield Promise.reject(error); + yield "unreachable"; +}} + +var gen = C.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/class/async-gen-method-yield-promise-reject-next-catch.js b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-catch.js new file mode 100644 index 0000000000000000000000000000000000000000..4be0f63cb7f6aae6d9e6fc1943fc34a28998871b --- /dev/null +++ b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-catch.js @@ -0,0 +1,50 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-catch.case +// - src/async-generators/default/async-class-expr-method.template +/*--- +description: yield Promise.reject(value) is treated as throw value (Async generator method as a ClassExpression element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); + + +var callCount = 0; + +var C = class { async *gen() { + callCount += 1; + yield Promise.reject(error); + yield "unreachable"; +}} + +var gen = C.prototype.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}).catch(rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/class/async-gen-method-yield-promise-reject-next-for-await-of-async-iterator.js b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-for-await-of-async-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..518ec97ca5d2a0f3137105ac6fd0e5b74c632cc5 --- /dev/null +++ b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-for-await-of-async-iterator.js @@ -0,0 +1,56 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case +// - src/async-generators/default/async-class-expr-method.template +/*--- +description: yield * [Promise.reject(value)] is treated as throw value (Async generator method as a ClassExpression element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +async function * readFile() { + yield Promise.reject(error); + yield "unreachable"; +} + + +var callCount = 0; + +var C = class { async *gen() { + callCount += 1; + for await (let line of readFile()) { + yield line; + } +}} + +var gen = C.prototype.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/class/async-gen-method-yield-promise-reject-next-for-await-of-sync-iterator.js b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-for-await-of-sync-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..6b58961b08acaa84a4df7bb7fa5f9fdbaccd6b3c --- /dev/null +++ b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-for-await-of-sync-iterator.js @@ -0,0 +1,55 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case +// - src/async-generators/default/async-class-expr-method.template +/*--- +description: yield Promise.reject(value) in for-await-of is treated as throw value (Async generator method as a ClassExpression element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +let iterable = [ + Promise.reject(error), + "unreachable" +]; + + +var callCount = 0; + +var C = class { async *gen() { + callCount += 1; + for await (let value of iterable) { + yield value; + } +}} + +var gen = C.prototype.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/class/async-gen-method-yield-promise-reject-next-yield-star-async-iterator.js b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-yield-star-async-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..c245cf3579192d8774fa26995bfe191c858a5b33 --- /dev/null +++ b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-yield-star-async-iterator.js @@ -0,0 +1,54 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case +// - src/async-generators/default/async-class-expr-method.template +/*--- +description: yield * (async iterator) is treated as throw value (Async generator method as a ClassExpression element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +async function * readFile() { + yield Promise.reject(error); + yield "unreachable"; +} + + +var callCount = 0; + +var C = class { async *gen() { + callCount += 1; + yield * readFile(); + +}} + +var gen = C.prototype.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).then($DONE, $DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/class/async-gen-method-yield-promise-reject-next-yield-star-sync-iterator.js b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-yield-star-sync-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..e17f0c12f0078df0283c2d0cf87d4e9db95a5f78 --- /dev/null +++ b/test/language/expressions/class/async-gen-method-yield-promise-reject-next-yield-star-sync-iterator.js @@ -0,0 +1,53 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case +// - src/async-generators/default/async-class-expr-method.template +/*--- +description: yield * (async iterator) is treated as throw value (Async generator method as a ClassExpression element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +let iterable = [ + Promise.reject(error), + "unreachable" +]; + + +var callCount = 0; + +var C = class { async *gen() { + callCount += 1; + yield * iterable; +}} + +var gen = C.prototype.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/class/async-gen-method-yield-promise-reject-next.js b/test/language/expressions/class/async-gen-method-yield-promise-reject-next.js new file mode 100644 index 0000000000000000000000000000000000000000..423a7842f6af4d69a10d72fc41a1c67625c95550 --- /dev/null +++ b/test/language/expressions/class/async-gen-method-yield-promise-reject-next.js @@ -0,0 +1,50 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next.case +// - src/async-generators/default/async-class-expr-method.template +/*--- +description: yield Promise.reject(value) is treated as throw value (Async generator method as a ClassExpression element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); + + +var callCount = 0; + +var C = class { async *gen() { + callCount += 1; + yield Promise.reject(error); + yield "unreachable"; +}} + +var gen = C.prototype.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-catch.js b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-catch.js new file mode 100644 index 0000000000000000000000000000000000000000..3721180ebd41328c8035b257cd5780e8cef7eb23 --- /dev/null +++ b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-catch.js @@ -0,0 +1,43 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-catch.case +// - src/async-generators/default/async-obj-method.template +/*--- +description: yield Promise.reject(value) is treated as throw value (Async generator method) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); + +var callCount = 0; + +var gen = { + async *method() { + callCount += 1; + yield Promise.reject(error); + yield "unreachable"; + } +}.method; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}).catch(rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-for-await-of-async-iterator.js b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-for-await-of-async-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..14906893e740642b1e73656e323b40969b25068b --- /dev/null +++ b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-for-await-of-async-iterator.js @@ -0,0 +1,49 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case +// - src/async-generators/default/async-obj-method.template +/*--- +description: yield * [Promise.reject(value)] is treated as throw value (Async generator method) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +async function * readFile() { + yield Promise.reject(error); + yield "unreachable"; +} + +var callCount = 0; + +var gen = { + async *method() { + callCount += 1; + for await (let line of readFile()) { + yield line; + } + } +}.method; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-for-await-of-sync-iterator.js b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-for-await-of-sync-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..693da2fec7d58fdab767c8047db7b8eec3958819 --- /dev/null +++ b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-for-await-of-sync-iterator.js @@ -0,0 +1,48 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case +// - src/async-generators/default/async-obj-method.template +/*--- +description: yield Promise.reject(value) in for-await-of is treated as throw value (Async generator method) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +let iterable = [ + Promise.reject(error), + "unreachable" +]; + +var callCount = 0; + +var gen = { + async *method() { + callCount += 1; + for await (let value of iterable) { + yield value; + } + } +}.method; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-yield-star-async-iterator.js b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-yield-star-async-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..26167b5f7f9e12bef95f064421ddcd14ad893f4e --- /dev/null +++ b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-yield-star-async-iterator.js @@ -0,0 +1,47 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case +// - src/async-generators/default/async-obj-method.template +/*--- +description: yield * (async iterator) is treated as throw value (Async generator method) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +async function * readFile() { + yield Promise.reject(error); + yield "unreachable"; +} + +var callCount = 0; + +var gen = { + async *method() { + callCount += 1; + yield * readFile(); + + } +}.method; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).then($DONE, $DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-yield-star-sync-iterator.js b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-yield-star-sync-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..7ddf2bf64f5087f82ab5d42bc08c4b755893c310 --- /dev/null +++ b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next-yield-star-sync-iterator.js @@ -0,0 +1,46 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case +// - src/async-generators/default/async-obj-method.template +/*--- +description: yield * (async iterator) is treated as throw value (Async generator method) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +let iterable = [ + Promise.reject(error), + "unreachable" +]; + +var callCount = 0; + +var gen = { + async *method() { + callCount += 1; + yield * iterable; + } +}.method; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next.js b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next.js new file mode 100644 index 0000000000000000000000000000000000000000..a4bcb40c8d3a1e8211dbde674aa4a8cb36cdda5f --- /dev/null +++ b/test/language/expressions/object/method-definition/async-gen-yield-promise-reject-next.js @@ -0,0 +1,43 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next.case +// - src/async-generators/default/async-obj-method.template +/*--- +description: yield Promise.reject(value) is treated as throw value (Async generator method) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); + +var callCount = 0; + +var gen = { + async *method() { + callCount += 1; + yield Promise.reject(error); + yield "unreachable"; + } +}.method; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/async-generator/yield-promise-reject-next-catch.js b/test/language/statements/async-generator/yield-promise-reject-next-catch.js new file mode 100644 index 0000000000000000000000000000000000000000..b9215dbfd78bc86123c296661ac0ce70bccd63cd --- /dev/null +++ b/test/language/statements/async-generator/yield-promise-reject-next-catch.js @@ -0,0 +1,43 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-catch.case +// - src/async-generators/default/async-declaration.template +/*--- +description: yield Promise.reject(value) is treated as throw value (Async generator Function declaration) +esid: prod-AsyncGeneratorDeclaration +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorDeclaration: + async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) { + AsyncGeneratorBody } + +---*/ +let error = new Error(); + + +var callCount = 0; + +async function *gen() { + callCount += 1; + yield Promise.reject(error); + yield "unreachable"; +} + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}).catch(rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/async-generator/yield-promise-reject-next-for-await-of-async-iterator.js b/test/language/statements/async-generator/yield-promise-reject-next-for-await-of-async-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..f753b346f8150bb23cb97fe410fff55430327484 --- /dev/null +++ b/test/language/statements/async-generator/yield-promise-reject-next-for-await-of-async-iterator.js @@ -0,0 +1,49 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case +// - src/async-generators/default/async-declaration.template +/*--- +description: yield * [Promise.reject(value)] is treated as throw value (Async generator Function declaration) +esid: prod-AsyncGeneratorDeclaration +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorDeclaration: + async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) { + AsyncGeneratorBody } + +---*/ +let error = new Error(); +async function * readFile() { + yield Promise.reject(error); + yield "unreachable"; +} + + +var callCount = 0; + +async function *gen() { + callCount += 1; + for await (let line of readFile()) { + yield line; + } +} + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/async-generator/yield-promise-reject-next-for-await-of-sync-iterator.js b/test/language/statements/async-generator/yield-promise-reject-next-for-await-of-sync-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..1b7c4473aae7b496da13bb5274b89404fb8dc6cf --- /dev/null +++ b/test/language/statements/async-generator/yield-promise-reject-next-for-await-of-sync-iterator.js @@ -0,0 +1,48 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case +// - src/async-generators/default/async-declaration.template +/*--- +description: yield Promise.reject(value) in for-await-of is treated as throw value (Async generator Function declaration) +esid: prod-AsyncGeneratorDeclaration +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorDeclaration: + async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) { + AsyncGeneratorBody } + +---*/ +let error = new Error(); +let iterable = [ + Promise.reject(error), + "unreachable" +]; + + +var callCount = 0; + +async function *gen() { + callCount += 1; + for await (let value of iterable) { + yield value; + } +} + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/async-generator/yield-promise-reject-next-yield-star-async-iterator.js b/test/language/statements/async-generator/yield-promise-reject-next-yield-star-async-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..5c455994af3de2f6a2b1b2e24578ee780560db97 --- /dev/null +++ b/test/language/statements/async-generator/yield-promise-reject-next-yield-star-async-iterator.js @@ -0,0 +1,47 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case +// - src/async-generators/default/async-declaration.template +/*--- +description: yield * (async iterator) is treated as throw value (Async generator Function declaration) +esid: prod-AsyncGeneratorDeclaration +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorDeclaration: + async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) { + AsyncGeneratorBody } + +---*/ +let error = new Error(); +async function * readFile() { + yield Promise.reject(error); + yield "unreachable"; +} + + +var callCount = 0; + +async function *gen() { + callCount += 1; + yield * readFile(); + +} + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).then($DONE, $DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/async-generator/yield-promise-reject-next-yield-star-sync-iterator.js b/test/language/statements/async-generator/yield-promise-reject-next-yield-star-sync-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..6c01a8749cfb659dff0a724a353c5923d0346796 --- /dev/null +++ b/test/language/statements/async-generator/yield-promise-reject-next-yield-star-sync-iterator.js @@ -0,0 +1,46 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case +// - src/async-generators/default/async-declaration.template +/*--- +description: yield * (async iterator) is treated as throw value (Async generator Function declaration) +esid: prod-AsyncGeneratorDeclaration +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorDeclaration: + async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) { + AsyncGeneratorBody } + +---*/ +let error = new Error(); +let iterable = [ + Promise.reject(error), + "unreachable" +]; + + +var callCount = 0; + +async function *gen() { + callCount += 1; + yield * iterable; +} + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/async-generator/yield-promise-reject-next.js b/test/language/statements/async-generator/yield-promise-reject-next.js new file mode 100644 index 0000000000000000000000000000000000000000..9e8ef58dafb2afa02b8386dff9280a2a54cee48a --- /dev/null +++ b/test/language/statements/async-generator/yield-promise-reject-next.js @@ -0,0 +1,43 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next.case +// - src/async-generators/default/async-declaration.template +/*--- +description: yield Promise.reject(value) is treated as throw value (Async generator Function declaration) +esid: prod-AsyncGeneratorDeclaration +features: [async-iteration] +flags: [generated, async] +info: | + Async Generator Function Definitions + + AsyncGeneratorDeclaration: + async [no LineTerminator here] function * BindingIdentifier ( FormalParameters ) { + AsyncGeneratorBody } + +---*/ +let error = new Error(); + + +var callCount = 0; + +async function *gen() { + callCount += 1; + yield Promise.reject(error); + yield "unreachable"; +} + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-catch.js b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-catch.js new file mode 100644 index 0000000000000000000000000000000000000000..63e9b2c427572e38f903217d3ca33e11304486a7 --- /dev/null +++ b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-catch.js @@ -0,0 +1,50 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-catch.case +// - src/async-generators/default/async-class-decl-static-method.template +/*--- +description: yield Promise.reject(value) is treated as throw value (Static async generator method as a ClassDeclaration element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); + + +var callCount = 0; + +class C { static async *gen() { + callCount += 1; + yield Promise.reject(error); + yield "unreachable"; +}} + +var gen = C.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}).catch(rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-for-await-of-async-iterator.js b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-for-await-of-async-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..8c345c2044799fe8bbe3236f4ed654c95c2725c9 --- /dev/null +++ b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-for-await-of-async-iterator.js @@ -0,0 +1,56 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case +// - src/async-generators/default/async-class-decl-static-method.template +/*--- +description: yield * [Promise.reject(value)] is treated as throw value (Static async generator method as a ClassDeclaration element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +async function * readFile() { + yield Promise.reject(error); + yield "unreachable"; +} + + +var callCount = 0; + +class C { static async *gen() { + callCount += 1; + for await (let line of readFile()) { + yield line; + } +}} + +var gen = C.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-for-await-of-sync-iterator.js b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-for-await-of-sync-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..d9b58325ef309f7a3c01cbb67b7d4198caa624ec --- /dev/null +++ b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-for-await-of-sync-iterator.js @@ -0,0 +1,55 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case +// - src/async-generators/default/async-class-decl-static-method.template +/*--- +description: yield Promise.reject(value) in for-await-of is treated as throw value (Static async generator method as a ClassDeclaration element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +let iterable = [ + Promise.reject(error), + "unreachable" +]; + + +var callCount = 0; + +class C { static async *gen() { + callCount += 1; + for await (let value of iterable) { + yield value; + } +}} + +var gen = C.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-yield-star-async-iterator.js b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-yield-star-async-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..ba0401d2092abc83b4b757b88c2eb04461c305f6 --- /dev/null +++ b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-yield-star-async-iterator.js @@ -0,0 +1,54 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case +// - src/async-generators/default/async-class-decl-static-method.template +/*--- +description: yield * (async iterator) is treated as throw value (Static async generator method as a ClassDeclaration element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +async function * readFile() { + yield Promise.reject(error); + yield "unreachable"; +} + + +var callCount = 0; + +class C { static async *gen() { + callCount += 1; + yield * readFile(); + +}} + +var gen = C.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).then($DONE, $DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-yield-star-sync-iterator.js b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-yield-star-sync-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..545756025b9fd51d4da164763fbe6abedf417945 --- /dev/null +++ b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next-yield-star-sync-iterator.js @@ -0,0 +1,53 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case +// - src/async-generators/default/async-class-decl-static-method.template +/*--- +description: yield * (async iterator) is treated as throw value (Static async generator method as a ClassDeclaration element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +let iterable = [ + Promise.reject(error), + "unreachable" +]; + + +var callCount = 0; + +class C { static async *gen() { + callCount += 1; + yield * iterable; +}} + +var gen = C.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/async-gen-method-static-yield-promise-reject-next.js b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next.js new file mode 100644 index 0000000000000000000000000000000000000000..b10840fc376694108a2453b47512f96c3f793f85 --- /dev/null +++ b/test/language/statements/class/async-gen-method-static-yield-promise-reject-next.js @@ -0,0 +1,50 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next.case +// - src/async-generators/default/async-class-decl-static-method.template +/*--- +description: yield Promise.reject(value) is treated as throw value (Static async generator method as a ClassDeclaration element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + static MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); + + +var callCount = 0; + +class C { static async *gen() { + callCount += 1; + yield Promise.reject(error); + yield "unreachable"; +}} + +var gen = C.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/async-gen-method-yield-promise-reject-next-catch.js b/test/language/statements/class/async-gen-method-yield-promise-reject-next-catch.js new file mode 100644 index 0000000000000000000000000000000000000000..4bbb1afabfc08bce9e02c724e0d9fc73a962b303 --- /dev/null +++ b/test/language/statements/class/async-gen-method-yield-promise-reject-next-catch.js @@ -0,0 +1,50 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-catch.case +// - src/async-generators/default/async-class-decl-method.template +/*--- +description: yield Promise.reject(value) is treated as throw value (Async Generator method as a ClassDeclaration element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); + + +var callCount = 0; + +class C { async *gen() { + callCount += 1; + yield Promise.reject(error); + yield "unreachable"; +}} + +var gen = C.prototype.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}).catch(rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/async-gen-method-yield-promise-reject-next-for-await-of-async-iterator.js b/test/language/statements/class/async-gen-method-yield-promise-reject-next-for-await-of-async-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..c1373fd9c38272678873ed4d8efaf72570a36538 --- /dev/null +++ b/test/language/statements/class/async-gen-method-yield-promise-reject-next-for-await-of-async-iterator.js @@ -0,0 +1,56 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case +// - src/async-generators/default/async-class-decl-method.template +/*--- +description: yield * [Promise.reject(value)] is treated as throw value (Async Generator method as a ClassDeclaration element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +async function * readFile() { + yield Promise.reject(error); + yield "unreachable"; +} + + +var callCount = 0; + +class C { async *gen() { + callCount += 1; + for await (let line of readFile()) { + yield line; + } +}} + +var gen = C.prototype.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/async-gen-method-yield-promise-reject-next-for-await-of-sync-iterator.js b/test/language/statements/class/async-gen-method-yield-promise-reject-next-for-await-of-sync-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..bf30ba112a3ad4c188c6c10b00d76486293f511e --- /dev/null +++ b/test/language/statements/class/async-gen-method-yield-promise-reject-next-for-await-of-sync-iterator.js @@ -0,0 +1,55 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case +// - src/async-generators/default/async-class-decl-method.template +/*--- +description: yield Promise.reject(value) in for-await-of is treated as throw value (Async Generator method as a ClassDeclaration element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +let iterable = [ + Promise.reject(error), + "unreachable" +]; + + +var callCount = 0; + +class C { async *gen() { + callCount += 1; + for await (let value of iterable) { + yield value; + } +}} + +var gen = C.prototype.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/async-gen-method-yield-promise-reject-next-yield-star-async-iterator.js b/test/language/statements/class/async-gen-method-yield-promise-reject-next-yield-star-async-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..b4d12f15e8e03c74e811285acd4af7d01a5bc52d --- /dev/null +++ b/test/language/statements/class/async-gen-method-yield-promise-reject-next-yield-star-async-iterator.js @@ -0,0 +1,54 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case +// - src/async-generators/default/async-class-decl-method.template +/*--- +description: yield * (async iterator) is treated as throw value (Async Generator method as a ClassDeclaration element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +async function * readFile() { + yield Promise.reject(error); + yield "unreachable"; +} + + +var callCount = 0; + +class C { async *gen() { + callCount += 1; + yield * readFile(); + +}} + +var gen = C.prototype.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).then($DONE, $DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/async-gen-method-yield-promise-reject-next-yield-star-sync-iterator.js b/test/language/statements/class/async-gen-method-yield-promise-reject-next-yield-star-sync-iterator.js new file mode 100644 index 0000000000000000000000000000000000000000..2fe6c78986ab52bcbfdb1e6a3477fc6172e72e02 --- /dev/null +++ b/test/language/statements/class/async-gen-method-yield-promise-reject-next-yield-star-sync-iterator.js @@ -0,0 +1,53 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case +// - src/async-generators/default/async-class-decl-method.template +/*--- +description: yield * (async iterator) is treated as throw value (Async Generator method as a ClassDeclaration element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); +let iterable = [ + Promise.reject(error), + "unreachable" +]; + + +var callCount = 0; + +class C { async *gen() { + callCount += 1; + yield * iterable; +}} + +var gen = C.prototype.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1); diff --git a/test/language/statements/class/async-gen-method-yield-promise-reject-next.js b/test/language/statements/class/async-gen-method-yield-promise-reject-next.js new file mode 100644 index 0000000000000000000000000000000000000000..d49d52b73636303d43d08b6c373fe5b1fad18fbd --- /dev/null +++ b/test/language/statements/class/async-gen-method-yield-promise-reject-next.js @@ -0,0 +1,50 @@ +// This file was procedurally generated from the following sources: +// - src/async-generators/yield-promise-reject-next.case +// - src/async-generators/default/async-class-decl-method.template +/*--- +description: yield Promise.reject(value) is treated as throw value (Async Generator method as a ClassDeclaration element) +esid: prod-AsyncGeneratorMethod +features: [async-iteration] +flags: [generated, async] +info: | + ClassElement : + MethodDefinition + + MethodDefinition : + AsyncGeneratorMethod + + Async Generator Function Definitions + + AsyncGeneratorMethod : + async [no LineTerminator here] * PropertyName ( UniqueFormalParameters ) { AsyncGeneratorBody } + +---*/ +let error = new Error(); + + +var callCount = 0; + +class C { async *gen() { + callCount += 1; + yield Promise.reject(error); + yield "unreachable"; +}} + +var gen = C.prototype.gen; + +var iter = gen(); + +iter.next().then(() => { + throw new Test262Error("Promise incorrectly resolved."); +}, rejectValue => { + // yield Promise.reject(error); + assert.sameValue(rejectValue, error); + + iter.next().then(({done, value}) => { + // iter is closed now. + assert.sameValue(done, true, "The value of IteratorResult.done is `true`"); + assert.sameValue(value, undefined, "The value of IteratorResult.value is `undefined`"); + }).then($DONE, $DONE); +}).catch($DONE); + +assert.sameValue(callCount, 1);