aboutsummaryrefslogtreecommitdiff
path: root/tests/storage.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'tests/storage.test.ts')
-rw-r--r--tests/storage.test.ts83
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();
+});