fix(desktop): keep window tabs across app close (#34807)
This commit is contained in:
@@ -0,0 +1,91 @@
|
||||
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"])
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user