1package tui
2
3import (
4 "encoding/json"
5 "strings"
6 "testing"
7
8 "github.com/bnema/zut/packages/provider"
9)
10
11func compactModeUserMsg(text string) provider.Message {
12 return provider.Message{
13 Role: provider.RoleUser,
14 Content: []provider.Content{provider.TextBlock{Text: text}},
15 }
16}
17
18func countGutterRows(plain string) int {
19 n := 0
20 for _, line := range strings.Split(plain, "\n") {
21 if strings.Contains(line, "▌") {
22 n++
23 }
24 }
25 return n
26}
27
28func TestCompactModeDropsUserBubblePadding(t *testing.T) {
29 spacious := View{Theme: Dark, Messages: []provider.Message{compactModeUserMsg("hello")}}
30 spaciousPlain := stripANSI(strings.Join(spacious.Build(80), "\n"))
31 if got := countGutterRows(spaciousPlain); got != 3 {
32 t.Fatalf("default user bubble should be 3 gutter rows, got %d:\n%s", got, spaciousPlain)
33 }
34
35 compact := View{Theme: Dark, CompactMode: true, Messages: []provider.Message{compactModeUserMsg("hello")}}
36 compactPlain := stripANSI(strings.Join(compact.Build(80), "\n"))
37 if got := countGutterRows(compactPlain); got != 1 {
38 t.Fatalf("compact mode user message should be 1 gutter row, got %d:\n%s", got, compactPlain)
39 }
40 if !strings.Contains(compactPlain, "▌ hello") {
41 t.Fatalf("compact mode lost user text or gutter:\n%s", compactPlain)
42 }
43}
44
45func TestCompactModeDropsToolBoxBorders(t *testing.T) {
46 args := json.RawMessage(`{"command":"echo hi"}`)
47 compact := View{
48 Theme: Dark,
49 CompactMode: true,
50 ToolCalls: []ToolCallView{
51 {ID: "toolu_1", Name: "bash", Args: ShortArgs("bash", args), Result: "hi\n"},
52 },
53 }
54 compactPlain := stripANSI(strings.Join(compact.Build(80), "\n"))
55 if strings.ContainsAny(compactPlain, "┌└│┐┘") {
56 t.Fatalf("compact mode tool render still contains box glyphs:\n%s", compactPlain)
57 }
58 if !strings.Contains(compactPlain, "bash") || !strings.Contains(compactPlain, "hi") {
59 t.Fatalf("compact mode tool render lost header or output:\n%s", compactPlain)
60 }
61
62 spacious := View{
63 Theme: Dark,
64 ToolCalls: []ToolCallView{
65 {ID: "toolu_1", Name: "bash", Args: ShortArgs("bash", args), Result: "hi\n"},
66 },
67 }
68 spaciousPlain := stripANSI(strings.Join(spacious.Build(80), "\n"))
69 if !strings.ContainsAny(spaciousPlain, "┌└│┐┘") {
70 t.Fatalf("default tool render should contain box glyphs:\n%s", spaciousPlain)
71 }
72}