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)