53 using ::testing::Message;
55 using ::testing::TestWithParam;
59 using ::testing::internal::ParamGenerator;
60 using ::testing::internal::UnitTestOptions;
76 template <
typename T,
size_t N>
78 const T (&expected_values)[N]) {
79 typename ParamGenerator<T>::iterator
it = generator.begin();
80 for (
size_t i = 0;
i < N; ++
i) {
82 <<
"At element " <<
i <<
" when accessing via an iterator "
83 <<
"created with the copy constructor.\n";
88 <<
", expected_values[i] is " <<
PrintValue(expected_values[
i])
90 <<
", and 'it' is an iterator created with the copy constructor.\n";
94 <<
"At the presumed end of sequence when accessing via an iterator "
95 <<
"created with the copy constructor.\n";
101 it = generator.begin();
102 for (
size_t i = 0;
i < N; ++
i) {
104 <<
"At element " <<
i <<
" when accessing via an iterator "
105 <<
"created with the assignment operator.\n";
107 <<
"where i is " <<
i
108 <<
", expected_values[i] is " <<
PrintValue(expected_values[
i])
110 <<
", and 'it' is an iterator created with the copy constructor.\n";
114 <<
"At the presumed end of sequence when accessing via an iterator "
115 <<
"created with the assignment operator.\n";
118 template <
typename T>
120 typename ParamGenerator<T>::iterator
it = generator.begin();
123 it = generator.begin();
136 TEST(IteratorTest, ParamIteratorConformsToForwardIteratorConcept) {
137 const ParamGenerator<int> gen =
Range(0, 10);
138 ParamGenerator<int>::iterator
it = gen.begin();
141 ParamGenerator<int>::iterator it2 =
it;
142 EXPECT_TRUE(*
it == *it2) <<
"Initialized iterators must point to the "
143 <<
"element same as its source points to";
149 EXPECT_TRUE(*
it == *it2) <<
"Assigned iterators must point to the "
150 <<
"element same as its source points to";
153 EXPECT_EQ(&
it, &(++
it)) <<
"Result of the prefix operator++ must be "
154 <<
"refer to the original object";
158 int original_value = *
it;
171 TEST(RangeTest, IntRangeWithDefaultStep) {
172 const ParamGenerator<int> gen =
Range(0, 3);
173 const int expected_values[] = {0, 1, 2};
179 TEST(RangeTest, IntRangeSingleValue) {
180 const ParamGenerator<int> gen =
Range(0, 1);
181 const int expected_values[] = {0};
187 TEST(RangeTest, IntRangeEmpty) {
188 const ParamGenerator<int> gen =
Range(0, 0);
194 TEST(RangeTest, IntRangeWithCustomStep) {
195 const ParamGenerator<int> gen =
Range(0, 9, 3);
196 const int expected_values[] = {0, 3, 6};
204 TEST(RangeTest, IntRangeWithCustomStepOverUpperBound) {
205 const ParamGenerator<int> gen =
Range(0, 4, 3);
206 const int expected_values[] = {0, 3};
225 return DogAdder(msg.GetString().c_str());
236 TEST(RangeTest, WorksWithACustomType) {
237 const ParamGenerator<DogAdder> gen =
239 ParamGenerator<DogAdder>::iterator
it = gen.begin();
270 TEST(RangeTest, WorksWithACustomTypeWithDifferentIncrementType) {
272 ParamGenerator<IntWrapper>::iterator
it = gen.begin();
285 TEST(ValuesInTest, ValuesInArray) {
286 int array[] = {3, 5, 8};
293 TEST(ValuesInTest, ValuesInConstArray) {
294 const int array[] = {3, 5, 8};
301 TEST(ValuesInTest, ValuesInSingleElementArray) {
309 TEST(ValuesInTest, ValuesInVector) {
310 typedef ::std::vector<int> ContainerType;
317 const int expected_values[] = {3, 5, 8};
322 TEST(ValuesInTest, ValuesInIteratorRange) {
323 typedef ::std::vector<int> ContainerType;
330 const int expected_values[] = {3, 5, 8};
336 TEST(ValuesInTest, ValuesInSingleElementIteratorRange) {
337 typedef ::std::vector<int> ContainerType;
342 const int expected_values[] = {42};
348 TEST(ValuesInTest, ValuesInEmptyIteratorRange) {
349 typedef ::std::vector<int> ContainerType;
357 TEST(ValuesTest, ValuesWorks) {
358 const ParamGenerator<int> gen =
Values(3, 5, 8);
360 const int expected_values[] = {3, 5, 8};
366 TEST(ValuesTest, ValuesWorksForValuesOfCompatibleTypes) {
367 const ParamGenerator<double> gen =
Values(3, 5.0
f, 8.0);
369 const double expected_values[] = {3.0, 5.0, 8.0};
373 TEST(ValuesTest, ValuesWorksForMaxLengthList) {
374 const ParamGenerator<int> gen =
Values(
375 10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
376 110, 120, 130, 140, 150, 160, 170, 180, 190, 200,
377 210, 220, 230, 240, 250, 260, 270, 280, 290, 300,
378 310, 320, 330, 340, 350, 360, 370, 380, 390, 400,
379 410, 420, 430, 440, 450, 460, 470, 480, 490, 500);
381 const int expected_values[] = {
382 10, 20, 30, 40, 50, 60, 70, 80, 90, 100,
383 110, 120, 130, 140, 150, 160, 170, 180, 190, 200,
384 210, 220, 230, 240, 250, 260, 270, 280, 290, 300,
385 310, 320, 330, 340, 350, 360, 370, 380, 390, 400,
386 410, 420, 430, 440, 450, 460, 470, 480, 490, 500};
392 TEST(ValuesTest, ValuesWithSingleParameter) {
393 const ParamGenerator<int> gen =
Values(42);
395 const int expected_values[] = {42};
401 const ParamGenerator<bool> gen =
Bool();
403 const bool expected_values[] = {
false,
true};
408 TEST(CombineTest, CombineWithTwoParameters) {
409 const char*
foo =
"foo";
410 const char*
bar =
"bar";
411 const ParamGenerator<std::tuple<const char*, int> > gen =
414 std::tuple<const char*, int> expected_values[] = {
415 std::make_tuple(
foo, 3), std::make_tuple(
foo, 4), std::make_tuple(
bar, 3),
416 std::make_tuple(
bar, 4)};
421 TEST(CombineTest, CombineWithThreeParameters) {
422 const ParamGenerator<std::tuple<int, int, int> > gen =
424 std::tuple<int, int, int> expected_values[] = {
425 std::make_tuple(0, 3, 5), std::make_tuple(0, 3, 6),
426 std::make_tuple(0, 4, 5), std::make_tuple(0, 4, 6),
427 std::make_tuple(1, 3, 5), std::make_tuple(1, 3, 6),
428 std::make_tuple(1, 4, 5), std::make_tuple(1, 4, 6)};
435 TEST(CombineTest, CombineWithFirstParameterSingleValue) {
436 const ParamGenerator<std::tuple<int, int> > gen =
439 std::tuple<int, int> expected_values[] = {std::make_tuple(42, 0),
440 std::make_tuple(42, 1)};
447 TEST(CombineTest, CombineWithSecondParameterSingleValue) {
448 const ParamGenerator<std::tuple<int, int> > gen =
451 std::tuple<int, int> expected_values[] = {std::make_tuple(0, 42),
452 std::make_tuple(1, 42)};
458 TEST(CombineTest, CombineWithFirstParameterEmptyRange) {
459 const ParamGenerator<std::tuple<int, int> > gen =
466 TEST(CombineTest, CombineWithSecondParameterEmptyRange) {
467 const ParamGenerator<std::tuple<int, int> > gen =
474 TEST(CombineTest, CombineWithMaxNumberOfParameters) {
475 const char*
foo =
"foo";
476 const char*
bar =
"bar";
477 const ParamGenerator<
478 std::tuple<const char*, int, int, int, int, int, int, int, int, int> >
483 std::tuple<const char*, int, int, int, int, int, int, int, int, int>
484 expected_values[] = {std::make_tuple(
foo, 1, 2, 3, 4, 5, 6, 7, 8, 9),
485 std::make_tuple(
bar, 1, 2, 3, 4, 5, 6, 7, 8, 9)};
504 TEST(CombineTest, NonDefaultConstructAssign) {
505 const ParamGenerator<std::tuple<int, NonDefaultConstructAssignString> > gen =
509 ParamGenerator<std::tuple<int, NonDefaultConstructAssignString> >::iterator
534 TEST(ParamGeneratorTest, AssignmentWorks) {
535 ParamGenerator<int> gen =
Values(1, 2);
536 const ParamGenerator<int> gen2 =
Values(3, 4);
539 const int expected_values[] = {3, 4};
552 template <
int kExpectedCalls>
568 bool perform_check =
false;
570 for (
int i = 0;
i < kExpectedCalls; ++
i) {
572 msg <<
"TestsExpandedAndRun/" <<
i;
573 if (UnitTestOptions::FilterMatchesTest(
574 "TestExpansionModule/MultipleTestGenerationTest",
575 msg.GetString().c_str())) {
576 perform_check =
true;
581 <<
"Fixture constructor of ParamTestGenerationTest test case "
582 <<
"has not been run as expected.";
584 <<
"Fixture SetUp method of ParamTestGenerationTest test case "
585 <<
"has not been run as expected.";
587 <<
"Fixture TearDown method of ParamTestGenerationTest test case "
588 <<
"has not been run as expected.";
590 <<
"Test in ParamTestGenerationTest test case "
591 <<
"has not been run as expected.";
632 bool all_tests_in_test_case_selected =
true;
636 test_name <<
"TestsExpandedAndRun/" <<
i;
637 if ( !UnitTestOptions::FilterMatchesTest(
638 "TestExpansionModule/MultipleTestGenerationTest",
639 test_name.GetString())) {
640 all_tests_in_test_case_selected =
false;
644 <<
"When running the TestGenerationTest test case all of its tests\n"
645 <<
"must be selected by the filter flag for the test case to pass.\n"
646 <<
"If not all of them are enabled, we can't reliably conclude\n"
647 <<
"that the correct number of tests have been generated.";
658 sort(expected_values.begin(), expected_values.end());
674 Environment::Instance()->TestBodyExecuted();
675 EXPECT_EQ(current_parameter_, GetParam());
676 collected_parameters_.push_back(GetParam());
754 <<
"If some (but not all) SeparateInstanceTest tests have been "
755 <<
"filtered out this test will fail. Make sure that all "
756 <<
"GeneratorEvaluationTest are selected or de-selected together "
757 <<
"by the test filter.";
780 const ::testing::TestInfo*
const test_info =
783 EXPECT_STREQ(
"ZeroToFiveSequence/NamingTest", test_info->test_suite_name());
785 Message index_stream;
786 index_stream <<
"TestsReportCorrectNamesAndParameters/" << GetParam();
787 EXPECT_STREQ(index_stream.GetString().c_str(), test_info->name());
797 #define PREFIX_WITH_FOO(test_name) Foo##test_name
798 #define PREFIX_WITH_MACRO(test_name) Macro##test_name
801 const ::testing::TestInfo*
const test_info =
804 EXPECT_STREQ(
"FortyTwo/MacroNamingTest", test_info->test_suite_name());
815 const ::testing::TestInfo*
const test_info =
818 EXPECT_STREQ(
"MacroNamingTestNonParametrized", test_info->test_suite_name());
840 Values(
"abcdefghijklmnopqrstuvwxyz",
841 "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
"01234567890_"),
845 const ::testing::TestParamInfo<std::string>&
inf) {
863 [](const ::testing::TestParamInfo<std::string>&
inf) {
867 TEST(CustomNamingTest, CheckNameRegistry) {
869 std::set<std::string> test_names;
873 for (
int test_num = 0; test_num <
test_suite->total_test_count();
875 const ::testing::TestInfo* test_info =
test_suite->GetTestInfo(test_num);
879 EXPECT_EQ(1u, test_names.count(
"CustomTestNames/FunctorName"));
880 EXPECT_EQ(1u, test_names.count(
"CustomTestNames/FunctionName"));
881 EXPECT_EQ(1u, test_names.count(
"CustomTestNames/LambdaName"));
889 const ::testing::TestInfo*
const test_info =
891 Message test_name_stream;
892 test_name_stream <<
"TestsReportCorrectNames/" << GetParam();
893 EXPECT_STREQ(test_name_stream.GetString().c_str(), test_info->name());
914 const ::testing::TestInfo*
const test_info =
916 Message test_name_stream;
917 test_name_stream <<
"TestsReportCorrectNames/" << GetParam();
918 EXPECT_STREQ(test_name_stream.GetString().c_str(), test_info->name());
944 const ::testing::TestInfo*
const test_info =
947 Message test_name_stream;
948 test_name_stream <<
"TestsReportCorrectNames/" << sum_;
949 EXPECT_STREQ(test_name_stream.GetString().c_str(), test_info->name());
970 const ::testing::TestInfo*
const test_info =
1014 ".* value-parameterized test .*");