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