package render
import (
"strings"
"testing"
)
func TestRenderBasicMarkdown(t *testing.T) {
r := New()
result, err := r.Render([]byte("# Hello\n\nThis is a paragraph."))
if err != nil {
t.Fatalf("render: %v", err)
}
if !strings.Contains(result.HTML, "
This is a paragraph.") {
t.Fatalf("expected paragraph, got: %s", result.HTML)
}
}
func TestRenderGFMTable(t *testing.T) {
md := "| A | B |\n|---|---|\n| 1 | 2 |"
r := New()
result, err := r.Render([]byte(md))
if err != nil {
t.Fatalf("render: %v", err)
}
if !strings.Contains(result.HTML, "
") {
t.Fatalf("expected table, got: %s", result.HTML)
}
}
func TestRenderCodeHighlighting(t *testing.T) {
md := "```go\nfunc main() {}\n```"
r := New()
result, err := r.Render([]byte(md))
if err != nil {
t.Fatalf("render: %v", err)
}
// chroma with classes should produce class attributes
if !strings.Contains(result.HTML, "class=") {
t.Fatalf("expected syntax highlighting classes, got: %s", result.HTML)
}
}
func TestExtractHeadings(t *testing.T) {
md := "# Title\n## Section\n### Subsection"
r := New()
result, err := r.Render([]byte(md))
if err != nil {
t.Fatalf("render: %v", err)
}
if len(result.Headings) != 3 {
t.Fatalf("expected 3 headings, got %d", len(result.Headings))
}
if result.Headings[0].Level != 1 || result.Headings[0].Text != "Title" {
t.Fatalf("unexpected first heading: %+v", result.Headings[0])
}
if result.Headings[1].Level != 2 || result.Headings[1].Text != "Section" {
t.Fatalf("unexpected second heading: %+v", result.Headings[1])
}
}
func TestHeadingAnchors(t *testing.T) {
md := "# Hello World"
r := New()
result, err := r.Render([]byte(md))
if err != nil {
t.Fatalf("render: %v", err)
}
if len(result.Headings) == 0 {
t.Fatal("no headings extracted")
}
if result.Headings[0].ID == "" {
t.Fatal("expected heading ID to be set")
}
}
func TestSlugify(t *testing.T) {
tests := []struct {
input string
want string
}{
{"Hello World", "hello-world"},
{"API Design", "api-design"},
{"foo--bar", "foo-bar"},
{" leading spaces ", "leading-spaces"},
}
for _, tt := range tests {
got := Slugify(tt.input)
if got != tt.want {
t.Errorf("Slugify(%q) = %q, want %q", tt.input, got, tt.want)
}
}
}