okami.mom/albedo

git clone https://git.nkp.pet/okami.mom/albedo

nekomimi.petfix macos terminal.app rendering4e62e9e

main
1.7 KiB51 linesraw
1// The daemon e2e checks rendered views for leaked row marks. These tests also
2// check byte-for-byte preservation of terminal sequences and internal hit targets.
3package tui
4
5import (
6	"strings"
7	"testing"
8
9	"albedo/cli/internal/daemon"
10	"github.com/charmbracelet/x/ansi"
11)
12
13func TestAppViewKeepsRowMarksInternal(t *testing.T) {
14	chat := newTestChatModel(t, &daemon.Session{ID: "s"})
15	chat.SetSize(80, 24)
16	chat.appendSettledEntry(HistoryEntry{Kind: EntryUser, Text: "hi", Timestamp: 1})
17	chat.appendSettledEntry(HistoryEntry{Kind: EntryAssistant, Text: "a reply to copy", Timestamp: 2})
18	chat.appendSettledEntry(HistoryEntry{Kind: EntryTurnEnd, Mood: moodDone, Timestamp: 3})
19	chat.refreshViewportContent()
20	app := &AppModel{State: AppStateChat, Chat: chat}
21	internal := app.content()
22	if !strings.Contains(internal, markChrome) {
23		t.Fatal("fixture has no row marks")
24	}
25	view := app.View().Content
26	if strings.Contains(view, "\x1b_albedo:") {
27		t.Fatalf("private row marks reached the terminal: %q", view)
28	}
29	if ansi.Strip(view) != ansi.Strip(internal) {
30		t.Fatal("removing row marks changed visible content")
31	}
32	if app.content() != internal {
33		t.Fatal("drawing removed the internal selection and click metadata")
34	}
35}
36
37func TestPrivateRowMarksPreserveTerminalSequences(t *testing.T) {
38	terminal := "\x1b[31mred\x1b[0m" +
39		"\x1b]8;;https://example.com\x1b\\link\x1b]8;;\x1b\\" +
40		"\x1b_Ga=T;AAAA\x1b\\"
41	for _, mark := range []string{
42		markChrome, markWrap, markSplit,
43		(rowAction{verbCopy, "1-ab"}).mark(),
44		(rowAction{verbOpen, "1-ab"}).mark(),
45		(rowAction{verbMore, "1-ab"}).mark(),
46	} {
47		if got := privateRowMarks.ReplaceAllString(mark+terminal+mark, ""); got != terminal {
48			t.Fatalf("mark %q: changed terminal sequences: %q", mark, got)
49		}
50	}
51}