import { describe, expect, test } from "bun:test"; import { commandIds } from "@commands/ids"; import { createViewportPanInputController } from "./viewport-pan"; const ignoredState = undefined as never; describe("viewport pan input controller", () => { test("space enters and exits temporary pan through commands", () => { const dispatched: unknown[] = []; const controller = createViewportPanInputController({ globalKeyConsumer: () => false, globalPointerConsumer: () => false, getCurrentZoom: () => 1, isPanMode: () => false, dispatch: (commandId, payload) => { dispatched.push({ commandId, payload }); return ignoredState; }, }); expect(controller.keyDown(keyEvent("Space"))).toBe(true); expect(controller.keyUp(keyEvent("Space"))).toBe(true); expect(dispatched).toEqual([ { commandId: commandIds.toolEnterTemporaryPan, payload: undefined }, { commandId: commandIds.toolExitTemporaryPan, payload: undefined }, ]); }); test("global key consumer prevents temporary pan command", () => { let dispatched = false; const controller = createViewportPanInputController({ globalKeyConsumer: () => true, globalPointerConsumer: () => false, getCurrentZoom: () => 1, isPanMode: () => false, dispatch: () => { dispatched = true; return ignoredState; }, }); expect(controller.keyDown(keyEvent("Space"))).toBe(true); expect(dispatched).toBe(false); }); }); function keyEvent(code: string) { return { key: code === "Space" ? " " : code, code, altKey: false, ctrlKey: false, metaKey: false, shiftKey: false }; }