56 using ::testing::Message;
58 using ::testing::TestWithParam;
62 using ::testing::internal::ParamGenerator;
63 using ::testing::internal::UnitTestOptions;
79 template <
typename T,
size_t N>
81 const T (&expected_values)[
N]) {
82 typename ParamGenerator<T>::iterator it = generator.begin();
83 for (
size_t i = 0;
i <
N; ++
i) {
85 <<
"At element " <<
i <<
" when accessing via an iterator "
86 <<
"created with the copy constructor.\n";
90 <<
"where i is " <<
i <<
", expected_values[i] is "
92 <<
", and 'it' is an iterator created with the copy constructor.\n";
96 <<
"At the presumed end of sequence when accessing via an iterator "
97 <<
"created with the copy constructor.\n";
103 it = generator.begin();
104 for (
size_t i = 0;
i <
N; ++
i) {
106 <<
"At element " <<
i <<
" when accessing via an iterator "
107 <<
"created with the assignment operator.\n";
109 <<
"where i is " <<
i <<
", expected_values[i] is "
111 <<
", and 'it' is an iterator created with the copy constructor.\n";
115 <<
"At the presumed end of sequence when accessing via an iterator "
116 <<
"created with the assignment operator.\n";
119 template <
typename T>
121 typename ParamGenerator<T>::iterator it = generator.begin();
124 it = generator.begin();
137 TEST(IteratorTest, ParamIteratorConformsToForwardIteratorConcept) {
138 const ParamGenerator<int> gen =
Range(0, 10);
139 ParamGenerator<int>::iterator it = gen.begin();
142 ParamGenerator<int>::iterator it2 = it;
143 EXPECT_TRUE(*it == *it2) <<
"Initialized iterators must point to the "
144 <<
"element same as its source points to";
150 EXPECT_TRUE(*it == *it2) <<
"Assigned iterators must point to the "
151 <<
"element same as its source points to";
154 EXPECT_EQ(&it, &(++it)) <<
"Result of the prefix operator++ must be "
155 <<
"refer to the original object";
159 int original_value = *it;
172 TEST(RangeTest, IntRangeWithDefaultStep) {
173 const ParamGenerator<int> gen =
Range(0, 3);
174 const int expected_values[] = {0, 1, 2};
180 TEST(RangeTest, IntRangeSingleValue) {
181 const ParamGenerator<int> gen =
Range(0, 1);
182 const int expected_values[] = {0};
188 TEST(RangeTest, IntRangeEmpty) {
189 const ParamGenerator<int> gen =
Range(0, 0);
195 TEST(RangeTest, IntRangeWithCustomStep) {
196 const ParamGenerator<int> gen =
Range(0, 9, 3);
197 const int expected_values[] = {0, 3, 6};
205 TEST(RangeTest, IntRangeWithCustomStepOverUpperBound) {
206 const ParamGenerator<int> gen =
Range(0, 4, 3);
207 const int expected_values[] = {0, 3};
225 return DogAdder(msg.GetString().c_str());
234 TEST(RangeTest, WorksWithACustomType) {
235 const ParamGenerator<DogAdder> gen =
237 ParamGenerator<DogAdder>::iterator it = gen.begin();
268 TEST(RangeTest, WorksWithACustomTypeWithDifferentIncrementType) {
270 ParamGenerator<IntWrapper>::iterator it = gen.begin();
283 TEST(ValuesInTest, ValuesInArray) {
284 int array[] = {3, 5, 8};
285 const ParamGenerator<int> gen =
ValuesIn(array);
291 TEST(ValuesInTest, ValuesInConstArray) {
292 const int array[] = {3, 5, 8};
293 const ParamGenerator<int> gen =
ValuesIn(array);
299 TEST(ValuesInTest, ValuesInSingleElementArray) {
301 const ParamGenerator<int> gen =
ValuesIn(array);
307 TEST(ValuesInTest, ValuesInVector) {
308 typedef ::std::vector<int> ContainerType;
309 ContainerType values;
313 const ParamGenerator<int> gen =
ValuesIn(values);
315 const int expected_values[] = {3, 5, 8};
320 TEST(ValuesInTest, ValuesInIteratorRange) {
321 typedef ::std::vector<int> ContainerType;
322 ContainerType values;
326 const ParamGenerator<int> gen =
ValuesIn(values.begin(), values.end());
328 const int expected_values[] = {3, 5, 8};
334 TEST(ValuesInTest, ValuesInSingleElementIteratorRange) {
335 typedef ::std::vector<int> ContainerType;
336 ContainerType values;
337 values.push_back(42);
338 const ParamGenerator<int> gen =
ValuesIn(values.begin(), values.end());
340 const int expected_values[] = {42};
346 TEST(ValuesInTest, ValuesInEmptyIteratorRange) {
347 typedef ::std::vector<int> ContainerType;
348 ContainerType values;
349 const ParamGenerator<int> gen =
ValuesIn(values.begin(), values.end());
355 TEST(ValuesTest, ValuesWorks) {
356 const ParamGenerator<int> gen =
Values(3, 5, 8);
358 const int expected_values[] = {3, 5, 8};
364 TEST(ValuesTest, ValuesWorksForValuesOfCompatibleTypes) {
365 const ParamGenerator<double> gen =
Values(3, 5.0
f, 8.0);
367 const double expected_values[] = {3.0, 5.0, 8.0};
371 TEST(ValuesTest, ValuesWorksForMaxLengthList) {
372 const ParamGenerator<int> gen =
373 Values(10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130, 140, 150,
374 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260, 270, 280,
375 290, 300, 310, 320, 330, 340, 350, 360, 370, 380, 390, 400, 410,
376 420, 430, 440, 450, 460, 470, 480, 490, 500);
378 const int expected_values[] = {
379 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130,
380 140, 150, 160, 170, 180, 190, 200, 210, 220, 230, 240, 250, 260,
381 270, 280, 290, 300, 310, 320, 330, 340, 350, 360, 370, 380, 390,
382 400, 410, 420, 430, 440, 450, 460, 470, 480, 490, 500};
388 TEST(ValuesTest, ValuesWithSingleParameter) {
389 const ParamGenerator<int> gen =
Values(42);
391 const int expected_values[] = {42};
397 const ParamGenerator<bool> gen =
Bool();
399 const bool expected_values[] = {
false,
true};
404 TEST(CombineTest, CombineWithTwoParameters) {
405 const char*
foo =
"foo";
406 const char*
bar =
"bar";
407 const ParamGenerator<std::tuple<const char*, int>> gen =
410 std::tuple<const char*, int> expected_values[] = {
411 std::make_tuple(foo, 3), std::make_tuple(foo, 4), std::make_tuple(bar, 3),
412 std::make_tuple(bar, 4)};
417 TEST(CombineTest, CombineWithThreeParameters) {
418 const ParamGenerator<std::tuple<int, int, int>> gen =
420 std::tuple<int, int, int> expected_values[] = {
421 std::make_tuple(0, 3, 5), std::make_tuple(0, 3, 6),
422 std::make_tuple(0, 4, 5), std::make_tuple(0, 4, 6),
423 std::make_tuple(1, 3, 5), std::make_tuple(1, 3, 6),
424 std::make_tuple(1, 4, 5), std::make_tuple(1, 4, 6)};
431 TEST(CombineTest, CombineWithFirstParameterSingleValue) {
432 const ParamGenerator<std::tuple<int, int>> gen =
435 std::tuple<int, int> expected_values[] = {std::make_tuple(42, 0),
436 std::make_tuple(42, 1)};
443 TEST(CombineTest, CombineWithSecondParameterSingleValue) {
444 const ParamGenerator<std::tuple<int, int>> gen =
447 std::tuple<int, int> expected_values[] = {std::make_tuple(0, 42),
448 std::make_tuple(1, 42)};
454 TEST(CombineTest, CombineWithFirstParameterEmptyRange) {
455 const ParamGenerator<std::tuple<int, int>> gen =
462 TEST(CombineTest, CombineWithSecondParameterEmptyRange) {
463 const ParamGenerator<std::tuple<int, int>> gen =
470 TEST(CombineTest, CombineWithMaxNumberOfParameters) {
471 const char*
foo =
"foo";
472 const char*
bar =
"bar";
473 const ParamGenerator<
474 std::tuple<const char*, int, int, int, int, int, int, int, int, int>>
479 std::tuple<const char*, int, int, int, int, int, int, int, int, int>
480 expected_values[] = {std::make_tuple(foo, 1, 2, 3, 4, 5, 6, 7, 8, 9),
481 std::make_tuple(bar, 1, 2, 3, 4, 5, 6, 7, 8, 9)};
495 const std::string&
str()
const {
return str_; }
501 TEST(CombineTest, NonDefaultConstructAssign) {
502 const ParamGenerator<std::tuple<int, NonDefaultConstructAssignString>> gen =
506 ParamGenerator<std::tuple<int, NonDefaultConstructAssignString>>::iterator
528 template <
typename T>
532 template <
typename... Args,
533 typename std::enable_if<
sizeof...(Args) != 1,
int>::type = 0>
538 const T&
get()
const {
return t_; }
544 TEST(ConvertTest, CombineWithTwoParameters) {
545 const char*
foo =
"foo";
546 const char*
bar =
"bar";
547 const ParamGenerator<ConstructFromT<std::tuple<const char*, int>>> gen =
548 ConvertGenerator<std::tuple<const char*, int>>(
556 TEST(ConvertTest, NonDefaultConstructAssign) {
557 const ParamGenerator<
559 gen = ConvertGenerator<std::tuple<int, NonDefaultConstructAssignString>>(
564 std::tuple<int, NonDefaultConstructAssignString>>>::iterator it =
568 EXPECT_EQ(
"A", std::get<1>(it->get()).str());
572 EXPECT_EQ(
"B", std::get<1>(it->get()).str());
576 EXPECT_EQ(
"A", std::get<1>(it->get()).str());
580 EXPECT_EQ(
"B", std::get<1>(it->get()).str());
588 TEST(ParamGeneratorTest, AssignmentWorks) {
589 ParamGenerator<int> gen =
Values(1, 2);
590 const ParamGenerator<int> gen2 =
Values(3, 4);
593 const int expected_values[] = {3, 4};
606 template <
int kExpectedCalls>
622 bool perform_check =
false;
624 for (
int i = 0;
i < kExpectedCalls; ++
i) {
626 msg <<
"TestsExpandedAndRun/" <<
i;
627 if (UnitTestOptions::FilterMatchesTest(
628 "TestExpansionModule/MultipleTestGenerationTest",
629 msg.GetString().c_str())) {
630 perform_check =
true;
635 <<
"Fixture constructor of ParamTestGenerationTest test case "
636 <<
"has not been run as expected.";
638 <<
"Fixture SetUp method of ParamTestGenerationTest test case "
639 <<
"has not been run as expected.";
641 <<
"Fixture TearDown method of ParamTestGenerationTest test case "
642 <<
"has not been run as expected.";
644 <<
"Test in ParamTestGenerationTest test case "
645 <<
"has not been run as expected.";
691 bool all_tests_in_test_case_selected =
true;
695 test_name <<
"TestsExpandedAndRun/" <<
i;
696 if (!UnitTestOptions::FilterMatchesTest(
697 "TestExpansionModule/MultipleTestGenerationTest",
698 test_name.GetString())) {
699 all_tests_in_test_case_selected =
false;
703 <<
"When running the TestGenerationTest test case all of its tests\n"
704 <<
"must be selected by the filter flag for the test case to pass.\n"
705 <<
"If not all of them are enabled, we can't reliably conclude\n"
706 <<
"that the correct number of tests have been generated.";
712 vector<int> expected_values(test_generation_params,
717 sort(expected_values.begin(), expected_values.end());
734 Environment::Instance()->TestBodyExecuted();
735 EXPECT_EQ(current_parameter_, GetParam());
736 collected_parameters_.push_back(GetParam());
813 <<
"If some (but not all) SeparateInstanceTest tests have been "
814 <<
"filtered out this test will fail. Make sure that all "
815 <<
"GeneratorEvaluationTest are selected or de-selected together "
816 <<
"by the test filter.";
839 const ::testing::TestInfo*
const test_info =
842 EXPECT_STREQ(
"ZeroToFiveSequence/NamingTest", test_info->test_suite_name());
844 Message index_stream;
845 index_stream <<
"TestsReportCorrectNamesAndParameters/" << GetParam();
846 EXPECT_STREQ(index_stream.GetString().c_str(), test_info->name());
856 #define PREFIX_WITH_FOO(test_name) Foo##test_name
857 #define PREFIX_WITH_MACRO(test_name) Macro##test_name
860 const ::testing::TestInfo*
const test_info =
863 EXPECT_STREQ(
"FortyTwo/MacroNamingTest", test_info->test_suite_name());
874 const ::testing::TestInfo*
const test_info =
877 EXPECT_STREQ(
"MacroNamingTestNonParametrized", test_info->test_suite_name());
881 TEST(MacroNameing, LookupNames) {
882 std::set<std::string> know_suite_names, know_test_names;
887 know_suite_names.insert(suite->name());
891 know_test_names.insert(std::string(suite->name()) +
"." + info->name());
897 know_suite_names.find(
"FortyTwo/MacroNamingTest"),
898 know_suite_names.end());
899 EXPECT_NE(know_suite_names.find(
"MacroNamingTestNonParametrized"),
900 know_suite_names.end());
903 know_test_names.find(
"FortyTwo/MacroNamingTest.FooSomeTestName/0"),
904 know_test_names.end());
906 know_test_names.find(
"MacroNamingTestNonParametrized.FooSomeTestName"),
907 know_test_names.end());
918 std::string
operator()(const ::testing::TestParamInfo<std::string>& inf) {
924 Values(std::string(
"FunctorName")),
928 Values(
"abcdefghijklmnopqrstuvwxyz",
929 "ABCDEFGHIJKLMNOPQRSTUVWXYZ",
"01234567890_"),
933 const ::testing::TestParamInfo<std::string>& inf) {
941 Values(std::string(
"FunctionName")),
945 Values(std::string(
"FunctionNameP")),
954 Values(std::string(
"LambdaName")),
955 [](const ::testing::TestParamInfo<std::string>& inf) {
959 TEST(CustomNamingTest, CheckNameRegistry) {
961 std::set<std::string> test_names;
962 for (
int suite_num = 0; suite_num < unit_test->total_test_suite_count();
964 const ::testing::TestSuite* test_suite = unit_test->GetTestSuite(suite_num);
965 for (
int test_num = 0; test_num < test_suite->total_test_count();
967 const ::testing::TestInfo* test_info = test_suite->GetTestInfo(test_num);
968 test_names.insert(std::string(test_info->name()));
971 EXPECT_EQ(1u, test_names.count(
"CustomTestNames/FunctorName"));
972 EXPECT_EQ(1u, test_names.count(
"CustomTestNames/FunctionName"));
973 EXPECT_EQ(1u, test_names.count(
"CustomTestNames/FunctionNameP"));
974 EXPECT_EQ(1u, test_names.count(
"CustomTestNames/LambdaName"));
982 const ::testing::TestInfo*
const test_info =
984 Message test_name_stream;
985 test_name_stream <<
"TestsReportCorrectNames/" << GetParam();
986 EXPECT_STREQ(test_name_stream.GetString().c_str(), test_info->name());
1007 const ::testing::TestInfo*
const test_info =
1009 Message test_name_stream;
1010 test_name_stream <<
"TestsReportCorrectNames/" << GetParam();
1011 EXPECT_STREQ(test_name_stream.GetString().c_str(), test_info->name());
1022 std::string
operator()(const ::testing::TestParamInfo<int>& info) {
1037 const ::testing::TestInfo*
const test_info =
1040 Message test_name_stream;
1041 test_name_stream <<
"TestsReportCorrectNames/" << sum_;
1042 EXPECT_STREQ(test_name_stream.GetString().c_str(), test_info->name());
1065 const ::testing::TestInfo*
const test_info =
1126 namespace works_here {
1132 template <
typename T>
1148 template <
typename T>
NonDefaultConstructAssignString & operator=(const NonDefaultConstructAssignString &)=delete
NonParameterizedBaseTest()
TestGenerationEnvironment()
internal::ValueArray< T...> Values(T...v)
#define EXPECT_DEATH_IF_SUPPORTED(statement, regex)
Environment * AddGlobalTestEnvironment(Environment *env)
static TestGenerationEnvironment * Instance()
IntWrapper operator+(int other) const
void FixtureConstructorExecuted()
#define PREFIX_WITH_FOO(test_name)
const int & dummy_value() const
const int test_generation_params[]
void VerifyGenerator(const ParamGenerator< T > &generator, const T(&expected_values)[N])
::std::string PrintValue(const T &value)
::std::string PrintToString(const T &value)
#define EXPECT_NE(val1, val2)
static void SetUpTestSuite()
internal::ParamGenerator< bool > Bool()
#define TEST_F(test_fixture, test_name)
internal::ParamConverterGenerator< T > ConvertGenerator(internal::ParamGenerator< T > gen)
#define EXPECT_GE(val1, val2)
#define TEST(test_suite_name, test_name)
TestGenerationTest & operator=(const TestGenerationTest &)=delete
NonDefaultConstructAssignString(const std::string &s)
IntWrapper operator=(const IntWrapper &other)
TYPED_TEST_SUITE_P(NotUsedTypeTest)
std::string operator()(const ::testing::TestParamInfo< int > &info)
internal::ParamGenerator< T > Range(T start, T end, IncrementT step)
GTEST_ALLOW_UNINSTANTIATED_PARAMETERIZED_TEST(NotInstantiatedTest)
void VerifyGeneratorIsEmpty(const ParamGenerator< T > &generator)
internal::ParamGenerator< typename std::iterator_traits< ForwardIterator >::value_type > ValuesIn(ForwardIterator begin, ForwardIterator end)
NonDefaultConstructAssignString()=delete
internal::CartesianProductHolder< Generator...> Combine(const Generator &...g)
static void TearDownTestSuite()
static vector< int > collected_parameters_
std::ostream & operator<<(std::ostream &os, const Expr< T > &xx)
int fixture_constructor_count_
bool operator<(const DogAdder &other) const
bool operator==(const ConstructFromT &other) const
ADVar foo(double d, ADVar x, ADVar y)
bool operator<(const IntWrapper &other) const
ConstructFromT(const T &t)
std::string operator()(const ::testing::TestParamInfo< std::string > &inf)
#define EXPECT_STREQ(s1, s2)
DogAdder operator+(const DogAdder &other) const
static void set_param_value(int param_value)
const TestInfo * current_test_info() const GTEST_LOCK_EXCLUDED_(mutex_)
TEST_P(NotInstantiatedTest, Used)
ParamGenerator< int > extern_gen
std::string CustomParamNameFunction(const ::testing::TestParamInfo< std::string > &inf)
DogAdder(const DogAdder &other)
#define PREFIX_WITH_MACRO(test_name)
#define EXPECT_EQ(val1, val2)
#define TEST_P(test_suite_name, test_name)
IntWrapper(const IntWrapper &other)
int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_
DogAdder operator=(const DogAdder &other)
TestGenerationEnvironment< PARAMETER_COUNT > Environment
static void TearDownTestSuite()
GTEST_API_ void InitGoogleTest(int *argc, char **argv)
DogAdder(const char *a_value)
const std::string & str() const
#define EXPECT_TRUE(condition)
static UnitTest * GetInstance()
REGISTER_TYPED_TEST_SUITE_P(NotInstantiatedTypeTest, Used)
const std::string & value() const
TYPED_TEST_P(NotInstantiatedTypeTest, Used)
~NonDefaultConstructAssignString()=default
#define EXPECT_FALSE(condition)
#define INSTANTIATE_TEST_SUITE_P(prefix, test_suite_name,...)
#define ASSERT_FALSE(condition)
TestGenerationEnvironment & operator=(const TestGenerationEnvironment &)=delete
ConstructFromT(Args &&...args)
ParameterizedDerivedTest()