From 6bfc4b2bd378940fa006bd32b9667ad4137d8f15 Mon Sep 17 00:00:00 2001 From: vladlosev Date: Thu, 22 Oct 2009 01:22:29 +0000 Subject: Prints help when encountering unrecognized Google Test flags. --- src/gtest.cc | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'src') diff --git a/src/gtest.cc b/src/gtest.cc index 5efb5baa..ca27b313 100644 --- a/src/gtest.cc +++ b/src/gtest.cc @@ -4444,6 +4444,33 @@ bool ParseStringFlag(const char* str, const char* flag, String* value) { return true; } +// Determines whether a string pointed by *str has the prefix parameter as +// its prefix and advances it to point past the prefix if it does. +bool SkipPrefix(const char* prefix, const char** str) { + const int prefix_len = strlen(prefix); + + if (strncmp(*str, prefix, prefix_len) != 0) + return false; + + *str += prefix_len; + return true; +} + +// Determines whether a string has a prefix that Google Test uses for its +// flags, i.e., starts with GTEST_FLAG_PREFIX_ or GTEST_FLAG_PREFIX_DASH_. +// If Google Test detects that a command line flag has its prefix but is not +// recognized, it will print its help message. Flags starting with +// GTEST_INTERNAL_PREFIX_ followed by "internal_" are considered Google Test +// internal flags and do not trigger the help message. +bool HasGoogleTestFlagPrefix(const char* str) { + return (SkipPrefix("--", &str) || + SkipPrefix("-", &str) || + SkipPrefix("/", &str)) && + !SkipPrefix(GTEST_FLAG_PREFIX_ "internal_", &str) && + (SkipPrefix(GTEST_FLAG_PREFIX_, &str) || + SkipPrefix(GTEST_FLAG_PREFIX_DASH_, &str)); +} + // Prints a string containing code-encoded text. The following escape // sequences can be used in the string to control the text color: // @@ -4601,7 +4628,10 @@ void ParseGoogleTestFlagsOnlyImpl(int* argc, CharType** argv) { // an element. i--; } else if (arg_string == "--help" || arg_string == "-h" || - arg_string == "-?" || arg_string == "/?") { + arg_string == "-?" || arg_string == "/?" || + HasGoogleTestFlagPrefix(arg)) { + // Both help flag and unrecognized Google Test flags (excluding + // internal ones) trigger help display. g_help_flag = true; } } -- cgit v1.2.3