for-await-of.js 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. describe("basic behavior", () => {
  2. test("empty array", () => {
  3. var enteredFunction = false;
  4. var rejected = false;
  5. async function f() {
  6. enteredFunction = true;
  7. for await (const v of []) {
  8. expect().fail("Should not enter loop");
  9. }
  10. }
  11. f().then(
  12. () => {
  13. expect(enteredFunction).toBeTrue();
  14. },
  15. () => {
  16. rejected = true;
  17. }
  18. );
  19. runQueuedPromiseJobs();
  20. expect(enteredFunction).toBeTrue();
  21. expect(rejected).toBeFalse();
  22. });
  23. test("sync iterator", () => {
  24. var loopIterations = 0;
  25. var rejected = false;
  26. async function f() {
  27. for await (const v of [1]) {
  28. expect(v).toBe(1);
  29. loopIterations++;
  30. }
  31. }
  32. f().then(
  33. () => {
  34. expect(loopIterations).toBe(1);
  35. },
  36. () => {
  37. rejected = true;
  38. }
  39. );
  40. runQueuedPromiseJobs();
  41. expect(loopIterations).toBe(1);
  42. expect(rejected).toBeFalse();
  43. });
  44. });
  45. describe("only allowed in async functions", () => {
  46. test("async functions", () => {
  47. expect("async function foo() { for await (const v of []) return v; }").toEval();
  48. expect("(async function () { for await (const v of []) return v; })").toEval();
  49. expect("async () => { for await (const v of []) return v; }").toEval();
  50. });
  51. test("regular functions", () => {
  52. expect("function foo() { for await (const v of []) return v; }").not.toEval();
  53. expect("(function () { for await (const v of []) return v; })").not.toEval();
  54. expect("() => { for await (const v of []) return v; }").not.toEval();
  55. });
  56. test("generator functions", () => {
  57. expect("function* foo() { for await (const v of []) return v; }").not.toEval();
  58. expect("(function* () { for await (const v of []) return v; })").not.toEval();
  59. });
  60. test("async generator functions", () => {
  61. expect("async function* foo() { for await (const v of []) yield v; }").toEval();
  62. expect("(async function* () { for await (const v of []) yield v; })").toEval();
  63. });
  64. });