test("constructor properties", () => { expect(Map).toHaveLength(0); expect(Map.name).toBe("Map"); }); describe("errors", () => { test("invalid array iterators", () => { [-100, Infinity, NaN, {}, 152n].forEach(value => { expect(() => { new Map(value); }).toThrowWithMessage(TypeError, "is not iterable"); }); }); test("invalid iterator entries", () => { expect(() => { new Map([1, 2, 3]); }).toThrowWithMessage(TypeError, "Iterator value 1 is not an object"); }); test("called without new", () => { expect(() => { Map(); }).toThrowWithMessage(TypeError, "Map constructor must be called with 'new'"); }); }); describe("normal behavior", () => { test("typeof", () => { expect(typeof new Map()).toBe("object"); }); test("constructor with single entries array argument", () => { var a = new Map([ ["a", 0], ["b", 1], ["c", 2], ]); expect(a instanceof Map).toBeTrue(); expect(a).toHaveSize(3); var seen = [false, false, false]; a.forEach(v => { seen[v] = true; }); expect(seen[0] && seen[1] && seen[2]); }); });