diff options
Diffstat (limited to 'tests/storage.test.ts')
| -rw-r--r-- | tests/storage.test.ts | 83 |
1 files changed, 83 insertions, 0 deletions
diff --git a/tests/storage.test.ts b/tests/storage.test.ts new file mode 100644 index 0000000..7d6ba73 --- /dev/null +++ b/tests/storage.test.ts @@ -0,0 +1,83 @@ + + + +/*** 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<number>("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(); +}); |