40 #ifndef GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
41 #define GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_
67 TEST_P(FooTest, DoesBlah) {
74 TEST_P(FooTest, HasBlahBlah) {
104 Values(
"meeny",
"miny",
"moe"));
125 const char* pets[] = {
"cat",
"dog"};
170 TEST_F(BaseTest, HasFoo) {
174 TEST_P(DerivedTest, DoesBlah) {
232 template <
typename T,
typename IncrementT>
238 template <
typename T>
298 template <
typename ForwardIterator>
299 internal::ParamGenerator<
302 typedef typename ::testing::internal::IteratorTraits<ForwardIterator>
308 template <
typename T,
size_t N>
313 template <
class Container>
315 const Container& container) {
316 return ValuesIn(container.begin(), container.end());
339 template <
typename...
T>
365 return Values(
false,
true);
414 template <
typename Generator1,
typename Generator2>
416 const Generator1& g1,
const Generator2& g2) {
421 template <
typename Generator1,
typename Generator2,
typename Generator3>
423 const Generator1& g1,
const Generator2& g2,
const Generator3& g3) {
428 template <
typename Generator1,
typename Generator2,
typename Generator3,
430 internal::CartesianProductHolder4<Generator1, Generator2, Generator3,
432 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
433 const Generator4& g4) {
439 template <
typename Generator1,
typename Generator2,
typename Generator3,
440 typename Generator4,
typename Generator5>
441 internal::CartesianProductHolder5<Generator1, Generator2, Generator3,
443 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
444 const Generator4& g4,
const Generator5& g5) {
446 Generator4, Generator5>(
450 template <
typename Generator1,
typename Generator2,
typename Generator3,
451 typename Generator4,
typename Generator5,
typename Generator6>
452 internal::CartesianProductHolder6<Generator1, Generator2, Generator3,
454 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
455 const Generator4& g4,
const Generator5& g5,
const Generator6& g6) {
457 Generator4, Generator5, Generator6>(
458 g1, g2, g3, g4, g5, g6);
461 template <
typename Generator1,
typename Generator2,
typename Generator3,
462 typename Generator4,
typename Generator5,
typename Generator6,
464 internal::CartesianProductHolder7<Generator1, Generator2, Generator3,
465 Generator4, Generator5, Generator6, Generator7>
Combine(
466 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
467 const Generator4& g4,
const Generator5& g5,
const Generator6& g6,
468 const Generator7& g7) {
470 Generator4, Generator5, Generator6, Generator7>(
471 g1, g2, g3, g4, g5, g6, g7);
474 template <
typename Generator1,
typename Generator2,
typename Generator3,
475 typename Generator4,
typename Generator5,
typename Generator6,
476 typename Generator7,
typename Generator8>
477 internal::CartesianProductHolder8<Generator1, Generator2, Generator3,
478 Generator4, Generator5, Generator6, Generator7, Generator8>
Combine(
479 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
480 const Generator4& g4,
const Generator5& g5,
const Generator6& g6,
481 const Generator7& g7,
const Generator8& g8) {
483 Generator4, Generator5, Generator6, Generator7, Generator8>(
484 g1, g2, g3, g4, g5, g6, g7, g8);
487 template <
typename Generator1,
typename Generator2,
typename Generator3,
488 typename Generator4,
typename Generator5,
typename Generator6,
489 typename Generator7,
typename Generator8,
typename Generator9>
490 internal::CartesianProductHolder9<Generator1, Generator2, Generator3,
491 Generator4, Generator5, Generator6, Generator7, Generator8,
493 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
494 const Generator4& g4,
const Generator5& g5,
const Generator6& g6,
495 const Generator7& g7,
const Generator8& g8,
const Generator9& g9) {
497 Generator4, Generator5, Generator6, Generator7, Generator8, Generator9>(
498 g1, g2, g3, g4, g5, g6, g7, g8, g9);
501 template <
typename Generator1,
typename Generator2,
typename Generator3,
502 typename Generator4,
typename Generator5,
typename Generator6,
503 typename Generator7,
typename Generator8,
typename Generator9,
504 typename Generator10>
505 internal::CartesianProductHolder10<Generator1, Generator2, Generator3,
506 Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,
508 const Generator1& g1,
const Generator2& g2,
const Generator3& g3,
509 const Generator4& g4,
const Generator5& g5,
const Generator6& g6,
510 const Generator7& g7,
const Generator8& g8,
const Generator9& g9,
511 const Generator10& g10) {
513 Generator4, Generator5, Generator6, Generator7, Generator8, Generator9,
515 g1, g2, g3, g4, g5, g6, g7, g8, g9, g10);
518 #define TEST_P(test_suite_name, test_name) \
519 class GTEST_TEST_CLASS_NAME_(test_suite_name, test_name) \
520 : public test_suite_name { \
522 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)() {} \
523 virtual void TestBody(); \
526 static int AddToRegistry() { \
527 ::testing::UnitTest::GetInstance() \
528 ->parameterized_test_registry() \
529 .GetTestSuitePatternHolder<test_suite_name>( \
531 ::testing::internal::CodeLocation(__FILE__, __LINE__)) \
533 GTEST_STRINGIFY_(test_suite_name), GTEST_STRINGIFY_(test_name), \
534 new ::testing::internal::TestMetaFactory<GTEST_TEST_CLASS_NAME_( \
535 test_suite_name, test_name)>()); \
538 static int gtest_registering_dummy_ GTEST_ATTRIBUTE_UNUSED_; \
539 GTEST_DISALLOW_COPY_AND_ASSIGN_(GTEST_TEST_CLASS_NAME_(test_suite_name, \
542 int GTEST_TEST_CLASS_NAME_(test_suite_name, \
543 test_name)::gtest_registering_dummy_ = \
544 GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::AddToRegistry(); \
545 void GTEST_TEST_CLASS_NAME_(test_suite_name, test_name)::TestBody()
559 #define INSTANTIATE_TEST_SUITE_P(prefix, test_suite_name, generator, ...) \
560 static ::testing::internal::ParamGenerator<test_suite_name::ParamType> \
561 gtest_##prefix##test_suite_name##_EvalGenerator_() { \
564 static ::std::string gtest_##prefix##test_suite_name##_EvalGenerateName_( \
565 const ::testing::TestParamInfo<test_suite_name::ParamType>& info) { \
566 return ::testing::internal::GetParamNameGen<test_suite_name::ParamType>( \
567 __VA_ARGS__)(info); \
569 static int gtest_##prefix##test_suite_name##_dummy_ \
570 GTEST_ATTRIBUTE_UNUSED_ = \
571 ::testing::UnitTest::GetInstance() \
572 ->parameterized_test_registry() \
573 .GetTestSuitePatternHolder<test_suite_name>( \
575 ::testing::internal::CodeLocation(__FILE__, __LINE__)) \
576 ->AddTestSuiteInstantiation( \
577 #prefix, >est_##prefix##test_suite_name##_EvalGenerator_, \
578 >est_##prefix##test_suite_name##_EvalGenerateName_, \
582 #ifndef GTEST_REMOVE_LEGACY_TEST_CASEAPI_
583 #define INSTANTIATE_TEST_CASE_P INSTANTIATE_TEST_SUITE_P
584 #endif // GTEST_REMOVE_LEGACY_TEST_CASEAPI_
588 #endif // GTEST_INCLUDE_GTEST_GTEST_PARAM_TEST_H_