import { afterEach, describe, expect, it, vi } from "vitest"; import { resolveGlobalMap, resolveGlobalSingleton } from "./global-singleton.js"; const TEST_KEY = Symbol("global-singleton:test"); const TEST_MAP_KEY = Symbol("global-singleton:test-map"); afterEach(() => { delete (globalThis as Record)[TEST_KEY]; delete (globalThis as Record)[TEST_MAP_KEY]; }); describe("resolveGlobalSingleton", () => { it("reuses an initialized singleton", () => { const create = vi.fn(() => ({ value: 1 })); const first = resolveGlobalSingleton(TEST_KEY, create); const second = resolveGlobalSingleton(TEST_KEY, create); expect(first).toBe(second); expect(create).toHaveBeenCalledTimes(1); }); it("does not re-run the factory when undefined was already stored", () => { const create = vi.fn(() => undefined); expect(resolveGlobalSingleton(TEST_KEY, create)).toBeUndefined(); expect(resolveGlobalSingleton(TEST_KEY, create)).toBeUndefined(); expect(create).toHaveBeenCalledTimes(1); }); it("reuses a prepopulated global value without calling the factory", () => { const existing = { value: 7 }; const create = vi.fn(() => ({ value: 1 })); (globalThis as Record)[TEST_KEY] = existing; expect(resolveGlobalSingleton(TEST_KEY, create)).toBe(existing); expect(create).not.toHaveBeenCalled(); }); }); describe("resolveGlobalMap", () => { it("reuses the same map instance", () => { const first = resolveGlobalMap(TEST_MAP_KEY); const second = resolveGlobalMap(TEST_MAP_KEY); expect(first).toBe(second); }); it("preserves existing map contents across repeated resolution", () => { const map = resolveGlobalMap(TEST_MAP_KEY); map.set("a", 1); expect(resolveGlobalMap(TEST_MAP_KEY).get("a")).toBe(1); }); it("reuses a prepopulated global map without creating a new one", () => { const existing = new Map([["a", 1]]); (globalThis as Record)[TEST_MAP_KEY] = existing; const resolved = resolveGlobalMap(TEST_MAP_KEY); expect(resolved).toBe(existing); expect(resolved.get("a")).toBe(1); }); });