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 := `
graph TD
  A --> B
` 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), `
`) {
		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), `
`) {
		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), "") {
		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 := "
raw html
\n" got, err := renderMarkdown([]byte(input)) if err != nil { t.Fatalf("renderMarkdown() error = %v", err) } if !strings.Contains(string(got), `
raw html
`) { t.Errorf("renderMarkdown() = %q, want raw HTML passed through unescaped", got) } }