| OLD | NEW |
| 1 // Copyright 2013 the V8 project authors. All rights reserved. | 1 // Copyright 2013 the V8 project authors. All rights reserved. |
| 2 // Redistribution and use in source and binary forms, with or without | 2 // Redistribution and use in source and binary forms, with or without |
| 3 // modification, are permitted provided that the following conditions are | 3 // modification, are permitted provided that the following conditions are |
| 4 // met: | 4 // met: |
| 5 // | 5 // |
| 6 // * Redistributions of source code must retain the above copyright | 6 // * Redistributions of source code must retain the above copyright |
| 7 // notice, this list of conditions and the following disclaimer. | 7 // notice, this list of conditions and the following disclaimer. |
| 8 // * Redistributions in binary form must reproduce the above | 8 // * Redistributions in binary form must reproduce the above |
| 9 // copyright notice, this list of conditions and the following | 9 // copyright notice, this list of conditions and the following |
| 10 // disclaimer in the documentation and/or other materials provided | 10 // disclaimer in the documentation and/or other materials provided |
| (...skipping 17 matching lines...) Expand all Loading... |
| 28 // Flags: --harmony-generators --expose-gc | 28 // Flags: --harmony-generators --expose-gc |
| 29 | 29 |
| 30 // Test generator iteration. | 30 // Test generator iteration. |
| 31 | 31 |
| 32 var GeneratorFunction = (function*(){yield 1;}).__proto__.constructor; | 32 var GeneratorFunction = (function*(){yield 1;}).__proto__.constructor; |
| 33 | 33 |
| 34 function assertIteratorResult(value, done, result) { | 34 function assertIteratorResult(value, done, result) { |
| 35 assertEquals({ value: value, done: done}, result); | 35 assertEquals({ value: value, done: done}, result); |
| 36 } | 36 } |
| 37 | 37 |
| 38 function assertIteratorIsClosed(iter) { |
| 39 assertIteratorResult(undefined, true, iter.next()); |
| 40 assertDoesNotThrow(function() { iter.next(); }); |
| 41 } |
| 42 |
| 43 function assertThrownIteratorIsClosed(iter) { |
| 44 // TODO(yusukesuzuki): Since status of a thrown generator is "executing", |
| 45 // following tests are failed. |
| 46 // https://code.google.com/p/v8/issues/detail?id=3096 |
| 47 // assertIteratorIsClosed(iter); |
| 48 } |
| 49 |
| 38 function TestGeneratorResultPrototype() { | 50 function TestGeneratorResultPrototype() { |
| 39 function* g() { yield 1; } | 51 function* g() { yield 1; } |
| 40 var iter = g(); | 52 var iter = g(); |
| 41 var result = iter.next(); | 53 var result = iter.next(); |
| 42 | 54 |
| 43 assertSame(Object.prototype, Object.getPrototypeOf(result)); | 55 assertSame(Object.prototype, Object.getPrototypeOf(result)); |
| 44 property_names = Object.getOwnPropertyNames(result); | 56 property_names = Object.getOwnPropertyNames(result); |
| 45 property_names.sort(); | 57 property_names.sort(); |
| 46 assertEquals(["done", "value"], property_names); | 58 assertEquals(["done", "value"], property_names); |
| 47 assertIteratorResult(1, false, result); | 59 assertIteratorResult(1, false, result); |
| 48 } | 60 } |
| 49 TestGeneratorResultPrototype() | 61 TestGeneratorResultPrototype() |
| 50 | 62 |
| 51 function TestGenerator(g, expected_values_for_next, | 63 function TestGenerator(g, expected_values_for_next, |
| 52 send_val, expected_values_for_send) { | 64 send_val, expected_values_for_send) { |
| 53 function testNext(thunk) { | 65 function testNext(thunk) { |
| 54 var iter = thunk(); | 66 var iter = thunk(); |
| 55 for (var i = 0; i < expected_values_for_next.length; i++) { | 67 for (var i = 0; i < expected_values_for_next.length; i++) { |
| 56 var v1 = expected_values_for_next[i]; | 68 var v1 = expected_values_for_next[i]; |
| 57 var v2 = i == expected_values_for_next.length - 1; | 69 var v2 = i == expected_values_for_next.length - 1; |
| 58 // var v3 = iter.next(); | 70 // var v3 = iter.next(); |
| 59 assertIteratorResult(v1, v2, iter.next()); | 71 assertIteratorResult(v1, v2, iter.next()); |
| 60 } | 72 } |
| 61 assertThrows(function() { iter.next(); }, Error); | 73 assertIteratorIsClosed(iter); |
| 62 } | 74 } |
| 63 function testSend(thunk) { | 75 function testSend(thunk) { |
| 64 var iter = thunk(); | 76 var iter = thunk(); |
| 65 for (var i = 0; i < expected_values_for_send.length; i++) { | 77 for (var i = 0; i < expected_values_for_send.length; i++) { |
| 66 assertIteratorResult(expected_values_for_send[i], | 78 assertIteratorResult(expected_values_for_send[i], |
| 67 i == expected_values_for_send.length - 1, | 79 i == expected_values_for_send.length - 1, |
| 68 iter.next(send_val)); | 80 iter.next(send_val)); |
| 69 } | 81 } |
| 70 assertThrows(function() { iter.next(send_val); }, Error); | 82 assertIteratorIsClosed(iter); |
| 71 } | 83 } |
| 72 function testThrow(thunk) { | 84 function testThrow(thunk) { |
| 73 for (var i = 0; i < expected_values_for_next.length; i++) { | 85 for (var i = 0; i < expected_values_for_next.length; i++) { |
| 74 var iter = thunk(); | 86 var iter = thunk(); |
| 75 for (var j = 0; j < i; j++) { | 87 for (var j = 0; j < i; j++) { |
| 76 assertIteratorResult(expected_values_for_next[j], | 88 assertIteratorResult(expected_values_for_next[j], |
| 77 j == expected_values_for_next.length - 1, | 89 j == expected_values_for_next.length - 1, |
| 78 iter.next()); | 90 iter.next()); |
| 79 } | 91 } |
| 80 function Sentinel() {} | 92 function Sentinel() {} |
| 81 assertThrows(function () { iter.throw(new Sentinel); }, Sentinel); | 93 assertThrows(function () { iter.throw(new Sentinel); }, Sentinel); |
| 82 assertThrows(function () { iter.next(); }, Error); | 94 assertThrownIteratorIsClosed(iter); |
| 83 } | 95 } |
| 84 } | 96 } |
| 85 | 97 |
| 86 testNext(g); | 98 testNext(g); |
| 87 testSend(g); | 99 testSend(g); |
| 88 testThrow(g); | 100 testThrow(g); |
| 89 | 101 |
| 90 testNext(function*() { return yield* g(); }); | 102 testNext(function*() { return yield* g(); }); |
| 91 testSend(function*() { return yield* g(); }); | 103 testSend(function*() { return yield* g(); }); |
| 92 testThrow(function*() { return yield* g(); }); | 104 testThrow(function*() { return yield* g(); }); |
| (...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 TestDelegatingYield(); | 399 TestDelegatingYield(); |
| 388 | 400 |
| 389 function TestTryCatch(instantiate) { | 401 function TestTryCatch(instantiate) { |
| 390 function* g() { yield 1; try { yield 2; } catch (e) { yield e; } yield 3; } | 402 function* g() { yield 1; try { yield 2; } catch (e) { yield e; } yield 3; } |
| 391 function Sentinel() {} | 403 function Sentinel() {} |
| 392 | 404 |
| 393 function Test1(iter) { | 405 function Test1(iter) { |
| 394 assertIteratorResult(1, false, iter.next()); | 406 assertIteratorResult(1, false, iter.next()); |
| 395 assertIteratorResult(2, false, iter.next()); | 407 assertIteratorResult(2, false, iter.next()); |
| 396 assertIteratorResult(3, false, iter.next()); | 408 assertIteratorResult(3, false, iter.next()); |
| 397 assertIteratorResult(undefined, true, iter.next()); | 409 assertIteratorIsClosed(iter); |
| 398 assertThrows(function() { iter.next(); }, Error); | |
| 399 } | 410 } |
| 400 Test1(instantiate(g)); | 411 Test1(instantiate(g)); |
| 401 | 412 |
| 402 function Test2(iter) { | 413 function Test2(iter) { |
| 403 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 414 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
| 404 assertThrows(function() { iter.next(); }, Error); | 415 assertThrownIteratorIsClosed(iter); |
| 405 } | 416 } |
| 406 Test2(instantiate(g)); | 417 Test2(instantiate(g)); |
| 407 | 418 |
| 408 function Test3(iter) { | 419 function Test3(iter) { |
| 409 assertIteratorResult(1, false, iter.next()); | 420 assertIteratorResult(1, false, iter.next()); |
| 410 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 421 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
| 411 assertThrows(function() { iter.next(); }, Error); | 422 assertThrownIteratorIsClosed(iter); |
| 412 } | 423 } |
| 413 Test3(instantiate(g)); | 424 Test3(instantiate(g)); |
| 414 | 425 |
| 415 function Test4(iter) { | 426 function Test4(iter) { |
| 416 assertIteratorResult(1, false, iter.next()); | 427 assertIteratorResult(1, false, iter.next()); |
| 417 assertIteratorResult(2, false, iter.next()); | 428 assertIteratorResult(2, false, iter.next()); |
| 418 var exn = new Sentinel; | 429 var exn = new Sentinel; |
| 419 assertIteratorResult(exn, false, iter.throw(exn)); | 430 assertIteratorResult(exn, false, iter.throw(exn)); |
| 420 assertIteratorResult(3, false, iter.next()); | 431 assertIteratorResult(3, false, iter.next()); |
| 421 assertIteratorResult(undefined, true, iter.next()); | 432 assertIteratorIsClosed(iter); |
| 422 assertThrows(function() { iter.next(); }, Error); | |
| 423 } | 433 } |
| 424 Test4(instantiate(g)); | 434 Test4(instantiate(g)); |
| 425 | 435 |
| 426 function Test5(iter) { | 436 function Test5(iter) { |
| 427 assertIteratorResult(1, false, iter.next()); | 437 assertIteratorResult(1, false, iter.next()); |
| 428 assertIteratorResult(2, false, iter.next()); | 438 assertIteratorResult(2, false, iter.next()); |
| 429 var exn = new Sentinel; | 439 var exn = new Sentinel; |
| 430 assertIteratorResult(exn, false, iter.throw(exn)); | 440 assertIteratorResult(exn, false, iter.throw(exn)); |
| 431 assertIteratorResult(3, false, iter.next()); | 441 assertIteratorResult(3, false, iter.next()); |
| 432 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 442 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
| 433 assertThrows(function() { iter.next(); }, Error); | 443 assertThrownIteratorIsClosed(iter); |
| 434 | |
| 435 } | 444 } |
| 436 Test5(instantiate(g)); | 445 Test5(instantiate(g)); |
| 437 | 446 |
| 438 function Test6(iter) { | 447 function Test6(iter) { |
| 439 assertIteratorResult(1, false, iter.next()); | 448 assertIteratorResult(1, false, iter.next()); |
| 440 assertIteratorResult(2, false, iter.next()); | 449 assertIteratorResult(2, false, iter.next()); |
| 441 var exn = new Sentinel; | 450 var exn = new Sentinel; |
| 442 assertIteratorResult(exn, false, iter.throw(exn)); | 451 assertIteratorResult(exn, false, iter.throw(exn)); |
| 443 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 452 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
| 444 assertThrows(function() { iter.next(); }, Error); | 453 assertThrownIteratorIsClosed(iter); |
| 445 } | 454 } |
| 446 Test6(instantiate(g)); | 455 Test6(instantiate(g)); |
| 447 | 456 |
| 448 function Test7(iter) { | 457 function Test7(iter) { |
| 449 assertIteratorResult(1, false, iter.next()); | 458 assertIteratorResult(1, false, iter.next()); |
| 450 assertIteratorResult(2, false, iter.next()); | 459 assertIteratorResult(2, false, iter.next()); |
| 451 assertIteratorResult(3, false, iter.next()); | 460 assertIteratorResult(3, false, iter.next()); |
| 452 assertIteratorResult(undefined, true, iter.next()); | 461 assertIteratorIsClosed(iter); |
| 453 assertThrows(function() { iter.next(); }, Error); | |
| 454 } | 462 } |
| 455 Test7(instantiate(g)); | 463 Test7(instantiate(g)); |
| 456 } | 464 } |
| 457 TestTryCatch(function (g) { return g(); }); | 465 TestTryCatch(function (g) { return g(); }); |
| 458 TestTryCatch(function* (g) { return yield* g(); }); | 466 TestTryCatch(function* (g) { return yield* g(); }); |
| 459 | 467 |
| 460 function TestTryFinally(instantiate) { | 468 function TestTryFinally(instantiate) { |
| 461 function* g() { yield 1; try { yield 2; } finally { yield 3; } yield 4; } | 469 function* g() { yield 1; try { yield 2; } finally { yield 3; } yield 4; } |
| 462 function Sentinel() {} | 470 function Sentinel() {} |
| 463 function Sentinel2() {} | 471 function Sentinel2() {} |
| 464 | 472 |
| 465 function Test1(iter) { | 473 function Test1(iter) { |
| 466 assertIteratorResult(1, false, iter.next()); | 474 assertIteratorResult(1, false, iter.next()); |
| 467 assertIteratorResult(2, false, iter.next()); | 475 assertIteratorResult(2, false, iter.next()); |
| 468 assertIteratorResult(3, false, iter.next()); | 476 assertIteratorResult(3, false, iter.next()); |
| 469 assertIteratorResult(4, false, iter.next()); | 477 assertIteratorResult(4, false, iter.next()); |
| 470 assertIteratorResult(undefined, true, iter.next()); | 478 assertIteratorIsClosed(iter); |
| 471 assertThrows(function() { iter.next(); }, Error); | |
| 472 } | 479 } |
| 473 Test1(instantiate(g)); | 480 Test1(instantiate(g)); |
| 474 | 481 |
| 475 function Test2(iter) { | 482 function Test2(iter) { |
| 476 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 483 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
| 477 assertThrows(function() { iter.next(); }, Error); | 484 assertThrownIteratorIsClosed(iter); |
| 478 } | 485 } |
| 479 Test2(instantiate(g)); | 486 Test2(instantiate(g)); |
| 480 | 487 |
| 481 function Test3(iter) { | 488 function Test3(iter) { |
| 482 assertIteratorResult(1, false, iter.next()); | 489 assertIteratorResult(1, false, iter.next()); |
| 483 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 490 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
| 484 assertThrows(function() { iter.next(); }, Error); | 491 assertThrownIteratorIsClosed(iter); |
| 485 } | 492 } |
| 486 Test3(instantiate(g)); | 493 Test3(instantiate(g)); |
| 487 | 494 |
| 488 function Test4(iter) { | 495 function Test4(iter) { |
| 489 assertIteratorResult(1, false, iter.next()); | 496 assertIteratorResult(1, false, iter.next()); |
| 490 assertIteratorResult(2, false, iter.next()); | 497 assertIteratorResult(2, false, iter.next()); |
| 491 assertIteratorResult(3, false, iter.throw(new Sentinel)); | 498 assertIteratorResult(3, false, iter.throw(new Sentinel)); |
| 492 assertThrows(function() { iter.next(); }, Sentinel); | 499 assertThrows(function() { iter.next(); }, Sentinel); |
| 493 assertThrows(function() { iter.next(); }, Error); | 500 assertThrownIteratorIsClosed(iter); |
| 494 | |
| 495 } | 501 } |
| 496 Test4(instantiate(g)); | 502 Test4(instantiate(g)); |
| 497 | 503 |
| 498 function Test5(iter) { | 504 function Test5(iter) { |
| 499 assertIteratorResult(1, false, iter.next()); | 505 assertIteratorResult(1, false, iter.next()); |
| 500 assertIteratorResult(2, false, iter.next()); | 506 assertIteratorResult(2, false, iter.next()); |
| 501 assertIteratorResult(3, false, iter.throw(new Sentinel)); | 507 assertIteratorResult(3, false, iter.throw(new Sentinel)); |
| 502 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2); | 508 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2); |
| 503 assertThrows(function() { iter.next(); }, Error); | 509 assertThrownIteratorIsClosed(iter); |
| 504 } | 510 } |
| 505 Test5(instantiate(g)); | 511 Test5(instantiate(g)); |
| 506 | 512 |
| 507 function Test6(iter) { | 513 function Test6(iter) { |
| 508 assertIteratorResult(1, false, iter.next()); | 514 assertIteratorResult(1, false, iter.next()); |
| 509 assertIteratorResult(2, false, iter.next()); | 515 assertIteratorResult(2, false, iter.next()); |
| 510 assertIteratorResult(3, false, iter.next()); | 516 assertIteratorResult(3, false, iter.next()); |
| 511 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 517 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
| 512 assertThrows(function() { iter.next(); }, Error); | 518 assertThrownIteratorIsClosed(iter); |
| 513 } | 519 } |
| 514 Test6(instantiate(g)); | 520 Test6(instantiate(g)); |
| 515 | 521 |
| 516 function Test7(iter) { | 522 function Test7(iter) { |
| 517 assertIteratorResult(1, false, iter.next()); | 523 assertIteratorResult(1, false, iter.next()); |
| 518 assertIteratorResult(2, false, iter.next()); | 524 assertIteratorResult(2, false, iter.next()); |
| 519 assertIteratorResult(3, false, iter.next()); | 525 assertIteratorResult(3, false, iter.next()); |
| 520 assertIteratorResult(4, false, iter.next()); | 526 assertIteratorResult(4, false, iter.next()); |
| 521 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 527 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
| 522 assertThrows(function() { iter.next(); }, Error); | 528 assertThrownIteratorIsClosed(iter); |
| 523 } | 529 } |
| 524 Test7(instantiate(g)); | 530 Test7(instantiate(g)); |
| 525 | 531 |
| 526 function Test8(iter) { | 532 function Test8(iter) { |
| 527 assertIteratorResult(1, false, iter.next()); | 533 assertIteratorResult(1, false, iter.next()); |
| 528 assertIteratorResult(2, false, iter.next()); | 534 assertIteratorResult(2, false, iter.next()); |
| 529 assertIteratorResult(3, false, iter.next()); | 535 assertIteratorResult(3, false, iter.next()); |
| 530 assertIteratorResult(4, false, iter.next()); | 536 assertIteratorResult(4, false, iter.next()); |
| 531 assertIteratorResult(undefined, true, iter.next()); | 537 assertIteratorIsClosed(iter); |
| 532 assertThrows(function() { iter.next(); }, Error); | |
| 533 | |
| 534 } | 538 } |
| 535 Test8(instantiate(g)); | 539 Test8(instantiate(g)); |
| 536 } | 540 } |
| 537 TestTryFinally(function (g) { return g(); }); | 541 TestTryFinally(function (g) { return g(); }); |
| 538 TestTryFinally(function* (g) { return yield* g(); }); | 542 TestTryFinally(function* (g) { return yield* g(); }); |
| 539 | 543 |
| 540 function TestNestedTry(instantiate) { | 544 function TestNestedTry(instantiate) { |
| 541 function* g() { | 545 function* g() { |
| 542 try { | 546 try { |
| 543 yield 1; | 547 yield 1; |
| 544 try { yield 2; } catch (e) { yield e; } | 548 try { yield 2; } catch (e) { yield e; } |
| 545 yield 3; | 549 yield 3; |
| 546 } finally { | 550 } finally { |
| 547 yield 4; | 551 yield 4; |
| 548 } | 552 } |
| 549 yield 5; | 553 yield 5; |
| 550 } | 554 } |
| 551 function Sentinel() {} | 555 function Sentinel() {} |
| 552 function Sentinel2() {} | 556 function Sentinel2() {} |
| 553 | 557 |
| 554 function Test1(iter) { | 558 function Test1(iter) { |
| 555 assertIteratorResult(1, false, iter.next()); | 559 assertIteratorResult(1, false, iter.next()); |
| 556 assertIteratorResult(2, false, iter.next()); | 560 assertIteratorResult(2, false, iter.next()); |
| 557 assertIteratorResult(3, false, iter.next()); | 561 assertIteratorResult(3, false, iter.next()); |
| 558 assertIteratorResult(4, false, iter.next()); | 562 assertIteratorResult(4, false, iter.next()); |
| 559 assertIteratorResult(5, false, iter.next()); | 563 assertIteratorResult(5, false, iter.next()); |
| 560 assertIteratorResult(undefined, true, iter.next()); | 564 assertIteratorIsClosed(iter); |
| 561 assertThrows(function() { iter.next(); }, Error); | |
| 562 } | 565 } |
| 563 Test1(instantiate(g)); | 566 Test1(instantiate(g)); |
| 564 | 567 |
| 565 function Test2(iter) { | 568 function Test2(iter) { |
| 566 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 569 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
| 567 assertThrows(function() { iter.next(); }, Error); | 570 assertThrownIteratorIsClosed(iter); |
| 568 } | 571 } |
| 569 Test2(instantiate(g)); | 572 Test2(instantiate(g)); |
| 570 | 573 |
| 571 function Test3(iter) { | 574 function Test3(iter) { |
| 572 assertIteratorResult(1, false, iter.next()); | 575 assertIteratorResult(1, false, iter.next()); |
| 573 assertIteratorResult(4, false, iter.throw(new Sentinel)); | 576 assertIteratorResult(4, false, iter.throw(new Sentinel)); |
| 574 assertThrows(function() { iter.next(); }, Sentinel); | 577 assertThrows(function() { iter.next(); }, Sentinel); |
| 575 assertThrows(function() { iter.next(); }, Error); | 578 assertThrownIteratorIsClosed(iter); |
| 576 } | 579 } |
| 577 Test3(instantiate(g)); | 580 Test3(instantiate(g)); |
| 578 | 581 |
| 579 function Test4(iter) { | 582 function Test4(iter) { |
| 580 assertIteratorResult(1, false, iter.next()); | 583 assertIteratorResult(1, false, iter.next()); |
| 581 assertIteratorResult(4, false, iter.throw(new Sentinel)); | 584 assertIteratorResult(4, false, iter.throw(new Sentinel)); |
| 582 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2); | 585 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2); |
| 583 assertThrows(function() { iter.next(); }, Error); | 586 assertThrownIteratorIsClosed(iter); |
| 584 } | 587 } |
| 585 Test4(instantiate(g)); | 588 Test4(instantiate(g)); |
| 586 | 589 |
| 587 function Test5(iter) { | 590 function Test5(iter) { |
| 588 assertIteratorResult(1, false, iter.next()); | 591 assertIteratorResult(1, false, iter.next()); |
| 589 assertIteratorResult(2, false, iter.next()); | 592 assertIteratorResult(2, false, iter.next()); |
| 590 var exn = new Sentinel; | 593 var exn = new Sentinel; |
| 591 assertIteratorResult(exn, false, iter.throw(exn)); | 594 assertIteratorResult(exn, false, iter.throw(exn)); |
| 592 assertIteratorResult(3, false, iter.next()); | 595 assertIteratorResult(3, false, iter.next()); |
| 593 assertIteratorResult(4, false, iter.next()); | 596 assertIteratorResult(4, false, iter.next()); |
| 594 assertIteratorResult(5, false, iter.next()); | 597 assertIteratorResult(5, false, iter.next()); |
| 595 assertIteratorResult(undefined, true, iter.next()); | 598 assertIteratorIsClosed(iter); |
| 596 assertThrows(function() { iter.next(); }, Error); | |
| 597 | |
| 598 } | 599 } |
| 599 Test5(instantiate(g)); | 600 Test5(instantiate(g)); |
| 600 | 601 |
| 601 function Test6(iter) { | 602 function Test6(iter) { |
| 602 assertIteratorResult(1, false, iter.next()); | 603 assertIteratorResult(1, false, iter.next()); |
| 603 assertIteratorResult(2, false, iter.next()); | 604 assertIteratorResult(2, false, iter.next()); |
| 604 var exn = new Sentinel; | 605 var exn = new Sentinel; |
| 605 assertIteratorResult(exn, false, iter.throw(exn)); | 606 assertIteratorResult(exn, false, iter.throw(exn)); |
| 606 assertIteratorResult(4, false, iter.throw(new Sentinel2)); | 607 assertIteratorResult(4, false, iter.throw(new Sentinel2)); |
| 607 assertThrows(function() { iter.next(); }, Sentinel2); | 608 assertThrows(function() { iter.next(); }, Sentinel2); |
| 608 assertThrows(function() { iter.next(); }, Error); | 609 assertThrownIteratorIsClosed(iter); |
| 609 } | 610 } |
| 610 Test6(instantiate(g)); | 611 Test6(instantiate(g)); |
| 611 | 612 |
| 612 function Test7(iter) { | 613 function Test7(iter) { |
| 613 assertIteratorResult(1, false, iter.next()); | 614 assertIteratorResult(1, false, iter.next()); |
| 614 assertIteratorResult(2, false, iter.next()); | 615 assertIteratorResult(2, false, iter.next()); |
| 615 var exn = new Sentinel; | 616 var exn = new Sentinel; |
| 616 assertIteratorResult(exn, false, iter.throw(exn)); | 617 assertIteratorResult(exn, false, iter.throw(exn)); |
| 617 assertIteratorResult(3, false, iter.next()); | 618 assertIteratorResult(3, false, iter.next()); |
| 618 assertIteratorResult(4, false, iter.throw(new Sentinel2)); | 619 assertIteratorResult(4, false, iter.throw(new Sentinel2)); |
| 619 assertThrows(function() { iter.next(); }, Sentinel2); | 620 assertThrows(function() { iter.next(); }, Sentinel2); |
| 620 assertThrows(function() { iter.next(); }, Error); | 621 assertThrownIteratorIsClosed(iter); |
| 621 | |
| 622 } | 622 } |
| 623 Test7(instantiate(g)); | 623 Test7(instantiate(g)); |
| 624 | 624 |
| 625 // That's probably enough. | 625 // That's probably enough. |
| 626 } | 626 } |
| 627 TestNestedTry(function (g) { return g(); }); | 627 TestNestedTry(function (g) { return g(); }); |
| 628 TestNestedTry(function* (g) { return yield* g(); }); | 628 TestNestedTry(function* (g) { return yield* g(); }); |
| 629 | 629 |
| 630 function TestRecursion() { | 630 function TestRecursion() { |
| 631 function TestNextRecursion() { | 631 function TestNextRecursion() { |
| 632 function* g() { yield iter.next(); } | 632 function* g() { yield iter.next(); } |
| 633 var iter = g(); | 633 var iter = g(); |
| 634 return iter.next(); | 634 return iter.next(); |
| 635 } | 635 } |
| 636 function TestSendRecursion() { | 636 function TestSendRecursion() { |
| 637 function* g() { yield iter.next(42); } | 637 function* g() { yield iter.next(42); } |
| 638 var iter = g(); | 638 var iter = g(); |
| 639 return iter.next(); | 639 return iter.next(); |
| 640 } | 640 } |
| 641 function TestThrowRecursion() { | 641 function TestThrowRecursion() { |
| 642 function* g() { yield iter.throw(1); } | 642 function* g() { yield iter.throw(1); } |
| 643 var iter = g(); | 643 var iter = g(); |
| 644 return iter.next(); | 644 return iter.next(); |
| 645 } | 645 } |
| 646 assertThrows(TestNextRecursion, Error); | 646 assertThrows(TestNextRecursion, Error); |
| 647 assertThrows(TestSendRecursion, Error); | 647 assertThrows(TestSendRecursion, Error); |
| 648 assertThrows(TestThrowRecursion, Error); | 648 assertThrows(TestThrowRecursion, Error); |
| 649 } | 649 } |
| 650 TestRecursion(); | 650 TestRecursion(); |
| OLD | NEW |