array-iterator.js 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
  1. test("length", () => {
  2. expect(Array.prototype[Symbol.iterator]).toHaveLength(0);
  3. });
  4. test("@@toStringTag", () => {
  5. expect([].values()[Symbol.toStringTag]).toBe("Array Iterator");
  6. expect([].values().toString()).toBe("[object Array Iterator]");
  7. });
  8. test("same function as Array.prototype.values", () => {
  9. expect(Array.prototype[Symbol.iterator]).toBe(Array.prototype.values);
  10. });
  11. test("basic functionality", () => {
  12. const a = [1, 2, 3];
  13. const it = a[Symbol.iterator]();
  14. expect(it.next()).toEqual({ value: 1, done: false });
  15. expect(it.next()).toEqual({ value: 2, done: false });
  16. expect(it.next()).toEqual({ value: 3, done: false });
  17. expect(it.next()).toEqual({ value: undefined, done: true });
  18. expect(it.next()).toEqual({ value: undefined, done: true });
  19. expect(it.next()).toEqual({ value: undefined, done: true });
  20. });
  21. test("works when applied to non-object", () => {
  22. [true, false, 9, 2n, Symbol()].forEach(primitive => {
  23. const it = [][Symbol.iterator].call(primitive);
  24. expect(it.next()).toEqual({ value: undefined, done: true });
  25. expect(it.next()).toEqual({ value: undefined, done: true });
  26. expect(it.next()).toEqual({ value: undefined, done: true });
  27. });
  28. });
  29. test("item added to array before exhaustion is accessible", () => {
  30. const a = [1, 2];
  31. const it = a[Symbol.iterator]();
  32. expect(it.next()).toEqual({ value: 1, done: false });
  33. expect(it.next()).toEqual({ value: 2, done: false });
  34. a.push(3);
  35. expect(it.next()).toEqual({ value: 3, done: false });
  36. expect(it.next()).toEqual({ value: undefined, done: true });
  37. expect(it.next()).toEqual({ value: undefined, done: true });
  38. });
  39. test("item added to array after exhaustion is inaccessible", () => {
  40. const a = [1, 2];
  41. const it = a[Symbol.iterator]();
  42. expect(it.next()).toEqual({ value: 1, done: false });
  43. expect(it.next()).toEqual({ value: 2, done: false });
  44. expect(it.next()).toEqual({ value: undefined, done: true });
  45. a.push(3);
  46. expect(it.next()).toEqual({ value: undefined, done: true });
  47. });