1package tui
2
3import (
4 "strings"
5 "testing"
6
7 "github.com/patriceckhart/zot/packages/provider"
8)
9
10func TestExpandedCompactionWrapsAfterResize(t *testing.T) {
11 for _, text := range []string{
12 strings.Repeat("summary words ", 20),
13 "**" + strings.Repeat("styled text ", 20) + "**",
14 "```go\n" + strings.Repeat("longIdentifier", 20) + "\n```",
15 strings.Repeat("日本語 Grüße ", 20),
16 } {
17 v := View{
18 Theme: Dark,
19 Messages: []provider.Message{{
20 Role: provider.RoleUser,
21 Meta: map[string]string{"compaction": "true", "tokens_before": "12345"},
22 Content: []provider.Content{provider.TextBlock{
23 Text: "## Context Summary\n\n" + text,
24 }},
25 }},
26 }
27 if got := strings.TrimSpace(strings.Join(v.Build(120), "")); got != "" {
28 t.Fatalf("collapsed summary should be hidden: %q", got)
29 }
30 v.ExpandAll = true
31 canonical := func(s string) string {
32 return strings.Join(strings.Fields(stripANSI(s)), "")
33 }
34 want := canonical("compacted from ~12345 tokens" + RenderMarkdown(text, Dark, 116))
35 for _, width := range []int{120, 40, 12, 4, 2, 120} {
36 lines := v.Build(width)
37 for _, line := range lines {
38 if got := visibleWidth(line); got > width {
39 t.Fatalf("row width %d exceeds terminal width %d: %q", got, width, stripANSI(line))
40 }
41 }
42 if got := canonical(strings.Join(lines, "")); got != want {
43 t.Fatalf("width %d lost summary content\ngot: %s\nwant: %s", width, got, want)
44 }
45 }
46 }
47}