Buckets:
| import { describe, expect, test } from "bun:test" | |
| import { applyPath, backPath, forwardPath, type TitlebarHistory } from "./titlebar-history" | |
| function history(): TitlebarHistory { | |
| return { stack: [], index: 0, action: undefined } | |
| } | |
| describe("titlebar history", () => { | |
| test("append and trim keeps max bounded", () => { | |
| let state = history() | |
| state = applyPath(state, "/", 3) | |
| state = applyPath(state, "/a", 3) | |
| state = applyPath(state, "/b", 3) | |
| state = applyPath(state, "/c", 3) | |
| expect(state.stack).toEqual(["/a", "/b", "/c"]) | |
| expect(state.stack.length).toBe(3) | |
| expect(state.index).toBe(2) | |
| }) | |
| test("back and forward indexes stay correct after trimming", () => { | |
| let state = history() | |
| state = applyPath(state, "/", 3) | |
| state = applyPath(state, "/a", 3) | |
| state = applyPath(state, "/b", 3) | |
| state = applyPath(state, "/c", 3) | |
| expect(state.stack).toEqual(["/a", "/b", "/c"]) | |
| expect(state.index).toBe(2) | |
| const back = backPath(state) | |
| expect(back?.to).toBe("/b") | |
| expect(back?.state.index).toBe(1) | |
| const afterBack = applyPath(back!.state, back!.to, 3) | |
| expect(afterBack.stack).toEqual(["/a", "/b", "/c"]) | |
| expect(afterBack.index).toBe(1) | |
| const forward = forwardPath(afterBack) | |
| expect(forward?.to).toBe("/c") | |
| expect(forward?.state.index).toBe(2) | |
| const afterForward = applyPath(forward!.state, forward!.to, 3) | |
| expect(afterForward.stack).toEqual(["/a", "/b", "/c"]) | |
| expect(afterForward.index).toBe(2) | |
| }) | |
| test("action-driven navigation does not push duplicate history entries", () => { | |
| const state: TitlebarHistory = { | |
| stack: ["/", "/a", "/b"], | |
| index: 2, | |
| action: undefined, | |
| } | |
| const back = backPath(state) | |
| expect(back?.to).toBe("/a") | |
| const next = applyPath(back!.state, back!.to, 10) | |
| expect(next.stack).toEqual(["/", "/a", "/b"]) | |
| expect(next.index).toBe(1) | |
| expect(next.action).toBeUndefined() | |
| }) | |
| }) | |
Xet Storage Details
- Size:
- 1.96 kB
- Xet hash:
- 8527dfa099c2a15c235efa57476021cab9568eee888fb379ef6d0af7cfb67713
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.