36 lines
1.2 KiB
TypeScript
36 lines
1.2 KiB
TypeScript
import { describe, expect, test } from "vitest";
|
|
|
|
import { hasOpenDialogOutside } from "./mobile-dialog-stack";
|
|
|
|
describe("hasOpenDialogOutside", () => {
|
|
test("detects an open child dialog outside the details portal", () => {
|
|
const root = document.createElement("div");
|
|
const details = document.createElement("div");
|
|
const child = document.createElement("div");
|
|
details.setAttribute("role", "dialog");
|
|
child.setAttribute("role", "dialog");
|
|
root.append(details, child);
|
|
|
|
expect(hasOpenDialogOutside(details, root)).toBe(true);
|
|
});
|
|
|
|
test("ignores hidden and closed dialogs", () => {
|
|
const root = document.createElement("div");
|
|
const details = document.createElement("div");
|
|
const hiddenChild = document.createElement("div");
|
|
details.setAttribute("role", "dialog");
|
|
hiddenChild.setAttribute("role", "dialog");
|
|
hiddenChild.setAttribute("aria-hidden", "true");
|
|
root.append(details, hiddenChild);
|
|
|
|
expect(hasOpenDialogOutside(details, root)).toBe(false);
|
|
});
|
|
|
|
test("does not treat the current details dialog as nested", () => {
|
|
const details = document.createElement("div");
|
|
details.setAttribute("role", "dialog");
|
|
|
|
expect(hasOpenDialogOutside(details, details)).toBe(false);
|
|
});
|
|
});
|