string-iterator.js 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. test("length", () => {
  2. expect(String.prototype[Symbol.iterator]).toHaveLength(0);
  3. });
  4. test("basic functionality", () => {
  5. const s = "abcd";
  6. const it = s[Symbol.iterator]();
  7. expect(it.next()).toEqual({ value: "a", done: false });
  8. expect(it.next()).toEqual({ value: "b", done: false });
  9. expect(it.next()).toEqual({ value: "c", done: false });
  10. expect(it.next()).toEqual({ value: "d", done: false });
  11. expect(it.next()).toEqual({ value: undefined, done: true });
  12. expect(it.next()).toEqual({ value: undefined, done: true });
  13. expect(it.next()).toEqual({ value: undefined, done: true });
  14. });
  15. test("casts |this| to string", () => {
  16. let it = String.prototype[Symbol.iterator].call(45);
  17. expect(it.next()).toEqual({ value: "4", done: false });
  18. expect(it.next()).toEqual({ value: "5", done: false });
  19. expect(it.next()).toEqual({ value: undefined, done: true });
  20. it = String.prototype[Symbol.iterator].call(false);
  21. expect(it.next()).toEqual({ value: "f", done: false });
  22. expect(it.next()).toEqual({ value: "a", done: false });
  23. expect(it.next()).toEqual({ value: "l", done: false });
  24. expect(it.next()).toEqual({ value: "s", done: false });
  25. expect(it.next()).toEqual({ value: "e", done: false });
  26. expect(it.next()).toEqual({ value: undefined, done: true });
  27. expect(() => {
  28. String.prototype[Symbol.iterator].call(null);
  29. }).toThrowWithMessage(TypeError, "null cannot be converted to an object");
  30. expect(() => {
  31. String.prototype[Symbol.iterator].call(undefined);
  32. }).toThrowWithMessage(TypeError, "undefined cannot be converted to an object");
  33. });
  34. test("utf8 compatible", () => {
  35. const it = "ab\u{1f41e}cde"[Symbol.iterator]();
  36. expect(it.next()).toEqual({ value: "a", done: false });
  37. expect(it.next()).toEqual({ value: "b", done: false });
  38. expect(it.next()).toEqual({ value: "🐞", done: false });
  39. expect(it.next()).toEqual({ value: "c", done: false });
  40. expect(it.next()).toEqual({ value: "d", done: false });
  41. expect(it.next()).toEqual({ value: "e", done: false });
  42. expect(it.next()).toEqual({ value: undefined, done: true });
  43. });