import "@testing-library/jest-dom"; import { fireEvent, render, screen } from "@testing-library/react"; import copy from "clipboard-copy"; import Code from "./Code"; vi.mock("clipboard-copy"); describe("Code", () => { const code = `const a = 1;\nconst b = 2;`; const title = "Sample Code"; const language = "javascript"; test("renders the Code component with title and copy button", () => { render(); expect(screen.getByText(title)).toBeInTheDocument(); expect(screen.getByText("Copy")).toBeInTheDocument(); }); test("copies code to clipboard when Copy button is clicked", () => { render(); fireEvent.click(screen.getByText("Copy")); expect(copy).toHaveBeenCalledWith(code); }); test("renders the correct number of line numbers", () => { const { container } = render( , ); const lineNumbers = container.querySelectorAll(".code-line-number"); expect(lineNumbers.length).toBe(2); expect(lineNumbers[0].textContent?.trim()).toBe("1"); expect(lineNumbers[1].textContent?.trim()).toBe("2"); }); test("line numbers are in a separate element from the code", () => { const { container } = render( , ); const lineNumbersDiv = container.querySelector(".code-line-numbers"); const codeEl = container.querySelector("pre"); expect(lineNumbersDiv).toBeInTheDocument(); expect(codeEl).toBeInTheDocument(); expect(lineNumbersDiv?.contains(codeEl)).toBe(false); }); test("renders the code content", () => { const { container } = render( , ); expect(container.querySelector("pre")).toBeInTheDocument(); expect(container.querySelector("code")).toBeInTheDocument(); }); test("applies the given language", () => { const { container } = render( , ); expect(container.querySelector(".language-css")).toBeInTheDocument(); }); });