summaryrefslogtreecommitdiffhomepage
path: root/packages/app/src/context/layout-scroll.test.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/app/src/context/layout-scroll.test.ts')
-rw-r--r--packages/app/src/context/layout-scroll.test.ts60
1 files changed, 34 insertions, 26 deletions
diff --git a/packages/app/src/context/layout-scroll.test.ts b/packages/app/src/context/layout-scroll.test.ts
index c421a58b6..2a13e4020 100644
--- a/packages/app/src/context/layout-scroll.test.ts
+++ b/packages/app/src/context/layout-scroll.test.ts
@@ -1,36 +1,44 @@
-import { describe, expect, test } from "bun:test"
+import { describe, expect, test, vi } from "bun:test"
import { createScrollPersistence } from "./layout-scroll"
describe("createScrollPersistence", () => {
- test("debounces persisted scroll writes", async () => {
- 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)
- },
- })
+ 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 })
- }
+ 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)
- await new Promise((resolve) => setTimeout(resolve, 40))
+ vi.advanceTimersByTime(1)
- expect(writes).toHaveLength(1)
- expect(writes[0]?.review).toEqual({ x: 0, y: 30 })
+ expect(writes).toHaveLength(1)
+ expect(writes[0]?.review).toEqual({ x: 0, y: 30 })
- scroll.setScroll("session", "review", { x: 0, y: 30 })
- await new Promise((resolve) => setTimeout(resolve, 20))
+ scroll.setScroll("session", "review", { x: 0, y: 30 })
+ vi.advanceTimersByTime(20)
- expect(writes).toHaveLength(1)
- scroll.dispose()
+ expect(writes).toHaveLength(1)
+ scroll.dispose()
+ } finally {
+ vi.useRealTimers()
+ }
})
})