import { createRawSnippet } from "svelte"; import { describe, expect, it } from "vitest"; import { BrowserMockup, DEFAULT_BROWSER_MOCKUP_RATIO, browserMockup as browserMockupAppearance, } from "../src/index"; import MockupContractFailures from "./fixtures/MockupContractFailures.svelte"; import { classes, classesOf, render, rendered, styleOf } from "./mount"; const deploymentPreview = () => createRawSnippet(() => ({ render: () => '
', })); describe("the deliberately failing mockup fixtures", () => { it("exposes interactive browser chrome that must be decorative", () => { const root = render(MockupContractFailures, { failure: "interactive-chrome" }); const chrome = root.querySelector("[data-broken-browser-chrome]")!; expect(chrome.getAttribute("aria-hidden")).not.toBe("true"); expect(chrome.querySelector("a, input, button")).not.toBeNull(); }); }); describe("the Base BrowserMockup", () => { it("keeps caller semantics and focus while hiding its fake browser controls", () => { const element = rendered( render(BrowserMockup, { address: "https://example.test/deployments", class: "max-w-4xl", children: deploymentPreview(), }), ); const chrome = element.querySelector("[data-browser-mockup-chrome]")!; const viewport = element.querySelector("[data-browser-mockup-viewport]")!; const article = viewport.querySelector('article[aria-label="Deployment preview"]')!; const button = article.querySelector("button")!; expect(element.getAttribute("role")).toBe("presentation"); expect(element.hasAttribute("aria-hidden")).toBe(false); expect(chrome.getAttribute("aria-hidden")).toBe("true"); expect(chrome.querySelector("a, button, input, select, textarea")).toBeNull(); expect(chrome.textContent).toContain("https://example.test/deployments"); expect(article.getAttribute("aria-label")).toBe("Deployment preview"); button.focus(); expect(document.activeElement).toBe(button); expect(styleOf(viewport, "aspect-ratio")).toBe(`${DEFAULT_BROWSER_MOCKUP_RATIO} / 1`); expect(classes(element)).toEqual( classesOf(browserMockupAppearance().root({ class: "max-w-4xl" })), ); expect(element.hasAttribute("data-theme")).toBe(false); expect(element.hasAttribute("data-color-scheme")).toBe(false); expect(element.hasAttribute("data-density")).toBe(false); }); });