// author: simon-pierre boucher import { describe, expect, it } from "vitest"; import { htmlToMarkdown } from "./markdown.js"; describe("htmlToMarkdown", () => { it("uses ATX headings and dash bullets", () => { const md = htmlToMarkdown("

Title

"); expect(md).toContain("# Title"); expect(md).toContain("- a"); expect(md).toContain("- b"); }); it("emits fenced code blocks with a language tag", () => { const md = htmlToMarkdown('
const x = 1;
'); expect(md).toContain("```ts"); expect(md).toContain("const x = 1;"); }); it("converts tables to GFM with a header separator", () => { const md = htmlToMarkdown( "
NameAge
Ada36
", ); expect(md).toContain("| Name | Age |"); expect(md).toContain("| --- | --- |"); expect(md).toContain("| Ada | 36 |"); }); it("escapes pipes inside table cells", () => { const md = htmlToMarkdown("
a|b
c|d
"); expect(md).toContain("a\\|b"); expect(md).toContain("c\\|d"); }); it("renders figure + figcaption as image plus italic caption", () => { const md = htmlToMarkdown('
chart
Fig 1
'); expect(md).toContain("![chart](https://x/y.png)"); expect(md).toContain("_Fig 1_"); }); it("removes heading anchor links", () => { const md = htmlToMarkdown('

Sec

'); expect(md).toContain("## Sec"); expect(md).not.toContain("¶"); expect(md).not.toContain("#sec"); }); it("renders definition lists", () => { const md = htmlToMarkdown("
Term
Meaning
"); expect(md).toContain("**Term**"); expect(md).toContain(": Meaning"); }); it("collapses 3+ blank lines to 2", () => { const md = htmlToMarkdown("

a




b

"); expect(md).not.toMatch(/\n{3,}/); }); });