slidewalk/internal/parser/markdown_test.go
2026-07-15 20:14:07 +02:00

101 lines
2.8 KiB
Go

package parser
import (
"strings"
"testing"
)
func TestRenderMarkdown_Mermaid(t *testing.T) {
input := "```mermaid\ngraph TD\n A --> B\n```\n"
got, err := renderMarkdown([]byte(input))
if err != nil {
t.Fatalf("renderMarkdown() error = %v", err)
}
want := `<pre class="mermaid">graph TD
A --&gt; B
</pre>
`
if string(got) != want {
t.Errorf("renderMarkdown() = %q, want %q", got, want)
}
}
func TestRenderMarkdown_KnownLanguageGetsSyntaxHighlighted(t *testing.T) {
input := "```go\nfunc main() {}\n```\n"
got, err := renderMarkdown([]byte(input))
if err != nil {
t.Fatalf("renderMarkdown() error = %v", err)
}
if !strings.Contains(string(got), `class="chroma"`) {
t.Errorf("renderMarkdown() = %q, want chroma-highlighted output for a known language", got)
}
if strings.Contains(string(got), `class="mermaid"`) {
t.Errorf("renderMarkdown() = %q, non-mermaid block should not get mermaid class", got)
}
}
func TestRenderMarkdown_UnknownLanguageFallsBackToPlain(t *testing.T) {
input := "```this-language-does-not-exist-anywhere\nsome text\n```\n"
got, err := renderMarkdown([]byte(input))
if err != nil {
t.Fatalf("renderMarkdown() error = %v", err)
}
if !strings.Contains(string(got), `<pre><code class="language-this-language-does-not-exist-anywhere">`) {
t.Errorf("renderMarkdown() = %q, want standard fenced code block rendering for an unrecognized language", got)
}
}
func TestRenderMarkdown_NoLanguageFallsBackToPlain(t *testing.T) {
input := "```\nplain text\n```\n"
got, err := renderMarkdown([]byte(input))
if err != nil {
t.Fatalf("renderMarkdown() error = %v", err)
}
if !strings.Contains(string(got), `<pre><code>`) {
t.Errorf("renderMarkdown() = %q, want standard fenced code block rendering without a language", got)
}
}
func TestRenderMarkdown_GFMTable(t *testing.T) {
input := "| A | B |\n|---|---|\n| 1 | 2 |\n"
got, err := renderMarkdown([]byte(input))
if err != nil {
t.Fatalf("renderMarkdown() error = %v", err)
}
if !strings.Contains(string(got), "<table>") {
t.Errorf("renderMarkdown() = %q, want a rendered table", got)
}
}
func TestRenderMarkdown_Footnote(t *testing.T) {
input := "Text with a footnote.[^1]\n\n[^1]: The footnote body.\n"
got, err := renderMarkdown([]byte(input))
if err != nil {
t.Fatalf("renderMarkdown() error = %v", err)
}
if !strings.Contains(string(got), `class="footnotes"`) {
t.Errorf("renderMarkdown() = %q, want rendered footnotes section", got)
}
}
func TestRenderMarkdown_RawHTMLAllowed(t *testing.T) {
input := "<div class=\"custom\">raw html</div>\n"
got, err := renderMarkdown([]byte(input))
if err != nil {
t.Fatalf("renderMarkdown() error = %v", err)
}
if !strings.Contains(string(got), `<div class="custom">raw html</div>`) {
t.Errorf("renderMarkdown() = %q, want raw HTML passed through unescaped", got)
}
}