45namespace gmock_more_actions_test {
52using testing::DeleteArg;
55using testing::ReturnArg;
56using testing::ReturnPointee;
57using testing::SaveArg;
58using testing::SaveArgPointee;
59using testing::SetArgReferee;
65inline short Short(
short n) {
return n; }
86const char*
Plus1(
const char* s) {
return s + 1; }
90bool ByConstRef(
const std::string& s) {
return s ==
"Hi"; }
101const char*
Binary(
const char* input,
short n) {
return input + n; }
109int SumOf4(
int a,
int b,
int c,
int d) {
return a + b +
c + d; }
115std::string
Concat4(
const char* s1,
const char* s2,
const char* s3,
117 return std::string(s1) + s2 + s3 + s4;
120int SumOf5(
int a,
int b,
int c,
int d,
int e) {
return a + b +
c + d + e; }
124 return a + b +
c + d + e;
128std::string
Concat5(
const char* s1,
const char* s2,
const char* s3,
129 const char* s4,
const char* s5) {
130 return std::string(s1) + s2 + s3 + s4 + s5;
133int SumOf6(
int a,
int b,
int c,
int d,
int e,
int f) {
134 return a + b +
c + d + e + f;
139 return a + b +
c + d + e + f;
143std::string
Concat6(
const char* s1,
const char* s2,
const char* s3,
144 const char* s4,
const char* s5,
const char* s6) {
145 return std::string(s1) + s2 + s3 + s4 + s5 + s6;
148std::string
Concat7(
const char* s1,
const char* s2,
const char* s3,
149 const char* s4,
const char* s5,
const char* s6,
151 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7;
154std::string
Concat8(
const char* s1,
const char* s2,
const char* s3,
155 const char* s4,
const char* s5,
const char* s6,
156 const char* s7,
const char* s8) {
157 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7 + s8;
160std::string
Concat9(
const char* s1,
const char* s2,
const char* s3,
161 const char* s4,
const char* s5,
const char* s6,
162 const char* s7,
const char* s8,
const char* s9) {
163 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9;
166std::string
Concat10(
const char* s1,
const char* s2,
const char* s3,
167 const char* s4,
const char* s5,
const char* s6,
168 const char* s7,
const char* s8,
const char* s9,
170 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10;
181 std::string
Binary(
const std::string& str,
char c)
const {
return str +
c; }
191 int SumOf5(
int a,
int b,
int c,
int d,
int e) {
return a + b +
c + d + e; }
193 int SumOf6(
int a,
int b,
int c,
int d,
int e,
int f) {
194 return a + b +
c + d + e + f;
197 std::string
Concat7(
const char* s1,
const char* s2,
const char* s3,
198 const char* s4,
const char* s5,
const char* s6,
200 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7;
203 std::string
Concat8(
const char* s1,
const char* s2,
const char* s3,
204 const char* s4,
const char* s5,
const char* s6,
205 const char* s7,
const char* s8) {
206 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7 + s8;
209 std::string
Concat9(
const char* s1,
const char* s2,
const char* s3,
210 const char* s4,
const char* s5,
const char* s6,
211 const char* s7,
const char* s8,
const char* s9) {
212 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9;
215 std::string
Concat10(
const char* s1,
const char* s2,
const char* s3,
216 const char* s4,
const char* s5,
const char* s6,
217 const char* s7,
const char* s8,
const char* s9,
219 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10;
242 const char*
p =
"Hello";
253TEST(InvokeTest, FunctionThatTakes4Arguments) {
255 EXPECT_EQ(1234,
a.Perform(std::make_tuple(1000, 200, 30, 4)));
259TEST(InvokeTest, FunctionThatTakes5Arguments) {
261 EXPECT_EQ(12345,
a.Perform(std::make_tuple(10000, 2000, 300, 40, 5)));
265TEST(InvokeTest, FunctionThatTakes6Arguments) {
268 a.Perform(std::make_tuple(100000, 20000, 3000, 400, 50, 6)));
273inline const char*
CharPtr(
const char* s) {
return s; }
276TEST(InvokeTest, FunctionThatTakes7Arguments) {
277 Action<std::string(
const char*,
const char*,
const char*,
const char*,
278 const char*,
const char*,
const char*)>
287TEST(InvokeTest, FunctionThatTakes8Arguments) {
288 Action<std::string(
const char*,
const char*,
const char*,
const char*,
289 const char*,
const char*,
const char*,
const char*)>
298TEST(InvokeTest, FunctionThatTakes9Arguments) {
299 Action<std::string(
const char*,
const char*,
const char*,
const char*,
300 const char*,
const char*,
const char*,
const char*,
303 EXPECT_EQ(
"123456789",
a.Perform(std::make_tuple(
310TEST(InvokeTest, FunctionThatTakes10Arguments) {
311 Action<std::string(
const char*,
const char*,
const char*,
const char*,
312 const char*,
const char*,
const char*,
const char*,
313 const char*,
const char*)>
323TEST(InvokeTest, FunctionWithUnusedParameters) {
325 std::tuple<int, int, double, std::string> dummy =
326 std::make_tuple(10, 2, 5.6, std::string(
"hi"));
329 Action<int(
int,
int,
bool,
int*)> a2 =
332 23, a2.
Perform(std::make_tuple(20, 3,
true,
static_cast<int*
>(
nullptr))));
336TEST(InvokeTest, MethodWithUnusedParameters) {
341 Action<int(
char,
double,
int,
int)> a2 =
349 EXPECT_EQ(3L,
a.Perform(std::make_tuple(1, 2)));
353TEST(InvokeTest, FunctionWithCompatibleType) {
371 EXPECT_EQ(4123,
a.Perform(std::make_tuple(4000)));
378 std::string s(
"Hell");
379 std::tuple<std::string, char> dummy = std::make_tuple(s,
'o');
391TEST(InvokeMethodTest, MethodThatTakes4Arguments) {
394 EXPECT_EQ(1357,
a.Perform(std::make_tuple(1000, 200, 30, 4)));
398TEST(InvokeMethodTest, MethodThatTakes5Arguments) {
401 EXPECT_EQ(12345,
a.Perform(std::make_tuple(10000, 2000, 300, 40, 5)));
405TEST(InvokeMethodTest, MethodThatTakes6Arguments) {
407 Action<int(
int,
int,
int,
int,
int,
int)>
a =
410 a.Perform(std::make_tuple(100000, 20000, 3000, 400, 50, 6)));
414TEST(InvokeMethodTest, MethodThatTakes7Arguments) {
416 Action<std::string(
const char*,
const char*,
const char*,
const char*,
417 const char*,
const char*,
const char*)>
426TEST(InvokeMethodTest, MethodThatTakes8Arguments) {
428 Action<std::string(
const char*,
const char*,
const char*,
const char*,
429 const char*,
const char*,
const char*,
const char*)>
438TEST(InvokeMethodTest, MethodThatTakes9Arguments) {
440 Action<std::string(
const char*,
const char*,
const char*,
const char*,
441 const char*,
const char*,
const char*,
const char*,
444 EXPECT_EQ(
"123456789",
a.Perform(std::make_tuple(
451TEST(InvokeMethodTest, MethodThatTakes10Arguments) {
453 Action<std::string(
const char*,
const char*,
const char*,
const char*,
454 const char*,
const char*,
const char*,
const char*,
455 const char*,
const char*)>
465TEST(InvokeMethodTest, MethodWithCompatibleType) {
467 Action<long(
int,
short,
char,
bool)>
a =
485TEST(ReturnArgActionTest, WorksForOneArgIntArg0) {
486 const Action<int(
int)>
a = ReturnArg<0>();
490TEST(ReturnArgActionTest, WorksForMultiArgBoolArg0) {
491 const Action<bool(
bool,
bool,
bool)>
a = ReturnArg<0>();
492 EXPECT_TRUE(
a.Perform(std::make_tuple(
true,
false,
false)));
495TEST(ReturnArgActionTest, WorksForMultiArgStringArg2) {
496 const Action<std::string(
int,
int, std::string,
int)>
a = ReturnArg<2>();
497 EXPECT_EQ(
"seven",
a.Perform(std::make_tuple(5, 6, std::string(
"seven"), 8)));
500TEST(SaveArgActionTest, WorksForSameType) {
502 const Action<void(
int n)> a1 = SaveArg<0>(&result);
503 a1.
Perform(std::make_tuple(5));
507TEST(SaveArgActionTest, WorksForCompatibleType) {
509 const Action<void(
bool,
char)> a1 = SaveArg<1>(&result);
510 a1.
Perform(std::make_tuple(
true,
'a'));
514TEST(SaveArgPointeeActionTest, WorksForSameType) {
517 const Action<void(
const int*)> a1 = SaveArgPointee<0>(&result);
522TEST(SaveArgPointeeActionTest, WorksForCompatibleType) {
525 const Action<void(
bool,
char*)> a1 = SaveArgPointee<1>(&result);
530TEST(SetArgRefereeActionTest, WorksForSameType) {
532 const Action<void(
int&)> a1 = SetArgReferee<0>(1);
537TEST(SetArgRefereeActionTest, WorksForCompatibleType) {
539 const Action<void(
int,
int&)> a1 = SetArgReferee<1>(
'a');
544TEST(SetArgRefereeActionTest, WorksWithExtraArguments) {
546 const Action<void(
bool,
int,
int&,
const char*)> a1 = SetArgReferee<2>(
'a');
547 a1.
Perform(std::tuple<bool, int, int&, const char*>(
true, 0,
value,
"hi"));
569TEST(DeleteArgActionTest, OneArg) {
570 bool is_deleted =
false;
574 a1.
Perform(std::make_tuple(t));
578TEST(DeleteArgActionTest, TenArgs) {
579 bool is_deleted =
false;
581 const Action<void(
bool,
int,
int,
const char*,
bool,
584 a1.
Perform(std::make_tuple(
true, 5, 6,
CharPtr(
"hi"),
false, 7, 8, 9, 10, t));
588#if GTEST_HAS_EXCEPTIONS
590TEST(ThrowActionTest, ThrowsGivenExceptionInVoidFunction) {
591 const Action<void(
int n)>
a = Throw(
'a');
597TEST(ThrowActionTest, ThrowsGivenExceptionInNonVoidFunction) {
598 const Action<double(
char ch)>
a = Throw(MyException());
602TEST(ThrowActionTest, ThrowsGivenExceptionInNullaryFunction) {
603 const Action<double()>
a = Throw(MyException());
611TEST(SetArrayArgumentTest, SetsTheNthArray) {
612 typedef void MyFunction(
bool,
int*,
char*);
613 int numbers[] = { 1, 2, 3 };
620 a.Perform(std::make_tuple(
true, pn, pch));
631 std::string letters =
"abc";
632 a = SetArrayArgument<2>(letters.begin(), letters.end());
633 std::fill_n(n, 4, 0);
634 std::fill_n(
ch, 4,
'\0');
635 a.Perform(std::make_tuple(
true, pn, pch));
647TEST(SetArrayArgumentTest, SetsTheNthArrayWithEmptyRange) {
648 typedef void MyFunction(
bool,
int*);
649 int numbers[] = { 1, 2, 3 };
654 a.Perform(std::make_tuple(
true, pn));
663TEST(SetArrayArgumentTest, SetsTheNthArrayWithConvertibleType) {
664 typedef void MyFunction(
bool,
int*);
665 char chars[] = { 97, 98, 99 };
668 int codes[4] = { 111, 222, 333, 444 };
670 a.Perform(std::make_tuple(
true, pcodes));
678TEST(SetArrayArgumentTest, SetsTheNthArrayWithIteratorArgument) {
679 typedef void MyFunction(
bool, std::back_insert_iterator<std::string>);
680 std::string letters =
"abc";
684 a.Perform(std::make_tuple(
true, back_inserter(s)));
688TEST(ReturnPointeeTest, Works) {
690 const Action<int()>
a = ReturnPointee(&n);
expr expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 c *expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr1 c expr2 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr2 expr1 expr2 expr1 expr1 expr1 expr2 expr1 expr2 expr1 expr1 expr1 c
Result Perform(ArgumentTuple args) const
DeletionTester(bool *is_deleted)
std::string Concat8(const char *s1, const char *s2, const char *s3, const char *s4, const char *s5, const char *s6, const char *s7, const char *s8)
int SumOf6(int a, int b, int c, int d, int e, int f)
int SumOf5(int a, int b, int c, int d, int e)
std::string Concat7(const char *s1, const char *s2, const char *s3, const char *s4, const char *s5, const char *s6, const char *s7)
int SumOf4(int a, int b, int c, int d) const
std::string Binary(const std::string &str, char c) const
std::string Concat9(const char *s1, const char *s2, const char *s3, const char *s4, const char *s5, const char *s6, const char *s7, const char *s8, const char *s9)
int SumOfLast2(Unused, Unused, int a, int b) const
std::string Concat10(const char *s1, const char *s2, const char *s3, const char *s4, const char *s5, const char *s6, const char *s7, const char *s8, const char *s9, const char *s10)
int Ternary(int x, bool y, char z)
#define EXPECT_EQ(val1, val2)
#define EXPECT_THROW(statement, expected_exception)
#define TEST(test_suite_name, test_name)
#define EXPECT_TRUE(condition)
#define EXPECT_FALSE(condition)
int SumOf6(int a, int b, int c, int d, int e, int f)
const char * CharPtr(const char *s)
std::string Concat7(const char *s1, const char *s2, const char *s3, const char *s4, const char *s5, const char *s6, const char *s7)
std::string Concat9(const char *s1, const char *s2, const char *s3, const char *s4, const char *s5, const char *s6, const char *s7, const char *s8, const char *s9)
bool ByConstRef(const std::string &s)
int SumOf5(int a, int b, int c, int d, int e)
int SumOf4(int a, int b, int c, int d)
std::string Concat10(const char *s1, const char *s2, const char *s3, const char *s4, const char *s5, const char *s6, const char *s7, const char *s8, const char *s9, const char *s10)
std::string Concat6(const char *s1, const char *s2, const char *s3, const char *s4, const char *s5, const char *s6)
std::string Concat4(const char *s1, const char *s2, const char *s3, const char *s4)
const char * Plus1(const char *s)
void VoidFunctionWithFourArguments(char, int, float, double)
std::string Concat8(const char *s1, const char *s2, const char *s3, const char *s4, const char *s5, const char *s6, const char *s7, const char *s8)
int SumOfFirst2(int a, int b, Unused, Unused)
int Ternary(int x, char y, short z)
void VoidTernary(int, char, bool)
std::string ByNonConstRef(std::string &s)
const char * Binary(const char *input, short n)
std::string Concat5(const char *s1, const char *s2, const char *s3, const char *s4, const char *s5)
bool ReferencesGlobalDouble(const double &x)
void VoidBinary(int, char)
internal::WithArgsAction< typename std::decay< InnerAction >::type > WithoutArgs(InnerAction &&action)
PolymorphicAction< internal::ReturnVoidAction > Return()
internal::WithArgsAction< typename std::decay< InnerAction >::type, k > WithArg(InnerAction &&action)
std::decay< FunctionImpl >::type Invoke(FunctionImpl &&function_impl)
int operator()(int a, int b, int c, int d, int e)
int operator()(int a, int b, int c, int d, int e, int f)