import { renderHook } from "@testing-library/react";
import fc from "fast-check";
import { describe, expect, it, vi } from "vitest";
import { useOnEscape } from "./index";
describe("hook:useOnEscape", () => {
    it("calls callback on Escape keyup", () => {
        let callback = vi.fn();
        renderHook(() => useOnEscape(callback));
        let event = new KeyboardEvent("keyup", { key: "Escape" });
        document.dispatchEvent(event);
        expect(callback).toHaveBeenCalledTimes(1);
        expect(callback.mock.calls[0][0].key).toBe("Escape");
    });
    it("does not call callback on other keys", () => {
        let callback = vi.fn();
        renderHook(() => useOnEscape(callback));
        let event = new KeyboardEvent("keyup", { key: "Enter" });
        document.dispatchEvent(event);
        expect(callback).toHaveBeenCalledTimes(0);
    });
    it("fuzzing: handles random keys", () => {
        fc.assert(fc.property(fc.string(), (key) => {
            let callback = vi.fn();
            renderHook(() => useOnEscape(callback));
            let event = new KeyboardEvent("keyup", { key });
            document.dispatchEvent(event);
            if (key === "Escape") {
                expect(callback).toHaveBeenCalledTimes(1);
            }
            else {
                expect(callback).toHaveBeenCalledTimes(0);
            }
        }));
    });
});
