forked from OSchip/llvm-project
160 lines
6.8 KiB
C++
160 lines
6.8 KiB
C++
//===-- FormattersContainerTests.cpp --------------------------------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#include "lldb/DataFormatters/FormattersContainer.h"
|
|
|
|
#include "gtest/gtest.h"
|
|
|
|
using namespace lldb;
|
|
using namespace lldb_private;
|
|
|
|
// All the prefixes that the exact name matching will strip from the type.
|
|
static const std::vector<std::string> exact_name_prefixes = {
|
|
"", // no prefix.
|
|
"class ", "struct ", "union ", "enum ",
|
|
};
|
|
|
|
// TypeMatcher that uses a exact type name string that needs to be matched.
|
|
TEST(TypeMatcherTests, ExactName) {
|
|
for (const std::string &prefix : exact_name_prefixes) {
|
|
SCOPED_TRACE("Prefix: " + prefix);
|
|
|
|
TypeMatcher matcher(ConstString(prefix + "Name"));
|
|
EXPECT_TRUE(matcher.Matches(ConstString("class Name")));
|
|
EXPECT_TRUE(matcher.Matches(ConstString("struct Name")));
|
|
EXPECT_TRUE(matcher.Matches(ConstString("union Name")));
|
|
EXPECT_TRUE(matcher.Matches(ConstString("enum Name")));
|
|
EXPECT_TRUE(matcher.Matches(ConstString("Name")));
|
|
|
|
EXPECT_FALSE(matcher.Matches(ConstString("Name ")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString("ame")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString("Nam")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString("am")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString("a")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString(" ")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString("class N")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString("class ")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString("class")));
|
|
}
|
|
}
|
|
|
|
// TypeMatcher that uses a regex to match a type name.
|
|
TEST(TypeMatcherTests, RegexName) {
|
|
TypeMatcher matcher(RegularExpression("^a[a-z]c$"));
|
|
EXPECT_TRUE(matcher.Matches(ConstString("abc")));
|
|
EXPECT_TRUE(matcher.Matches(ConstString("azc")));
|
|
|
|
// FIXME: This isn't consistent with the 'exact' type name matches above.
|
|
EXPECT_FALSE(matcher.Matches(ConstString("class abc")));
|
|
|
|
EXPECT_FALSE(matcher.Matches(ConstString("abbc")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString(" abc")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString("abc ")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString(" abc ")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString("XabcX")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString("ac")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString("a[a-z]c")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString("aAc")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString("ABC")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString("")));
|
|
}
|
|
|
|
// TypeMatcher that only searches the type name.
|
|
TEST(TypeMatcherTests, RegexMatchPart) {
|
|
TypeMatcher matcher(RegularExpression("a[a-z]c"));
|
|
EXPECT_TRUE(matcher.Matches(ConstString("class abc")));
|
|
EXPECT_TRUE(matcher.Matches(ConstString("abc")));
|
|
EXPECT_TRUE(matcher.Matches(ConstString(" abc ")));
|
|
EXPECT_TRUE(matcher.Matches(ConstString("azc")));
|
|
EXPECT_TRUE(matcher.Matches(ConstString("abc ")));
|
|
EXPECT_TRUE(matcher.Matches(ConstString(" abc ")));
|
|
EXPECT_TRUE(matcher.Matches(ConstString(" abc")));
|
|
EXPECT_TRUE(matcher.Matches(ConstString("XabcX")));
|
|
|
|
EXPECT_FALSE(matcher.Matches(ConstString("abbc")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString("ac")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString("a[a-z]c")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString("aAc")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString("ABC")));
|
|
EXPECT_FALSE(matcher.Matches(ConstString("")));
|
|
}
|
|
|
|
// GetMatchString for exact type name matchers.
|
|
TEST(TypeMatcherTests, GetMatchStringExactName) {
|
|
EXPECT_EQ(TypeMatcher(ConstString("aa")).GetMatchString(), "aa");
|
|
EXPECT_EQ(TypeMatcher(ConstString("")).GetMatchString(), "");
|
|
EXPECT_EQ(TypeMatcher(ConstString("[a]")).GetMatchString(), "[a]");
|
|
}
|
|
|
|
// GetMatchString for regex matchers.
|
|
TEST(TypeMatcherTests, GetMatchStringRegex) {
|
|
EXPECT_EQ(TypeMatcher(RegularExpression("aa")).GetMatchString(), "aa");
|
|
EXPECT_EQ(TypeMatcher(RegularExpression("")).GetMatchString(), "");
|
|
EXPECT_EQ(TypeMatcher(RegularExpression("[a]")).GetMatchString(), "[a]");
|
|
}
|
|
|
|
// GetMatchString for regex matchers.
|
|
TEST(TypeMatcherTests, CreatedBySameMatchString) {
|
|
TypeMatcher empty_str(ConstString(""));
|
|
TypeMatcher empty_regex(RegularExpression(""));
|
|
EXPECT_TRUE(empty_str.CreatedBySameMatchString(empty_str));
|
|
EXPECT_TRUE(empty_str.CreatedBySameMatchString(empty_regex));
|
|
|
|
TypeMatcher a_str(ConstString("a"));
|
|
TypeMatcher a_regex(RegularExpression("a"));
|
|
EXPECT_TRUE(a_str.CreatedBySameMatchString(a_str));
|
|
EXPECT_TRUE(a_str.CreatedBySameMatchString(a_regex));
|
|
|
|
TypeMatcher digit_str(ConstString("[0-9]"));
|
|
TypeMatcher digit_regex(RegularExpression("[0-9]"));
|
|
EXPECT_TRUE(digit_str.CreatedBySameMatchString(digit_str));
|
|
EXPECT_TRUE(digit_str.CreatedBySameMatchString(digit_regex));
|
|
|
|
EXPECT_FALSE(empty_str.CreatedBySameMatchString(a_str));
|
|
EXPECT_FALSE(empty_str.CreatedBySameMatchString(a_regex));
|
|
EXPECT_FALSE(empty_str.CreatedBySameMatchString(digit_str));
|
|
EXPECT_FALSE(empty_str.CreatedBySameMatchString(digit_regex));
|
|
|
|
EXPECT_FALSE(empty_regex.CreatedBySameMatchString(a_str));
|
|
EXPECT_FALSE(empty_regex.CreatedBySameMatchString(a_regex));
|
|
EXPECT_FALSE(empty_regex.CreatedBySameMatchString(digit_str));
|
|
EXPECT_FALSE(empty_regex.CreatedBySameMatchString(digit_regex));
|
|
|
|
EXPECT_FALSE(a_str.CreatedBySameMatchString(empty_str));
|
|
EXPECT_FALSE(a_str.CreatedBySameMatchString(empty_regex));
|
|
EXPECT_FALSE(a_str.CreatedBySameMatchString(digit_str));
|
|
EXPECT_FALSE(a_str.CreatedBySameMatchString(digit_regex));
|
|
|
|
EXPECT_FALSE(a_regex.CreatedBySameMatchString(empty_str));
|
|
EXPECT_FALSE(a_regex.CreatedBySameMatchString(empty_regex));
|
|
EXPECT_FALSE(a_regex.CreatedBySameMatchString(digit_str));
|
|
EXPECT_FALSE(a_regex.CreatedBySameMatchString(digit_regex));
|
|
|
|
EXPECT_FALSE(digit_str.CreatedBySameMatchString(empty_str));
|
|
EXPECT_FALSE(digit_str.CreatedBySameMatchString(empty_regex));
|
|
EXPECT_FALSE(digit_str.CreatedBySameMatchString(a_str));
|
|
EXPECT_FALSE(digit_str.CreatedBySameMatchString(a_regex));
|
|
|
|
EXPECT_FALSE(digit_regex.CreatedBySameMatchString(empty_str));
|
|
EXPECT_FALSE(digit_regex.CreatedBySameMatchString(empty_regex));
|
|
EXPECT_FALSE(digit_regex.CreatedBySameMatchString(a_str));
|
|
EXPECT_FALSE(digit_regex.CreatedBySameMatchString(a_regex));
|
|
}
|
|
|
|
// Test CreatedBySameMatchString with stripped exact name prefixes.
|
|
TEST(TypeMatcherTests, CreatedBySameMatchStringExactNamePrefixes) {
|
|
for (const std::string &prefix : exact_name_prefixes) {
|
|
SCOPED_TRACE("Prefix: " + prefix);
|
|
TypeMatcher with_prefix(ConstString(prefix + "Name"));
|
|
TypeMatcher without_prefix(RegularExpression(""));
|
|
|
|
EXPECT_TRUE(with_prefix.CreatedBySameMatchString(with_prefix));
|
|
EXPECT_TRUE(without_prefix.CreatedBySameMatchString(without_prefix));
|
|
}
|
|
}
|