Serenity Operating System
at master 53 lines 2.1 kB view raw
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});