]> ruderich.org/simon Gitweb - safcm/safcm.git/blob - frontend/term_test.go
Use SPDX license identifiers
[safcm/safcm.git] / frontend / term_test.go
1 // SPDX-License-Identifier: GPL-3.0-or-later
2 // Copyright (C) 2021-2024  Simon Ruderich
3
4 package frontend
5
6 import (
7         "testing"
8
9         "ruderich.org/simon/safcm/testutil"
10 )
11
12 func TestEscapeControlCharacters(t *testing.T) {
13         tests := []struct {
14                 name  string
15                 isTTY bool
16                 x     string
17                 exp   string
18         }{
19                 {
20                         "UTF-8",
21                         false,
22                         "Hello, 世界",
23                         "Hello, 世界",
24                 },
25                 {
26                         "UTF-8 (TTY)",
27                         true,
28                         "Hello, 世界",
29                         "Hello, 世界",
30                 },
31
32                 {
33                         "color",
34                         false,
35                         ColorString(true, ColorRed, "red"),
36                         `\x1B[31mred\x1B[0m`,
37                 },
38                 {
39                         "color (TTY)",
40                         true,
41                         ColorString(true, ColorRed, "red"),
42                         "\x1B[35m\\x1B\x1B[0m[31mred\x1B[35m\\x1B\x1B[0m[0m",
43                 },
44
45                 {
46                         "\\r\\n",
47                         false,
48                         "\r\n",
49                         "\\r\n",
50                 },
51                 {
52                         "\\r\\n (TTY)",
53                         true,
54                         "\r\n",
55                         "\x1B[35m\\r\x1B[0m\n",
56                 },
57
58                 {
59                         "binary",
60                         false,
61                         "\xD6\x24\xA4\x45\xA2\x68\xD3\x0E\xD4\xC7\xC3\x1F",
62                         "\xD6$\xA4E\xA2h\xD3\\x0E\xD4\xC7\xC3\\x1F",
63                 },
64                 {
65                         "binary (TTY)",
66                         true,
67                         "\xD6\x24\xA4\x45\xA2\x68\xD3\x0E\xD4\xC7\xC3\x1F",
68                         "\xD6$\xA4E\xA2h\xD3\x1B[35m\\x0E\x1B[0m\xD4\xC7\xc3\x1B[35m\\x1F\x1B[0m",
69                 },
70         }
71
72         for _, tc := range tests {
73                 t.Run(tc.name, func(t *testing.T) {
74                         res := EscapeControlCharacters(tc.isTTY, tc.x)
75                         testutil.AssertEqual(t, "res", res, tc.exp)
76                 })
77         }
78 }