import { afterEach, describe, expect, it, vi } from "vitest"; import { setContext } from "@/platform/context"; import { EDITOR_AREA_SELECTOR, installFocusTracking } from "./focus"; describe("focus after popups", () => { afterEach(() => { document.body.innerHTML = ""; setContext("popupOpen", false); vi.useRealTimers(); }); function setup() { document.body.innerHTML = `
`; return document.querySelector(`${EDITOR_AREA_SELECTOR} .cm-content`)!; } it("returns focus to the editor when the last popup closes and focus was left nowhere", () => { vi.useFakeTimers(); const editor = setup(); const dispose = installFocusTracking(() => {}); setContext("popupOpen", true); (document.activeElement as HTMLElement | null)?.blur(); setContext("popupOpen", false); vi.runAllTimers(); expect(document.activeElement).toBe(editor); dispose(); }); it("leaves focus alone when the popup handed it to another component", () => { vi.useFakeTimers(); setup(); const dispose = installFocusTracking(() => {}); setContext("popupOpen", true); const other = document.getElementById("other")!; other.focus(); setContext("popupOpen", false); vi.runAllTimers(); expect(document.activeElement).toBe(other); dispose(); }); });