import lib // Snapshot tests: compare full markdown→HTML conversion against golden output // Snapshot: simple document with heading and paragraph fn test_snapshot_heading_and_para(): Unit with {Test} = { let md = "# Hello World\n\nThis is a paragraph." let expected = "

Hello World

\n

This is a paragraph.

\n" Test.assertEqualMsg(expected, lib.toHtml(md), "snap: heading + paragraph") } // Snapshot: all heading levels fn test_snapshot_all_headings(): Unit with {Test} = { Test.assertEqualMsg("

H1

\n", lib.toHtml("# H1"), "snap: h1") Test.assertEqualMsg("

H2

\n", lib.toHtml("## H2"), "snap: h2") Test.assertEqualMsg("

H3

\n", lib.toHtml("### H3"), "snap: h3") Test.assertEqualMsg("

H4

\n", lib.toHtml("#### H4"), "snap: h4") } // Snapshot: inline formatting combinations fn test_snapshot_inline_combos(): Unit with {Test} = { Test.assertEqualMsg("bold", lib.inlineToHtml("**bold**"), "snap: bold") Test.assertEqualMsg("italic", lib.inlineToHtml("*italic*"), "snap: italic") Test.assertEqualMsg("code", lib.inlineToHtml("`code`"), "snap: code") Test.assertEqualMsg("strike", lib.inlineToHtml("~~strike~~"), "snap: strike") Test.assertEqualMsg("link", lib.inlineToHtml("[link](/)"), "snap: link") Test.assertEqualMsg("\"a\"", lib.inlineToHtml("![a](i.png)"), "snap: image") } // Snapshot: unordered list fn test_snapshot_unordered_list(): Unit with {Test} = { let md = "- Alpha\n- Beta\n- Gamma" let expected = "\n" Test.assertEqualMsg(expected, lib.toHtml(md), "snap: unordered list") } // Snapshot: ordered list fn test_snapshot_ordered_list(): Unit with {Test} = { let md = "1. First\n2. Second\n3. Third" let expected = "
    \n
  1. First
  2. \n
  3. Second
  4. \n
  5. Third
  6. \n
\n" Test.assertEqualMsg(expected, lib.toHtml(md), "snap: ordered list") } // Snapshot: code block with language fn test_snapshot_code_block(): Unit with {Test} = { let md = "```rust\nlet x = 1;\nlet y = 2;\n```" let expected = "
let x = 1;\nlet y = 2;\n
\n" Test.assertEqualMsg(expected, lib.toHtml(md), "snap: code block with rust lang") } // Snapshot: code block without language fn test_snapshot_code_block_no_lang(): Unit with {Test} = { let md = "```\nplain code\n```" let expected = "
plain code\n
\n" Test.assertEqualMsg(expected, lib.toHtml(md), "snap: code block no lang") } // Snapshot: blockquote fn test_snapshot_blockquote(): Unit with {Test} = { let md = "> This is quoted text" let expected = "
\n

This is quoted text

\n
\n" Test.assertEqualMsg(expected, lib.toHtml(md), "snap: blockquote") } // Snapshot: horizontal rules fn test_snapshot_horizontal_rules(): Unit with {Test} = { Test.assertEqualMsg("
\n", lib.toHtml("---"), "snap: hr dashes") Test.assertEqualMsg("
\n", lib.toHtml("***"), "snap: hr asterisks") Test.assertEqualMsg("
\n", lib.toHtml("___"), "snap: hr underscores") } // Snapshot: HTML passthrough fn test_snapshot_html_passthrough(): Unit with {Test} = { Test.assertEqualMsg("
content
\n", lib.toHtml("
content
"), "snap: div passthrough") Test.assertEqualMsg("\n", lib.toHtml(""), "snap: video passthrough") } // Snapshot: heading with inline formatting inside list fn test_snapshot_list_with_headings(): Unit with {Test} = { let md = "- ### Chapter 1\n- ### Chapter 2" let expected = "\n" Test.assertEqualMsg(expected, lib.toHtml(md), "snap: list with headings") } // Snapshot: complete blog post conversion fn test_snapshot_blog_post(): Unit with {Test} = { let md = "# My Post\n\nIntro paragraph with **bold** and *italic*.\n\n## Code Example\n\n```js\nconsole.log(\"hi\");\n```\n\n- Item one\n- Item two\n\n> A quote\n\n---\n\nThe end." let html = lib.toHtml(md) Test.assert(String.startsWith(html, "

My Post

"), "snap: blog starts with h1") Test.assert(String.contains(html, "bold"), "snap: blog has bold") Test.assert(String.contains(html, "italic"), "snap: blog has italic") Test.assert(String.contains(html, "

Code Example

"), "snap: blog has h2") Test.assert(String.contains(html, "language-js"), "snap: blog has js code block") Test.assert(String.contains(html, "
  • Item one
  • "), "snap: blog has list item") Test.assert(String.contains(html, "
    "), "snap: blog has blockquote") Test.assert(String.contains(html, "
    "), "snap: blog has hr") Test.assert(String.contains(html, "The end."), "snap: blog has closing") } // Snapshot: inline code with HTML entities fn test_snapshot_code_html_entities(): Unit with {Test} = { let result = lib.inlineToHtml("Use `
    ` and `&` in HTML") let expected = "Use <div> and &amp; in HTML" Test.assertEqualMsg(expected, result, "snap: code with HTML entities") } // Snapshot: multiple paragraphs fn test_snapshot_multiple_paragraphs(): Unit with {Test} = { let md = "First.\n\nSecond.\n\nThird." let expected = "

    First.

    \n

    Second.

    \n

    Third.

    \n" Test.assertEqualMsg(expected, lib.toHtml(md), "snap: three paragraphs") }