65 lines
2.0 KiB
Go
65 lines
2.0 KiB
Go
package tui
|
|
|
|
import (
|
|
"regexp"
|
|
"strings"
|
|
"testing"
|
|
)
|
|
|
|
func TestRenderMarkdownSupportsCommonAssistantContent(t *testing.T) {
|
|
rendered := renderMarkdown("# Title\n\n- one\n- two\n\n```go\nfmt.Println(\"x\")\n```", 80, themeForMode(ThemeLight))
|
|
plain := stripANSI(rendered)
|
|
for _, want := range []string{"Title", "one", "two", `fmt.Println("x")`} {
|
|
if !strings.Contains(plain, want) {
|
|
t.Fatalf("markdown output missing %q:\n%s", want, rendered)
|
|
}
|
|
}
|
|
if strings.Contains(plain, "# Title") {
|
|
t.Fatalf("heading was not rendered:\n%s", rendered)
|
|
}
|
|
}
|
|
|
|
func TestRenderMarkdownSupportsThemesAndNarrowWidth(t *testing.T) {
|
|
for _, mode := range []ThemeMode{ThemeLight, ThemeDark} {
|
|
rendered := renderMarkdown("**bold** and `code`", 4, themeForMode(mode))
|
|
plain := stripANSI(rendered)
|
|
if rendered == "" {
|
|
t.Fatalf("empty markdown output for %s", mode)
|
|
}
|
|
for _, want := range []string{"bold", "code"} {
|
|
if !strings.Contains(plain, want) {
|
|
t.Fatalf("markdown output for %s missing %q:\n%s", mode, want, rendered)
|
|
}
|
|
}
|
|
if strings.Contains(plain, "**bold**") {
|
|
t.Fatalf("strong markdown was not rendered for %s:\n%s", mode, rendered)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestRenderMarkdownDoesNotEmitBackgroundColors(t *testing.T) {
|
|
content := "# Title\n\n`inline`\n\n```go\nfmt.Println(\"x\")\n```"
|
|
for _, mode := range []ThemeMode{ThemeLight, ThemeDark} {
|
|
rendered := renderMarkdown(content, 80, themeForMode(mode))
|
|
if backgroundPattern.MatchString(rendered) {
|
|
t.Fatalf("markdown output for %s should not emit background colors:\n%q", mode, rendered)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestRenderMarkdownTrimsGlamourTrailingSpaces(t *testing.T) {
|
|
rendered := renderMarkdown("hello", 80, themeForMode(ThemeLight))
|
|
plain := stripANSI(rendered)
|
|
if plain != "hello" {
|
|
t.Fatalf("markdown should not pad a plain assistant line:\n%q", plain)
|
|
}
|
|
}
|
|
|
|
var backgroundPattern = regexp.MustCompile(`\x1b\[[0-9;:]*48[;:][0-9;:]*m`)
|
|
|
|
var ansiPattern = regexp.MustCompile(`\x1b\[[0-9;:]*[A-Za-z]`)
|
|
|
|
func stripANSI(value string) string {
|
|
return ansiPattern.ReplaceAllString(value, "")
|
|
}
|