diff options
| author | netop://ウィビ <paul@webb.page> | 2026-04-24 16:37:49 -0700 |
|---|---|---|
| committer | netop://ウィビ <paul@webb.page> | 2026-04-24 16:37:49 -0700 |
| commit | c013ed57bf3d7dd83bd59a9b984d87aebde6003c (patch) | |
| tree | 31d25456496f013f13f3cae1ded376d5323b3200 /tests/storage.test.ts | |
| parent | 510fd8cbe53abb39cba2c7cbaaefcf2783dc0066 (diff) | |
| download | graphiql-c013ed57bf3d7dd83bd59a9b984d87aebde6003c.tar.gz graphiql-c013ed57bf3d7dd83bd59a9b984d87aebde6003c.zip | |
Migrate from Deno/JSR to npm publishing
- @sveltejs/package builds dist/ for @eeeooolll/graphiql with three entry
points (./, ./component, ./splitter)
- Vitest + svelte-check replace Deno test/check; runes shim no longer
needed since the Svelte plugin compiles .svelte.ts at runtime
- Drop $app/environment dep in Editor.svelte to support non-SvelteKit
consumers
- Refactor TabBar tab element from nested <button> to role=tab <div> per
PLAN.md gotcha; svelte-check flagged the invalid HTML
- README now documents npm install, integration patterns for Yoga,
Apollo, graphql-modules, Hono/Bun/Deno, plus APQ + keyboard table
Diffstat (limited to 'tests/storage.test.ts')
| -rw-r--r-- | tests/storage.test.ts | 79 |
1 files changed, 60 insertions, 19 deletions
diff --git a/tests/storage.test.ts b/tests/storage.test.ts index 7d6ba73..434a67d 100644 --- a/tests/storage.test.ts +++ b/tests/storage.test.ts @@ -1,9 +1,10 @@ + /*** IMPORT ------------------------------------------- ***/ -import { assertEquals } from "jsr:@std/assert@^1.0.0"; +import { beforeAll, expect, test } from "vitest"; /*** UTILITY ------------------------------------------ ***/ @@ -12,34 +13,74 @@ import { createMemoryStorage } from "../source/library/state/storage.ts"; +/*** HELPERS ------------------------------------------ ***/ + +function installLocalStorage(): void { + if (typeof globalThis.localStorage !== "undefined") + return; + + const store = new Map<string, string>(); + + const shim: Storage = { + clear(): void { + store.clear(); + }, + getItem(key: string): string | null { + return store.has(key) ? store.get(key) ?? null : null; + }, + key(index: number): string | null { + return Array.from(store.keys())[index] ?? null; + }, + get length(): number { + return store.size; + }, + removeItem(key: string): void { + store.delete(key); + }, + setItem(key: string, value: string): void { + store.set(key, String(value)); + } + }; + + Object.defineProperty(globalThis, "localStorage", { + configurable: true, + value: shim, + writable: true + }); +} + +beforeAll(() => { + installLocalStorage(); +}); + /*** TESTS -------------------------------------------- ***/ -Deno.test("memory storage round-trips objects", () => { +test("memory storage round-trips objects", () => { const storage = createMemoryStorage(); storage.set("k", { hello: "world" }); - assertEquals(storage.get<{ hello: string }>("k"), { hello: "world" }); + expect(storage.get<{ hello: string }>("k")).toEqual({ hello: "world" }); }); -Deno.test("memory storage returns null for missing keys", () => { +test("memory storage returns null for missing keys", () => { const storage = createMemoryStorage(); - assertEquals(storage.get("missing"), null); + expect(storage.get("missing")).toEqual(null); }); -Deno.test("memory storage remove clears a key", () => { +test("memory storage remove clears a key", () => { const storage = createMemoryStorage(); storage.set("k", 42); storage.remove("k"); - assertEquals(storage.get("k"), null); + expect(storage.get("k")).toEqual(null); }); -Deno.test("memory storage instances are isolated", () => { +test("memory storage instances are isolated", () => { const a = createMemoryStorage(); const b = createMemoryStorage(); a.set("shared", 1); - assertEquals(b.get("shared"), null); + expect(b.get("shared")).toEqual(null); }); -Deno.test("local storage namespaces keys", () => { +test("local storage namespaces keys", () => { globalThis.localStorage.clear(); const alpha = createLocalStorage("alpha"); @@ -48,15 +89,15 @@ Deno.test("local storage namespaces keys", () => { 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" })); + expect(alpha.get<{ tag: string }>("shared")).toEqual({ tag: "a" }); + expect(beta.get<{ tag: string }>("shared")).toEqual({ tag: "b" }); + expect(globalThis.localStorage.getItem("alpha:shared")).toEqual(JSON.stringify({ tag: "a" })); + expect(globalThis.localStorage.getItem("beta:shared")).toEqual(JSON.stringify({ tag: "b" })); globalThis.localStorage.clear(); }); -Deno.test("local storage remove respects the namespace", () => { +test("local storage remove respects the namespace", () => { globalThis.localStorage.clear(); const alpha = createLocalStorage("alpha"); @@ -66,18 +107,18 @@ Deno.test("local storage remove respects the namespace", () => { beta.set("k", 2); alpha.remove("k"); - assertEquals(alpha.get("k"), null); - assertEquals(beta.get<number>("k"), 2); + expect(alpha.get("k")).toEqual(null); + expect(beta.get<number>("k")).toEqual(2); globalThis.localStorage.clear(); }); -Deno.test("local storage returns null on malformed JSON", () => { +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); + expect(alpha.get("bad")).toEqual(null); globalThis.localStorage.clear(); }); |