70 lines
1.7 KiB
TypeScript
70 lines
1.7 KiB
TypeScript
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([])
|
|
})
|
|
})
|