Co-authored-by: Frank <frank@anoma.ly> Co-authored-by: Aarav Sareen <96787824+arvsrn@users.noreply.github.com> Co-authored-by: Brendan Allan <git@brendonovich.dev> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Jack <jack@anoma.ly> Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> Co-authored-by: Shoubhit Dash <shoubhit2005@gmail.com> Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com> Co-authored-by: James Long <longster@gmail.com> Co-authored-by: Dustin Deus <deusdustin@gmail.com> Co-authored-by: starptech <starptech@starptechs-MBP.fritz.box> Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com> Co-authored-by: 𝓛𝓲𝓽𝓽𝓵𝓮 𝓕𝓻𝓪𝓷𝓴 <little-frank@opencord.local> Co-authored-by: Dax <mail@thdxr.com> Co-authored-by: usrnk1 <7547651+usrnk1@users.noreply.github.com> Co-authored-by: Jay <53023+jayair@users.noreply.github.com> Co-authored-by: runvip <164729189+runvip@users.noreply.github.com> Co-authored-by: opencode <opencode@sst.dev> Co-authored-by: Julian Coy <julian@ex-machina.co> Co-authored-by: Vladimir Glafirov <vglafirov@gitlab.com> Co-authored-by: Adam <2363879+adamdotdevin@users.noreply.github.com> Co-authored-by: Kit Langton <kit.langton@gmail.com> Co-authored-by: Simon Klee <hello@simonklee.dk> Co-authored-by: Jay <air@live.ca> Co-authored-by: David Hill <1879069+iamdavidhill@users.noreply.github.com>
91 lines
3 KiB
TypeScript
91 lines
3 KiB
TypeScript
import { describe, expect, test } from "bun:test"
|
|
import { createWindowRegistry } from "./window-registry"
|
|
|
|
function setup(initial: unknown = []) {
|
|
const state = { stored: initial }
|
|
const cleaned: string[] = []
|
|
const registry = createWindowRegistry<{ name: string }>({
|
|
read: () => state.stored,
|
|
write: (ids) => {
|
|
state.stored = ids
|
|
},
|
|
cleanup: (id) => cleaned.push(id),
|
|
})
|
|
return { registry, state, cleaned }
|
|
}
|
|
|
|
describe("window registry", () => {
|
|
test("restores persisted ids and ignores malformed entries", () => {
|
|
expect(setup(["a", "", 42, "b"]).registry.persisted()).toEqual(["a", "b"])
|
|
expect(setup("junk").registry.persisted()).toEqual([])
|
|
expect(setup(undefined).registry.persisted()).toEqual([])
|
|
})
|
|
|
|
test("registers windows and persists each id once", () => {
|
|
const app = setup()
|
|
app.registry.register("a", { name: "a" })
|
|
app.registry.register("a", { name: "a" })
|
|
app.registry.register("b", { name: "b" })
|
|
expect(app.state.stored).toEqual(["a", "b"])
|
|
})
|
|
|
|
test("forgets a deliberately closed window while others remain open", () => {
|
|
const app = setup()
|
|
app.registry.register("a", { name: "a" })
|
|
app.registry.register("b", { name: "b" })
|
|
app.registry.closed("a")
|
|
expect(app.state.stored).toEqual(["b"])
|
|
expect(app.cleaned).toEqual(["a"])
|
|
})
|
|
|
|
test("keeps the id when the last window closes so relaunch restores it", () => {
|
|
const app = setup()
|
|
app.registry.register("a", { name: "a" })
|
|
app.registry.closed("a")
|
|
expect(app.state.stored).toEqual(["a"])
|
|
expect(app.cleaned).toEqual([])
|
|
|
|
const restarted = createWindowRegistry<{ name: string }>({
|
|
read: () => app.state.stored,
|
|
write: (ids) => {
|
|
app.state.stored = ids
|
|
},
|
|
cleanup: () => {},
|
|
})
|
|
expect(restarted.persisted()).toEqual(["a"])
|
|
})
|
|
|
|
test("keeps every id when windows close during quit", () => {
|
|
const app = setup()
|
|
app.registry.register("a", { name: "a" })
|
|
app.registry.register("b", { name: "b" })
|
|
app.registry.setQuitting()
|
|
app.registry.closed("a")
|
|
app.registry.closed("b")
|
|
expect(app.state.stored).toEqual(["a", "b"])
|
|
expect(app.cleaned).toEqual([])
|
|
})
|
|
|
|
test("tracks the last focused window and falls back on close", () => {
|
|
const app = setup()
|
|
app.registry.register("a", { name: "a" })
|
|
app.registry.register("b", { name: "b" })
|
|
app.registry.focused("a")
|
|
expect(app.registry.lastFocused()).toEqual({ name: "a" })
|
|
app.registry.closed("a")
|
|
expect(app.registry.lastFocused()).toEqual({ name: "b" })
|
|
app.registry.closed("b")
|
|
expect(app.registry.lastFocused()).toBeUndefined()
|
|
})
|
|
|
|
test("resumes forgetting closed windows after the quit flag resets", () => {
|
|
const app = setup()
|
|
app.registry.register("a", { name: "a" })
|
|
app.registry.register("b", { name: "b" })
|
|
app.registry.setQuitting()
|
|
app.registry.setQuitting(false)
|
|
app.registry.closed("a")
|
|
expect(app.state.stored).toEqual(["b"])
|
|
expect(app.cleaned).toEqual(["a"])
|
|
})
|
|
})
|