101 lines
2.8 KiB
Go
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 --> 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)
|
|
}
|
|
}
|