1import { expect, it, vi } from "vite-plus/test";
2import { createRenderScheduler } from "./renderScheduler.ts";
3
4it("coalesces frame and pointer invalidations, then stops scheduling when idle or disposed", () => {
5 const callbacks: FrameRequestCallback[] = [];
6 const request = vi.fn((callback: FrameRequestCallback) => {
7 callbacks.push(callback);
8 return callbacks.length;
9 });
10 const cancel = vi.fn();
11 const render = vi.fn();
12 const scheduler = createRenderScheduler(render, request, cancel);
13 scheduler.invalidate();
14 scheduler.invalidate();
15 expect(request).toHaveBeenCalledTimes(1);
16 callbacks[0]?.(0);
17 expect(render).toHaveBeenCalledTimes(1);
18 expect(request).toHaveBeenCalledTimes(1);
19 scheduler.invalidate();
20 scheduler.dispose();
21 scheduler.dispose();
22 scheduler.invalidate();
23 callbacks[1]?.(0);
24 expect(cancel).toHaveBeenCalledExactlyOnceWith(2);
25 expect(render).toHaveBeenCalledTimes(1);
26 expect(request).toHaveBeenCalledTimes(2);
27});