| 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 |