brintos

brintos / llvm-project-archived public Read only

0
0
Text · 7.6 KiB · 41b01ad Raw
168 lines · cpp
1//===-- FormattersContainerTests.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 "lldb/DataFormatters/FormattersContainer.h"10#include "lldb/DataFormatters/FormatClasses.h"11 12#include "gtest/gtest.h"13 14using namespace lldb;15using namespace lldb_private;16 17// Creates a dummy candidate with just a type name in order to test the string18// matching (exact name match and regex match) paths.19FormattersMatchCandidate CandidateFromTypeName(const char *type_name) {20  return FormattersMatchCandidate(ConstString(type_name), nullptr, TypeImpl(),21                                  FormattersMatchCandidate::Flags());22}23 24// All the prefixes that the exact name matching will strip from the type.25static const std::vector<std::string> exact_name_prefixes = {26    "", // no prefix.27    "class ", "struct ", "union ", "enum ",28};29 30// TypeMatcher that uses a exact type name string that needs to be matched.31TEST(TypeMatcherTests, ExactName) {32  for (const std::string &prefix : exact_name_prefixes) {33    SCOPED_TRACE("Prefix: " + prefix);34 35    TypeMatcher matcher(ConstString(prefix + "Name"));36    EXPECT_TRUE(matcher.Matches(CandidateFromTypeName("class Name")));37    EXPECT_TRUE(matcher.Matches(CandidateFromTypeName("struct Name")));38    EXPECT_TRUE(matcher.Matches(CandidateFromTypeName("union Name")));39    EXPECT_TRUE(matcher.Matches(CandidateFromTypeName("enum Name")));40    EXPECT_TRUE(matcher.Matches(CandidateFromTypeName("Name")));41 42    EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("Name ")));43    EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("ame")));44    EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("Nam")));45    EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("am")));46    EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("a")));47    EXPECT_FALSE(matcher.Matches(CandidateFromTypeName(" ")));48    EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("class N")));49    EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("class ")));50    EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("class")));51  }52}53 54// TypeMatcher that uses a regex to match a type name.55TEST(TypeMatcherTests, RegexName) {56  TypeMatcher matcher(RegularExpression("^a[a-z]c$"));57  EXPECT_TRUE(matcher.Matches(CandidateFromTypeName("abc")));58  EXPECT_TRUE(matcher.Matches(CandidateFromTypeName("azc")));59 60  // FIXME: This isn't consistent with the 'exact' type name matches above.61  EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("class abc")));62 63  EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("abbc")));64  EXPECT_FALSE(matcher.Matches(CandidateFromTypeName(" abc")));65  EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("abc ")));66  EXPECT_FALSE(matcher.Matches(CandidateFromTypeName(" abc ")));67  EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("XabcX")));68  EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("ac")));69  EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("a[a-z]c")));70  EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("aAc")));71  EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("ABC")));72  EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("")));73}74 75// TypeMatcher that only searches the type name.76TEST(TypeMatcherTests, RegexMatchPart) {77  TypeMatcher matcher(RegularExpression("a[a-z]c"));78  EXPECT_TRUE(matcher.Matches(CandidateFromTypeName("class abc")));79  EXPECT_TRUE(matcher.Matches(CandidateFromTypeName("abc")));80  EXPECT_TRUE(matcher.Matches(CandidateFromTypeName(" abc ")));81  EXPECT_TRUE(matcher.Matches(CandidateFromTypeName("azc")));82  EXPECT_TRUE(matcher.Matches(CandidateFromTypeName("abc ")));83  EXPECT_TRUE(matcher.Matches(CandidateFromTypeName(" abc ")));84  EXPECT_TRUE(matcher.Matches(CandidateFromTypeName(" abc")));85  EXPECT_TRUE(matcher.Matches(CandidateFromTypeName("XabcX")));86 87  EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("abbc")));88  EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("ac")));89  EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("a[a-z]c")));90  EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("aAc")));91  EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("ABC")));92  EXPECT_FALSE(matcher.Matches(CandidateFromTypeName("")));93}94 95// GetMatchString for exact type name matchers.96TEST(TypeMatcherTests, GetMatchStringExactName) {97  EXPECT_EQ(TypeMatcher(ConstString("aa")).GetMatchString(), "aa");98  EXPECT_EQ(TypeMatcher(ConstString("")).GetMatchString(), "");99  EXPECT_EQ(TypeMatcher(ConstString("[a]")).GetMatchString(), "[a]");100}101 102// GetMatchString for regex matchers.103TEST(TypeMatcherTests, GetMatchStringRegex) {104  EXPECT_EQ(TypeMatcher(RegularExpression("aa")).GetMatchString(), "aa");105  EXPECT_EQ(TypeMatcher(RegularExpression("")).GetMatchString(), "");106  EXPECT_EQ(TypeMatcher(RegularExpression("[a]")).GetMatchString(), "[a]");107}108 109// GetMatchString for regex matchers.110TEST(TypeMatcherTests, CreatedBySameMatchString) {111  TypeMatcher empty_str(ConstString(""));112  TypeMatcher empty_regex(RegularExpression(""));113  EXPECT_TRUE(empty_str.CreatedBySameMatchString(empty_str));114  EXPECT_TRUE(empty_str.CreatedBySameMatchString(empty_regex));115 116  TypeMatcher a_str(ConstString("a"));117  TypeMatcher a_regex(RegularExpression("a"));118  EXPECT_TRUE(a_str.CreatedBySameMatchString(a_str));119  EXPECT_TRUE(a_str.CreatedBySameMatchString(a_regex));120 121  TypeMatcher digit_str(ConstString("[0-9]"));122  TypeMatcher digit_regex(RegularExpression("[0-9]"));123  EXPECT_TRUE(digit_str.CreatedBySameMatchString(digit_str));124  EXPECT_TRUE(digit_str.CreatedBySameMatchString(digit_regex));125 126  EXPECT_FALSE(empty_str.CreatedBySameMatchString(a_str));127  EXPECT_FALSE(empty_str.CreatedBySameMatchString(a_regex));128  EXPECT_FALSE(empty_str.CreatedBySameMatchString(digit_str));129  EXPECT_FALSE(empty_str.CreatedBySameMatchString(digit_regex));130 131  EXPECT_FALSE(empty_regex.CreatedBySameMatchString(a_str));132  EXPECT_FALSE(empty_regex.CreatedBySameMatchString(a_regex));133  EXPECT_FALSE(empty_regex.CreatedBySameMatchString(digit_str));134  EXPECT_FALSE(empty_regex.CreatedBySameMatchString(digit_regex));135 136  EXPECT_FALSE(a_str.CreatedBySameMatchString(empty_str));137  EXPECT_FALSE(a_str.CreatedBySameMatchString(empty_regex));138  EXPECT_FALSE(a_str.CreatedBySameMatchString(digit_str));139  EXPECT_FALSE(a_str.CreatedBySameMatchString(digit_regex));140 141  EXPECT_FALSE(a_regex.CreatedBySameMatchString(empty_str));142  EXPECT_FALSE(a_regex.CreatedBySameMatchString(empty_regex));143  EXPECT_FALSE(a_regex.CreatedBySameMatchString(digit_str));144  EXPECT_FALSE(a_regex.CreatedBySameMatchString(digit_regex));145 146  EXPECT_FALSE(digit_str.CreatedBySameMatchString(empty_str));147  EXPECT_FALSE(digit_str.CreatedBySameMatchString(empty_regex));148  EXPECT_FALSE(digit_str.CreatedBySameMatchString(a_str));149  EXPECT_FALSE(digit_str.CreatedBySameMatchString(a_regex));150 151  EXPECT_FALSE(digit_regex.CreatedBySameMatchString(empty_str));152  EXPECT_FALSE(digit_regex.CreatedBySameMatchString(empty_regex));153  EXPECT_FALSE(digit_regex.CreatedBySameMatchString(a_str));154  EXPECT_FALSE(digit_regex.CreatedBySameMatchString(a_regex));155}156 157// Test CreatedBySameMatchString with stripped exact name prefixes.158TEST(TypeMatcherTests, CreatedBySameMatchStringExactNamePrefixes) {159  for (const std::string &prefix : exact_name_prefixes) {160    SCOPED_TRACE("Prefix: " + prefix);161    TypeMatcher with_prefix(ConstString(prefix + "Name"));162    TypeMatcher without_prefix(RegularExpression(""));163 164    EXPECT_TRUE(with_prefix.CreatedBySameMatchString(with_prefix));165    EXPECT_TRUE(without_prefix.CreatedBySameMatchString(without_prefix));166  }167}168