renderer_test.go

 1package messages
 2
 3import (
 4	"testing"
 5)
 6
 7func TestEscapeContent(t *testing.T) {
 8	cases := []struct {
 9		name     string
10		input    string
11		expected string
12	}{
13		{
14			name:     "nothing to escape",
15			input:    "Hello, World!",
16			expected: "Hello, World!",
17		},
18		{
19			name:     "escape csi sequences",
20			input:    "\x1b[31mRed Text\x1b[0m",
21			expected: "\\x1b[31mRed Text\\x1b[0m",
22		},
23		{
24			name:     "escape control characters",
25			input:    "Hello\x00World\x7f!",
26			expected: "Hello\\x00World\\x7f!",
27		},
28		{
29			name:     "escape csi sequences with control characters",
30			input:    "\x1b[31mHello\x00World\x7f!\x1b[0m",
31			expected: "\\x1b[31mHello\\x00World\\x7f!\\x1b[0m",
32		},
33		{
34			name:     "just unicode",
35			input:    "ใ“ใ‚“ใซใกใฏ", // "Hello" in Japanese
36			expected: "ใ“ใ‚“ใซใกใฏ",
37		},
38		{
39			name:     "unicode with csi sequences and control characters",
40			input:    "\x1b[31mใ“ใ‚“ใซใกใฏ\x00World\x7f!\x1b[0m",
41			expected: "\\x1b[31mใ“ใ‚“ใซใกใฏ\\x00World\\x7f!\\x1b[0m",
42		},
43	}
44	for i, c := range cases {
45		t.Run(c.name, func(t *testing.T) {
46			result := escapeContent(nil, c.input)
47			if result != c.expected {
48				t.Errorf("case %d, expected %q, got %q", i+1, c.expected, result)
49			}
50		})
51	}
52}