feat(tui): reopen closed session tabs (#39731)
This commit is contained in:
parent
8ebc4c6f85
commit
cc883058df
5 changed files with 105 additions and 0 deletions
|
|
@ -6,7 +6,9 @@ import {
|
|||
moveSessionTab,
|
||||
moveSessionTabHistory,
|
||||
openSessionTab,
|
||||
recordClosedSessionTab,
|
||||
recordSessionTabHistory,
|
||||
reopenSessionTab,
|
||||
seedSessionTabMotion,
|
||||
sessionTabComplete,
|
||||
sessionTabOverflowWidth,
|
||||
|
|
@ -136,6 +138,45 @@ describe("session tabs", () => {
|
|||
expect(moveSessionTabHistory(current, closed.tabs, "b", -1).sessionID).toBe("c")
|
||||
})
|
||||
|
||||
test("reopens the most recently closed tab at its original position", () => {
|
||||
const tabs = ["a", "b", "c"].map((sessionID) => ({ sessionID }))
|
||||
const stack = recordClosedSessionTab([], { sessionID: "b", title: "Middle" }, 1)
|
||||
const reopened = reopenSessionTab(stack, [{ sessionID: "a" }, { sessionID: "c" }])
|
||||
|
||||
expect(reopened.sessionID).toBe("b")
|
||||
expect(reopened.tabs).toEqual([{ sessionID: "a" }, { sessionID: "b", title: "Middle" }, { sessionID: "c" }])
|
||||
expect(reopened.stack).toEqual([])
|
||||
expect(reopenSessionTab([], tabs)).toEqual({ stack: [], tabs: undefined, sessionID: undefined })
|
||||
})
|
||||
|
||||
test("skips and consumes closed entries that are already open", () => {
|
||||
const stack = [
|
||||
{ tab: { sessionID: "a" }, index: 0 },
|
||||
{ tab: { sessionID: "b" }, index: 1 },
|
||||
]
|
||||
const reopened = reopenSessionTab(stack, [{ sessionID: "b" }])
|
||||
|
||||
expect(reopened.sessionID).toBe("a")
|
||||
expect(reopened.tabs).toEqual([{ sessionID: "a" }, { sessionID: "b" }])
|
||||
expect(reopened.stack).toEqual([])
|
||||
})
|
||||
|
||||
test("clamps restored positions and keeps one entry per session", () => {
|
||||
const twice = recordClosedSessionTab(recordClosedSessionTab([], { sessionID: "a" }, 5), { sessionID: "a" }, 2)
|
||||
expect(twice).toEqual([{ tab: { sessionID: "a" }, index: 2 }])
|
||||
|
||||
const reopened = reopenSessionTab(twice, [{ sessionID: "b" }])
|
||||
expect(reopened.tabs).toEqual([{ sessionID: "b" }, { sessionID: "a" }])
|
||||
|
||||
const overflow = Array.from({ length: 12 }, (_, index) => ({ sessionID: String(index) })).reduce(
|
||||
(stack, tab, index) => recordClosedSessionTab(stack, tab, index),
|
||||
twice,
|
||||
)
|
||||
expect(overflow).toHaveLength(10)
|
||||
expect(overflow.at(-1)?.tab.sessionID).toBe("11")
|
||||
expect(overflow[0]?.tab.sessionID).toBe("2")
|
||||
})
|
||||
|
||||
test("reveals completion activity only after session work becomes idle", () => {
|
||||
expect(sessionTabComplete("activity", true)).toBe(false)
|
||||
expect(sessionTabComplete("activity", false)).toBe(true)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue