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 assertIteratorResult(expected_values_for_next[i], | 68 assertIteratorResult(expected_values_for_next[i], |
57 i == expected_values_for_next.length - 1, | 69 i == expected_values_for_next.length - 1, |
58 iter.next()); | 70 iter.next()); |
59 } | 71 } |
60 assertThrows(function() { iter.next(); }, Error); | 72 assertIteratorIsClosed(iter); |
61 } | 73 } |
62 function testSend(thunk) { | 74 function testSend(thunk) { |
63 var iter = thunk(); | 75 var iter = thunk(); |
64 for (var i = 0; i < expected_values_for_send.length; i++) { | 76 for (var i = 0; i < expected_values_for_send.length; i++) { |
65 assertIteratorResult(expected_values_for_send[i], | 77 assertIteratorResult(expected_values_for_send[i], |
66 i == expected_values_for_send.length - 1, | 78 i == expected_values_for_send.length - 1, |
67 iter.next(send_val)); | 79 iter.next(send_val)); |
68 } | 80 } |
69 assertThrows(function() { iter.next(send_val); }, Error); | 81 assertIteratorIsClosed(iter); |
70 } | 82 } |
71 function testThrow(thunk) { | 83 function testThrow(thunk) { |
72 for (var i = 0; i < expected_values_for_next.length; i++) { | 84 for (var i = 0; i < expected_values_for_next.length; i++) { |
73 var iter = thunk(); | 85 var iter = thunk(); |
74 for (var j = 0; j < i; j++) { | 86 for (var j = 0; j < i; j++) { |
75 assertIteratorResult(expected_values_for_next[j], | 87 assertIteratorResult(expected_values_for_next[j], |
76 j == expected_values_for_next.length - 1, | 88 j == expected_values_for_next.length - 1, |
77 iter.next()); | 89 iter.next()); |
78 } | 90 } |
79 function Sentinel() {} | 91 function Sentinel() {} |
80 assertThrows(function () { iter.throw(new Sentinel); }, Sentinel); | 92 assertThrows(function () { iter.throw(new Sentinel); }, Sentinel); |
81 assertThrows(function () { iter.next(); }, Error); | 93 assertThrownIteratorIsClosed(iter); |
82 } | 94 } |
83 } | 95 } |
84 | 96 |
85 testNext(g); | 97 testNext(g); |
86 testSend(g); | 98 testSend(g); |
87 testThrow(g); | 99 testThrow(g); |
88 | 100 |
89 testNext(function*() { return yield* g(); }); | 101 testNext(function*() { return yield* g(); }); |
90 testSend(function*() { return yield* g(); }); | 102 testSend(function*() { return yield* g(); }); |
91 testThrow(function*() { return yield* g(); }); | 103 testThrow(function*() { return yield* g(); }); |
(...skipping 294 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
386 TestDelegatingYield(); | 398 TestDelegatingYield(); |
387 | 399 |
388 function TestTryCatch(instantiate) { | 400 function TestTryCatch(instantiate) { |
389 function* g() { yield 1; try { yield 2; } catch (e) { yield e; } yield 3; } | 401 function* g() { yield 1; try { yield 2; } catch (e) { yield e; } yield 3; } |
390 function Sentinel() {} | 402 function Sentinel() {} |
391 | 403 |
392 function Test1(iter) { | 404 function Test1(iter) { |
393 assertIteratorResult(1, false, iter.next()); | 405 assertIteratorResult(1, false, iter.next()); |
394 assertIteratorResult(2, false, iter.next()); | 406 assertIteratorResult(2, false, iter.next()); |
395 assertIteratorResult(3, false, iter.next()); | 407 assertIteratorResult(3, false, iter.next()); |
396 assertIteratorResult(undefined, true, iter.next()); | 408 assertIteratorIsClosed(iter); |
397 assertThrows(function() { iter.next(); }, Error); | |
398 } | 409 } |
399 Test1(instantiate(g)); | 410 Test1(instantiate(g)); |
400 | 411 |
401 function Test2(iter) { | 412 function Test2(iter) { |
402 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 413 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
403 assertThrows(function() { iter.next(); }, Error); | 414 assertThrownIteratorIsClosed(iter); |
404 } | 415 } |
405 Test2(instantiate(g)); | 416 Test2(instantiate(g)); |
406 | 417 |
407 function Test3(iter) { | 418 function Test3(iter) { |
408 assertIteratorResult(1, false, iter.next()); | 419 assertIteratorResult(1, false, iter.next()); |
409 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 420 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
410 assertThrows(function() { iter.next(); }, Error); | 421 assertThrownIteratorIsClosed(iter); |
411 } | 422 } |
412 Test3(instantiate(g)); | 423 Test3(instantiate(g)); |
413 | 424 |
414 function Test4(iter) { | 425 function Test4(iter) { |
415 assertIteratorResult(1, false, iter.next()); | 426 assertIteratorResult(1, false, iter.next()); |
416 assertIteratorResult(2, false, iter.next()); | 427 assertIteratorResult(2, false, iter.next()); |
417 var exn = new Sentinel; | 428 var exn = new Sentinel; |
418 assertIteratorResult(exn, false, iter.throw(exn)); | 429 assertIteratorResult(exn, false, iter.throw(exn)); |
419 assertIteratorResult(3, false, iter.next()); | 430 assertIteratorResult(3, false, iter.next()); |
420 assertIteratorResult(undefined, true, iter.next()); | 431 assertIteratorIsClosed(iter); |
421 assertThrows(function() { iter.next(); }, Error); | |
422 } | 432 } |
423 Test4(instantiate(g)); | 433 Test4(instantiate(g)); |
424 | 434 |
425 function Test5(iter) { | 435 function Test5(iter) { |
426 assertIteratorResult(1, false, iter.next()); | 436 assertIteratorResult(1, false, iter.next()); |
427 assertIteratorResult(2, false, iter.next()); | 437 assertIteratorResult(2, false, iter.next()); |
428 var exn = new Sentinel; | 438 var exn = new Sentinel; |
429 assertIteratorResult(exn, false, iter.throw(exn)); | 439 assertIteratorResult(exn, false, iter.throw(exn)); |
430 assertIteratorResult(3, false, iter.next()); | 440 assertIteratorResult(3, false, iter.next()); |
431 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 441 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
432 assertThrows(function() { iter.next(); }, Error); | 442 assertThrownIteratorIsClosed(iter); |
433 | |
434 } | 443 } |
435 Test5(instantiate(g)); | 444 Test5(instantiate(g)); |
436 | 445 |
437 function Test6(iter) { | 446 function Test6(iter) { |
438 assertIteratorResult(1, false, iter.next()); | 447 assertIteratorResult(1, false, iter.next()); |
439 assertIteratorResult(2, false, iter.next()); | 448 assertIteratorResult(2, false, iter.next()); |
440 var exn = new Sentinel; | 449 var exn = new Sentinel; |
441 assertIteratorResult(exn, false, iter.throw(exn)); | 450 assertIteratorResult(exn, false, iter.throw(exn)); |
442 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 451 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
443 assertThrows(function() { iter.next(); }, Error); | 452 assertThrownIteratorIsClosed(iter); |
444 } | 453 } |
445 Test6(instantiate(g)); | 454 Test6(instantiate(g)); |
446 | 455 |
447 function Test7(iter) { | 456 function Test7(iter) { |
448 assertIteratorResult(1, false, iter.next()); | 457 assertIteratorResult(1, false, iter.next()); |
449 assertIteratorResult(2, false, iter.next()); | 458 assertIteratorResult(2, false, iter.next()); |
450 assertIteratorResult(3, false, iter.next()); | 459 assertIteratorResult(3, false, iter.next()); |
451 assertIteratorResult(undefined, true, iter.next()); | 460 assertIteratorIsClosed(iter); |
452 assertThrows(function() { iter.next(); }, Error); | |
453 } | 461 } |
454 Test7(instantiate(g)); | 462 Test7(instantiate(g)); |
455 } | 463 } |
456 TestTryCatch(function (g) { return g(); }); | 464 TestTryCatch(function (g) { return g(); }); |
457 TestTryCatch(function* (g) { return yield* g(); }); | 465 TestTryCatch(function* (g) { return yield* g(); }); |
458 | 466 |
459 function TestTryFinally(instantiate) { | 467 function TestTryFinally(instantiate) { |
460 function* g() { yield 1; try { yield 2; } finally { yield 3; } yield 4; } | 468 function* g() { yield 1; try { yield 2; } finally { yield 3; } yield 4; } |
461 function Sentinel() {} | 469 function Sentinel() {} |
462 function Sentinel2() {} | 470 function Sentinel2() {} |
463 | 471 |
464 function Test1(iter) { | 472 function Test1(iter) { |
465 assertIteratorResult(1, false, iter.next()); | 473 assertIteratorResult(1, false, iter.next()); |
466 assertIteratorResult(2, false, iter.next()); | 474 assertIteratorResult(2, false, iter.next()); |
467 assertIteratorResult(3, false, iter.next()); | 475 assertIteratorResult(3, false, iter.next()); |
468 assertIteratorResult(4, false, iter.next()); | 476 assertIteratorResult(4, false, iter.next()); |
469 assertIteratorResult(undefined, true, iter.next()); | 477 assertIteratorIsClosed(iter); |
470 assertThrows(function() { iter.next(); }, Error); | |
471 } | 478 } |
472 Test1(instantiate(g)); | 479 Test1(instantiate(g)); |
473 | 480 |
474 function Test2(iter) { | 481 function Test2(iter) { |
475 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 482 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
476 assertThrows(function() { iter.next(); }, Error); | 483 assertThrownIteratorIsClosed(iter); |
477 } | 484 } |
478 Test2(instantiate(g)); | 485 Test2(instantiate(g)); |
479 | 486 |
480 function Test3(iter) { | 487 function Test3(iter) { |
481 assertIteratorResult(1, false, iter.next()); | 488 assertIteratorResult(1, false, iter.next()); |
482 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 489 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
483 assertThrows(function() { iter.next(); }, Error); | 490 assertThrownIteratorIsClosed(iter); |
484 } | 491 } |
485 Test3(instantiate(g)); | 492 Test3(instantiate(g)); |
486 | 493 |
487 function Test4(iter) { | 494 function Test4(iter) { |
488 assertIteratorResult(1, false, iter.next()); | 495 assertIteratorResult(1, false, iter.next()); |
489 assertIteratorResult(2, false, iter.next()); | 496 assertIteratorResult(2, false, iter.next()); |
490 assertIteratorResult(3, false, iter.throw(new Sentinel)); | 497 assertIteratorResult(3, false, iter.throw(new Sentinel)); |
491 assertThrows(function() { iter.next(); }, Sentinel); | 498 assertThrows(function() { iter.next(); }, Sentinel); |
492 assertThrows(function() { iter.next(); }, Error); | 499 assertThrownIteratorIsClosed(iter); |
493 | |
494 } | 500 } |
495 Test4(instantiate(g)); | 501 Test4(instantiate(g)); |
496 | 502 |
497 function Test5(iter) { | 503 function Test5(iter) { |
498 assertIteratorResult(1, false, iter.next()); | 504 assertIteratorResult(1, false, iter.next()); |
499 assertIteratorResult(2, false, iter.next()); | 505 assertIteratorResult(2, false, iter.next()); |
500 assertIteratorResult(3, false, iter.throw(new Sentinel)); | 506 assertIteratorResult(3, false, iter.throw(new Sentinel)); |
501 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2); | 507 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2); |
502 assertThrows(function() { iter.next(); }, Error); | 508 assertThrownIteratorIsClosed(iter); |
503 } | 509 } |
504 Test5(instantiate(g)); | 510 Test5(instantiate(g)); |
505 | 511 |
506 function Test6(iter) { | 512 function Test6(iter) { |
507 assertIteratorResult(1, false, iter.next()); | 513 assertIteratorResult(1, false, iter.next()); |
508 assertIteratorResult(2, false, iter.next()); | 514 assertIteratorResult(2, false, iter.next()); |
509 assertIteratorResult(3, false, iter.next()); | 515 assertIteratorResult(3, false, iter.next()); |
510 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 516 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
511 assertThrows(function() { iter.next(); }, Error); | 517 assertThrownIteratorIsClosed(iter); |
512 } | 518 } |
513 Test6(instantiate(g)); | 519 Test6(instantiate(g)); |
514 | 520 |
515 function Test7(iter) { | 521 function Test7(iter) { |
516 assertIteratorResult(1, false, iter.next()); | 522 assertIteratorResult(1, false, iter.next()); |
517 assertIteratorResult(2, false, iter.next()); | 523 assertIteratorResult(2, false, iter.next()); |
518 assertIteratorResult(3, false, iter.next()); | 524 assertIteratorResult(3, false, iter.next()); |
519 assertIteratorResult(4, false, iter.next()); | 525 assertIteratorResult(4, false, iter.next()); |
520 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 526 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
521 assertThrows(function() { iter.next(); }, Error); | 527 assertThrownIteratorIsClosed(iter); |
522 } | 528 } |
523 Test7(instantiate(g)); | 529 Test7(instantiate(g)); |
524 | 530 |
525 function Test8(iter) { | 531 function Test8(iter) { |
526 assertIteratorResult(1, false, iter.next()); | 532 assertIteratorResult(1, false, iter.next()); |
527 assertIteratorResult(2, false, iter.next()); | 533 assertIteratorResult(2, false, iter.next()); |
528 assertIteratorResult(3, false, iter.next()); | 534 assertIteratorResult(3, false, iter.next()); |
529 assertIteratorResult(4, false, iter.next()); | 535 assertIteratorResult(4, false, iter.next()); |
530 assertIteratorResult(undefined, true, iter.next()); | 536 assertIteratorIsClosed(iter); |
531 assertThrows(function() { iter.next(); }, Error); | |
532 | |
533 } | 537 } |
534 Test8(instantiate(g)); | 538 Test8(instantiate(g)); |
535 } | 539 } |
536 TestTryFinally(function (g) { return g(); }); | 540 TestTryFinally(function (g) { return g(); }); |
537 TestTryFinally(function* (g) { return yield* g(); }); | 541 TestTryFinally(function* (g) { return yield* g(); }); |
538 | 542 |
539 function TestNestedTry(instantiate) { | 543 function TestNestedTry(instantiate) { |
540 function* g() { | 544 function* g() { |
541 try { | 545 try { |
542 yield 1; | 546 yield 1; |
543 try { yield 2; } catch (e) { yield e; } | 547 try { yield 2; } catch (e) { yield e; } |
544 yield 3; | 548 yield 3; |
545 } finally { | 549 } finally { |
546 yield 4; | 550 yield 4; |
547 } | 551 } |
548 yield 5; | 552 yield 5; |
549 } | 553 } |
550 function Sentinel() {} | 554 function Sentinel() {} |
551 function Sentinel2() {} | 555 function Sentinel2() {} |
552 | 556 |
553 function Test1(iter) { | 557 function Test1(iter) { |
554 assertIteratorResult(1, false, iter.next()); | 558 assertIteratorResult(1, false, iter.next()); |
555 assertIteratorResult(2, false, iter.next()); | 559 assertIteratorResult(2, false, iter.next()); |
556 assertIteratorResult(3, false, iter.next()); | 560 assertIteratorResult(3, false, iter.next()); |
557 assertIteratorResult(4, false, iter.next()); | 561 assertIteratorResult(4, false, iter.next()); |
558 assertIteratorResult(5, false, iter.next()); | 562 assertIteratorResult(5, false, iter.next()); |
559 assertIteratorResult(undefined, true, iter.next()); | 563 assertIteratorIsClosed(iter); |
560 assertThrows(function() { iter.next(); }, Error); | |
561 } | 564 } |
562 Test1(instantiate(g)); | 565 Test1(instantiate(g)); |
563 | 566 |
564 function Test2(iter) { | 567 function Test2(iter) { |
565 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 568 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
566 assertThrows(function() { iter.next(); }, Error); | 569 assertThrownIteratorIsClosed(iter); |
567 } | 570 } |
568 Test2(instantiate(g)); | 571 Test2(instantiate(g)); |
569 | 572 |
570 function Test3(iter) { | 573 function Test3(iter) { |
571 assertIteratorResult(1, false, iter.next()); | 574 assertIteratorResult(1, false, iter.next()); |
572 assertIteratorResult(4, false, iter.throw(new Sentinel)); | 575 assertIteratorResult(4, false, iter.throw(new Sentinel)); |
573 assertThrows(function() { iter.next(); }, Sentinel); | 576 assertThrows(function() { iter.next(); }, Sentinel); |
574 assertThrows(function() { iter.next(); }, Error); | 577 assertThrownIteratorIsClosed(iter); |
575 } | 578 } |
576 Test3(instantiate(g)); | 579 Test3(instantiate(g)); |
577 | 580 |
578 function Test4(iter) { | 581 function Test4(iter) { |
579 assertIteratorResult(1, false, iter.next()); | 582 assertIteratorResult(1, false, iter.next()); |
580 assertIteratorResult(4, false, iter.throw(new Sentinel)); | 583 assertIteratorResult(4, false, iter.throw(new Sentinel)); |
581 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2); | 584 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2); |
582 assertThrows(function() { iter.next(); }, Error); | 585 assertThrownIteratorIsClosed(iter); |
583 } | 586 } |
584 Test4(instantiate(g)); | 587 Test4(instantiate(g)); |
585 | 588 |
586 function Test5(iter) { | 589 function Test5(iter) { |
587 assertIteratorResult(1, false, iter.next()); | 590 assertIteratorResult(1, false, iter.next()); |
588 assertIteratorResult(2, false, iter.next()); | 591 assertIteratorResult(2, false, iter.next()); |
589 var exn = new Sentinel; | 592 var exn = new Sentinel; |
590 assertIteratorResult(exn, false, iter.throw(exn)); | 593 assertIteratorResult(exn, false, iter.throw(exn)); |
591 assertIteratorResult(3, false, iter.next()); | 594 assertIteratorResult(3, false, iter.next()); |
592 assertIteratorResult(4, false, iter.next()); | 595 assertIteratorResult(4, false, iter.next()); |
593 assertIteratorResult(5, false, iter.next()); | 596 assertIteratorResult(5, false, iter.next()); |
594 assertIteratorResult(undefined, true, iter.next()); | 597 assertIteratorIsClosed(iter); |
595 assertThrows(function() { iter.next(); }, Error); | |
596 | |
597 } | 598 } |
598 Test5(instantiate(g)); | 599 Test5(instantiate(g)); |
599 | 600 |
600 function Test6(iter) { | 601 function Test6(iter) { |
601 assertIteratorResult(1, false, iter.next()); | 602 assertIteratorResult(1, false, iter.next()); |
602 assertIteratorResult(2, false, iter.next()); | 603 assertIteratorResult(2, false, iter.next()); |
603 var exn = new Sentinel; | 604 var exn = new Sentinel; |
604 assertIteratorResult(exn, false, iter.throw(exn)); | 605 assertIteratorResult(exn, false, iter.throw(exn)); |
605 assertIteratorResult(4, false, iter.throw(new Sentinel2)); | 606 assertIteratorResult(4, false, iter.throw(new Sentinel2)); |
606 assertThrows(function() { iter.next(); }, Sentinel2); | 607 assertThrows(function() { iter.next(); }, Sentinel2); |
607 assertThrows(function() { iter.next(); }, Error); | 608 assertThrownIteratorIsClosed(iter); |
608 } | 609 } |
609 Test6(instantiate(g)); | 610 Test6(instantiate(g)); |
610 | 611 |
611 function Test7(iter) { | 612 function Test7(iter) { |
612 assertIteratorResult(1, false, iter.next()); | 613 assertIteratorResult(1, false, iter.next()); |
613 assertIteratorResult(2, false, iter.next()); | 614 assertIteratorResult(2, false, iter.next()); |
614 var exn = new Sentinel; | 615 var exn = new Sentinel; |
615 assertIteratorResult(exn, false, iter.throw(exn)); | 616 assertIteratorResult(exn, false, iter.throw(exn)); |
616 assertIteratorResult(3, false, iter.next()); | 617 assertIteratorResult(3, false, iter.next()); |
617 assertIteratorResult(4, false, iter.throw(new Sentinel2)); | 618 assertIteratorResult(4, false, iter.throw(new Sentinel2)); |
618 assertThrows(function() { iter.next(); }, Sentinel2); | 619 assertThrows(function() { iter.next(); }, Sentinel2); |
619 assertThrows(function() { iter.next(); }, Error); | 620 assertThrownIteratorIsClosed(iter); |
620 | |
621 } | 621 } |
622 Test7(instantiate(g)); | 622 Test7(instantiate(g)); |
623 | 623 |
624 // That's probably enough. | 624 // That's probably enough. |
625 } | 625 } |
626 TestNestedTry(function (g) { return g(); }); | 626 TestNestedTry(function (g) { return g(); }); |
627 TestNestedTry(function* (g) { return yield* g(); }); | 627 TestNestedTry(function* (g) { return yield* g(); }); |
628 | 628 |
629 function TestRecursion() { | 629 function TestRecursion() { |
630 function TestNextRecursion() { | 630 function TestNextRecursion() { |
631 function* g() { yield iter.next(); } | 631 function* g() { yield iter.next(); } |
632 var iter = g(); | 632 var iter = g(); |
633 return iter.next(); | 633 return iter.next(); |
634 } | 634 } |
635 function TestSendRecursion() { | 635 function TestSendRecursion() { |
636 function* g() { yield iter.next(42); } | 636 function* g() { yield iter.next(42); } |
637 var iter = g(); | 637 var iter = g(); |
638 return iter.next(); | 638 return iter.next(); |
639 } | 639 } |
640 function TestThrowRecursion() { | 640 function TestThrowRecursion() { |
641 function* g() { yield iter.throw(1); } | 641 function* g() { yield iter.throw(1); } |
642 var iter = g(); | 642 var iter = g(); |
643 return iter.next(); | 643 return iter.next(); |
644 } | 644 } |
645 assertThrows(TestNextRecursion, Error); | 645 assertThrows(TestNextRecursion, Error); |
646 assertThrows(TestSendRecursion, Error); | 646 assertThrows(TestSendRecursion, Error); |
647 assertThrows(TestThrowRecursion, Error); | 647 assertThrows(TestThrowRecursion, Error); |
648 } | 648 } |
649 TestRecursion(); | 649 TestRecursion(); |
OLD | NEW |