34#ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
35#define GOOGLETEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
67TEST_P(FooTest, HasBlahBlah) {
97 Values(
"meeny",
"miny",
"moe"));
118const char* pets[] = {
"cat",
"dog"};
225template <
typename T,
typename IncrementT>
233 return Range(start, end, 1);
291template <
typename ForwardIterator>
292internal::ParamGenerator<
293 typename std::iterator_traits<ForwardIterator>::value_type>
294ValuesIn(ForwardIterator begin, ForwardIterator end) {
295 typedef typename std::iterator_traits<ForwardIterator>::value_type
ParamType;
300template <
typename T,
size_t N>
305template <
class Container>
307 const Container& container) {
308 return ValuesIn(container.begin(), container.end());
331template <
typename... T>
357 return Values(
false,
true);
404template <
typename... Generator>
409#define TEST_P(test_suite_name, test_name) \
410 class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \
411 : public test_suite_name { \
413 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \
414 void TestBody() override; \
417 static int AddToRegistry() { \
418 ::testing::UnitTest::GetInstance() \
419 ->parameterized_test_registry() \
420 .GetTestSuitePatternHolder<test_suite_name>( \
421 GTEST_STRINGIFY_(test_suite_name), \
422 ::testing::internal::CodeLocation(__FILE__, __LINE__)) \
424 GTEST_STRINGIFY_(test_suite_name), GTEST_STRINGIFY_(test_name), \
425 new ::testing::internal::TestMetaFactory<GTEST_TEST_CLASS_NAME_( \
426 test_suite_name, test_name)>(), \
427 ::testing::internal::CodeLocation(__FILE__, __LINE__)); \
430 static int gtest_registering_dummy_ GTEST_ATTRIBUTE_UNUSED_; \
431 GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \
434 int GTEST_TEST_CLASS_NAME_(test_suite_name, \
435 test_name)::gtest_registering_dummy_ = \
436 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \
437 void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody()
452#define GTEST_EXPAND_(arg) arg
453#define GTEST_GET_FIRST_(first, ...) first
454#define GTEST_GET_SECOND_(first, second, ...) second
456#define INSTANTIATE_TEST_SUITE_P(prefix, test_suite_name, ...) \
457 static ::testing::internal::ParamGenerator<test_suite_name::ParamType> \
458 gtest_##prefix##test_suite_name##_EvalGenerator_() { \
459 return GTEST_EXPAND_(GTEST_GET_FIRST_(__VA_ARGS__, DUMMY_PARAM_)); \
461 static ::std::string gtest_##prefix##test_suite_name##_EvalGenerateName_( \
462 const ::testing::TestParamInfo<test_suite_name::ParamType>& info) { \
463 if (::testing::internal::AlwaysFalse()) { \
464 ::testing::internal::TestNotEmpty(GTEST_EXPAND_(GTEST_GET_SECOND_( \
466 ::testing::internal::DefaultParamName<test_suite_name::ParamType>, \
468 auto t = std::make_tuple(__VA_ARGS__); \
469 static_assert(std::tuple_size<decltype(t)>::value <= 2, \
472 return ((GTEST_EXPAND_(GTEST_GET_SECOND_( \
474 ::testing::internal::DefaultParamName<test_suite_name::ParamType>, \
475 DUMMY_PARAM_))))(info); \
477 static int gtest_##prefix##test_suite_name##_dummy_ \
478 GTEST_ATTRIBUTE_UNUSED_ = \
479 ::testing::UnitTest::GetInstance() \
480 ->parameterized_test_registry() \
481 .GetTestSuitePatternHolder<test_suite_name>( \
482 GTEST_STRINGIFY_(test_suite_name), \
483 ::testing::internal::CodeLocation(__FILE__, __LINE__)) \
484 ->AddTestSuiteInstantiation( \
485 GTEST_STRINGIFY_(prefix), \
486 >est_##prefix##test_suite_name##_EvalGenerator_, \
487 >est_##prefix##test_suite_name##_EvalGenerateName_, \
492#define GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(T) \
493 namespace gtest_do_not_use_outside_namespace_scope {} \
494 static const ::testing::internal::MarkAsIgnored gtest_allow_ignore_##T( \
498#ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
499#define INSTANTIATE_TEST_CASE_P \
500 static_assert(::testing::internal::InstantiateTestCase_P_IsDeprecated(), \
502 INSTANTIATE_TEST_SUITE_P
#define TEST_F(test_fixture, test_name)
#define EXPECT_TRUE(condition)
#define TEST_P(test_suite_name, test_name)
#define INSTANTIATE_TEST_SUITE_P(prefix, test_suite_name,...)
internal::ParamGenerator< bool > Bool()
internal::ParamGenerator< typename std::iterator_traits< ForwardIterator >::value_type > ValuesIn(ForwardIterator begin, ForwardIterator end)
internal::ParamGenerator< T > Range(T start, T end, IncrementT step)
internal::ParamGenerator< typename Container::value_type > ValuesIn(const Container &container)
internal::CartesianProductHolder< Generator... > Combine(const Generator &... g)
internal::ValueArray< T... > Values(T... v)