33 lines
2.2 KiB
TypeScript
33 lines
2.2 KiB
TypeScript
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(<MarkdownView source={source} />);
|
|
const expected = normal.container.textContent;
|
|
normal.unmount();
|
|
const view = render(<MarkdownView source={source} readable />);
|
|
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(<MarkdownView source={source} readable />);
|
|
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(<MarkdownView source={"A normal document keeps its authored paragraph. ".repeat(20)} />);
|
|
expect(view.container.querySelectorAll("p")).toHaveLength(1);
|
|
expect(view.container.querySelector(".thot-knowledge-prose")).toBeNull();
|
|
});
|