| Index: test/mjsunit/harmony/generators-iteration.js
|
| diff --git a/test/mjsunit/harmony/generators-iteration.js b/test/mjsunit/harmony/generators-iteration.js
|
| index 17a6e804f5c144b0891a73ecafe4c15035cfa4c5..a85fd71b700d1a31e0204b1db9cedfcb45a23cee 100644
|
| --- a/test/mjsunit/harmony/generators-iteration.js
|
| +++ b/test/mjsunit/harmony/generators-iteration.js
|
| @@ -73,6 +73,10 @@ function TestGenerator(g, expected_values_for_next,
|
| testSend(g);
|
| testThrow(g);
|
|
|
| + testNext(function*() { return yield* g(); });
|
| + testSend(function*() { return yield* g(); });
|
| + testThrow(function*() { return yield* g(); });
|
| +
|
| if (g instanceof GeneratorFunction) {
|
| testNext(function() { return new g(); });
|
| testSend(function() { return new g(); });
|
| @@ -307,125 +311,158 @@ TestGenerator(
|
| "foo",
|
| [2, "1foo3", 5, "4foo6", "foofoo"]);
|
|
|
| -function TestTryCatch() {
|
| +function TestTryCatch(instantiate) {
|
| function* g() { yield 1; try { yield 2; } catch (e) { yield e; } yield 3; }
|
| function Sentinel() {}
|
| - var iter;
|
| -
|
| - iter = g();
|
| - assertIteratorResult(1, false, iter.next());
|
| - assertIteratorResult(2, false, iter.next());
|
| - assertIteratorResult(3, false, iter.next());
|
| - assertIteratorResult(undefined, true, iter.next());
|
| - assertThrows(function() { iter.next(); }, Error);
|
| -
|
| - iter = g();
|
| - assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
|
| - assertThrows(function() { iter.next(); }, Error);
|
| -
|
| - iter = g();
|
| - assertIteratorResult(1, false, iter.next());
|
| - assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
|
| - assertThrows(function() { iter.next(); }, Error);
|
| -
|
| - iter = g();
|
| - assertIteratorResult(1, false, iter.next());
|
| - assertIteratorResult(2, false, iter.next());
|
| - var exn = new Sentinel;
|
| - assertIteratorResult(exn, false, iter.throw(exn));
|
| - assertIteratorResult(3, false, iter.next());
|
| - assertIteratorResult(undefined, true, iter.next());
|
| - assertThrows(function() { iter.next(); }, Error);
|
| -
|
| - iter = g();
|
| - assertIteratorResult(1, false, iter.next());
|
| - assertIteratorResult(2, false, iter.next());
|
| - var exn = new Sentinel;
|
| - assertIteratorResult(exn, false, iter.throw(exn));
|
| - assertIteratorResult(3, false, iter.next());
|
| - assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
|
| - assertThrows(function() { iter.next(); }, Error);
|
| -
|
| - iter = g();
|
| - assertIteratorResult(1, false, iter.next());
|
| - assertIteratorResult(2, false, iter.next());
|
| - var exn = new Sentinel;
|
| - assertIteratorResult(exn, false, iter.throw(exn));
|
| - assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
|
| - assertThrows(function() { iter.next(); }, Error);
|
| -
|
| - iter = g();
|
| - assertIteratorResult(1, false, iter.next());
|
| - assertIteratorResult(2, false, iter.next());
|
| - assertIteratorResult(3, false, iter.next());
|
| - assertIteratorResult(undefined, true, iter.next());
|
| - assertThrows(function() { iter.next(); }, Error);
|
| +
|
| + function Test1(iter) {
|
| + assertIteratorResult(1, false, iter.next());
|
| + assertIteratorResult(2, false, iter.next());
|
| + assertIteratorResult(3, false, iter.next());
|
| + assertIteratorResult(undefined, true, iter.next());
|
| + assertThrows(function() { iter.next(); }, Error);
|
| + }
|
| + Test1(instantiate(g));
|
| +
|
| + function Test2(iter) {
|
| + assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
|
| + assertThrows(function() { iter.next(); }, Error);
|
| + }
|
| + Test2(instantiate(g));
|
| +
|
| + function Test3(iter) {
|
| + assertIteratorResult(1, false, iter.next());
|
| + assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
|
| + assertThrows(function() { iter.next(); }, Error);
|
| + }
|
| + Test3(instantiate(g));
|
| +
|
| + function Test4(iter) {
|
| + assertIteratorResult(1, false, iter.next());
|
| + assertIteratorResult(2, false, iter.next());
|
| + var exn = new Sentinel;
|
| + assertIteratorResult(exn, false, iter.throw(exn));
|
| + assertIteratorResult(3, false, iter.next());
|
| + assertIteratorResult(undefined, true, iter.next());
|
| + assertThrows(function() { iter.next(); }, Error);
|
| + }
|
| + Test4(instantiate(g));
|
| +
|
| + function Test5(iter) {
|
| + assertIteratorResult(1, false, iter.next());
|
| + assertIteratorResult(2, false, iter.next());
|
| + var exn = new Sentinel;
|
| + assertIteratorResult(exn, false, iter.throw(exn));
|
| + assertIteratorResult(3, false, iter.next());
|
| + assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
|
| + assertThrows(function() { iter.next(); }, Error);
|
| +
|
| + }
|
| + Test5(instantiate(g));
|
| +
|
| + function Test6(iter) {
|
| + assertIteratorResult(1, false, iter.next());
|
| + assertIteratorResult(2, false, iter.next());
|
| + var exn = new Sentinel;
|
| + assertIteratorResult(exn, false, iter.throw(exn));
|
| + assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
|
| + assertThrows(function() { iter.next(); }, Error);
|
| + }
|
| + Test6(instantiate(g));
|
| +
|
| + function Test7(iter) {
|
| + assertIteratorResult(1, false, iter.next());
|
| + assertIteratorResult(2, false, iter.next());
|
| + assertIteratorResult(3, false, iter.next());
|
| + assertIteratorResult(undefined, true, iter.next());
|
| + assertThrows(function() { iter.next(); }, Error);
|
| + }
|
| + Test7(instantiate(g));
|
| }
|
| -TestTryCatch();
|
| +TestTryCatch(function (g) { return g(); });
|
| +TestTryCatch(function* (g) { return yield* g(); });
|
|
|
| -function TestTryFinally() {
|
| +function TestTryFinally(instantiate) {
|
| function* g() { yield 1; try { yield 2; } finally { yield 3; } yield 4; }
|
| function Sentinel() {}
|
| function Sentinel2() {}
|
| - var iter;
|
| -
|
| - iter = g();
|
| - assertIteratorResult(1, false, iter.next());
|
| - assertIteratorResult(2, false, iter.next());
|
| - assertIteratorResult(3, false, iter.next());
|
| - assertIteratorResult(4, false, iter.next());
|
| - assertIteratorResult(undefined, true, iter.next());
|
| - assertThrows(function() { iter.next(); }, Error);
|
| -
|
| - iter = g();
|
| - assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
|
| - assertThrows(function() { iter.next(); }, Error);
|
| -
|
| - iter = g();
|
| - assertIteratorResult(1, false, iter.next());
|
| - assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
|
| - assertThrows(function() { iter.next(); }, Error);
|
| -
|
| - iter = g();
|
| - assertIteratorResult(1, false, iter.next());
|
| - assertIteratorResult(2, false, iter.next());
|
| - assertIteratorResult(3, false, iter.throw(new Sentinel));
|
| - assertThrows(function() { iter.next(); }, Sentinel);
|
| - assertThrows(function() { iter.next(); }, Error);
|
| -
|
| - iter = g();
|
| - assertIteratorResult(1, false, iter.next());
|
| - assertIteratorResult(2, false, iter.next());
|
| - assertIteratorResult(3, false, iter.throw(new Sentinel));
|
| - assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2);
|
| - assertThrows(function() { iter.next(); }, Error);
|
| -
|
| - iter = g();
|
| - assertIteratorResult(1, false, iter.next());
|
| - assertIteratorResult(2, false, iter.next());
|
| - assertIteratorResult(3, false, iter.next());
|
| - assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
|
| - assertThrows(function() { iter.next(); }, Error);
|
| -
|
| - iter = g();
|
| - assertIteratorResult(1, false, iter.next());
|
| - assertIteratorResult(2, false, iter.next());
|
| - assertIteratorResult(3, false, iter.next());
|
| - assertIteratorResult(4, false, iter.next());
|
| - assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
|
| - assertThrows(function() { iter.next(); }, Error);
|
| -
|
| - iter = g();
|
| - assertIteratorResult(1, false, iter.next());
|
| - assertIteratorResult(2, false, iter.next());
|
| - assertIteratorResult(3, false, iter.next());
|
| - assertIteratorResult(4, false, iter.next());
|
| - assertIteratorResult(undefined, true, iter.next());
|
| - assertThrows(function() { iter.next(); }, Error);
|
| +
|
| + function Test1(iter) {
|
| + assertIteratorResult(1, false, iter.next());
|
| + assertIteratorResult(2, false, iter.next());
|
| + assertIteratorResult(3, false, iter.next());
|
| + assertIteratorResult(4, false, iter.next());
|
| + assertIteratorResult(undefined, true, iter.next());
|
| + assertThrows(function() { iter.next(); }, Error);
|
| + }
|
| + Test1(instantiate(g));
|
| +
|
| + function Test2(iter) {
|
| + assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
|
| + assertThrows(function() { iter.next(); }, Error);
|
| + }
|
| + Test2(instantiate(g));
|
| +
|
| + function Test3(iter) {
|
| + assertIteratorResult(1, false, iter.next());
|
| + assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
|
| + assertThrows(function() { iter.next(); }, Error);
|
| + }
|
| + Test3(instantiate(g));
|
| +
|
| + function Test4(iter) {
|
| + assertIteratorResult(1, false, iter.next());
|
| + assertIteratorResult(2, false, iter.next());
|
| + assertIteratorResult(3, false, iter.throw(new Sentinel));
|
| + assertThrows(function() { iter.next(); }, Sentinel);
|
| + assertThrows(function() { iter.next(); }, Error);
|
| +
|
| + }
|
| + Test4(instantiate(g));
|
| +
|
| + function Test5(iter) {
|
| + assertIteratorResult(1, false, iter.next());
|
| + assertIteratorResult(2, false, iter.next());
|
| + assertIteratorResult(3, false, iter.throw(new Sentinel));
|
| + assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2);
|
| + assertThrows(function() { iter.next(); }, Error);
|
| + }
|
| + Test5(instantiate(g));
|
| +
|
| + function Test6(iter) {
|
| + assertIteratorResult(1, false, iter.next());
|
| + assertIteratorResult(2, false, iter.next());
|
| + assertIteratorResult(3, false, iter.next());
|
| + assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
|
| + assertThrows(function() { iter.next(); }, Error);
|
| + }
|
| + Test6(instantiate(g));
|
| +
|
| + function Test7(iter) {
|
| + assertIteratorResult(1, false, iter.next());
|
| + assertIteratorResult(2, false, iter.next());
|
| + assertIteratorResult(3, false, iter.next());
|
| + assertIteratorResult(4, false, iter.next());
|
| + assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
|
| + assertThrows(function() { iter.next(); }, Error);
|
| + }
|
| + Test7(instantiate(g));
|
| +
|
| + function Test8(iter) {
|
| + assertIteratorResult(1, false, iter.next());
|
| + assertIteratorResult(2, false, iter.next());
|
| + assertIteratorResult(3, false, iter.next());
|
| + assertIteratorResult(4, false, iter.next());
|
| + assertIteratorResult(undefined, true, iter.next());
|
| + assertThrows(function() { iter.next(); }, Error);
|
| +
|
| + }
|
| + Test8(instantiate(g));
|
| }
|
| -TestTryFinally();
|
| +TestTryFinally(function (g) { return g(); });
|
| +TestTryFinally(function* (g) { return yield* g(); });
|
|
|
| -function TestNestedTry() {
|
| +function TestNestedTry(instantiate) {
|
| function* g() {
|
| try {
|
| yield 1;
|
| @@ -438,66 +475,82 @@ function TestNestedTry() {
|
| }
|
| function Sentinel() {}
|
| function Sentinel2() {}
|
| - var iter;
|
| -
|
| - iter = g();
|
| - assertIteratorResult(1, false, iter.next());
|
| - assertIteratorResult(2, false, iter.next());
|
| - assertIteratorResult(3, false, iter.next());
|
| - assertIteratorResult(4, false, iter.next());
|
| - assertIteratorResult(5, false, iter.next());
|
| - assertIteratorResult(undefined, true, iter.next());
|
| - assertThrows(function() { iter.next(); }, Error);
|
| -
|
| - iter = g();
|
| - assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
|
| - assertThrows(function() { iter.next(); }, Error);
|
| -
|
| - iter = g();
|
| - assertIteratorResult(1, false, iter.next());
|
| - assertIteratorResult(4, false, iter.throw(new Sentinel));
|
| - assertThrows(function() { iter.next(); }, Sentinel);
|
| - assertThrows(function() { iter.next(); }, Error);
|
| -
|
| - iter = g();
|
| - assertIteratorResult(1, false, iter.next());
|
| - assertIteratorResult(4, false, iter.throw(new Sentinel));
|
| - assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2);
|
| - assertThrows(function() { iter.next(); }, Error);
|
| -
|
| - iter = g();
|
| - assertIteratorResult(1, false, iter.next());
|
| - assertIteratorResult(2, false, iter.next());
|
| - var exn = new Sentinel;
|
| - assertIteratorResult(exn, false, iter.throw(exn));
|
| - assertIteratorResult(3, false, iter.next());
|
| - assertIteratorResult(4, false, iter.next());
|
| - assertIteratorResult(5, false, iter.next());
|
| - assertIteratorResult(undefined, true, iter.next());
|
| - assertThrows(function() { iter.next(); }, Error);
|
| -
|
| - iter = g();
|
| - assertIteratorResult(1, false, iter.next());
|
| - assertIteratorResult(2, false, iter.next());
|
| - var exn = new Sentinel;
|
| - assertIteratorResult(exn, false, iter.throw(exn));
|
| - assertIteratorResult(4, false, iter.throw(new Sentinel2));
|
| - assertThrows(function() { iter.next(); }, Sentinel2);
|
| - assertThrows(function() { iter.next(); }, Error);
|
| -
|
| - iter = g();
|
| - assertIteratorResult(1, false, iter.next());
|
| - assertIteratorResult(2, false, iter.next());
|
| - var exn = new Sentinel;
|
| - assertIteratorResult(exn, false, iter.throw(exn));
|
| - assertIteratorResult(3, false, iter.next());
|
| - assertIteratorResult(4, false, iter.throw(new Sentinel2));
|
| - assertThrows(function() { iter.next(); }, Sentinel2);
|
| - assertThrows(function() { iter.next(); }, Error);
|
| +
|
| + function Test1(iter) {
|
| + assertIteratorResult(1, false, iter.next());
|
| + assertIteratorResult(2, false, iter.next());
|
| + assertIteratorResult(3, false, iter.next());
|
| + assertIteratorResult(4, false, iter.next());
|
| + assertIteratorResult(5, false, iter.next());
|
| + assertIteratorResult(undefined, true, iter.next());
|
| + assertThrows(function() { iter.next(); }, Error);
|
| + }
|
| + Test1(instantiate(g));
|
| +
|
| + function Test2(iter) {
|
| + assertThrows(function() { iter.throw(new Sentinel); }, Sentinel);
|
| + assertThrows(function() { iter.next(); }, Error);
|
| + }
|
| + Test2(instantiate(g));
|
| +
|
| + function Test3(iter) {
|
| + assertIteratorResult(1, false, iter.next());
|
| + assertIteratorResult(4, false, iter.throw(new Sentinel));
|
| + assertThrows(function() { iter.next(); }, Sentinel);
|
| + assertThrows(function() { iter.next(); }, Error);
|
| + }
|
| + Test3(instantiate(g));
|
| +
|
| + function Test4(iter) {
|
| + assertIteratorResult(1, false, iter.next());
|
| + assertIteratorResult(4, false, iter.throw(new Sentinel));
|
| + assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2);
|
| + assertThrows(function() { iter.next(); }, Error);
|
| + }
|
| + Test4(instantiate(g));
|
| +
|
| + function Test5(iter) {
|
| + assertIteratorResult(1, false, iter.next());
|
| + assertIteratorResult(2, false, iter.next());
|
| + var exn = new Sentinel;
|
| + assertIteratorResult(exn, false, iter.throw(exn));
|
| + assertIteratorResult(3, false, iter.next());
|
| + assertIteratorResult(4, false, iter.next());
|
| + assertIteratorResult(5, false, iter.next());
|
| + assertIteratorResult(undefined, true, iter.next());
|
| + assertThrows(function() { iter.next(); }, Error);
|
| +
|
| + }
|
| + Test5(instantiate(g));
|
| +
|
| + function Test6(iter) {
|
| + assertIteratorResult(1, false, iter.next());
|
| + assertIteratorResult(2, false, iter.next());
|
| + var exn = new Sentinel;
|
| + assertIteratorResult(exn, false, iter.throw(exn));
|
| + assertIteratorResult(4, false, iter.throw(new Sentinel2));
|
| + assertThrows(function() { iter.next(); }, Sentinel2);
|
| + assertThrows(function() { iter.next(); }, Error);
|
| + }
|
| + Test6(instantiate(g));
|
| +
|
| + function Test7(iter) {
|
| + assertIteratorResult(1, false, iter.next());
|
| + assertIteratorResult(2, false, iter.next());
|
| + var exn = new Sentinel;
|
| + assertIteratorResult(exn, false, iter.throw(exn));
|
| + assertIteratorResult(3, false, iter.next());
|
| + assertIteratorResult(4, false, iter.throw(new Sentinel2));
|
| + assertThrows(function() { iter.next(); }, Sentinel2);
|
| + assertThrows(function() { iter.next(); }, Error);
|
| +
|
| + }
|
| + Test7(instantiate(g));
|
|
|
| // That's probably enough.
|
| }
|
| -TestNestedTry();
|
| +TestNestedTry(function (g) { return g(); });
|
| +TestNestedTry(function* (g) { return yield* g(); });
|
|
|
| function TestRecursion() {
|
| function TestNextRecursion() {
|
|
|