import { afterEach, beforeEach, describe, expect, it } from "vitest";
import { installPointerFocus } from "./pointerFocus";
let uninstall: () => void;
beforeEach(() => {
document.body.innerHTML = `
row
`;
uninstall = installPointerFocus();
});
afterEach(() => uninstall());
const el = (id: string) => document.getElementById(id)!;
const press = (id: string) => el(id).dispatchEvent(new PointerEvent("pointerdown", { bubbles: true }));
const key = (k: string) => document.dispatchEvent(new KeyboardEvent("keydown", { key: k, bubbles: true }));
const marked = (id: string) => el(id).hasAttribute("data-pointer-focus");
describe("installPointerFocus", () => {
it("marks the control under a press, not other focusable elements", () => {
press("label");
press("row");
expect([marked("tab"), marked("row")]).toEqual([true, false]);
});
it("keeps the mark when focus comes back without keyboard navigation (a popup closed with Esc)", () => {
press("tab");
el("tab").focus();
el("other").focus();
key("Escape");
el("tab").focus();
expect(marked("tab")).toBe(true);
});
it("clears the mark when Tab or an arrow key moves focus onto the control", () => {
press("tab");
press("other");
key("Tab");
el("tab").focus();
expect(marked("tab")).toBe(false);
key("ArrowRight");
el("other").focus();
expect(marked("other")).toBe(false);
});
});