internal/render/markdown/highlight/chroma_test.go

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