8edadb5208260eff2e5321fba47e152f97967693 / internal/render/render_test.go · 2284 bytes · raw
package render
import (
"strings"
"testing"
)
func TestMarkdownRenders(t *testing.T) {
out, err := Markdown([]byte("# demo\n\n**hi** there\n"))
if err != nil {
t.Fatalf("Markdown: %v", err)
}
html := string(out)
if !strings.Contains(html, "<strong>hi</strong>") {
t.Errorf("html = %q, want bold", html)
}
}
func TestMarkdownEscapesRawHTML(t *testing.T) {
out, err := Markdown([]byte("<script>alert(1)</script>\n"))
if err != nil {
t.Fatalf("Markdown: %v", err)
}
html := string(out)
if strings.Contains(html, "<script>") {
t.Errorf("raw script passed through: %q", html)
}
if !strings.Contains(html, "<script>") {
t.Errorf("script not escaped: %q", html)
}
}
func TestCodeHTMLHighlightsKnownExt(t *testing.T) {
html, handled, err := CodeHTML("main.go", "package main\n")
if err != nil || !handled {
t.Fatalf("CodeHTML handled=%v err=%v", handled, err)
}
if !strings.Contains(html, `class="chroma"`) {
t.Errorf("no .chroma wrapper: %q", html)
}
if !strings.Contains(html, `<span class="kn">`) {
t.Errorf("keyword not class-highlighted: %q", html)
}
if strings.Contains(html, "style=") {
t.Errorf("inline styles leaked into class mode: %q", html)
}
}
func TestCodeHTMLDiffClasses(t *testing.T) {
patch := "--- a/f\n+++ b/f\n@@ -1 +1 @@\n-old\n+new\n"
html, handled, err := CodeHTML("x.diff", patch)
if err != nil || !handled {
t.Fatalf("CodeHTML diff handled=%v err=%v", handled, err)
}
for _, cls := range []string{`class="gd"`, `class="gi"`} {
if !strings.Contains(html, cls) {
t.Errorf("diff missing %s: %q", cls, html)
}
}
}
func TestChromaCSS(t *testing.T) {
css, err := ChromaCSS()
if err != nil {
t.Fatalf("ChromaCSS: %v", err)
}
style := string(css)
if !strings.Contains(style, ".chroma .k") {
t.Errorf("no keyword rule in CSS")
}
if !strings.Contains(style, "#a5aef0") {
t.Errorf("palette color missing from CSS")
}
for _, leaked := range []string{"#66d9ef", "#a6e22e", "#ae81ff"} {
if strings.Contains(style, leaked) {
t.Errorf("off-palette monokai color %s leaked into CSS", leaked)
}
}
}
func TestCodeHTMLUnknownExt(t *testing.T) {
if _, handled, err := CodeHTML("file.unknownext", "x"); handled || err != nil {
t.Errorf("handled=%v err=%v, want false,nil", handled, err)
}
}