diff options
author | Abseil Team <absl-team@google.com> | 2018-08-28 13:40:18 (GMT) |
---|---|---|
committer | Gennadiy Civil <misterg@google.com> | 2018-08-28 20:53:45 (GMT) |
commit | 03867b5389516a0f185af52672cf5472fa0c159c (patch) | |
tree | fd9829743c961c67920d1eeb80ed7486148d63da /googletest/test/gtest-typed-test_test.cc | |
parent | 52f8183e7f3620cf03f321a2624eb0d4f7649f4c (diff) | |
download | googletest-03867b5389516a0f185af52672cf5472fa0c159c.zip googletest-03867b5389516a0f185af52672cf5472fa0c159c.tar.gz googletest-03867b5389516a0f185af52672cf5472fa0c159c.tar.bz2 |
Googletest export
Add the possibility of specifying the name in type parameterized tests.
Similar to how the last parameter of INSTANTIATE_TEST_CASE_P allows to override the name for (non-type) parametrized tests, this adds the possibility of adding a parameter to INSTANTIATE_TYPED_TEST_CASE_P. The argument has to be a class, which contains a static templated function GetName<T>(int), returning the name for type T.
PiperOrigin-RevId: 210532231
Diffstat (limited to 'googletest/test/gtest-typed-test_test.cc')
-rw-r--r-- | googletest/test/gtest-typed-test_test.cc | 74 |
1 files changed, 74 insertions, 0 deletions
diff --git a/googletest/test/gtest-typed-test_test.cc b/googletest/test/gtest-typed-test_test.cc index eddb52b..e9eed63 100644 --- a/googletest/test/gtest-typed-test_test.cc +++ b/googletest/test/gtest-typed-test_test.cc @@ -165,6 +165,40 @@ TYPED_TEST(NumericTest, DefaultIsZero) { } // namespace library1 +// Tests that custom names work. +template <typename T> +class TypedTestWithNames : public Test {}; + +class TypedTestNames { + public: + template <typename T> + static std::string GetName(int i) { + if (testing::internal::IsSame<T, char>::value) { + return std::string("char_") + ::testing::PrintToString(i); + } + if (testing::internal::IsSame<T, int>::value) { + return std::string("int_") + ::testing::PrintToString(i); + } + } +}; + +TYPED_TEST_CASE(TypedTestWithNames, TwoTypes, TypedTestNames); + +TYPED_TEST(TypedTestWithNames, TestCaseName) { + if (testing::internal::IsSame<TypeParam, char>::value) { + EXPECT_STREQ(::testing::UnitTest::GetInstance() + ->current_test_info() + ->test_case_name(), + "TypedTestWithNames/char_0"); + } + if (testing::internal::IsSame<TypeParam, int>::value) { + EXPECT_STREQ(::testing::UnitTest::GetInstance() + ->current_test_info() + ->test_case_name(), + "TypedTestWithNames/int_1"); + } +} + #endif // GTEST_HAS_TYPED_TEST // This #ifdef block tests type-parameterized tests. @@ -265,6 +299,46 @@ REGISTER_TYPED_TEST_CASE_P(DerivedTest, typedef Types<short, long> MyTwoTypes; INSTANTIATE_TYPED_TEST_CASE_P(My, DerivedTest, MyTwoTypes); +// Tests that custom names work with type parametrized tests. We reuse the +// TwoTypes from above here. +template <typename T> +class TypeParametrizedTestWithNames : public Test {}; + +TYPED_TEST_CASE_P(TypeParametrizedTestWithNames); + +TYPED_TEST_P(TypeParametrizedTestWithNames, TestCaseName) { + if (testing::internal::IsSame<TypeParam, char>::value) { + EXPECT_STREQ(::testing::UnitTest::GetInstance() + ->current_test_info() + ->test_case_name(), + "CustomName/TypeParametrizedTestWithNames/p_char_0"); + } + if (testing::internal::IsSame<TypeParam, int>::value) { + EXPECT_STREQ(::testing::UnitTest::GetInstance() + ->current_test_info() + ->test_case_name(), + "CustomName/TypeParametrizedTestWithNames/p_int_1"); + } +} + +REGISTER_TYPED_TEST_CASE_P(TypeParametrizedTestWithNames, TestCaseName); + +class TypeParametrizedTestNames { + public: + template <typename T> + static std::string GetName(int i) { + if (testing::internal::IsSame<T, char>::value) { + return std::string("p_char_") + ::testing::PrintToString(i); + } + if (testing::internal::IsSame<T, int>::value) { + return std::string("p_int_") + ::testing::PrintToString(i); + } + } +}; + +INSTANTIATE_TYPED_TEST_CASE_P(CustomName, TypeParametrizedTestWithNames, + TwoTypes, TypeParametrizedTestNames); + // Tests that multiple TYPED_TEST_CASE_P's can be defined in the same // translation unit. |