57 lines
1.6 KiB
Go
57 lines
1.6 KiB
Go
// Copyright (c) 2026 Petr Balvín <opensource@petrbalvin.org> (https://petrbalvin.org)
|
|||
|
|
// SPDX-License-Identifier: PolyForm-Noncommercial-1.0.0
|
||
|
|
|
||
|
|
package markdown
|
||
|
|
|
||
|
|
import (
|
||
|
|
"flag"
|
||
|
|
"os"
|
||
|
|
"path/filepath"
|
||
|
|
"strings"
|
||
|
|
"testing"
|
||
|
|
)
|
||
|
|
|
||
|
|
var update = flag.Bool("update", false, "rewrite golden files")
|
||
|
|
|
||
|
|
// TestGoldenCorpus renders every corpus file and compares against the
|
||
|
|
// committed golden output. Run `go test ./internal/markdown -update` to
|
||
|
|
// regenerate after an intentional rendering change.
|
||
|
|
func TestGoldenCorpus(t *testing.T) {
|
||
|
|
corpusDir := filepath.Join("testdata", "corpus")
|
||
|
|
entries, err := os.ReadDir(corpusDir)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("read corpus: %v", err)
|
||
|
|
}
|
||
|
|
for _, entry := range entries {
|
||
|
|
if entry.IsDir() || !strings.HasSuffix(entry.Name(), ".md") {
|
||
|
|
continue
|
||
|
|
}
|
||
|
|
name := strings.TrimSuffix(entry.Name(), ".md")
|
||
|
|
t.Run(name, func(t *testing.T) {
|
||
|
|
src, err := os.ReadFile(filepath.Join(corpusDir, entry.Name()))
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("read corpus file: %v", err)
|
||
|
|
}
|
||
|
|
htmlOut, toc, err := RenderWithTOC(string(src))
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("RenderWithTOC: %v", err)
|
||
|
|
}
|
||
|
|
got := "=== HTML ===\n" + htmlOut + "=== TOC ===\n" + toc
|
||
|
|
goldenPath := filepath.Join("testdata", name+".html")
|
||
|
|
if *update {
|
||
|
|
if err := os.WriteFile(goldenPath, []byte(got), 0o644); err != nil {
|
||
|
|
t.Fatalf("write golden: %v", err)
|
||
|
|
}
|
||
|
|
return
|
||
|
|
}
|
||
|
|
want, err := os.ReadFile(goldenPath)
|
||
|
|
if err != nil {
|
||
|
|
t.Fatalf("read golden (run with -update): %v", err)
|
||
|
|
}
|
||
|
|
if got != string(want) {
|
||
|
|
t.Fatalf("output differs from golden:\n--- got ---\n%s\n--- want ---\n%s", got, want)
|
||
|
|
}
|
||
|
|
})
|
||
|
|
}
|
||
|
|
}
|