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 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
300 throw (yield (1 + (yield 2) + 3)) | 300 throw (yield (1 + (yield 2) + 3)) |
301 } catch (e) { | 301 } catch (e) { |
302 if (typeof e == 'object') throw e; | 302 if (typeof e == 'object') throw e; |
303 return e + (yield (4 + (yield 5) + 6)); | 303 return e + (yield (4 + (yield 5) + 6)); |
304 } | 304 } |
305 }, | 305 }, |
306 [2, NaN, 5, NaN, NaN], | 306 [2, NaN, 5, NaN, NaN], |
307 "foo", | 307 "foo", |
308 [2, "1foo3", 5, "4foo6", "foofoo"]); | 308 [2, "1foo3", 5, "4foo6", "foofoo"]); |
309 | 309 |
310 // Delegating yield | |
311 TestGenerator( | |
312 function* g26() { | |
313 function* g() { var x = yield 1; yield 2; yield x; return 3; } | |
314 yield* g(); | |
315 }, | |
316 [1, 2, undefined, undefined], | |
317 "foo", | |
318 [1, 2, "foo", undefined]); | |
319 | |
310 function TestTryCatch() { | 320 function TestTryCatch() { |
311 function* g() { yield 1; try { yield 2; } catch (e) { yield e; } yield 3; } | 321 function* g() { yield 1; try { yield 2; } catch (e) { yield e; } yield 3; } |
312 function Sentinel() {} | 322 function Sentinel() {} |
313 var iter; | 323 var iter; |
314 | 324 |
315 iter = g(); | 325 iter = g(); |
316 assertIteratorResult(1, false, iter.next()); | 326 assertIteratorResult(1, false, iter.next()); |
317 assertIteratorResult(2, false, iter.next()); | 327 assertIteratorResult(2, false, iter.next()); |
318 assertIteratorResult(3, false, iter.next()); | 328 assertIteratorResult(3, false, iter.next()); |
319 assertIteratorResult(undefined, true, iter.next()); | 329 assertIteratorResult(undefined, true, iter.next()); |
(...skipping 19 matching lines...) Expand all Loading... | |
339 | 349 |
340 iter = g(); | 350 iter = g(); |
341 assertIteratorResult(1, false, iter.next()); | 351 assertIteratorResult(1, false, iter.next()); |
342 assertIteratorResult(2, false, iter.next()); | 352 assertIteratorResult(2, false, iter.next()); |
343 var exn = new Sentinel; | 353 var exn = new Sentinel; |
344 assertIteratorResult(exn, false, iter.throw(exn)); | 354 assertIteratorResult(exn, false, iter.throw(exn)); |
345 assertIteratorResult(3, false, iter.next()); | 355 assertIteratorResult(3, false, iter.next()); |
346 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 356 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
347 assertThrows(function() { iter.next(); }, Error); | 357 assertThrows(function() { iter.next(); }, Error); |
348 | 358 |
359 // *** | |
349 iter = g(); | 360 iter = g(); |
350 assertIteratorResult(1, false, iter.next()); | 361 assertIteratorResult(1, false, iter.next()); |
351 assertIteratorResult(2, false, iter.next()); | 362 assertIteratorResult(2, false, iter.next()); |
352 var exn = new Sentinel; | 363 var exn = new Sentinel; |
353 assertIteratorResult(exn, false, iter.throw(exn)); | 364 assertIteratorResult(exn, false, iter.throw(exn)); |
354 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 365 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
355 assertThrows(function() { iter.next(); }, Error); | 366 assertThrows(function() { iter.next(); }, Error); |
356 | 367 |
357 iter = g(); | 368 iter = g(); |
358 assertIteratorResult(1, false, iter.next()); | 369 assertIteratorResult(1, false, iter.next()); |
359 assertIteratorResult(2, false, iter.next()); | 370 assertIteratorResult(2, false, iter.next()); |
360 assertIteratorResult(3, false, iter.next()); | 371 assertIteratorResult(3, false, iter.next()); |
361 assertIteratorResult(undefined, true, iter.next()); | 372 assertIteratorResult(undefined, true, iter.next()); |
362 assertThrows(function() { iter.next(); }, Error); | 373 assertThrows(function() { iter.next(); }, Error); |
374 | |
375 // same as *** above with delegate | |
rossberg
2013/05/13 11:14:56
Would be cool if all these Test functions were fac
| |
376 iter = (function* () { yield* g(); })(); | |
377 assertIteratorResult(1, false, iter.next()); | |
378 assertIteratorResult(2, false, iter.next()); | |
379 var exn = new Sentinel; | |
380 assertIteratorResult(exn, false, iter.throw(exn)); | |
381 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | |
382 assertThrows(function() { iter.next(); }, Error); | |
363 } | 383 } |
364 TestTryCatch(); | 384 TestTryCatch(); |
365 | 385 |
366 function TestTryFinally() { | 386 function TestTryFinally() { |
367 function* g() { yield 1; try { yield 2; } finally { yield 3; } yield 4; } | 387 function* g() { yield 1; try { yield 2; } finally { yield 3; } yield 4; } |
368 function Sentinel() {} | 388 function Sentinel() {} |
369 function Sentinel2() {} | 389 function Sentinel2() {} |
370 var iter; | 390 var iter; |
371 | 391 |
372 iter = g(); | 392 iter = g(); |
(...skipping 13 matching lines...) Expand all Loading... | |
386 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 406 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
387 assertThrows(function() { iter.next(); }, Error); | 407 assertThrows(function() { iter.next(); }, Error); |
388 | 408 |
389 iter = g(); | 409 iter = g(); |
390 assertIteratorResult(1, false, iter.next()); | 410 assertIteratorResult(1, false, iter.next()); |
391 assertIteratorResult(2, false, iter.next()); | 411 assertIteratorResult(2, false, iter.next()); |
392 assertIteratorResult(3, false, iter.throw(new Sentinel)); | 412 assertIteratorResult(3, false, iter.throw(new Sentinel)); |
393 assertThrows(function() { iter.next(); }, Sentinel); | 413 assertThrows(function() { iter.next(); }, Sentinel); |
394 assertThrows(function() { iter.next(); }, Error); | 414 assertThrows(function() { iter.next(); }, Error); |
395 | 415 |
416 // *** | |
396 iter = g(); | 417 iter = g(); |
397 assertIteratorResult(1, false, iter.next()); | 418 assertIteratorResult(1, false, iter.next()); |
398 assertIteratorResult(2, false, iter.next()); | 419 assertIteratorResult(2, false, iter.next()); |
399 assertIteratorResult(3, false, iter.throw(new Sentinel)); | 420 assertIteratorResult(3, false, iter.throw(new Sentinel)); |
400 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2); | 421 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2); |
401 assertThrows(function() { iter.next(); }, Error); | 422 assertThrows(function() { iter.next(); }, Error); |
402 | 423 |
403 iter = g(); | 424 iter = g(); |
404 assertIteratorResult(1, false, iter.next()); | 425 assertIteratorResult(1, false, iter.next()); |
405 assertIteratorResult(2, false, iter.next()); | 426 assertIteratorResult(2, false, iter.next()); |
406 assertIteratorResult(3, false, iter.next()); | 427 assertIteratorResult(3, false, iter.next()); |
407 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 428 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
408 assertThrows(function() { iter.next(); }, Error); | 429 assertThrows(function() { iter.next(); }, Error); |
409 | 430 |
410 iter = g(); | 431 iter = g(); |
411 assertIteratorResult(1, false, iter.next()); | 432 assertIteratorResult(1, false, iter.next()); |
412 assertIteratorResult(2, false, iter.next()); | 433 assertIteratorResult(2, false, iter.next()); |
413 assertIteratorResult(3, false, iter.next()); | 434 assertIteratorResult(3, false, iter.next()); |
414 assertIteratorResult(4, false, iter.next()); | 435 assertIteratorResult(4, false, iter.next()); |
415 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); | 436 assertThrows(function() { iter.throw(new Sentinel); }, Sentinel); |
416 assertThrows(function() { iter.next(); }, Error); | 437 assertThrows(function() { iter.next(); }, Error); |
417 | 438 |
418 iter = g(); | 439 iter = g(); |
419 assertIteratorResult(1, false, iter.next()); | 440 assertIteratorResult(1, false, iter.next()); |
420 assertIteratorResult(2, false, iter.next()); | 441 assertIteratorResult(2, false, iter.next()); |
421 assertIteratorResult(3, false, iter.next()); | 442 assertIteratorResult(3, false, iter.next()); |
422 assertIteratorResult(4, false, iter.next()); | 443 assertIteratorResult(4, false, iter.next()); |
423 assertIteratorResult(undefined, true, iter.next()); | 444 assertIteratorResult(undefined, true, iter.next()); |
424 assertThrows(function() { iter.next(); }, Error); | 445 assertThrows(function() { iter.next(); }, Error); |
446 | |
447 // same as *** above with delegate | |
448 iter = (function* () { yield* g(); })(); | |
449 assertIteratorResult(1, false, iter.next()); | |
450 assertIteratorResult(2, false, iter.next()); | |
451 assertIteratorResult(3, false, iter.throw(new Sentinel)); | |
452 assertThrows(function() { iter.throw(new Sentinel2); }, Sentinel2); | |
453 assertThrows(function() { iter.next(); }, Error); | |
425 } | 454 } |
426 TestTryFinally(); | 455 TestTryFinally(); |
427 | 456 |
428 function TestNestedTry() { | 457 function TestNestedTry() { |
429 function* g() { | 458 function* g() { |
430 try { | 459 try { |
431 yield 1; | 460 yield 1; |
432 try { yield 2; } catch (e) { yield e; } | 461 try { yield 2; } catch (e) { yield e; } |
433 yield 3; | 462 yield 3; |
434 } finally { | 463 } finally { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
469 assertIteratorResult(1, false, iter.next()); | 498 assertIteratorResult(1, false, iter.next()); |
470 assertIteratorResult(2, false, iter.next()); | 499 assertIteratorResult(2, false, iter.next()); |
471 var exn = new Sentinel; | 500 var exn = new Sentinel; |
472 assertIteratorResult(exn, false, iter.throw(exn)); | 501 assertIteratorResult(exn, false, iter.throw(exn)); |
473 assertIteratorResult(3, false, iter.next()); | 502 assertIteratorResult(3, false, iter.next()); |
474 assertIteratorResult(4, false, iter.next()); | 503 assertIteratorResult(4, false, iter.next()); |
475 assertIteratorResult(5, false, iter.next()); | 504 assertIteratorResult(5, false, iter.next()); |
476 assertIteratorResult(undefined, true, iter.next()); | 505 assertIteratorResult(undefined, true, iter.next()); |
477 assertThrows(function() { iter.next(); }, Error); | 506 assertThrows(function() { iter.next(); }, Error); |
478 | 507 |
508 // *** | |
479 iter = g(); | 509 iter = g(); |
480 assertIteratorResult(1, false, iter.next()); | 510 assertIteratorResult(1, false, iter.next()); |
481 assertIteratorResult(2, false, iter.next()); | 511 assertIteratorResult(2, false, iter.next()); |
482 var exn = new Sentinel; | 512 var exn = new Sentinel; |
483 assertIteratorResult(exn, false, iter.throw(exn)); | 513 assertIteratorResult(exn, false, iter.throw(exn)); |
484 assertIteratorResult(4, false, iter.throw(new Sentinel2)); | 514 assertIteratorResult(4, false, iter.throw(new Sentinel2)); |
485 assertThrows(function() { iter.next(); }, Sentinel2); | 515 assertThrows(function() { iter.next(); }, Sentinel2); |
486 assertThrows(function() { iter.next(); }, Error); | 516 assertThrows(function() { iter.next(); }, Error); |
487 | 517 |
488 iter = g(); | 518 iter = g(); |
489 assertIteratorResult(1, false, iter.next()); | 519 assertIteratorResult(1, false, iter.next()); |
490 assertIteratorResult(2, false, iter.next()); | 520 assertIteratorResult(2, false, iter.next()); |
491 var exn = new Sentinel; | 521 var exn = new Sentinel; |
492 assertIteratorResult(exn, false, iter.throw(exn)); | 522 assertIteratorResult(exn, false, iter.throw(exn)); |
493 assertIteratorResult(3, false, iter.next()); | 523 assertIteratorResult(3, false, iter.next()); |
494 assertIteratorResult(4, false, iter.throw(new Sentinel2)); | 524 assertIteratorResult(4, false, iter.throw(new Sentinel2)); |
495 assertThrows(function() { iter.next(); }, Sentinel2); | 525 assertThrows(function() { iter.next(); }, Sentinel2); |
496 assertThrows(function() { iter.next(); }, Error); | 526 assertThrows(function() { iter.next(); }, Error); |
497 | 527 |
528 // same as *** above with delegate | |
529 iter = (function* () { yield* g(); })(); | |
530 assertIteratorResult(1, false, iter.next()); | |
531 assertIteratorResult(2, false, iter.next()); | |
532 var exn = new Sentinel; | |
533 assertIteratorResult(exn, false, iter.throw(exn)); | |
534 assertIteratorResult(4, false, iter.throw(new Sentinel2)); | |
535 assertThrows(function() { iter.next(); }, Sentinel2); | |
536 assertThrows(function() { iter.next(); }, Error); | |
537 | |
498 // That's probably enough. | 538 // That's probably enough. |
499 } | 539 } |
500 TestNestedTry(); | 540 TestNestedTry(); |
501 | 541 |
502 function TestRecursion() { | 542 function TestRecursion() { |
503 function TestNextRecursion() { | 543 function TestNextRecursion() { |
504 function* g() { yield iter.next(); } | 544 function* g() { yield iter.next(); } |
505 var iter = g(); | 545 var iter = g(); |
506 return iter.next(); | 546 return iter.next(); |
507 } | 547 } |
508 function TestSendRecursion() { | 548 function TestSendRecursion() { |
509 function* g() { yield iter.send(42); } | 549 function* g() { yield iter.send(42); } |
510 var iter = g(); | 550 var iter = g(); |
511 return iter.next(); | 551 return iter.next(); |
512 } | 552 } |
513 function TestThrowRecursion() { | 553 function TestThrowRecursion() { |
514 function* g() { yield iter.throw(1); } | 554 function* g() { yield iter.throw(1); } |
515 var iter = g(); | 555 var iter = g(); |
516 return iter.next(); | 556 return iter.next(); |
517 } | 557 } |
518 assertThrows(TestNextRecursion, Error); | 558 assertThrows(TestNextRecursion, Error); |
519 assertThrows(TestSendRecursion, Error); | 559 assertThrows(TestSendRecursion, Error); |
520 assertThrows(TestThrowRecursion, Error); | 560 assertThrows(TestThrowRecursion, Error); |
521 } | 561 } |
522 TestRecursion(); | 562 TestRecursion(); |
OLD | NEW |