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