summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context/layout.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/app/src/context/layout.test.ts')
-rw-r--r--packages/app/src/context/layout.test.ts69
1 files changed, 69 insertions, 0 deletions
diff --git a/packages/app/src/context/layout.test.ts b/packages/app/src/context/layout.test.ts
new file mode 100644
index 000000000..582d5edbd
--- /dev/null
+++ b/packages/app/src/context/layout.test.ts
@@ -0,0 +1,69 @@
+import { describe, expect, test } from "bun:test"
+import { createRoot, createSignal } from "solid-js"
+import { createSessionKeyReader, ensureSessionKey, pruneSessionKeys } from "./layout"
+
+describe("layout session-key helpers", () => {
+ test("couples touch and scroll seed in order", () => {
+ const calls: string[] = []
+ const result = ensureSessionKey(
+ "dir/a",
+ (key) => calls.push(`touch:${key}`),
+ (key) => calls.push(`seed:${key}`),
+ )
+
+ expect(result).toBe("dir/a")
+ expect(calls).toEqual(["touch:dir/a", "seed:dir/a"])
+ })
+
+ test("reads dynamic accessor keys lazily", () => {
+ const seen: string[] = []
+
+ createRoot((dispose) => {
+ const [key, setKey] = createSignal("dir/one")
+ const read = createSessionKeyReader(key, (value) => seen.push(value))
+
+ expect(read()).toBe("dir/one")
+ setKey("dir/two")
+ expect(read()).toBe("dir/two")
+
+ dispose()
+ })
+
+ expect(seen).toEqual(["dir/one", "dir/two"])
+ })
+})
+
+describe("pruneSessionKeys", () => {
+ test("keeps active key and drops lowest-used keys", () => {
+ const drop = pruneSessionKeys({
+ keep: "k4",
+ max: 3,
+ used: new Map([
+ ["k1", 1],
+ ["k2", 2],
+ ["k3", 3],
+ ["k4", 4],
+ ]),
+ view: ["k1", "k2", "k4"],
+ tabs: ["k1", "k3", "k4"],
+ })
+
+ expect(drop).toEqual(["k1"])
+ expect(drop.includes("k4")).toBe(false)
+ })
+
+ test("does not prune without keep key", () => {
+ const drop = pruneSessionKeys({
+ keep: undefined,
+ max: 1,
+ used: new Map([
+ ["k1", 1],
+ ["k2", 2],
+ ]),
+ view: ["k1"],
+ tabs: ["k2"],
+ })
+
+ expect(drop).toEqual([])
+ })
+})