UNPKG

case-insensitive-object2

Version:

Enables the creation of a JavaScript object whose keys are case insensitive.

111 lines (87 loc) 3.02 kB
"use strict" const CaseInsensitiveObject = require("./index"); describe("Tests", () => { test("Simple key assignment and retrieval", () => { const obj = new CaseInsensitiveObject(); obj.HELlO = 1; obj.asdf = 2; expect(obj.hello).toBe(1); expect(obj.ASDF).toBe(2); obj.hello = 19; obj.ASDF = 33; expect(obj.HELLO).toBe(19); expect(obj.asdf).toBe(33); obj[3] = -1; obj[-33] = -50; expect(obj["3"]).toBe(-1); expect(obj["-33"]).toBe(-50); obj["QWE"] = 90; obj["tye"] = 100; expect(obj.qwe).toBe(90); expect(obj["qWe"]).toBe(90); expect(obj.TYE).toBe(100); expect(obj["tyE"]).toBe(100); obj.hello = new CaseInsensitiveObject(); obj.HELLO.asdf = 3; expect(obj.hello.ASDF).toBe(3); }); test("Object.assign", () => { const obj = new CaseInsensitiveObject(); Object.assign(obj, { HELLO: 3, asdf: 5 }); expect(obj.hello).toBe(3); expect(obj.ASDF).toBe(5); }); test("Weird keys", () => { const obj = new CaseInsensitiveObject(); obj[Symbol.iterator] = -33; obj["😊😊"] = 4; expect(obj[Symbol.iterator]).toBe(-33); expect(obj["😊😊"]).toBe(4); }); test("Prototype delegation", () => { const obj = new CaseInsensitiveObject(); expect(obj.toString()).toBe("[object CaseInsensitiveObject]"); Object.preventExtensions(obj); expect(() => Object.defineProperties(obj, "hello", { value: 3 })).toThrow(); }); test("In operator", () => { const obj = new CaseInsensitiveObject(); obj["HEllO"] = {}; expect("hello" in obj).toBe(true); expect("toString" in obj).toBe(true); }); test("Key iterability with original casing", () => { const obj = new CaseInsensitiveObject(); obj.a = 1; obj.b = 2; obj.C = 3; obj.DD = 4; expect(Object.keys(obj)).toStrictEqual(["a", "b", "C", "DD"]); }); test("Initialize with previously existing object", () => { const obj2 = { Hello: 1, ASDF: 2, qwerty: 3 }; const obj1 = new CaseInsensitiveObject(obj2); expect(obj1.hELLO).toBe(1); expect(obj1['asdf']).toBe(2); expect(obj1.QWERTY).toBe(3); }); test("Delete property", () => { const obj = new CaseInsensitiveObject(); obj.ASDF = 3; delete obj.asdf; expect(obj.asdf).toBe(undefined); }); test("Object.defineProperty", () => { const obj = new CaseInsensitiveObject(); Object.defineProperty(obj, "ASDF", { value: 3, writable: false }); expect(obj.asdf).toBe(3); expect(() => obj['asdf'] = 5).toThrow(); }); })