81 lines
2.5 KiB
TypeScript
81 lines
2.5 KiB
TypeScript
import { createRoot } from "solid-js";
|
|
import { afterEach, describe, expect, it, vi } from "vitest";
|
|
import { createDismiss } from "../../src/utilities/dismiss/create-dismiss";
|
|
|
|
describe("createDismiss", () => {
|
|
afterEach(() => {
|
|
document.body.innerHTML = "";
|
|
});
|
|
|
|
it("calls onDismiss when Escape key is pressed", () => {
|
|
const container = document.createElement("div");
|
|
document.body.appendChild(container);
|
|
|
|
createRoot((dispose) => {
|
|
const onDismiss = vi.fn();
|
|
const dismiss = createDismiss({ getContainer: () => container, onDismiss });
|
|
dismiss.attach();
|
|
|
|
document.dispatchEvent(new KeyboardEvent("keydown", { key: "Escape", bubbles: true }));
|
|
expect(onDismiss).toHaveBeenCalledTimes(1);
|
|
|
|
dismiss.detach();
|
|
dispose();
|
|
});
|
|
});
|
|
|
|
it("calls onDismiss when pointer is pressed outside container", () => {
|
|
const container = document.createElement("div");
|
|
document.body.appendChild(container);
|
|
const outside = document.createElement("button");
|
|
document.body.appendChild(outside);
|
|
|
|
createRoot((dispose) => {
|
|
const onDismiss = vi.fn();
|
|
const dismiss = createDismiss({ getContainer: () => container, onDismiss });
|
|
dismiss.attach();
|
|
|
|
outside.dispatchEvent(new PointerEvent("pointerdown", { bubbles: true }));
|
|
expect(onDismiss).toHaveBeenCalledTimes(1);
|
|
|
|
dismiss.detach();
|
|
dispose();
|
|
});
|
|
});
|
|
|
|
it("does not call onDismiss when pointer is inside container", () => {
|
|
const container = document.createElement("div");
|
|
const inner = document.createElement("button");
|
|
container.appendChild(inner);
|
|
document.body.appendChild(container);
|
|
|
|
createRoot((dispose) => {
|
|
const onDismiss = vi.fn();
|
|
const dismiss = createDismiss({ getContainer: () => container, onDismiss });
|
|
dismiss.attach();
|
|
|
|
inner.dispatchEvent(new PointerEvent("pointerdown", { bubbles: true }));
|
|
expect(onDismiss).not.toHaveBeenCalled();
|
|
|
|
dismiss.detach();
|
|
dispose();
|
|
});
|
|
});
|
|
|
|
it("does not call onDismiss after detach", () => {
|
|
const container = document.createElement("div");
|
|
document.body.appendChild(container);
|
|
|
|
createRoot((dispose) => {
|
|
const onDismiss = vi.fn();
|
|
const dismiss = createDismiss({ getContainer: () => container, onDismiss });
|
|
dismiss.attach();
|
|
dismiss.detach();
|
|
|
|
document.dispatchEvent(new KeyboardEvent("keydown", { key: "Escape", bubbles: true }));
|
|
expect(onDismiss).not.toHaveBeenCalled();
|
|
dispose();
|
|
});
|
|
});
|
|
});
|