UNPKG

@etsoo/shared

Version:

TypeScript shared utilities and functions

196 lines (169 loc) 4.88 kB
import { ArrayUtils } from "../src/ArrayUtils"; test("Tests for simple type toUnique", () => { const result = [1, 1, 3, 5, 5].toUnique(); expect(result).toStrictEqual([1, 3, 5]); }); test("Tests for object type toUnique", () => { const result = [ { id: 1, label: "a" }, { id: 2, label: "b" }, { id: 2, label: "b" } ].toUnique(); expect(result.length).toBe(2); }); test("Tests for differences", () => { const a1 = ["a", "b", "c", "e"]; const a2 = ["a", "c", "d"]; expect(ArrayUtils.differences(a1, a2)).toEqual(["b", "e"]); expect(ArrayUtils.differences(a1, a2, true)).toEqual(["b", "e", "d"]); }); test("Tests for sum numbers", () => { const items = [12, 8, 22]; expect(items.sum()).toBe(42); }); test("Tests for sum fields", () => { const items = [ { id: 1, label: "a", amount: 3.14 }, { id: 2, label: "b", amount: 4.54 } ]; expect(items.sum("amount")).toBe(7.68); }); test("Tests for max / min numbers", () => { const items = [12, 8, 22]; expect(items.max()).toBe(22); expect(items.min()).toBe(8); }); test("Tests for max / min fields", () => { const items = [ { id: 1, label: "a", amount: 3.14 }, { id: 2, label: "b", amount: 4.54 }, { id: 3, label: "b", amount: 1.52 } ]; expect(items.max("amount")).toBe(4.54); expect(items.min("amount")).toBe(1.52); }); test("Tests for maxItem / minItem", () => { const items = [ { id: 1, label: "a", amount: 3.14 }, { id: 2, label: "b", amount: 4.54 }, { id: 3, label: "b", amount: 1.52 } ]; expect(items.maxItem("amount")?.id).toBe(2); expect(items.minItem("amount")?.id).toBe(3); const emptyItems: { id: string; amount: number }[] = []; expect(emptyItems.maxItem("amount")).toBeUndefined(); }); test("Tests for mergeArrays", () => { const a1 = ["e", "a", "c"]; const a2 = ["a", "c", "d"]; const a3 = ["b", "c", "f"]; const result = ArrayUtils.mergeArrays(a1, a2, a3); expect(result).toEqual(["e", "a", "c", "d", "b", "f"]); expect(result.length).toBe(6); }); test("Tests for remove simple", () => { const items = [1, 2, 3, 4, 5]; const result = items.remove(1, 5, (item) => item % 2 === 0); expect(items).toStrictEqual([3]); expect(result.length).toBe(4); }); test("Tests for remove object", () => { const item = { id: 4, label: "d", amount: 9.66 }; const items = [ { id: 1, label: "a", amount: 3.14 }, { id: 2, label: "b", amount: 4.54 }, { id: 3, label: "b", amount: 1.52 }, item ]; const result = items.remove( item, (item) => item.id === 2, (item) => item.amount <= 2 ); expect(items.length).toBe(1); expect(items[0].id).toBe(1); expect(result.length).toBe(3); }); test("Tests for sortIds 1", () => { const source = [ { id: "zh-Hans", label: "中文(简体), Chinese (Simplified)" }, { id: "en", label: "英语, English" }, { id: "fr", label: "法语, French" }, { id: "de", label: "德语, German" }, { id: "zh-Hant", label: "中文(繁体), Chinese (Traditional)" } ]; source.sortByProperty("id", ["en", "zh-Hans", "zh-Hant"]); const ids = source.map((s) => s.id); expect(ids).toStrictEqual(["en", "zh-Hans", "zh-Hant", "fr", "de"]); }); test("Tests for sortIds 2", () => { const source = [ { id: "AUD", label: "澳元" }, { id: "CAD", label: "加元" }, { id: "CNY", label: "人民币" }, { id: "EUR", label: "欧元" }, { id: "GBP", label: "英镑" }, { id: "HKD", label: "港币" }, { id: "JPY", label: "日元" }, { id: "NZD", label: "纽币" }, { id: "SGD", label: "新币" }, { id: "USD", label: "美元" } ]; source.sortByProperty("id", ["USD", "CNY"]); const ids = source.map((s) => s.id); expect(ids).toStrictEqual([ "USD", "CNY", "AUD", "CAD", "EUR", "GBP", "HKD", "JPY", "NZD", "SGD" ]); }); test("Tests for toggleItem", () => { const items = [1, 2, 3]; items.toggleItem(2, false); expect(items).toStrictEqual([1, 3]); items.toggleItem(4, true); expect(items).toStrictEqual([1, 3, 4]); items.toggleItem(1, false); expect(items).toStrictEqual([3, 4]); items.toggleItem(3, true); expect(items).toStrictEqual([3, 4]); }); test("Tests for toggleItem with object", () => { const items = [ { id: 1, label: "a" }, { id: 2, label: "b" } ]; items.toggleItem({ id: 2, label: "b" }, false); expect(items).toStrictEqual([{ id: 1, label: "a" }]); items.toggleItem({ id: 3, label: "c" }, true, "id"); expect(items).toStrictEqual([ { id: 1, label: "a" }, { id: 3, label: "c" } ]); items.toggleItem(1, false, "id"); expect(items).toStrictEqual([{ id: 3, label: "c" }]); items.toggleItem({ id: 3, label: "c" }, true, "id"); expect(items).toStrictEqual([{ id: 3, label: "c" }]); });