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 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
50 | 50 |
51 function TestGenerator(g, expected_values_for_next, | 51 function TestGenerator(g, expected_values_for_next, |
52 send_val, expected_values_for_send) { | 52 send_val, expected_values_for_send) { |
53 function testNext(thunk) { | 53 function testNext(thunk) { |
54 var iter = thunk(); | 54 var iter = thunk(); |
55 for (var i = 0; i < expected_values_for_next.length; i++) { | 55 for (var i = 0; i < expected_values_for_next.length; i++) { |
56 assertIteratorResult(expected_values_for_next[i], | 56 assertIteratorResult(expected_values_for_next[i], |
57 i == expected_values_for_next.length - 1, | 57 i == expected_values_for_next.length - 1, |
58 iter.next()); | 58 iter.next()); |
59 } | 59 } |
60 assertThrows(function() { iter.next(); }, Error); | 60 assertIteratorResult(undefined, true, iter.next()); |
61 assertDoesNotThrow(function() { iter.next(); }); | |
wingo
2014/01/13 13:44:49
Consider factoring this common double-check out to
yusukesuzuki
2014/01/13 14:27:51
Introduced assertIteratorIsClosed and assertThrown
| |
61 } | 62 } |
62 function testSend(thunk) { | 63 function testSend(thunk) { |
63 var iter = thunk(); | 64 var iter = thunk(); |
64 for (var i = 0; i < expected_values_for_send.length; i++) { | 65 for (var i = 0; i < expected_values_for_send.length; i++) { |
65 assertIteratorResult(expected_values_for_send[i], | 66 assertIteratorResult(expected_values_for_send[i], |
66 i == expected_values_for_send.length - 1, | 67 i == expected_values_for_send.length - 1, |
67 iter.next(send_val)); | 68 iter.next(send_val)); |
68 } | 69 } |
69 assertThrows(function() { iter.next(send_val); }, Error); | 70 assertIteratorResult(undefined, true, iter.next()); |
71 assertDoesNotThrow(function() { iter.next(send_val); }); | |
70 } | 72 } |
71 function testThrow(thunk) { | 73 function testThrow(thunk) { |
72 for (var i = 0; i < expected_values_for_next.length; i++) { | 74 for (var i = 0; i < expected_values_for_next.length; i++) { |
73 var iter = thunk(); | 75 var iter = thunk(); |
74 for (var j = 0; j < i; j++) { | 76 for (var j = 0; j < i; j++) { |
75 assertIteratorResult(expected_values_for_next[j], | 77 assertIteratorResult(expected_values_for_next[j], |
76 j == expected_values_for_next.length - 1, | 78 j == expected_values_for_next.length - 1, |
77 iter.next()); | 79 iter.next()); |
78 } | 80 } |
79 function Sentinel() {} | 81 function Sentinel() {} |
80 assertThrows(function () { iter.throw(new Sentinel); }, Sentinel); | 82 assertThrows(function () { iter.throw(new Sentinel); }, Sentinel); |
81 assertThrows(function () { iter.next(); }, Error); | 83 // TODO(yusukesuzuki): Since status of a thrown generator is "executing", |
84 // following tests are failed. | |
85 // https://code.google.com/p/v8/issues/detail?id=3096 | |
86 /* | |
87 assertIteratorResult(undefined, true, iter.next()); | |
88 assertDoesNotThrow(function() { iter.next(); }); | |
89 */ | |
wingo
2014/01/13 13:44:49
The correct check is assertThrows(iter.next.bind(i
yusukesuzuki
2014/01/13 14:27:51
When iter.throw is executed and inserted error doe
| |
82 } | 90 } |
83 } | 91 } |
84 | 92 |
85 testNext(g); | 93 testNext(g); |
86 testSend(g); | 94 testSend(g); |
87 testThrow(g); | 95 testThrow(g); |
88 | 96 |
89 testNext(function*() { return yield* g(); }); | 97 testNext(function*() { return yield* g(); }); |
90 testSend(function*() { return yield* g(); }); | 98 testSend(function*() { return yield* g(); }); |
91 testThrow(function*() { return yield* g(); }); | 99 testThrow(function*() { return yield* g(); }); |
(...skipping 295 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
387 | 395 |
388 function TestTryCatch(instantiate) { | 396 function TestTryCatch(instantiate) { |
389 function* g() { yield 1; try { yield 2; } catch (e) { yield e; } yield 3; } | 397 function* g() { yield 1; try { yield 2; } catch (e) { yield e; } yield 3; } |
390 function Sentinel() {} | 398 function Sentinel() {} |
391 | 399 |
392 function Test1(iter) { | 400 function Test1(iter) { |
393 assertIteratorResult(1, false, iter.next()); | 401 assertIteratorResult(1, false, iter.next()); |
394 assertIteratorResult(2, false, iter.next()); | 402 assertIteratorResult(2, false, iter.next()); |
395 assertIteratorResult(3, false, iter.next()); | 403 assertIteratorResult(3, false, iter.next()); |
396 assertIteratorResult(undefined, true, iter.next()); | 404 assertIteratorResult(undefined, true, iter.next()); |
397 assertThrows(function() { iter.next(); }, Error); | 405 assertDoesNotThrow(function() { iter.next(); }); |
398 } | 406 } |
399 Test1(instantiate(g)); | 407 Test1(instantiate(g)); |
400 | 408 |
401 function Test2(iter) { | 409 function Test2(iter) { |
402 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 410 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
403 assertThrows(function() { iter.next(); }, Error); | 411 // TODO(yusukesuzuki): Since status of a thrown generator is "executing", |
412 // following tests are failed. | |
413 // https://code.google.com/p/v8/issues/detail?id=3096 | |
414 /* | |
415 assertIteratorResult(undefined, true, iter.next()); | |
416 assertDoesNotThrow(function() { iter.next(); }); | |
417 */ | |
404 } | 418 } |
405 Test2(instantiate(g)); | 419 Test2(instantiate(g)); |
406 | 420 |
407 function Test3(iter) { | 421 function Test3(iter) { |
408 assertIteratorResult(1, false, iter.next()); | 422 assertIteratorResult(1, false, iter.next()); |
409 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 423 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
410 assertThrows(function() { iter.next(); }, Error); | 424 // TODO(yusukesuzuki): Since status of a thrown generator is "executing", |
425 // following tests are failed. | |
426 // https://code.google.com/p/v8/issues/detail?id=3096 | |
427 /* | |
428 assertIteratorResult(undefined, true, iter.next()); | |
429 assertDoesNotThrow(function() { iter.next(); }); | |
430 */ | |
411 } | 431 } |
412 Test3(instantiate(g)); | 432 Test3(instantiate(g)); |
413 | 433 |
414 function Test4(iter) { | 434 function Test4(iter) { |
415 assertIteratorResult(1, false, iter.next()); | 435 assertIteratorResult(1, false, iter.next()); |
416 assertIteratorResult(2, false, iter.next()); | 436 assertIteratorResult(2, false, iter.next()); |
417 var exn = new Sentinel; | 437 var exn = new Sentinel; |
418 assertIteratorResult(exn, false, iter.throw(exn)); | 438 assertIteratorResult(exn, false, iter.throw(exn)); |
419 assertIteratorResult(3, false, iter.next()); | 439 assertIteratorResult(3, false, iter.next()); |
420 assertIteratorResult(undefined, true, iter.next()); | 440 assertIteratorResult(undefined, true, iter.next()); |
421 assertThrows(function() { iter.next(); }, Error); | 441 assertDoesNotThrow(function() { iter.next(); }); |
422 } | 442 } |
423 Test4(instantiate(g)); | 443 Test4(instantiate(g)); |
424 | 444 |
425 function Test5(iter) { | 445 function Test5(iter) { |
426 assertIteratorResult(1, false, iter.next()); | 446 assertIteratorResult(1, false, iter.next()); |
427 assertIteratorResult(2, false, iter.next()); | 447 assertIteratorResult(2, false, iter.next()); |
428 var exn = new Sentinel; | 448 var exn = new Sentinel; |
429 assertIteratorResult(exn, false, iter.throw(exn)); | 449 assertIteratorResult(exn, false, iter.throw(exn)); |
430 assertIteratorResult(3, false, iter.next()); | 450 assertIteratorResult(3, false, iter.next()); |
431 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 451 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
432 assertThrows(function() { iter.next(); }, Error); | 452 // TODO(yusukesuzuki): Since status of a thrown generator is "executing", |
433 | 453 // following tests are failed. |
454 // https://code.google.com/p/v8/issues/detail?id=3096 | |
455 /* | |
456 assertIteratorResult(undefined, true, iter.next()); | |
457 assertDoesNotThrow(function() { iter.next(); }); | |
458 */ | |
434 } | 459 } |
435 Test5(instantiate(g)); | 460 Test5(instantiate(g)); |
436 | 461 |
437 function Test6(iter) { | 462 function Test6(iter) { |
438 assertIteratorResult(1, false, iter.next()); | 463 assertIteratorResult(1, false, iter.next()); |
439 assertIteratorResult(2, false, iter.next()); | 464 assertIteratorResult(2, false, iter.next()); |
440 var exn = new Sentinel; | 465 var exn = new Sentinel; |
441 assertIteratorResult(exn, false, iter.throw(exn)); | 466 assertIteratorResult(exn, false, iter.throw(exn)); |
442 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 467 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
443 assertThrows(function() { iter.next(); }, Error); | 468 // TODO(yusukesuzuki): Since status of a thrown generator is "executing", |
469 // following tests are failed. | |
470 // https://code.google.com/p/v8/issues/detail?id=3096 | |
471 /* | |
472 assertIteratorResult(undefined, true, iter.next()); | |
473 assertDoesNotThrow(function() { iter.next(); }); | |
474 */ | |
444 } | 475 } |
445 Test6(instantiate(g)); | 476 Test6(instantiate(g)); |
446 | 477 |
447 function Test7(iter) { | 478 function Test7(iter) { |
448 assertIteratorResult(1, false, iter.next()); | 479 assertIteratorResult(1, false, iter.next()); |
449 assertIteratorResult(2, false, iter.next()); | 480 assertIteratorResult(2, false, iter.next()); |
450 assertIteratorResult(3, false, iter.next()); | 481 assertIteratorResult(3, false, iter.next()); |
451 assertIteratorResult(undefined, true, iter.next()); | 482 assertIteratorResult(undefined, true, iter.next()); |
452 assertThrows(function() { iter.next(); }, Error); | 483 assertDoesNotThrow(function() { iter.next(); }); |
453 } | 484 } |
454 Test7(instantiate(g)); | 485 Test7(instantiate(g)); |
455 } | 486 } |
456 TestTryCatch(function (g) { return g(); }); | 487 TestTryCatch(function (g) { return g(); }); |
457 TestTryCatch(function* (g) { return yield* g(); }); | 488 TestTryCatch(function* (g) { return yield* g(); }); |
458 | 489 |
459 function TestTryFinally(instantiate) { | 490 function TestTryFinally(instantiate) { |
460 function* g() { yield 1; try { yield 2; } finally { yield 3; } yield 4; } | 491 function* g() { yield 1; try { yield 2; } finally { yield 3; } yield 4; } |
461 function Sentinel() {} | 492 function Sentinel() {} |
462 function Sentinel2() {} | 493 function Sentinel2() {} |
463 | 494 |
464 function Test1(iter) { | 495 function Test1(iter) { |
465 assertIteratorResult(1, false, iter.next()); | 496 assertIteratorResult(1, false, iter.next()); |
466 assertIteratorResult(2, false, iter.next()); | 497 assertIteratorResult(2, false, iter.next()); |
467 assertIteratorResult(3, false, iter.next()); | 498 assertIteratorResult(3, false, iter.next()); |
468 assertIteratorResult(4, false, iter.next()); | 499 assertIteratorResult(4, false, iter.next()); |
469 assertIteratorResult(undefined, true, iter.next()); | 500 assertIteratorResult(undefined, true, iter.next()); |
470 assertThrows(function() { iter.next(); }, Error); | 501 assertDoesNotThrow(function() { iter.next(); }); |
471 } | 502 } |
472 Test1(instantiate(g)); | 503 Test1(instantiate(g)); |
473 | 504 |
474 function Test2(iter) { | 505 function Test2(iter) { |
475 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 506 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
476 assertThrows(function() { iter.next(); }, Error); | 507 // TODO(yusukesuzuki): Since status of a thrown generator is "executing", |
508 // following tests are failed. | |
509 // https://code.google.com/p/v8/issues/detail?id=3096 | |
510 /* | |
511 assertIteratorResult(undefined, true, iter.next()); | |
512 assertDoesNotThrow(function() { iter.next(); }); | |
513 */ | |
477 } | 514 } |
478 Test2(instantiate(g)); | 515 Test2(instantiate(g)); |
479 | 516 |
480 function Test3(iter) { | 517 function Test3(iter) { |
481 assertIteratorResult(1, false, iter.next()); | 518 assertIteratorResult(1, false, iter.next()); |
482 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 519 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
483 assertThrows(function() { iter.next(); }, Error); | 520 // TODO(yusukesuzuki): Since status of a thrown generator is "executing", |
521 // following tests are failed. | |
522 // https://code.google.com/p/v8/issues/detail?id=3096 | |
523 /* | |
524 assertIteratorResult(undefined, true, iter.next()); | |
525 assertDoesNotThrow(function() { iter.next(); }); | |
526 */ | |
484 } | 527 } |
485 Test3(instantiate(g)); | 528 Test3(instantiate(g)); |
486 | 529 |
487 function Test4(iter) { | 530 function Test4(iter) { |
488 assertIteratorResult(1, false, iter.next()); | 531 assertIteratorResult(1, false, iter.next()); |
489 assertIteratorResult(2, false, iter.next()); | 532 assertIteratorResult(2, false, iter.next()); |
490 assertIteratorResult(3, false, iter.throw(new Sentinel)); | 533 assertIteratorResult(3, false, iter.throw(new Sentinel)); |
491 assertThrows(function() { iter.next(); }, Sentinel); | 534 assertThrows(function() { iter.next(); }, Sentinel); |
492 assertThrows(function() { iter.next(); }, Error); | 535 // TODO(yusukesuzuki): Since status of a thrown generator is "executing", |
493 | 536 // following tests are failed. |
537 // https://code.google.com/p/v8/issues/detail?id=3096 | |
538 /* | |
539 assertIteratorResult(undefined, true, iter.next()); | |
540 assertDoesNotThrow(function() { iter.next(); }); | |
541 */ | |
494 } | 542 } |
495 Test4(instantiate(g)); | 543 Test4(instantiate(g)); |
496 | 544 |
497 function Test5(iter) { | 545 function Test5(iter) { |
498 assertIteratorResult(1, false, iter.next()); | 546 assertIteratorResult(1, false, iter.next()); |
499 assertIteratorResult(2, false, iter.next()); | 547 assertIteratorResult(2, false, iter.next()); |
500 assertIteratorResult(3, false, iter.throw(new Sentinel)); | 548 assertIteratorResult(3, false, iter.throw(new Sentinel)); |
501 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2); | 549 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2); |
502 assertThrows(function() { iter.next(); }, Error); | 550 // TODO(yusukesuzuki): Since status of a thrown generator is "executing", |
551 // following tests are failed. | |
552 // https://code.google.com/p/v8/issues/detail?id=3096 | |
553 /* | |
554 assertIteratorResult(undefined, true, iter.next()); | |
555 assertDoesNotThrow(function() { iter.next(); }); | |
556 */ | |
503 } | 557 } |
504 Test5(instantiate(g)); | 558 Test5(instantiate(g)); |
505 | 559 |
506 function Test6(iter) { | 560 function Test6(iter) { |
507 assertIteratorResult(1, false, iter.next()); | 561 assertIteratorResult(1, false, iter.next()); |
508 assertIteratorResult(2, false, iter.next()); | 562 assertIteratorResult(2, false, iter.next()); |
509 assertIteratorResult(3, false, iter.next()); | 563 assertIteratorResult(3, false, iter.next()); |
510 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 564 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
511 assertThrows(function() { iter.next(); }, Error); | 565 // TODO(yusukesuzuki): Since status of a thrown generator is "executing", |
566 // following tests are failed. | |
567 // https://code.google.com/p/v8/issues/detail?id=3096 | |
568 /* | |
569 assertIteratorResult(undefined, true, iter.next()); | |
570 assertDoesNotThrow(function() { iter.next(); }); | |
571 */ | |
512 } | 572 } |
513 Test6(instantiate(g)); | 573 Test6(instantiate(g)); |
514 | 574 |
515 function Test7(iter) { | 575 function Test7(iter) { |
516 assertIteratorResult(1, false, iter.next()); | 576 assertIteratorResult(1, false, iter.next()); |
517 assertIteratorResult(2, false, iter.next()); | 577 assertIteratorResult(2, false, iter.next()); |
518 assertIteratorResult(3, false, iter.next()); | 578 assertIteratorResult(3, false, iter.next()); |
519 assertIteratorResult(4, false, iter.next()); | 579 assertIteratorResult(4, false, iter.next()); |
520 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 580 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
521 assertThrows(function() { iter.next(); }, Error); | 581 // TODO(yusukesuzuki): Since status of a thrown generator is "executing", |
582 // following tests are failed. | |
583 // https://code.google.com/p/v8/issues/detail?id=3096 | |
584 /* | |
585 assertIteratorResult(undefined, true, iter.next()); | |
586 assertDoesNotThrow(function() { iter.next(); }); | |
587 */ | |
522 } | 588 } |
523 Test7(instantiate(g)); | 589 Test7(instantiate(g)); |
524 | 590 |
525 function Test8(iter) { | 591 function Test8(iter) { |
526 assertIteratorResult(1, false, iter.next()); | 592 assertIteratorResult(1, false, iter.next()); |
527 assertIteratorResult(2, false, iter.next()); | 593 assertIteratorResult(2, false, iter.next()); |
528 assertIteratorResult(3, false, iter.next()); | 594 assertIteratorResult(3, false, iter.next()); |
529 assertIteratorResult(4, false, iter.next()); | 595 assertIteratorResult(4, false, iter.next()); |
530 assertIteratorResult(undefined, true, iter.next()); | 596 assertIteratorResult(undefined, true, iter.next()); |
531 assertThrows(function() { iter.next(); }, Error); | 597 assertDoesNotThrow(function() { iter.next(); }); |
532 | |
533 } | 598 } |
534 Test8(instantiate(g)); | 599 Test8(instantiate(g)); |
535 } | 600 } |
536 TestTryFinally(function (g) { return g(); }); | 601 TestTryFinally(function (g) { return g(); }); |
537 TestTryFinally(function* (g) { return yield* g(); }); | 602 TestTryFinally(function* (g) { return yield* g(); }); |
538 | 603 |
539 function TestNestedTry(instantiate) { | 604 function TestNestedTry(instantiate) { |
540 function* g() { | 605 function* g() { |
541 try { | 606 try { |
542 yield 1; | 607 yield 1; |
543 try { yield 2; } catch (e) { yield e; } | 608 try { yield 2; } catch (e) { yield e; } |
544 yield 3; | 609 yield 3; |
545 } finally { | 610 } finally { |
546 yield 4; | 611 yield 4; |
547 } | 612 } |
548 yield 5; | 613 yield 5; |
549 } | 614 } |
550 function Sentinel() {} | 615 function Sentinel() {} |
551 function Sentinel2() {} | 616 function Sentinel2() {} |
552 | 617 |
553 function Test1(iter) { | 618 function Test1(iter) { |
554 assertIteratorResult(1, false, iter.next()); | 619 assertIteratorResult(1, false, iter.next()); |
555 assertIteratorResult(2, false, iter.next()); | 620 assertIteratorResult(2, false, iter.next()); |
556 assertIteratorResult(3, false, iter.next()); | 621 assertIteratorResult(3, false, iter.next()); |
557 assertIteratorResult(4, false, iter.next()); | 622 assertIteratorResult(4, false, iter.next()); |
558 assertIteratorResult(5, false, iter.next()); | 623 assertIteratorResult(5, false, iter.next()); |
559 assertIteratorResult(undefined, true, iter.next()); | 624 assertIteratorResult(undefined, true, iter.next()); |
560 assertThrows(function() { iter.next(); }, Error); | 625 assertDoesNotThrow(function() { iter.next(); }); |
561 } | 626 } |
562 Test1(instantiate(g)); | 627 Test1(instantiate(g)); |
563 | 628 |
564 function Test2(iter) { | 629 function Test2(iter) { |
565 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 630 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
566 assertThrows(function() { iter.next(); }, Error); | 631 // TODO(yusukesuzuki): Since status of a thrown generator is "executing", |
632 // following tests are failed. | |
633 // https://code.google.com/p/v8/issues/detail?id=3096 | |
634 /* | |
635 assertIteratorResult(undefined, true, iter.next()); | |
636 assertDoesNotThrow(function() { iter.next(); }); | |
637 */ | |
567 } | 638 } |
568 Test2(instantiate(g)); | 639 Test2(instantiate(g)); |
569 | 640 |
570 function Test3(iter) { | 641 function Test3(iter) { |
571 assertIteratorResult(1, false, iter.next()); | 642 assertIteratorResult(1, false, iter.next()); |
572 assertIteratorResult(4, false, iter.throw(new Sentinel)); | 643 assertIteratorResult(4, false, iter.throw(new Sentinel)); |
573 assertThrows(function() { iter.next(); }, Sentinel); | 644 assertThrows(function() { iter.next(); }, Sentinel); |
574 assertThrows(function() { iter.next(); }, Error); | 645 // TODO(yusukesuzuki): Since status of a thrown generator is "executing", |
646 // following tests are failed. | |
647 // https://code.google.com/p/v8/issues/detail?id=3096 | |
648 /* | |
649 assertIteratorResult(undefined, true, iter.next()); | |
650 assertDoesNotThrow(function() { iter.next(); }); | |
651 */ | |
575 } | 652 } |
576 Test3(instantiate(g)); | 653 Test3(instantiate(g)); |
577 | 654 |
578 function Test4(iter) { | 655 function Test4(iter) { |
579 assertIteratorResult(1, false, iter.next()); | 656 assertIteratorResult(1, false, iter.next()); |
580 assertIteratorResult(4, false, iter.throw(new Sentinel)); | 657 assertIteratorResult(4, false, iter.throw(new Sentinel)); |
581 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2); | 658 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2); |
582 assertThrows(function() { iter.next(); }, Error); | 659 // TODO(yusukesuzuki): Since status of a thrown generator is "executing", |
660 // following tests are failed. | |
661 // https://code.google.com/p/v8/issues/detail?id=3096 | |
662 /* | |
663 assertIteratorResult(undefined, true, iter.next()); | |
664 assertDoesNotThrow(function() { iter.next(); }); | |
665 */ | |
583 } | 666 } |
584 Test4(instantiate(g)); | 667 Test4(instantiate(g)); |
585 | 668 |
586 function Test5(iter) { | 669 function Test5(iter) { |
587 assertIteratorResult(1, false, iter.next()); | 670 assertIteratorResult(1, false, iter.next()); |
588 assertIteratorResult(2, false, iter.next()); | 671 assertIteratorResult(2, false, iter.next()); |
589 var exn = new Sentinel; | 672 var exn = new Sentinel; |
590 assertIteratorResult(exn, false, iter.throw(exn)); | 673 assertIteratorResult(exn, false, iter.throw(exn)); |
591 assertIteratorResult(3, false, iter.next()); | 674 assertIteratorResult(3, false, iter.next()); |
592 assertIteratorResult(4, false, iter.next()); | 675 assertIteratorResult(4, false, iter.next()); |
593 assertIteratorResult(5, false, iter.next()); | 676 assertIteratorResult(5, false, iter.next()); |
594 assertIteratorResult(undefined, true, iter.next()); | 677 assertIteratorResult(undefined, true, iter.next()); |
595 assertThrows(function() { iter.next(); }, Error); | 678 assertDoesNotThrow(function() { iter.next(); }); |
596 | |
597 } | 679 } |
598 Test5(instantiate(g)); | 680 Test5(instantiate(g)); |
599 | 681 |
600 function Test6(iter) { | 682 function Test6(iter) { |
601 assertIteratorResult(1, false, iter.next()); | 683 assertIteratorResult(1, false, iter.next()); |
602 assertIteratorResult(2, false, iter.next()); | 684 assertIteratorResult(2, false, iter.next()); |
603 var exn = new Sentinel; | 685 var exn = new Sentinel; |
604 assertIteratorResult(exn, false, iter.throw(exn)); | 686 assertIteratorResult(exn, false, iter.throw(exn)); |
605 assertIteratorResult(4, false, iter.throw(new Sentinel2)); | 687 assertIteratorResult(4, false, iter.throw(new Sentinel2)); |
606 assertThrows(function() { iter.next(); }, Sentinel2); | 688 assertThrows(function() { iter.next(); }, Sentinel2); |
607 assertThrows(function() { iter.next(); }, Error); | 689 // TODO(yusukesuzuki): Since status of a thrown generator is "executing", |
690 // following tests are failed. | |
691 // https://code.google.com/p/v8/issues/detail?id=3096 | |
692 /* | |
693 assertIteratorResult(undefined, true, iter.next()); | |
694 assertDoesNotThrow(function() { iter.next(); }); | |
695 */ | |
608 } | 696 } |
609 Test6(instantiate(g)); | 697 Test6(instantiate(g)); |
610 | 698 |
611 function Test7(iter) { | 699 function Test7(iter) { |
612 assertIteratorResult(1, false, iter.next()); | 700 assertIteratorResult(1, false, iter.next()); |
613 assertIteratorResult(2, false, iter.next()); | 701 assertIteratorResult(2, false, iter.next()); |
614 var exn = new Sentinel; | 702 var exn = new Sentinel; |
615 assertIteratorResult(exn, false, iter.throw(exn)); | 703 assertIteratorResult(exn, false, iter.throw(exn)); |
616 assertIteratorResult(3, false, iter.next()); | 704 assertIteratorResult(3, false, iter.next()); |
617 assertIteratorResult(4, false, iter.throw(new Sentinel2)); | 705 assertIteratorResult(4, false, iter.throw(new Sentinel2)); |
618 assertThrows(function() { iter.next(); }, Sentinel2); | 706 assertThrows(function() { iter.next(); }, Sentinel2); |
619 assertThrows(function() { iter.next(); }, Error); | 707 // TODO(yusukesuzuki): Since status of a thrown generator is "executing", |
620 | 708 // following tests are failed. |
709 // https://code.google.com/p/v8/issues/detail?id=3096 | |
710 /* | |
711 assertIteratorResult(undefined, true, iter.next()); | |
712 assertDoesNotThrow(function() { iter.next(); }); | |
713 */ | |
621 } | 714 } |
622 Test7(instantiate(g)); | 715 Test7(instantiate(g)); |
623 | 716 |
624 // That's probably enough. | 717 // That's probably enough. |
625 } | 718 } |
626 TestNestedTry(function (g) { return g(); }); | 719 TestNestedTry(function (g) { return g(); }); |
627 TestNestedTry(function* (g) { return yield* g(); }); | 720 TestNestedTry(function* (g) { return yield* g(); }); |
628 | 721 |
629 function TestRecursion() { | 722 function TestRecursion() { |
630 function TestNextRecursion() { | 723 function TestNextRecursion() { |
631 function* g() { yield iter.next(); } | 724 function* g() { yield iter.next(); } |
632 var iter = g(); | 725 var iter = g(); |
633 return iter.next(); | 726 return iter.next(); |
634 } | 727 } |
635 function TestSendRecursion() { | 728 function TestSendRecursion() { |
636 function* g() { yield iter.next(42); } | 729 function* g() { yield iter.next(42); } |
637 var iter = g(); | 730 var iter = g(); |
638 return iter.next(); | 731 return iter.next(); |
639 } | 732 } |
640 function TestThrowRecursion() { | 733 function TestThrowRecursion() { |
641 function* g() { yield iter.throw(1); } | 734 function* g() { yield iter.throw(1); } |
642 var iter = g(); | 735 var iter = g(); |
643 return iter.next(); | 736 return iter.next(); |
644 } | 737 } |
645 assertThrows(TestNextRecursion, Error); | 738 assertThrows(TestNextRecursion, Error); |
646 assertThrows(TestSendRecursion, Error); | 739 assertThrows(TestSendRecursion, Error); |
647 assertThrows(TestThrowRecursion, Error); | 740 assertThrows(TestThrowRecursion, Error); |
648 } | 741 } |
649 TestRecursion(); | 742 TestRecursion(); |
OLD | NEW |