diff options
author | kosak <kosak@google.com> | 2014-11-17 02:28:09 +0000 |
---|---|---|
committer | kosak <kosak@google.com> | 2014-11-17 02:28:09 +0000 |
commit | e330b754cbd4b23a160521e05ff1014ed576378b (patch) | |
tree | 28b5e9e95b8aae5655a917c2e4ef9c0e7dbb989d | |
parent | 074ed8c8ea5732a71748e41e95e2d7e17d782302 (diff) | |
download | googletest-e330b754cbd4b23a160521e05ff1014ed576378b.tar.gz googletest-e330b754cbd4b23a160521e05ff1014ed576378b.tar.bz2 googletest-e330b754cbd4b23a160521e05ff1014ed576378b.zip |
Strip trailing whitespace when stringifying type lists.
-rw-r--r-- | include/gtest/internal/gtest-internal.h | 2 | ||||
-rw-r--r-- | include/gtest/internal/gtest-port.h | 7 | ||||
-rw-r--r-- | src/gtest-typed-test.cc | 22 | ||||
-rw-r--r-- | test/gtest-typed-test_test.cc | 19 |
4 files changed, 42 insertions, 8 deletions
diff --git a/include/gtest/internal/gtest-internal.h b/include/gtest/internal/gtest-internal.h index 21a0f567..ba7175cf 100644 --- a/include/gtest/internal/gtest-internal.h +++ b/include/gtest/internal/gtest-internal.h @@ -612,7 +612,7 @@ class TypeParameterizedTest { MakeAndRegisterTestInfo( (std::string(prefix) + (prefix[0] == '\0' ? "" : "/") + case_name + "/" + StreamableToString(index)).c_str(), - GetPrefixUntilComma(test_names).c_str(), + StripTrailingSpaces(GetPrefixUntilComma(test_names)).c_str(), GetTypeName<Type>().c_str(), NULL, // No value parameter. GetTypeId<FixtureClass>(), diff --git a/include/gtest/internal/gtest-port.h b/include/gtest/internal/gtest-port.h index e7ddda5a..9e0d6ef2 100644 --- a/include/gtest/internal/gtest-port.h +++ b/include/gtest/internal/gtest-port.h @@ -2215,6 +2215,13 @@ inline char ToUpper(char ch) { return static_cast<char>(toupper(static_cast<unsigned char>(ch))); } +inline std::string StripTrailingSpaces(std::string str) { + std::string::iterator it = str.end(); + while (it != str.begin() && IsSpace(*--it)) + it = str.erase(it); + return str; +} + // The testing::internal::posix namespace holds wrappers for common // POSIX functions. These wrappers hide the differences between // Windows/MSVC and POSIX systems. Since some compilers define these diff --git a/src/gtest-typed-test.cc b/src/gtest-typed-test.cc index f0079f40..e11d050a 100644 --- a/src/gtest-typed-test.cc +++ b/src/gtest-typed-test.cc @@ -45,6 +45,15 @@ static const char* SkipSpaces(const char* str) { return str; } +static std::vector<std::string> SplitIntoTestNames(const char* src) { + std::vector<std::string> name_vec; + src = SkipSpaces(src); + for (; src != NULL; src = SkipComma(src)) { + name_vec.push_back(StripTrailingSpaces(GetPrefixUntilComma(src))); + } + return name_vec; +} + // Verifies that registered_tests match the test names in // defined_test_names_; returns registered_tests if successful, or // aborts the program otherwise. @@ -53,15 +62,14 @@ const char* TypedTestCasePState::VerifyRegisteredTestNames( typedef ::std::set<const char*>::const_iterator DefinedTestIter; registered_ = true; - // Skip initial whitespace in registered_tests since some - // preprocessors prefix stringizied literals with whitespace. - registered_tests = SkipSpaces(registered_tests); + std::vector<std::string> name_vec = SplitIntoTestNames(registered_tests); Message errors; - ::std::set<std::string> tests; - for (const char* names = registered_tests; names != NULL; - names = SkipComma(names)) { - const std::string name = GetPrefixUntilComma(names); + + std::set<std::string> tests; + for (std::vector<std::string>::const_iterator name_it = name_vec.begin(); + name_it != name_vec.end(); ++name_it) { + const std::string& name = *name_it; if (tests.count(name) != 0) { errors << "Test " << name << " is listed more than once.\n"; continue; diff --git a/test/gtest-typed-test_test.cc b/test/gtest-typed-test_test.cc index c3e66c2d..93628ba0 100644 --- a/test/gtest-typed-test_test.cc +++ b/test/gtest-typed-test_test.cc @@ -344,6 +344,25 @@ REGISTER_TYPED_TEST_CASE_P(NumericTest, typedef Types<int, double> NumericTypes; INSTANTIATE_TYPED_TEST_CASE_P(My, NumericTest, NumericTypes); +static const char* GetTestName() { + return testing::UnitTest::GetInstance()->current_test_info()->name(); +} +// Test the stripping of space from test names +template <typename T> class TrimmedTest : public Test { }; +TYPED_TEST_CASE_P(TrimmedTest); +TYPED_TEST_P(TrimmedTest, Test1) { EXPECT_STREQ("Test1", GetTestName()); } +TYPED_TEST_P(TrimmedTest, Test2) { EXPECT_STREQ("Test2", GetTestName()); } +TYPED_TEST_P(TrimmedTest, Test3) { EXPECT_STREQ("Test3", GetTestName()); } +TYPED_TEST_P(TrimmedTest, Test4) { EXPECT_STREQ("Test4", GetTestName()); } +TYPED_TEST_P(TrimmedTest, Test5) { EXPECT_STREQ("Test5", GetTestName()); } +REGISTER_TYPED_TEST_CASE_P( + TrimmedTest, + Test1, Test2,Test3 , Test4 ,Test5 ); // NOLINT +template <typename T1, typename T2> struct MyPair {}; +// Be sure to try a type with a comma in its name just in case it matters. +typedef Types<int, double, MyPair<int, int> > TrimTypes; +INSTANTIATE_TYPED_TEST_CASE_P(My, TrimmedTest, TrimTypes); + } // namespace library2 #endif // GTEST_HAS_TYPED_TEST_P |