Add support for ':' in --gtest_filter to gn_unittests
For googletest, the ':' character can be used in either the posivite
or negative filter to separate a list of filters. Not having this in
gn_unittests is unexpected as it make it difficult to ignore multiple
tests suites (e.g. both ExecProcessTest and FormatTest fails when
building and running gn_unittests in Xcode).
Add the support for ':' by introducing another recursive function
PatternListMatchString and an early exit in PatternMatchesString.
Bug: none
Change-Id: I75709fb4c47981a1e9a9e4fb75295804ba87b38f
Reviewed-on: https://gn-review.googlesource.com/c/gn/+/7061
Reviewed-by: Brett Wilson <brettw@chromium.org>
Commit-Queue: Brett Wilson <brettw@chromium.org>
diff --git a/src/util/test/gn_test.cc b/src/util/test/gn_test.cc
index 6b2e26d..32e3c01 100644
--- a/src/util/test/gn_test.cc
+++ b/src/util/test/gn_test.cc
@@ -55,6 +55,7 @@
switch (*pattern) {
case '\0':
case '-':
+ case ':':
return *str == '\0';
case '*':
return (*str != '\0' && PatternMatchesString(pattern, str + 1)) ||
@@ -64,13 +65,25 @@
}
}
+bool PatternListMatchString(const char* pattern, const char* str) {
+ const char* const colon = strchr(pattern, ':');
+ if (PatternMatchesString(pattern, str))
+ return true;
+
+ if (!colon)
+ return false;
+
+ return PatternListMatchString(colon + 1, str);
+}
+
bool TestMatchesFilter(const char* test, const char* filter) {
// Split --gtest_filter at '-' into positive and negative filters.
const char* const dash = strchr(filter, '-');
const char* pos =
dash == filter ? "*" : filter; // Treat '-test1' as '*-test1'
const char* neg = dash ? dash + 1 : "";
- return PatternMatchesString(pos, test) && !PatternMatchesString(neg, test);
+ return PatternListMatchString(pos, test) &&
+ !PatternListMatchString(neg, test);
}
#if defined(OS_WIN)