36 lines
1.2 KiB
TypeScript
36 lines
1.2 KiB
TypeScript
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
import { runWhileVisible } from "../src/map/ticker";
|
|
|
|
const setVisibility = (state: DocumentVisibilityState) => {
|
|
Object.defineProperty(document, "visibilityState", { value: state, configurable: true });
|
|
document.dispatchEvent(new Event("visibilitychange"));
|
|
};
|
|
|
|
describe("map ticker lifecycle (Step 10C.9)", () => {
|
|
afterEach(() => setVisibility("visible"));
|
|
|
|
it("pauses when the page is hidden and resumes when it is visible", () => {
|
|
const ticker = { start: vi.fn(), stop: vi.fn() };
|
|
const cleanup = runWhileVisible(ticker);
|
|
expect(ticker.start).toHaveBeenCalledTimes(1);
|
|
|
|
setVisibility("hidden");
|
|
expect(ticker.stop).toHaveBeenCalledTimes(1);
|
|
setVisibility("visible");
|
|
expect(ticker.start).toHaveBeenCalledTimes(2);
|
|
cleanup();
|
|
});
|
|
|
|
it("stops on unmount and ignores visibility changes afterwards", () => {
|
|
const ticker = { start: vi.fn(), stop: vi.fn() };
|
|
const cleanup = runWhileVisible(ticker);
|
|
cleanup();
|
|
expect(ticker.stop).toHaveBeenCalledTimes(1);
|
|
|
|
setVisibility("hidden");
|
|
setVisibility("visible");
|
|
expect(ticker.start).toHaveBeenCalledTimes(1);
|
|
expect(ticker.stop).toHaveBeenCalledTimes(1);
|
|
});
|
|
});
|