deadhead-space-freight-tycoon/apps/web/test/map-ticker.test.ts

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);
});
});