brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.9 KiB · cef73ff Raw
119 lines · cpp
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-exception6//7//===----------------------------------------------------------------------===//8 9#include "gtest/gtest.h"10 11#include "lldb/Utility/AnsiTerminal.h"12 13using namespace lldb_private;14 15TEST(AnsiTerminal, Empty) { EXPECT_EQ("", ansi::FormatAnsiTerminalCodes("")); }16 17TEST(AnsiTerminal, WhiteSpace) {18  EXPECT_EQ(" ", ansi::FormatAnsiTerminalCodes(" "));19  EXPECT_EQ(" ", ansi::StripAnsiTerminalCodes(" "));20}21 22TEST(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 29TEST(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 36TEST(AnsiTerminal, KnownPrefix) {37  EXPECT_EQ("${ansi.fg.redish}abc",38            ansi::FormatAnsiTerminalCodes("${ansi.fg.redish}abc"));39}40 41TEST(AnsiTerminal, Unknown) {42  EXPECT_EQ("${ansi.fg.foo}abc",43            ansi::FormatAnsiTerminalCodes("${ansi.fg.foo}abc"));44}45 46TEST(AnsiTerminal, Incomplete) {47  EXPECT_EQ("abc${ansi.", ansi::FormatAnsiTerminalCodes("abc${ansi."));48}49 50TEST(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 57TEST(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 66TEST(AnsiTerminal, InvalidEscapeCode) {67  EXPECT_EQ("abc\x1B[31kabcabc",68            ansi::StripAnsiTerminalCodes("abc\x1B[31kabc\x1B[0mabc"));69}70 71TEST(AnsiTerminal, FindNextAnsiSequenceBasic) {72  auto [left, escape, right] = ansi::FindNextAnsiSequence("foo\x1B[31mbar");73  EXPECT_EQ("foo", left);74  EXPECT_EQ("\x1B[31m", escape);75  EXPECT_EQ("bar", right);76}77 78TEST(AnsiTerminal, FindNextAnsiSequenceIncompleteStart) {79  auto [left, escape, right] =80      ansi::FindNextAnsiSequence("foo\x1B[bar\x1B[31mbaz");81  EXPECT_EQ("foo\x1B[bar", left);82  EXPECT_EQ("\x1B[31m", escape);83  EXPECT_EQ("baz", right);84}85 86TEST(AnsiTerminal, FindNextAnsiSequenceEscapeStart) {87  auto [left, escape, right] = ansi::FindNextAnsiSequence("\x1B[31mfoo");88  EXPECT_EQ("", left);89  EXPECT_EQ("\x1B[31m", escape);90  EXPECT_EQ("foo", right);91}92 93TEST(AnsiTerminal, TrimAndPad) {94  // Test basic ASCII.95  EXPECT_EQ("     ", ansi::TrimAndPad("", 5));96  EXPECT_EQ("foo  ", ansi::TrimAndPad("foo", 5));97  EXPECT_EQ("fooba", ansi::TrimAndPad("fooba", 5));98  EXPECT_EQ("fooba", ansi::TrimAndPad("foobar", 5));99 100  // Simple test that ANSI escape codes don't contribute to the visible width.101  EXPECT_EQ("\x1B[30m     ", ansi::TrimAndPad("\x1B[30m", 5));102  EXPECT_EQ("\x1B[30mfoo  ", ansi::TrimAndPad("\x1B[30mfoo", 5));103  EXPECT_EQ("\x1B[30mfooba", ansi::TrimAndPad("\x1B[30mfooba", 5));104  EXPECT_EQ("\x1B[30mfooba", ansi::TrimAndPad("\x1B[30mfoobar", 5));105 106  // Test that we include as many escape codes as we can.107  EXPECT_EQ("fooba\x1B[30m", ansi::TrimAndPad("fooba\x1B[30m", 5));108  EXPECT_EQ("fooba\x1B[30m\x1B[34m",109            ansi::TrimAndPad("fooba\x1B[30m\x1B[34m", 5));110  EXPECT_EQ("fooba\x1B[30m\x1B[34m",111            ansi::TrimAndPad("fooba\x1B[30m\x1B[34mr", 5));112 113  // Test Unicode.114  EXPECT_EQ("❤️    ", ansi::TrimAndPad("❤️", 5));115  EXPECT_EQ("    ❤️", ansi::TrimAndPad("    ❤️", 5));116  EXPECT_EQ("12❤️4❤️", ansi::TrimAndPad("12❤️4❤️", 5));117  EXPECT_EQ("12❤️45", ansi::TrimAndPad("12❤️45❤️", 5));118}119