Get rid of redundant filter matching code

This commit is contained in:
Hossein Ghahramanzadeh 2021-10-17 18:53:08 +02:00
parent f5b4efef5f
commit f20688737a
2 changed files with 1 additions and 52 deletions

View File

@ -390,10 +390,6 @@ class GTEST_API_ UnitTestOptions {
// This function is useful as an __except condition. // This function is useful as an __except condition.
static int GTestShouldProcessSEH(DWORD exception_code); static int GTestShouldProcessSEH(DWORD exception_code);
#endif // GTEST_OS_WINDOWS #endif // GTEST_OS_WINDOWS
// Returns true if "name" matches the ':' separated list of glob-style
// filters in "filter".
static bool MatchesFilter(const std::string& name, const char* filter);
}; };
// Returns the current application's name, removing directory path if that // Returns the current application's name, removing directory path if that

View File

@ -723,31 +723,6 @@ static bool PatternMatchesString(const std::string& name_str,
return true; return true;
} }
bool UnitTestOptions::MatchesFilter(const std::string& name_str,
const char* filter) {
// The filter is a list of patterns separated by colons (:).
const char* pattern = filter;
while (true) {
// Find the bounds of this pattern.
const char* const next_sep = strchr(pattern, ':');
const char* const pattern_end =
next_sep != nullptr ? next_sep : pattern + strlen(pattern);
// Check if this pattern matches name_str.
if (PatternMatchesString(name_str, pattern, pattern_end)) {
return true;
}
// Give up on this pattern. However, if we found a pattern separator (:),
// advance to the next pattern (skipping over the separator) and restart.
if (next_sep == nullptr) {
return false;
}
pattern = next_sep + 1;
}
return true;
}
class Filter { class Filter {
std::vector<std::string> patterns_; std::vector<std::string> patterns_;
@ -830,31 +805,9 @@ class PositiveAndNegativeFilter {
// suite name and the test name. // suite name and the test name.
bool UnitTestOptions::FilterMatchesTest(const std::string& test_suite_name, bool UnitTestOptions::FilterMatchesTest(const std::string& test_suite_name,
const std::string& test_name) { const std::string& test_name) {
const std::string& full_name = test_suite_name + "." + test_name.c_str();
// Split --gtest_filter at '-', if there is one, to separate into // Split --gtest_filter at '-', if there is one, to separate into
// positive filter and negative filter portions // positive filter and negative filter portions
std::string str = GTEST_FLAG_GET(filter); return PositiveAndNegativeFilter{GTEST_FLAG_GET(filter)}.MatchesTest(test_suite_name, test_name);
const char* const p = str.c_str();
const char* const dash = strchr(p, '-');
std::string positive;
std::string negative;
if (dash == nullptr) {
positive = str.c_str(); // Whole string is a positive filter
negative = "";
} else {
positive = std::string(p, dash); // Everything up to the dash
negative = std::string(dash + 1); // Everything after the dash
if (positive.empty()) {
// Treat '-test1' as the same as '*-test1'
positive = kUniversalFilter;
}
}
// A filter is a colon-separated list of patterns. It matches a
// test if any pattern in it matches the test.
return (MatchesFilter(full_name, positive.c_str()) &&
!MatchesFilter(full_name, negative.c_str()));
} }
#if GTEST_HAS_SEH #if GTEST_HAS_SEH