summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorRick Waldron <waldron.rick@gmail.com>2017-06-07 12:06:01 -0400
committerRick Waldron <waldron.rick@gmail.com>2017-06-28 12:03:09 -0400
commiteaec1ffe2f17b0f849103be4955121bb758803b5 (patch)
treec640c4e82aad4386c028c3be99b05d43175a8596 /src
parentbcea4333fc28cce14d14140e01e08ad61e11a82c (diff)
downloadqtdeclarative-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')
-rw-r--r--src/async-generators/yield-promise-reject-next-catch.case27
-rw-r--r--src/async-generators/yield-promise-reject-next-for-await-of-async-iterator.case33
-rw-r--r--src/async-generators/yield-promise-reject-next-for-await-of-sync-iterator.case32
-rw-r--r--src/async-generators/yield-promise-reject-next-yield-star-async-iterator.case31
-rw-r--r--src/async-generators/yield-promise-reject-next-yield-star-sync-iterator.case30
-rw-r--r--src/async-generators/yield-promise-reject-next.case27
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);