@@ -0,0 +1,52 @@
1+package messages
2+
3+import (
4+ "testing"
5+)
6+
7+func 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+}