32#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
33#define GOOGLETEST_INCLUDE_GTEST_GTEST_TYPED_TEST_H_
49 typedef std::list<T> List;
70 TypeParam n = this->value_;
74 n += TestFixture::shared_;
78 typename TestFixture::List values;
148 DoesBlah, HasPropertyA);
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(), ""); \
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(), ""); \
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
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
#define REGISTER_TYPED_TEST_SUITE_P(SuiteName,...)
#define TYPED_TEST_SUITE_P(SuiteName)
#define TYPED_TEST_P(SuiteName, TestName)
#define INSTANTIATE_TYPED_TEST_SUITE_P(Prefix, SuiteName, Types,...)
#define TYPED_TEST(CaseName, TestName)
#define TYPED_TEST_SUITE(CaseName, Types,...)
testing::Types< VeryLoooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooooogName, int *, MyArray< bool, 42 > > MyTypes