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<PropertyKey, unknown>)[TEST_KEY];
delete (globalThis as Record<PropertyKey, unknown>)[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<PropertyKey, unknown>)[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<string, number>(TEST_MAP_KEY);
const second = resolveGlobalMap<string, number>(TEST_MAP_KEY);
expect(first).toBe(second);
});
it("preserves existing map contents across repeated resolution" , () => {
const map = resolveGlobalMap<string, number>(TEST_MAP_KEY);
map.set("a" , 1 );
expect(resolveGlobalMap<string, number>(TEST_MAP_KEY).get("a" )).toBe(1 );
});
it("reuses a prepopulated global map without creating a new one" , () => {
const existing = new Map<string, number>([["a" , 1 ]]);
(globalThis as Record<PropertyKey, unknown>)[TEST_MAP_KEY] = existing;
const resolved = resolveGlobalMap<string, number>(TEST_MAP_KEY);
expect(resolved).toBe(existing);
expect(resolved.get("a" )).toBe(1 );
});
});
Messung V0.5 in Prozent C=100 H=99 G=99
¤ Dauer der Verarbeitung: 0.3 Sekunden
¤
*© Formatika GbR, Deutschland