import { describe, expect, it, vi } from "vitest"; import { render, screen, waitFor } from "@testing-library/react"; vi.mock(import("@/platform/ipc"), async (importOriginal) => ({ ...(await importOriginal()), commands: { fsReadText: (path: string) => path } as never, call: (async () => "/**\n * Uses foo()\n */\n const x = foo();\n") as never, })); vi.mock(import("@/editor/api"), async (importOriginal) => ({ ...(await importOriginal()), editorsFor: () => [] })); const { UsagePreview, UsagesView } = await import("./UsagesView"); describe("UsagePreview", () => { it("colours the usage line with its file as context", async () => { const { container } = render( , ); await waitFor(() => expect(container.querySelector(".tok-keyword")?.textContent).toBe("const")); expect(container.querySelector("mark")?.textContent).toBe("foo"); expect(container.querySelector("mark")?.childElementCount).toBe(0); expect(container.textContent).toBe("const x = foo();"); }); it("keeps comment colours outside the match and the search foreground inside it", async () => { const { container } = render( , ); await waitFor(() => expect(container.querySelector(".tok-comment")?.textContent).toBe("* Uses ")); expect(container.querySelector("mark")?.textContent).toBe("foo"); expect(container.querySelector("mark")?.childElementCount).toBe(0); }); }); it("shows a plain count for unclassified searches after a Java access mode was selected", async () => { const { useUsages } = await import("./usages"); const { useUsageAccessOptions } = await import("./UsageAccessFilter"); const rows = [0, 1].map((line) => ({ path: "/p/a.ts", line, col: 0, endCol: 3, text: "foo()" })); useUsageAccessOptions.setState({ read: true, write: false }); useUsages.setState({ tabs: [ { id: 123, symbol: "foo", groups: [{ path: "/p/a.ts", usages: rows }], loading: false, error: null, rerun: null, note: null, pinned: false, }, ], active: 123, }); const view = render(); expect(screen.getByText("2 results")).toBeInTheDocument(); expect(screen.queryByRole("toolbar", { name: "Usage access filters" })).toBeNull(); view.unmount(); useUsageAccessOptions.setState({ read: true, write: true }); useUsages.setState({ tabs: [], active: null }); });