generators_from_v8_002.phpt 980 B

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. --TEST--
  2. Test V8::executeString() : Generators V8 -> PHP (direct)
  3. --SKIPIF--
  4. <?php
  5. require_once(dirname(__FILE__) . '/skipif.inc');
  6. if (!class_exists('V8Generator')) {
  7. die("skip Installed V8 version doesn't support generators");
  8. }
  9. ?>
  10. --FILE--
  11. <?php
  12. $js = <<<EOJS
  13. function* TheGen() {
  14. for(var i = 0; i < 4; i ++) {
  15. yield i;
  16. }
  17. }
  18. TheGen();
  19. EOJS;
  20. $v8 = new V8Js();
  21. $gen = $v8->executeString($js);
  22. var_dump($gen->current());
  23. // JS generators don't have the key concept (-> just "false")
  24. var_dump($gen->key());
  25. // fetching multiple times shouldn't leak
  26. var_dump($gen->current());
  27. var_dump($gen->current());
  28. $gen->next(); // 1
  29. var_dump($gen->current());
  30. $gen->next(); // 2
  31. var_dump($gen->current());
  32. $gen->next(); // 3
  33. var_dump($gen->current());
  34. var_dump($gen->valid());
  35. $gen->next(); // undef
  36. var_dump($gen->current());
  37. var_dump($gen->valid());
  38. ?>
  39. ===EOF===
  40. --EXPECTF--
  41. int(0)
  42. bool(false)
  43. int(0)
  44. int(0)
  45. int(1)
  46. int(2)
  47. int(3)
  48. bool(true)
  49. NULL
  50. bool(false)
  51. ===EOF===