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) } } }