37 #ifndef GOOGLETEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
38 #define GOOGLETEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
63 TEST_P(FooTest, DoesBlah) {
70 TEST_P(FooTest, HasBlahBlah) {
100 Values(
"meeny",
"miny",
"moe"));
121 const char* pets[] = {
"cat",
"dog"};
166 TEST_F(BaseTest, HasFoo) {
180 #include "gtest/internal/gtest-internal.h"
181 #include "gtest/internal/gtest-param-util.h"
182 #include "gtest/internal/gtest-port.h"
228 template <
typename T,
typename IncrementT>
230 return internal::ParamGenerator<T>(
231 new internal::RangeGenerator<T, IncrementT>(
start,
end,
step));
234 template <
typename T>
294 template <
typename ForwardIterator>
295 internal::ParamGenerator<
299 return internal::ParamGenerator<ParamType>(
300 new internal::ValuesInIteratorRangeGenerator<ParamType>(
begin,
end));
303 template <
typename T,
size_t N>
308 template <
class Container>
309 internal::ParamGenerator<typename Container::value_type>
ValuesIn(
334 template <
typename...
T>
335 internal::ValueArray<
T...>
Values(
T...
v) {
336 return internal::ValueArray<
T...>(
std::move(
v)...);
359 inline internal::ParamGenerator<bool>
Bool() {
360 return Values(
false,
true);
409 return internal::CartesianProductHolder<
Generator...>(
g...);
412 #define TEST_P(test_suite_name, test_name) \
413 class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \
414 : public test_suite_name { \
416 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \
417 void TestBody() override; \
420 static int AddToRegistry() { \
421 ::testing::UnitTest::GetInstance() \
422 ->parameterized_test_registry() \
423 .GetTestSuitePatternHolder<test_suite_name>( \
424 GTEST_STRINGIFY_(test_suite_name), \
425 ::testing::internal::CodeLocation(__FILE__, __LINE__)) \
427 GTEST_STRINGIFY_(test_suite_name), GTEST_STRINGIFY_(test_name), \
428 new ::testing::internal::TestMetaFactory<GTEST_TEST_CLASS_NAME_( \
429 test_suite_name, test_name)>(), \
430 ::testing::internal::CodeLocation(__FILE__, __LINE__)); \
433 static int gtest_registering_dummy_ GTEST_ATTRIBUTE_UNUSED_; \
434 GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \
437 int GTEST_TEST_CLASS_NAME_(test_suite_name, \
438 test_name)::gtest_registering_dummy_ = \
439 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \
440 void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody()
455 #define GTEST_EXPAND_(arg) arg
456 #define GTEST_GET_FIRST_(first, ...) first
457 #define GTEST_GET_SECOND_(first, second, ...) second
459 #define INSTANTIATE_TEST_SUITE_P(prefix, test_suite_name, ...) \
460 static ::testing::internal::ParamGenerator<test_suite_name::ParamType> \
461 gtest_##prefix##test_suite_name##_EvalGenerator_() { \
462 return GTEST_EXPAND_(GTEST_GET_FIRST_(__VA_ARGS__, DUMMY_PARAM_)); \
464 static ::std::string gtest_##prefix##test_suite_name##_EvalGenerateName_( \
465 const ::testing::TestParamInfo<test_suite_name::ParamType>& info) { \
466 if (::testing::internal::AlwaysFalse()) { \
467 ::testing::internal::TestNotEmpty(GTEST_EXPAND_(GTEST_GET_SECOND_( \
469 ::testing::internal::DefaultParamName<test_suite_name::ParamType>, \
471 auto t = std::make_tuple(__VA_ARGS__); \
472 static_assert(std::tuple_size<decltype(t)>::value <= 2, \
475 return ((GTEST_EXPAND_(GTEST_GET_SECOND_( \
477 ::testing::internal::DefaultParamName<test_suite_name::ParamType>, \
478 DUMMY_PARAM_))))(info); \
480 static int gtest_##prefix##test_suite_name##_dummy_ \
481 GTEST_ATTRIBUTE_UNUSED_ = \
482 ::testing::UnitTest::GetInstance() \
483 ->parameterized_test_registry() \
484 .GetTestSuitePatternHolder<test_suite_name>( \
485 GTEST_STRINGIFY_(test_suite_name), \
486 ::testing::internal::CodeLocation(__FILE__, __LINE__)) \
487 ->AddTestSuiteInstantiation( \
488 GTEST_STRINGIFY_(prefix), \
489 >est_##prefix##test_suite_name##_EvalGenerator_, \
490 >est_##prefix##test_suite_name##_EvalGenerateName_, \
495 #define GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(T) \
496 namespace gtest_do_not_use_outside_namespace_scope {} \
497 static const ::testing::internal::MarkAsIgnored gtest_allow_ignore_##T( \
501 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
502 #define INSTANTIATE_TEST_CASE_P \
503 static_assert(::testing::internal::InstantiateTestCase_P_IsDeprecated(), \
505 INSTANTIATE_TEST_SUITE_P
506 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_
510 #endif // GOOGLETEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_