86f5ca4aef
Add visible activity state for running turns. Move model metadata below the input area. Render assistant Markdown with theme-aware styling.
45 lines
1.3 KiB
Go
45 lines
1.3 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)
|
|
}
|
|
}
|
|
}
|
|
|
|
var ansiPattern = regexp.MustCompile(`\x1b\[[0-9;:]*[A-Za-z]`)
|
|
|
|
func stripANSI(value string) string {
|
|
return ansiPattern.ReplaceAllString(value, "")
|
|
}
|