32 #ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ 33 #define GOOGLETEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_ 46 class FooTest :
public testing::Test {
49 typedef std::list<T> List;
57 typedef testing::Types<char, int, unsigned int> MyTypes;
58 TYPED_TEST_SUITE(FooTest, MyTypes);
66 TYPED_TEST(FooTest, DoesBlah) {
70 TypeParam n = this->value_;
74 n += TestFixture::shared_;
78 typename TestFixture::List values;
83 TYPED_TEST(FooTest, HasPropertyA) { ... }
123 template <
typename T>
124 class FooTest :
public testing::Test {
131 TYPED_TEST_SUITE_P(FooTest);
135 TYPED_TEST_P(FooTest, DoesBlah) {
141 TYPED_TEST_P(FooTest, HasPropertyA) { ... }
147 REGISTER_TYPED_TEST_SUITE_P(FooTest,
148 DoesBlah, HasPropertyA);
158 typedef testing::Types<char, int, unsigned int> MyTypes;
159 INSTANTIATE_TYPED_TEST_SUITE_P(My, FooTest, MyTypes);
172 #include "gtest/internal/gtest-internal.h" 173 #include "gtest/internal/gtest-port.h" 174 #include "gtest/internal/gtest-type-util.h" 182 #define GTEST_TYPE_PARAMS_(TestSuiteName) gtest_type_params_##TestSuiteName##_ 186 #define GTEST_NAME_GENERATOR_(TestSuiteName) \ 187 gtest_type_params_##TestSuiteName##_NameGenerator 189 #define TYPED_TEST_SUITE(CaseName, Types, ...) \ 190 typedef ::testing::internal::GenerateTypeList<Types>::type \ 191 GTEST_TYPE_PARAMS_(CaseName); \ 192 typedef ::testing::internal::NameGeneratorSelector<__VA_ARGS__>::type \ 193 GTEST_NAME_GENERATOR_(CaseName) 195 #define TYPED_TEST(CaseName, TestName) \ 196 static_assert(sizeof(GTEST_STRINGIFY_(TestName)) > 1, \ 197 "test-name must not be empty"); \ 198 template <typename gtest_TypeParam_> \ 199 class GTEST_TEST_CLASS_NAME_(CaseName, TestName) \ 200 : public CaseName<gtest_TypeParam_> { \ 202 typedef CaseName<gtest_TypeParam_> TestFixture; \ 203 typedef gtest_TypeParam_ TypeParam; \ 204 void TestBody() override; \ 206 static bool gtest_##CaseName##_##TestName##_registered_ \ 207 GTEST_ATTRIBUTE_UNUSED_ = ::testing::internal::TypeParameterizedTest< \ 209 ::testing::internal::TemplateSel<GTEST_TEST_CLASS_NAME_(CaseName, \ 211 GTEST_TYPE_PARAMS_( \ 212 CaseName)>::Register("", \ 213 ::testing::internal::CodeLocation( \ 214 __FILE__, __LINE__), \ 215 GTEST_STRINGIFY_(CaseName), \ 216 GTEST_STRINGIFY_(TestName), 0, \ 217 ::testing::internal::GenerateNames< \ 218 GTEST_NAME_GENERATOR_(CaseName), \ 219 GTEST_TYPE_PARAMS_(CaseName)>()); \ 220 template <typename gtest_TypeParam_> \ 221 void GTEST_TEST_CLASS_NAME_(CaseName, \ 222 TestName)<gtest_TypeParam_>::TestBody() 225 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 226 #define TYPED_TEST_CASE \ 227 static_assert(::testing::internal::TypedTestCaseIsDeprecated(), ""); \ 229 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 238 #define GTEST_SUITE_NAMESPACE_(TestSuiteName) gtest_suite_##TestSuiteName##_ 244 #define GTEST_TYPED_TEST_SUITE_P_STATE_(TestSuiteName) \ 245 gtest_typed_test_suite_p_state_##TestSuiteName##_ 251 #define GTEST_REGISTERED_TEST_NAMES_(TestSuiteName) \ 252 gtest_registered_test_names_##TestSuiteName##_ 257 #define TYPED_TEST_SUITE_P(SuiteName) \ 258 static ::testing::internal::TypedTestSuitePState \ 259 GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName) 262 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 263 #define TYPED_TEST_CASE_P \ 264 static_assert(::testing::internal::TypedTestCase_P_IsDeprecated(), ""); \ 266 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 268 #define TYPED_TEST_P(SuiteName, TestName) \ 269 namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \ 270 template <typename gtest_TypeParam_> \ 271 class TestName : public SuiteName<gtest_TypeParam_> { \ 273 typedef SuiteName<gtest_TypeParam_> TestFixture; \ 274 typedef gtest_TypeParam_ TypeParam; \ 275 void TestBody() override; \ 277 static bool gtest_##TestName##_defined_ GTEST_ATTRIBUTE_UNUSED_ = \ 278 GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).AddTestName( \ 279 __FILE__, __LINE__, GTEST_STRINGIFY_(SuiteName), \ 280 GTEST_STRINGIFY_(TestName)); \ 282 template <typename gtest_TypeParam_> \ 283 void GTEST_SUITE_NAMESPACE_( \ 284 SuiteName)::TestName<gtest_TypeParam_>::TestBody() 287 #define REGISTER_TYPED_TEST_SUITE_P(SuiteName, ...) \ 288 namespace GTEST_SUITE_NAMESPACE_(SuiteName) { \ 289 typedef ::testing::internal::Templates<__VA_ARGS__> gtest_AllTests_; \ 291 static const char* const GTEST_REGISTERED_TEST_NAMES_( \ 292 SuiteName) GTEST_ATTRIBUTE_UNUSED_ = \ 293 GTEST_TYPED_TEST_SUITE_P_STATE_(SuiteName).VerifyRegisteredTestNames( \ 294 GTEST_STRINGIFY_(SuiteName), __FILE__, __LINE__, #__VA_ARGS__) 297 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 298 #define REGISTER_TYPED_TEST_CASE_P \ 299 static_assert(::testing::internal::RegisterTypedTestCase_P_IsDeprecated(), \ 301 REGISTER_TYPED_TEST_SUITE_P 302 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 304 #define INSTANTIATE_TYPED_TEST_SUITE_P(Prefix, SuiteName, Types, ...) \ 305 static_assert(sizeof(GTEST_STRINGIFY_(Prefix)) > 1, \ 306 "test-suit-prefix must not be empty"); \ 307 static bool gtest_##Prefix##_##SuiteName GTEST_ATTRIBUTE_UNUSED_ = \ 308 ::testing::internal::TypeParameterizedTestSuite< \ 309 SuiteName, GTEST_SUITE_NAMESPACE_(SuiteName)::gtest_AllTests_, \ 310 ::testing::internal::GenerateTypeList<Types>::type>:: \ 311 Register(GTEST_STRINGIFY_(Prefix), \ 312 ::testing::internal::CodeLocation(__FILE__, __LINE__), \ 313 >EST_TYPED_TEST_SUITE_P_STATE_(SuiteName), \ 314 GTEST_STRINGIFY_(SuiteName), \ 315 GTEST_REGISTERED_TEST_NAMES_(SuiteName), \ 316 ::testing::internal::GenerateNames< \ 317 ::testing::internal::NameGeneratorSelector< \ 318 __VA_ARGS__>::type, \ 319 ::testing::internal::GenerateTypeList<Types>::type>()) 322 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 323 #define INSTANTIATE_TYPED_TEST_CASE_P \ 325 ::testing::internal::InstantiateTypedTestCase_P_IsDeprecated(), ""); \ 326 INSTANTIATE_TYPED_TEST_SUITE_P 327 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_ 329 #endif // GOOGLETEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_