Download packages/app/src/context/layout-scroll.test.ts from SaylorTwift/opencode: direct link, hf CLI and curl.
- Browser
- Download file 1.82 kB
-
https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/app/src/context/layout-scroll.test.ts
- Command line
-
hf download hf://SaylorTwift/opencode/packages/app/src/context/layout-scroll.test.ts
-
curl -L -o layout-scroll.test.ts https://huggingface.co/SaylorTwift/opencode/resolve/main/packages/app/src/context/layout-scroll.test.ts
1.82 kB
| import { describe, expect, test, vi } from "bun:test" | |
| import { createScrollPersistence } from "./layout-scroll" | |
| describe("createScrollPersistence", () => { | |
| test("debounces persisted scroll writes", () => { | |
| vi.useFakeTimers() | |
| try { | |
| const snapshot = { | |
| session: { | |
| review: { x: 0, y: 0 }, | |
| }, | |
| } as Record<string, Record<string, { x: number; y: number }>> | |
| const writes: Array<Record<string, { x: number; y: number }>> = [] | |
| const scroll = createScrollPersistence({ | |
| debounceMs: 10, | |
| getSnapshot: (sessionKey) => snapshot[sessionKey], | |
| onFlush: (sessionKey, next) => { | |
| snapshot[sessionKey] = next | |
| writes.push(next) | |
| }, | |
| }) | |
| for (const i of Array.from({ length: 30 }, (_, n) => n + 1)) { | |
| scroll.setScroll("session", "review", { x: 0, y: i }) | |
| } | |
| vi.advanceTimersByTime(9) | |
| expect(writes).toHaveLength(0) | |
| vi.advanceTimersByTime(1) | |
| expect(writes).toHaveLength(1) | |
| expect(writes[0]?.review).toEqual({ x: 0, y: 30 }) | |
| scroll.setScroll("session", "review", { x: 0, y: 30 }) | |
| vi.advanceTimersByTime(20) | |
| expect(writes).toHaveLength(1) | |
| scroll.dispose() | |
| } finally { | |
| vi.useRealTimers() | |
| } | |
| }) | |
| test("reseeds empty cache after persisted snapshot loads", () => { | |
| const snapshot = { | |
| session: {}, | |
| } as Record<string, Record<string, { x: number; y: number }>> | |
| const scroll = createScrollPersistence({ | |
| getSnapshot: (sessionKey) => snapshot[sessionKey], | |
| onFlush: () => {}, | |
| }) | |
| expect(scroll.scroll("session", "review")).toBeUndefined() | |
| snapshot.session = { | |
| review: { x: 12, y: 34 }, | |
| } | |
| expect(scroll.scroll("session", "review")).toEqual({ x: 12, y: 34 }) | |
| scroll.dispose() | |
| }) | |
| }) | |