/*** IMPORT ------------------------------------------- ***/ import { assertEquals } from "jsr:@std/assert@^1.0.0"; /*** UTILITY ------------------------------------------ ***/ import { createLocalStorage, createMemoryStorage } from "../source/library/state/storage.ts"; /*** TESTS -------------------------------------------- ***/ Deno.test("memory storage round-trips objects", () => { const storage = createMemoryStorage(); storage.set("k", { hello: "world" }); assertEquals(storage.get<{ hello: string }>("k"), { hello: "world" }); }); Deno.test("memory storage returns null for missing keys", () => { const storage = createMemoryStorage(); assertEquals(storage.get("missing"), null); }); Deno.test("memory storage remove clears a key", () => { const storage = createMemoryStorage(); storage.set("k", 42); storage.remove("k"); assertEquals(storage.get("k"), null); }); Deno.test("memory storage instances are isolated", () => { const a = createMemoryStorage(); const b = createMemoryStorage(); a.set("shared", 1); assertEquals(b.get("shared"), null); }); Deno.test("local storage namespaces keys", () => { globalThis.localStorage.clear(); const alpha = createLocalStorage("alpha"); const beta = createLocalStorage("beta"); alpha.set("shared", { tag: "a" }); beta.set("shared", { tag: "b" }); assertEquals(alpha.get<{ tag: string }>("shared"), { tag: "a" }); assertEquals(beta.get<{ tag: string }>("shared"), { tag: "b" }); assertEquals(globalThis.localStorage.getItem("alpha:shared"), JSON.stringify({ tag: "a" })); assertEquals(globalThis.localStorage.getItem("beta:shared"), JSON.stringify({ tag: "b" })); globalThis.localStorage.clear(); }); Deno.test("local storage remove respects the namespace", () => { globalThis.localStorage.clear(); const alpha = createLocalStorage("alpha"); const beta = createLocalStorage("beta"); alpha.set("k", 1); beta.set("k", 2); alpha.remove("k"); assertEquals(alpha.get("k"), null); assertEquals(beta.get("k"), 2); globalThis.localStorage.clear(); }); Deno.test("local storage returns null on malformed JSON", () => { globalThis.localStorage.clear(); globalThis.localStorage.setItem("alpha:bad", "not-json"); const alpha = createLocalStorage("alpha"); assertEquals(alpha.get("bad"), null); globalThis.localStorage.clear(); });