package highlight
import (
"strings"
"testing"
)
func TestNewHighlighterStyles(t *testing.T) {
t.Parallel()
cases := []struct {
name string
style string
wantErr bool
}{
{"default_empty", "", false},
{"monokai", "monokai", false},
{"github", "github", false},
{"unknown", "this-does-not-exist", true},
}
for _, tc := range cases {
tc := tc
t.Run(tc.name, func(t *testing.T) {
t.Parallel()
_, err := NewHighlighter(Options{Style: tc.style})
if (err != nil) != tc.wantErr {
t.Fatalf("err = %v, wantErr = %v", err, tc.wantErr)
}
})
}
}
func TestHighlightGoSource(t *testing.T) {
t.Parallel()
h, err := NewHighlighter(Options{ClassPrefix: "chroma-"})
if err != nil {
t.Fatalf("NewHighlighter: %v", err)
}
src := "package main\n\nfunc main() { println(\"hi\") }\n"
out, err := h.HighlightString("go", src)
if err != nil {
t.Fatalf("HighlightString: %v", err)
}
for _, want := range []string{`class="chroma-`, "main", "func"} {
if !strings.Contains(out, want) {
t.Errorf("missing %q in output", want)
}
}
}
func TestHighlightUnknownLang(t *testing.T) {
t.Parallel()
h, err := NewHighlighter(Options{})
if err != nil {
t.Fatalf("NewHighlighter: %v", err)
}
out, err := h.HighlightString("not-a-real-language", "some text")
if err != nil {
t.Fatalf("HighlightString: %v", err)
}
if out == "" {
t.Error("expected fallback formatter to produce output")
}
}
func TestWriteCSS(t *testing.T) {
t.Parallel()
h, err := NewHighlighter(Options{ClassPrefix: "chroma-"})
if err != nil {
t.Fatalf("NewHighlighter: %v", err)
}
var sb strings.Builder
if err := h.WriteCSS(&sb); err != nil {
t.Fatalf("WriteCSS: %v", err)
}
if sb.Len() == 0 {
t.Error("empty CSS")
}
}
func TestKnownLanguages(t *testing.T) {
t.Parallel()
names := KnownLanguages()
if len(names) < 10 {
t.Errorf("expected many known languages, got %d", len(names))
}
}
func TestMustStyleFallback(t *testing.T) {
t.Parallel()
s := MustStyle("nothing-here")
if s == nil {
t.Fatal("MustStyle returned nil")
}
}