Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(45)

Unified Diff: test/mjsunit/harmony/iterator-close.js

Issue 2096933002: Remove all harmony runtime flags which shipped in M51 (Closed) Base URL: https://chromium.googlesource.com/v8/v8.git@master
Patch Set: Review comments Created 4 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « test/mjsunit/harmony/instanceof-es6.js ('k') | test/mjsunit/harmony/promise-species.js » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: test/mjsunit/harmony/iterator-close.js
diff --git a/test/mjsunit/harmony/iterator-close.js b/test/mjsunit/harmony/iterator-close.js
deleted file mode 100644
index 03cdeac0383b4660da1e267a7f41ae6024fc3b60..0000000000000000000000000000000000000000
--- a/test/mjsunit/harmony/iterator-close.js
+++ /dev/null
@@ -1,1372 +0,0 @@
-// Copyright 2016 the V8 project authors. All rights reserved.
-// Use of this source code is governed by a BSD-style license that can be
-// found in the LICENSE file.
-
-// Flags: --harmony-iterator-close
-
-
-function* g() { yield 42; return 88 };
-
-
-// Return method is "undefined".
-{
- g.prototype.return = null;
-
-
- assertEquals(undefined, (() => {
- for (var x of g()) { break; }
- })());
-
- assertEquals(undefined, (() => {
- for (let x of g()) { break; }
- })());
-
- assertEquals(undefined, (() => {
- for (const x of g()) { break; }
- })());
-
- assertEquals(undefined, (() => {
- for (x of g()) { break; }
- })());
-
-
- assertThrowsEquals(() => {
- for (var x of g()) { throw 42; }
- }, 42);
-
- assertThrowsEquals(() => {
- for (let x of g()) { throw 42; }
- }, 42);
-
- assertThrowsEquals(() => {
- for (const x of g()) { throw 42; }
- }, 42);
-
- assertThrowsEquals(() => {
- for (x of g()) { throw 42; }
- }, 42);
-
-
- assertEquals(42, (() => {
- for (var x of g()) { return 42; }
- })());
-
- assertEquals(42, (() => {
- for (let x of g()) { return 42; }
- })());
-
- assertEquals(42, (() => {
- for (const x of g()) { return 42; }
- })());
-
- assertEquals(42, (() => {
- for (x of g()) { return 42; }
- })());
-
-
- assertEquals(42, eval('for (var x of g()) { x; }'));
-
- assertEquals(42, eval('for (let x of g()) { x; }'));
-
- assertEquals(42, eval('for (const x of g()) { x; }'));
-
- assertEquals(42, eval('for (x of g()) { x; }'));
-
-
- assertEquals(42, (() => {
- var [x] = g(); return x;
- })());
-
- assertEquals(42, (() => {
- let [x] = g(); return x;
- })());
-
- assertEquals(42, (() => {
- const [x] = g(); return x;
- })());
-
- assertEquals(42, (() => {
- [x] = g(); return x;
- })());
-
- assertEquals(42,
- (([x]) => x)(g())
- );
-}
-
-
-// Return method is not callable.
-{
- g.prototype.return = 666;
-
-
- assertThrows(() => {
- for (var x of g()) { break; }
- }, TypeError);
-
- assertThrows(() => {
- for (let x of g()) { break; }
- }, TypeError);
-
- assertThrows(() => {
- for (const x of g()) { break; }
- }, TypeError);
-
- assertThrows(() => {
- for (x of g()) { break; }
- }, TypeError);
-
-
- assertThrows(() => {
- for (var x of g()) { throw 666; }
- }, TypeError);
-
- assertThrows(() => {
- for (let x of g()) { throw 666; }
- }, TypeError);
-
- assertThrows(() => {
- for (const x of g()) { throw 666; }
- }, TypeError);
-
- assertThrows(() => {
- for (x of g()) { throw 666; }
- }, TypeError);
-
-
- assertThrows(() => {
- for (var x of g()) { return 666; }
- }, TypeError);
-
- assertThrows(() => {
- for (let x of g()) { return 666; }
- }, TypeError);
-
- assertThrows(() => {
- for (const x of g()) { return 666; }
- }, TypeError);
-
- assertThrows(() => {
- for (x of g()) { return 666; }
- }, TypeError);
-
-
- assertEquals(42, eval('for (var x of g()) { x; }'));
-
- assertEquals(42, eval('for (let x of g()) { x; }'));
-
- assertEquals(42, eval('for (const x of g()) { x; }'));
-
- assertEquals(42, eval('for (x of g()) { x; }'));
-
-
- assertThrows(() => {
- var [x] = g(); return x;
- }, TypeError);
-
- assertThrows(() => {
- let [x] = g(); return x;
- }, TypeError);
-
- assertThrows(() => {
- const [x] = g(); return x;
- }, TypeError);
-
- assertThrows(() => {
- [x] = g(); return x;
- }, TypeError);
-
- assertThrows(() => {
- (([x]) => x)(g());
- }, TypeError);
-}
-
-
-// Return method does not return an object.
-{
- g.prototype.return = () => 666;
-
-
- assertThrows(() => {
- for (var x of g()) { break; }
- }, TypeError);
-
- assertThrows(() => {
- for (let x of g()) { break; }
- }, TypeError);
-
- assertThrows(() => {
- for (const x of g()) { break; }
- }, TypeError);
-
- assertThrows(() => {
- for (x of g()) { break; }
- }, TypeError);
-
-
- // Throw from the body of a for loop 'wins' vs throw
- // originating from a bad 'return' value.
-
- assertThrowsEquals(() => {
- for (var x of g()) { throw 666; }
- }, 666);
-
- assertThrowsEquals(() => {
- for (let x of g()) { throw 666; }
- }, 666);
-
- assertThrowsEquals(() => {
- for (const x of g()) { throw 666; }
- }, 666);
-
- assertThrowsEquals(() => {
- for (x of g()) { throw 666; }
- }, 666);
-
-
- assertThrows(() => {
- for (var x of g()) { return 666; }
- }, TypeError);
-
- assertThrows(() => {
- for (let x of g()) { return 666; }
- }, TypeError);
-
- assertThrows(() => {
- for (const x of g()) { return 666; }
- }, TypeError);
-
- assertThrows(() => {
- for (x of g()) { return 666; }
- }, TypeError);
-
-
- assertEquals(42, eval('for (var x of g()) { x; }'));
-
- assertEquals(42, eval('for (let x of g()) { x; }'));
-
- assertEquals(42, eval('for (const x of g()) { x; }'));
-
- assertEquals(42, eval('for (x of g()) { x; }'));
-
-
- assertThrows(() => {
- var [x] = g(); return x;
- }, TypeError);
-
- assertThrows(() => {
- let [x] = g(); return x;
- }, TypeError);
-
- assertThrows(() => {
- const [x] = g(); return x;
- }, TypeError);
-
- assertThrows(() => {
- [x] = g(); return x;
- }, TypeError);
-
- assertThrows(() => {
- (([x]) => x)(g());
- }, TypeError);
-}
-
-
-// Return method returns an object.
-{
- let log = [];
- g.prototype.return = (...args) => { log.push(args); return {} };
-
-
- log = [];
- for (var x of g()) { break; }
- assertEquals([[]], log);
-
- log = [];
- for (let x of g()) { break; }
- assertEquals([[]], log);
-
- log = [];
- for (const x of g()) { break; }
- assertEquals([[]], log);
-
- log = [];
- for (x of g()) { break; }
- assertEquals([[]], log);
-
-
- log = [];
- assertThrowsEquals(() => {
- for (var x of g()) { throw 42; }
- }, 42);
- assertEquals([[]], log);
-
- log = [];
- assertThrowsEquals(() => {
- for (let x of g()) { throw 42; }
- }, 42);
- assertEquals([[]], log);
-
- log = [];
- assertThrowsEquals(() => {
- for (const x of g()) { throw 42; }
- }, 42);
- assertEquals([[]], log);
-
- log = [];
- assertThrowsEquals(() => {
- for (x of g()) { throw 42; }
- }, 42);
- assertEquals([[]], log);
-
-
- log = [];
- assertEquals(42, (() => {
- for (var x of g()) { return 42; }
- })());
- assertEquals([[]], log);
-
- log = [];
- assertEquals(42, (() => {
- for (let x of g()) { return 42; }
- })());
- assertEquals([[]], log);
-
- log = [];
- assertEquals(42, (() => {
- for (const x of g()) { return 42; }
- })());
- assertEquals([[]], log);
-
- log = [];
- assertEquals(42, (() => {
- for (x of g()) { return 42; }
- })());
- assertEquals([[]], log);
-
-
- log = [];
- assertEquals(42, eval('for (var x of g()) { x; }'));
- assertEquals([], log);
-
- log = [];
- assertEquals(42, eval('for (let x of g()) { x; }'));
- assertEquals([], log);
-
- log = [];
- assertEquals(42, eval('for (const x of g()) { x; }'));
- assertEquals([], log);
-
- log = [];
- assertEquals(42, eval('for (x of g()) { x; }'));
- assertEquals([], log);
-
-
- // Even if doing the assignment throws, still call return
- log = [];
- x = { set attr(_) { throw 1234; } };
- assertThrowsEquals(() => {
- for (x.attr of g()) { throw 456; }
- }, 1234);
- assertEquals([[]], log);
-
-
- log = [];
- assertEquals(42, (() => {
- var [x] = g(); return x;
- })());
- assertEquals([[]], log);
-
- log = [];
- assertEquals(42, (() => {
- let [x] = g(); return x;
- })());
- assertEquals([[]], log);
-
- log = [];
- assertEquals(42, (() => {
- const [x] = g(); return x;
- })());
- assertEquals([[]], log);
-
- log = [];
- assertEquals(42, (() => {
- [x] = g(); return x;
- })());
- assertEquals([[]], log);
-
- log = []
- assertEquals(42,
- (([x]) => x)(g())
- );
- assertEquals([[]], log);
-
-
- log = [];
- assertEquals(42, (() => {
- var [x,] = g(); return x;
- })());
- assertEquals([[]], log);
-
- log = [];
- assertEquals(42, (() => {
- let [x,] = g(); return x;
- })());
- assertEquals([[]], log);
-
- log = [];
- assertEquals(42, (() => {
- const [x,] = g(); return x;
- })());
- assertEquals([[]], log);
-
- log = [];
- assertEquals(42, (() => {
- [x,] = g(); return x;
- })());
- assertEquals([[]], log);
-
- log = []
- assertEquals(42,
- (([x,]) => x)(g())
- );
- assertEquals([[]], log);
-
-
- log = [];
- assertEquals(42, (() => {
- var [x,,] = g(); return x;
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals(42, (() => {
- let [x,,] = g(); return x;
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals(42, (() => {
- const [x,,] = g(); return x;
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals(42, (() => {
- [x,,] = g(); return x;
- })());
- assertEquals([], log);
-
- log = []
- assertEquals(42,
- (([x,,]) => x)(g())
- );
- assertEquals([], log);
-
-
- log = [];
- assertEquals([42, undefined], (() => {
- var [x, y] = g(); return [x, y];
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals([42, undefined], (() => {
- let [x, y] = g(); return [x, y];
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals([42, undefined], (() => {
- const [x, y] = g(); return [x, y];
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals([42, undefined], (() => {
- [x, y] = g(); return [x, y];
- })());
- assertEquals([], log);
-
- log = []
- assertEquals([42, undefined],
- (([x, y]) => [x, y])(g())
- );
- assertEquals([], log);
-
-
- log = [];
- assertEquals([42], (() => {
- var [...x] = g(); return x;
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals([42], (() => {
- let [...x] = g(); return x;
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals([42], (() => {
- const [...x] = g(); return x;
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals([42], (() => {
- [...x] = g(); return x;
- })());
- assertEquals([], log);
-
- log = []
- assertEquals([42],
- (([...x]) => x)(g())
- );
- assertEquals([], log);
-
-
- log = [];
- assertEquals([42, []], (() => {
- var [x, ...y] = g(); return [x, y];
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals([42, []], (() => {
- let [x, ...y] = g(); return [x, y];
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals([42, []], (() => {
- const [x, ...y] = g(); return [x, y];
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals([42, []], (() => {
- [x, ...y] = g(); return [x, y];
- })());
- assertEquals([], log);
-
- log = []
- assertEquals([42, []],
- (([x, ...y]) => [x, y])(g())
- );
- assertEquals([], log);
-
-
- log = [];
- assertEquals([], (() => {
- var [] = g(); return [];
- })());
- assertEquals([[]], log);
-
- log = [];
- assertEquals([], (() => {
- let [] = g(); return [];
- })());
- assertEquals([[]], log);
-
- log = [];
- assertEquals([], (() => {
- const [] = g(); return [];
- })());
- assertEquals([[]], log);
-
- log = [];
- assertEquals([], (() => {
- [] = g(); return [];
- })());
- assertEquals([[]], log);
-
- log = []
- assertEquals([],
- (([]) => [])(g())
- );
- assertEquals([[]], log);
-
-
- log = [];
- assertEquals([], (() => {
- var [...[]] = g(); return [];
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals([], (() => {
- let [...[]] = g(); return [];
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals([], (() => {
- const [...[]] = g(); return [];
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals([], (() => {
- [...[]] = g(); return [];
- })());
- assertEquals([], log);
-
- log = []
- assertEquals([],
- (([...[]]) => [])(g())
- );
- assertEquals([], log);
-
-
- log = [];
- assertEquals([42], (() => {
- var [...[x]] = g(); return [x];
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals([42], (() => {
- let [...[x]] = g(); return [x];
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals([42], (() => {
- const [...[x]] = g(); return [x];
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals([42], (() => {
- [...[x]] = g(); return [x];
- })());
- assertEquals([], log);
-
- log = []
- assertEquals([42],
- (([...[x]]) => [x])(g())
- );
- assertEquals([], log);
-
-
- log = [];
- assertEquals([42, undefined], (() => {
- var [...[x, y]] = g(); return [x, y];
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals([42, undefined], (() => {
- let [...[x, y]] = g(); return [x, y];
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals([42, undefined], (() => {
- const [...[x, y]] = g(); return [x, y];
- })());
- assertEquals([], log);
-
- log = [];
- assertEquals([42, undefined], (() => {
- [...[x, y]] = g(); return [x, y];
- })());
- assertEquals([], log);
-
- log = []
- assertEquals([42, undefined],
- (([...[x, y]]) => [x, y])(g())
- );
- assertEquals([], log);
-
-
- log = []
- assertThrowsEquals(() => {
- let x = { set foo(_) { throw 666; } };
- [x.foo] = g();
- }, 666);
- assertEquals([[]], log);
-
-
- log = []
- assertThrows(() => {
- var [[]] = g();
- }, TypeError);
- assertEquals([[]], log);
-
- log = []
- assertThrows(() => {
- let [[]] = g();
- }, TypeError);
- assertEquals([[]], log);
-
- log = []
- assertThrows(() => {
- const [[]] = g();
- }, TypeError);
- assertEquals([[]], log);
-
- log = []
- assertThrows(() => {
- [[]] = g();
- }, TypeError);
- assertEquals([[]], log);
-
- log = []
- assertThrows(() => {
- (([[]]) => 0)(g());
- }, TypeError);
- assertEquals([[]], log);
-
-
- log = []
- assertThrows(() => {
- var [...[[]]] = g();
- }, TypeError);
- assertEquals([], log);
-
- log = []
- assertThrows(() => {
- let [...[[]]] = g();
- }, TypeError);
- assertEquals([], log);
-
- log = []
- assertThrows(() => {
- const [...[[]]] = g();
- }, TypeError);
- assertEquals([], log);
-
- log = []
- assertThrows(() => {
- [...[[]]] = g();
- }, TypeError);
- assertEquals([], log);
-
- log = []
- assertThrows(() => {
- (([...[[]]]) => 0)(g());
- }, TypeError);
- assertEquals([], log);
-
-
- {
- let backup = Array.prototype[Symbol.iterator];
- Array.prototype[Symbol.iterator] = () => g();
-
-
- log = [];
- assertDoesNotThrow(() => {
- var [x, ...[y]] = [1, 2, 3]
- });
- assertEquals(log, [[]]);
-
- log = [];
- assertDoesNotThrow(() => {
- let [x, ...[y]] = [1, 2, 3];
- });
- assertEquals(log, [[]]);
-
- log = [];
- assertDoesNotThrow(() => {
- const [x, ...[y]] = [1, 2, 3];
- });
- assertEquals(log, [[]]);
-
- log = [];
- assertDoesNotThrow(() => {
- (([x, ...[y]]) => {})([1, 2, 3]);
- });
- assertEquals(log, [[]]);
-
-
- log = [];
- assertThrows(() => {
- var [x, ...[[]]] = [1, 2, 3];
- }, TypeError);
- assertEquals(log, [[]]);
-
- log = [];
- assertThrows(() => {
- let [x, ...[[]]] = [1, 2, 3];
- }, TypeError);
- assertEquals(log, [[]]);
-
- log = [];
- assertThrows(() => {
- const [x, ...[[]]] = [1, 2, 3];
- }, TypeError);
- assertEquals(log, [[]]);
-
- log = [];
- assertThrows(() => {
- (([x, ...[[]]]) => {})([1, 2, 3]);
- }, TypeError);
- assertEquals(log, [[]]);
-
-
- log = [];
- assertDoesNotThrow(() => {
- var [x, ...[...y]] = [1, 2, 3];
- });
- assertEquals(log, []);
-
- log = [];
- assertDoesNotThrow(() => {
- let [x, ...[...y]] = [1, 2, 3];
- });
- assertEquals(log, []);
-
- log = [];
- assertDoesNotThrow(() => {
- const [x, ...[...y]] = [1, 2, 3];
- });
- assertEquals(log, []);
-
- log = [];
- assertDoesNotThrow(() => {
- (([x, ...[...y]]) => {})([1, 2, 3]);
- });
- assertEquals(log, []);
-
-
- Array.prototype[Symbol.iterator] = backup;
- }
-}
-
-
-// Return method throws.
-{
- let log = [];
- g.prototype.return = (...args) => { log.push(args); throw 23 };
-
-
- log = [];
- assertThrowsEquals(() => {
- for (var x of g()) { break; }
- }, 23);
- assertEquals([[]], log);
-
- log = [];
- assertThrowsEquals(() => {
- for (let x of g()) { break; }
- }, 23);
- assertEquals([[]], log);
-
- log = [];
- assertThrowsEquals(() => {
- for (const x of g()) { break; }
- }, 23);
- assertEquals([[]], log);
-
- log = [];
- assertThrowsEquals(() => {
- for (x of g()) { break; }
- }, 23);
- assertEquals([[]], log);
-
-
- log = [];
- assertThrowsEquals(() => {
- for (var x of g()) { throw 42; }
- }, 42);
- assertEquals([[]], log);
-
- log = [];
- assertThrowsEquals(() => {
- for (let x of g()) { throw 42; }
- }, 42);
- assertEquals([[]], log);
-
- log = [];
- assertThrowsEquals(() => {
- for (const x of g()) { throw 42; }
- }, 42);
- assertEquals([[]], log);
-
- log = [];
- assertThrowsEquals(() => {
- for (x of g()) { throw 42; }
- }, 42);
- assertEquals([[]], log);
-
-
- log = [];
- assertThrowsEquals(() => {
- for (var x of g()) { return 42; }
- }, 23);
- assertEquals([[]], log);
-
- log = [];
- assertThrowsEquals(() => {
- for (let x of g()) { return 42; }
- }, 23);
- assertEquals([[]], log);
-
- log = [];
- assertThrowsEquals(() => {
- for (const x of g()) { return 42; }
- }, 23);
- assertEquals([[]], log);
-
- log = [];
- assertThrowsEquals(() => {
- for (x of g()) { return 42; }
- }, 23);
- assertEquals([[]], log);
-
-
- log = [];
- assertEquals(42, eval('for (var x of g()) { x; }'));
- assertEquals([], log);
-
- log = [];
- assertEquals(42, eval('for (let x of g()) { x; }'));
- assertEquals([], log);
-
- log = [];
- assertEquals(42, eval('for (const x of g()) { x; }'));
- assertEquals([], log);
-
- log = [];
- assertEquals(42, eval('for (x of g()) { x; }'));
- assertEquals([], log);
-
-
- log = [];
- assertThrowsEquals(() => {
- var [x] = g(); return x;
- }, 23);
- assertEquals([[]], log);
-
- log = [];
- assertThrowsEquals(() => {
- let [x] = g(); return x;
- }, 23);
- assertEquals([[]], log);
-
- log = [];
- assertThrowsEquals(() => {
- const [x] = g(); return x;
- }, 23);
- assertEquals([[]], log);
-
- log = [];
- assertThrowsEquals(() => {
- [x] = g(); return x;
- }, 23);
- assertEquals([[]], log);
-
- log = [];
- assertThrowsEquals(() => {
- (([x]) => x)(g())
- }, 23);
- assertEquals([[]], log);
-}
-
-
-// Next method throws.
-{
- g.prototype.next = () => { throw 666; };
- g.prototype.return = () => { assertUnreachable() };
-
-
- assertThrowsEquals(() => {
- for (var x of g()) {}
- }, 666);
-
- assertThrowsEquals(() => {
- for (let x of g()) {}
- }, 666);
-
- assertThrowsEquals(() => {
- for (const x of g()) {}
- }, 666);
-
- assertThrowsEquals(() => {
- for (x of g()) {}
- }, 666);
-
- assertThrowsEquals(() => {
- var [x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- let [x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- const [x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- [x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- (([x]) => x)(g());
- }, 666);
-
- assertThrowsEquals(() => {
- var [...x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- let [...x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- const [...x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- [...x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- (([...x]) => x)(g());
- }, 666);
-}
-
-
-// Value throws.
-{
- g.prototype.next = () => ({get value() {throw 666}});
- g.prototype.return = () => { assertUnreachable() };
-
-
- assertThrowsEquals(() => {
- for (var x of g()) {}
- }, 666);
-
- assertThrowsEquals(() => {
- for (let x of g()) {}
- }, 666);
-
- assertThrowsEquals(() => {
- for (const x of g()) {}
- }, 666);
-
- assertThrowsEquals(() => {
- for (x of g()) {}
- }, 666);
-
- assertThrowsEquals(() => {
- var [x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- let [x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- const [x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- [x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- (([x]) => x)(g());
- }, 666);
-
- assertThrowsEquals(() => {
- var [...x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- let [...x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- const [...x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- [...x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- (([...x]) => x)(g());
- }, 666);
-}
-
-
-// Done throws.
-{
- g.prototype.next = () => ({get done() {throw 666}});
- g.prototype.return = () => { assertUnreachable() };
-
-
- assertThrowsEquals(() => {
- for (var x of g()) {}
- }, 666);
-
- assertThrowsEquals(() => {
- for (let x of g()) {}
- }, 666);
-
- assertThrowsEquals(() => {
- for (const x of g()) {}
- }, 666);
-
- assertThrowsEquals(() => {
- for (x of g()) {}
- }, 666);
-
- assertThrowsEquals(() => {
- var [x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- let [x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- const [x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- [x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- (([x]) => x)(g());
- }, 666);
-
- assertThrowsEquals(() => {
- var [...x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- let [...x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- const [...x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- [...x] = g();
- }, 666);
-
- assertThrowsEquals(() => {
- (([...x]) => x)(g());
- }, 666);
-}
-
-
-// Nested loops.
-{
- function* g1() { yield 1; yield 2; throw 3; }
- function* g2() { yield -1; yield -2; throw -3; }
-
- assertDoesNotThrow(() => {
- for (let x of g1()) {
- for (let y of g2()) {
- if (y == -2) break;
- }
- if (x == 2) break;
- }
- }, -3);
-
- assertThrowsEquals(() => {
- for (let x of g1()) {
- for (let y of g2()) {
- }
- }
- }, -3);
-
- assertThrowsEquals(() => {
- for (let x of g1()) {
- for (let y of g2()) {
- if (y == -2) break;
- }
- }
- }, 3);
-
- assertDoesNotThrow(() => {
- l: for (let x of g1()) {
- for (let y of g2()) {
- if (y == -2) break l;
- }
- }
- });
-
- assertThrowsEquals(() => {
- for (let x of g1()) {
- for (let y of g2()) {
- throw 4;
- }
- }
- }, 4);
-
- assertThrowsEquals(() => {
- for (let x of g1()) {
- for (let y of g2()) {
- if (y == -2) throw 4;
- }
- }
- }, 4);
-
- let log = [];
- g1.prototype.return = () => { log.push(1); throw 5 };
- g2.prototype.return = () => { log.push(2); throw -5 };
-
- log = [];
- assertThrowsEquals(() => {
- for (let x of g1()) {
- for (let y of g2()) {
- if (y == -2) break;
- }
- if (x == 2) break;
- }
- }, -5);
- assertEquals([2, 1], log);
-
- log = [];
- assertThrowsEquals(() => {
- for (let x of g1()) {
- for (let y of g2()) {
- }
- }
- }, -3);
- assertEquals([1], log);
-
- log = [];
- assertThrowsEquals(() => {
- for (let x of g1()) {
- for (let y of g2()) {
- if (y == -2) break;
- }
- }
- }, -5);
- assertEquals([2, 1], log);
-
- log = [];
- assertThrowsEquals(() => {
- l: for (let x of g1()) {
- for (let y of g2()) {
- if (y == -2) break l;
- }
- }
- }, -5);
- assertEquals([2, 1], log);
-
- log = [];
- assertThrowsEquals(() => {
- for (let x of g1()) {
- for (let y of g2()) {
- throw 4;
- }
- }
- }, 4);
- assertEquals([2, 1], log);
-
- log = [];
- assertThrowsEquals(() => {
- for (let x of g1()) {
- for (let y of g2()) {
- if (y == -2) throw 4;
- }
- }
- }, 4);
- assertEquals([2, 1], log);
-
- log = [];
- assertThrowsEquals(() => {
- for (let x of g1()) {
- try {
- for (let y of g2()) {
- }
- } catch (_) {}
- }
- }, 3);
- assertEquals([], log);
-
- log = [];
- assertThrowsEquals(() => {
- for (let x of g1()) {
- try {
- for (let y of g2()) {
- }
- } catch (_) {}
- if (x == 2) break;
- }
- }, 5);
- assertEquals([1], log);
-}
-
-
-// yield*, argument's return method is "undefined".
-function TestYieldStarWithoutReturn(get_iterable) {
- assertTrue(get_iterable().return == undefined);
-
- function* g() { yield* get_iterable() }
-
- {
- let gen = g();
- assertEquals({value: 1, done: false}, gen.next());
- assertEquals({value: undefined, done: true}, gen.return());
- }
-
- assertEquals(42, (() => {
- for (let x of g()) break;
- return 42;
- })());
-
- assertEquals(42, (() => {
- for (let x of g()) return 42;
- })());
-
- assertThrowsEquals(() => {
- for (let x of g()) throw 42;
- }, 42);
-}
-{
- let get_iterable1 = () => [1, 2];
- let get_iterable2 = function*() { yield 1; yield 2 };
- get_iterable2.prototype.return = null;
- TestYieldStarWithoutReturn(get_iterable1);
- TestYieldStarWithoutReturn(get_iterable2);
-}
-
-
-// yield*, argument's return method is defined.
-{
- let get_iterable = function*() { yield 1; yield 2 };
- const obj = {};
- get_iterable.prototype.return = (...args) => obj;
-
- function* g() { yield* get_iterable() }
-
- {
- let gen = g();
- assertEquals({value: 1, done: false}, gen.next());
- assertSame(obj, gen.return());
- assertSame(obj, gen.return());
- assertSame(obj, gen.return());
- assertEquals({value: 2, done: false}, gen.next());
- assertSame(obj, gen.return());
- assertSame(obj, gen.return());
- assertSame(obj, gen.return());
- assertEquals({value: undefined, done: true}, gen.next());
- assertEquals({value: undefined, done: true}, gen.return());
- assertEquals({value: undefined, done: true}, gen.return());
- }
-
- assertEquals(42, (() => {
- for (let x of g()) break;
- return 42;
- })());
-
- assertEquals(42, (() => {
- for (let x of g()) return 42;
- })());
-
- assertThrowsEquals(() => {
- for (let x of g()) throw 42;
- }, 42);
-}
« no previous file with comments | « test/mjsunit/harmony/instanceof-es6.js ('k') | test/mjsunit/harmony/promise-species.js » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698