xref: /llvm-project/lldb/unittests/Utility/AnsiTerminalTest.cpp (revision 2841cdbfda92b3fb5fbec726f3376b198106d496)
1 //===-- AnsiTerminalTest.cpp ----------------------------------------------===//
2 //
3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4 // See https://llvm.org/LICENSE.txt for license information.
5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6 //
7 //===----------------------------------------------------------------------===//
8 
9 #include "gtest/gtest.h"
10 
11 #include "lldb/Utility/AnsiTerminal.h"
12 
13 using namespace lldb_private;
14 
15 TEST(AnsiTerminal, Empty) { EXPECT_EQ("", ansi::FormatAnsiTerminalCodes("")); }
16 
17 TEST(AnsiTerminal, WhiteSpace) {
18   EXPECT_EQ(" ", ansi::FormatAnsiTerminalCodes(" "));
19   EXPECT_EQ(" ", ansi::StripAnsiTerminalCodes(" "));
20 }
21 
22 TEST(AnsiTerminal, AtEnd) {
23   EXPECT_EQ("abc\x1B[30m",
24             ansi::FormatAnsiTerminalCodes("abc${ansi.fg.black}"));
25 
26   EXPECT_EQ("abc", ansi::StripAnsiTerminalCodes("abc\x1B[30m"));
27 }
28 
29 TEST(AnsiTerminal, AtStart) {
30   EXPECT_EQ("\x1B[30mabc",
31             ansi::FormatAnsiTerminalCodes("${ansi.fg.black}abc"));
32 
33   EXPECT_EQ("abc", ansi::StripAnsiTerminalCodes("\x1B[30mabc"));
34 }
35 
36 TEST(AnsiTerminal, KnownPrefix) {
37   EXPECT_EQ("${ansi.fg.redish}abc",
38             ansi::FormatAnsiTerminalCodes("${ansi.fg.redish}abc"));
39 }
40 
41 TEST(AnsiTerminal, Unknown) {
42   EXPECT_EQ("${ansi.fg.foo}abc",
43             ansi::FormatAnsiTerminalCodes("${ansi.fg.foo}abc"));
44 }
45 
46 TEST(AnsiTerminal, Incomplete) {
47   EXPECT_EQ("abc${ansi.", ansi::FormatAnsiTerminalCodes("abc${ansi."));
48 }
49 
50 TEST(AnsiTerminal, Twice) {
51   EXPECT_EQ("\x1B[30m\x1B[31mabc",
52             ansi::FormatAnsiTerminalCodes("${ansi.fg.black}${ansi.fg.red}abc"));
53 
54   EXPECT_EQ("abc", ansi::StripAnsiTerminalCodes("\x1B[30m\x1B[31mabc"));
55 }
56 
57 TEST(AnsiTerminal, Basic) {
58   EXPECT_EQ(
59       "abc\x1B[31mabc\x1B[0mabc",
60       ansi::FormatAnsiTerminalCodes("abc${ansi.fg.red}abc${ansi.normal}abc"));
61 
62   EXPECT_EQ("abcabcabc",
63             ansi::StripAnsiTerminalCodes("abc\x1B[31mabc\x1B[0mabc"));
64 }
65 
66 TEST(AnsiTerminal, InvalidEscapeCode) {
67   EXPECT_EQ("abc\x1B[31kabcabc",
68             ansi::StripAnsiTerminalCodes("abc\x1B[31kabc\x1B[0mabc"));
69 }
70