import { render } from "@testing-library/react"; import { MarkdownView } from "./MarkdownView"; test("readable paragraphs preserve text, inline code, links and authored source", () => { const source = `${"Una regola dimostrativa conserva sempre i dati originali. ".repeat(5)}Si usa \`flag = FALSE; valore >= 0.4\` senza cambiare il codice; ${"Questa parte spiega il criterio senza aggiungere nuove informazioni. ".repeat(5)}Leggere **tutto** e il [documento](https://example.com/a.b).`; const normal = render(); const expected = normal.container.textContent; normal.unmount(); const view = render(); expect(view.container.querySelectorAll(".markdown-view > p").length).toBeGreaterThan(2); // HTML paragraph boundaries add whitespace, but never change the wording. expect(view.container.textContent?.replace(/\s+/g, " ").trim()).toBe(expected?.replace(/\s+/g, " ").trim()); expect(view.container.querySelector("code")).toHaveTextContent("flag = FALSE; valore >= 0.4"); expect(view.container.querySelector("strong")).toHaveTextContent("tutto"); expect(view.container.querySelector("a")).toHaveAttribute("href", "https://example.com/a.b"); expect(view.container.querySelector(".markdown-view")).toHaveClass("thot-knowledge-prose"); }); test("leaves existing paragraphs, lists and fenced SQL unchanged", () => { const sql = `SELECT '${"valore; con punteggiatura. ".repeat(20)}' AS esempio;`; const source = `Primo paragrafo.\n\nSecondo paragrafo.\n\n- Una voce\n- Altra voce\n\n\`\`\`sql\n${sql}\n\`\`\``; const view = render(); expect(view.container.querySelectorAll(".markdown-view > p")).toHaveLength(2); expect(view.container.querySelectorAll("li")).toHaveLength(2); expect(view.container.querySelector("pre code")?.textContent).toBe(sql + "\n"); }); test("does not enable long-paragraph reflow for ordinary document viewers", () => { const view = render(); expect(view.container.querySelectorAll("p")).toHaveLength(1); expect(view.container.querySelector(".thot-knowledge-prose")).toBeNull(); });