diff options
author | Rick Waldron <waldron.rick@gmail.com> | 2017-06-07 12:06:01 -0400 |
---|---|---|
committer | Rick Waldron <waldron.rick@gmail.com> | 2017-06-28 12:03:09 -0400 |
commit | eaec1ffe2f17b0f849103be4955121bb758803b5 (patch) | |
tree | c640c4e82aad4386c028c3be99b05d43175a8596 /src | |
parent | bcea4333fc28cce14d14140e01e08ad61e11a82c (diff) | |
download | qtdeclarative-testsuites-eaec1ffe2f17b0f849103be4955121bb758803b5.tar.gz |
async-iteration: yield Promise.reject(value) is treated as throw value (rejects)
- http://tc39.github.io/tc39-notes/2017-05_may-25.html#15iva-revisiting-async-generator-yield-behavior
- http://tc39.github.io/tc39-notes/2017-05_may-25.html#conclusionresolution-12
Signed-off-by: Rick Waldron <waldron.rick@gmail.com>
Diffstat (limited to 'src')
6 files changed, 180 insertions, 0 deletions
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 000000000..bc0568133 --- /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 000000000..bca3550a4 --- /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 000000000..19774b094 --- /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 000000000..5239f6068 --- /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 000000000..36fb4da67 --- /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 000000000..09a1eba75 --- /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); |