import React from "react"; import TestRenderer, { act } from "react-test-renderer"; import { beforeEach, describe, expect, it, vi } from "vitest"; import type { PaintKeyboardEvent } from "paintcannon"; (globalThis as typeof globalThis & { IS_REACT_ACT_ENVIRONMENT: boolean }).IS_REACT_ACT_ENVIRONMENT = true; const keyboard = vi.hoisted(() => ({ handler: null as ((event: PaintKeyboardEvent) => void) | null, })); vi.mock("../hooks/use-keyboard.ts", () => ({ useKeyboard(handler: (event: PaintKeyboardEvent) => void) { keyboard.handler = handler; }, })); import { useCtrlC } from "./exit-on-double-ctrl-c.tsx"; function Harness({ onCtrlC }: { onCtrlC: () => void }) { useCtrlC(onCtrlC); return null; } describe("useCtrlC", () => { beforeEach(() => { keyboard.handler = null; }); it("ignores Ctrl-C when a focused control already handled it", () => { const onCtrlC = vi.fn(); let renderer: TestRenderer.ReactTestRenderer; act(() => { renderer = TestRenderer.create(); }); act(() => { keyboard.handler?.({ ctrlKey: true, key: "c", defaultPrevented: true, } as PaintKeyboardEvent); }); expect(onCtrlC).not.toHaveBeenCalled(); act(() => renderer!.unmount()); }); it("handles an unconsumed Ctrl-C", () => { const onCtrlC = vi.fn(); let renderer: TestRenderer.ReactTestRenderer; act(() => { renderer = TestRenderer.create(); }); act(() => { keyboard.handler?.({ ctrlKey: true, key: "c", defaultPrevented: false, } as PaintKeyboardEvent); }); expect(onCtrlC).toHaveBeenCalledOnce(); act(() => renderer!.unmount()); }); });