45 namespace gmock_more_actions_test {
52 using testing::DeleteArg;
55 using testing::ReturnArg;
56 using testing::ReturnPointee;
57 using testing::SaveArg;
58 using testing::SaveArgPointee;
59 using testing::SetArgReferee;
87 const char*
Plus1(
const char* s) {
return s + 1; }
121 int SumOf5(
int a,
int b,
int c,
int d,
int e) {
return a +
b + c +
d + e; }
125 return a +
b + c +
d + e;
130 const char* s4,
const char* s5) {
135 return a +
b + c +
d + e +
f;
140 return a +
b + c +
d + e +
f;
145 const char* s4,
const char* s5,
const char* s6) {
150 const char* s4,
const char* s5,
const char* s6,
152 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7;
156 const char* s4,
const char* s5,
const char* s6,
157 const char* s7,
const char* s8) {
158 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7 + s8;
162 const char* s4,
const char* s5,
const char* s6,
163 const char* s7,
const char* s8,
const char* s9) {
164 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9;
168 const char* s4,
const char* s5,
const char* s6,
169 const char* s7,
const char* s8,
const char* s9,
171 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10;
192 int SumOf5(
int a,
int b,
int c,
int d,
int e) {
return a +
b + c +
d + e; }
195 return a +
b + c +
d + e +
f;
199 const char* s4,
const char* s5,
const char* s6,
201 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7;
205 const char* s4,
const char* s5,
const char* s6,
206 const char* s7,
const char* s8) {
207 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7 + s8;
211 const char* s4,
const char* s5,
const char* s6,
212 const char* s7,
const char* s8,
const char* s9) {
213 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9;
217 const char* s4,
const char* s5,
const char* s6,
218 const char* s7,
const char* s8,
const char* s9,
220 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10;
243 const char*
p =
"Hello";
254 TEST(InvokeTest, FunctionThatTakes4Arguments) {
256 EXPECT_EQ(1234,
a.Perform(std::make_tuple(1000, 200, 30, 4)));
260 TEST(InvokeTest, FunctionThatTakes5Arguments) {
262 EXPECT_EQ(12345,
a.Perform(std::make_tuple(10000, 2000, 300, 40, 5)));
266 TEST(InvokeTest, FunctionThatTakes6Arguments) {
269 a.Perform(std::make_tuple(100000, 20000, 3000, 400, 50, 6)));
274 inline const char*
CharPtr(
const char* s) {
return s; }
277 TEST(InvokeTest, FunctionThatTakes7Arguments) {
279 const char*,
const char*,
const char*)>
288 TEST(InvokeTest, FunctionThatTakes8Arguments) {
290 const char*,
const char*,
const char*,
const char*)>
299 TEST(InvokeTest, FunctionThatTakes9Arguments) {
301 const char*,
const char*,
const char*,
const char*,
304 EXPECT_EQ(
"123456789",
a.Perform(std::make_tuple(
311 TEST(InvokeTest, FunctionThatTakes10Arguments) {
313 const char*,
const char*,
const char*,
const char*,
314 const char*,
const char*)>
324 TEST(InvokeTest, FunctionWithUnusedParameters) {
326 std::tuple<int, int, double, std::string>
dummy =
330 Action<int(
int,
int,
bool,
int*)> a2 =
333 23, a2.
Perform(std::make_tuple(20, 3,
true,
static_cast<int*
>(
nullptr))));
337 TEST(InvokeTest, MethodWithUnusedParameters) {
342 Action<int(
char,
double,
int,
int)> a2 =
350 EXPECT_EQ(3L,
a.Perform(std::make_tuple(1, 2)));
354 TEST(InvokeTest, FunctionWithCompatibleType) {
372 EXPECT_EQ(4123,
a.Perform(std::make_tuple(4000)));
380 std::tuple<std::string, char>
dummy = std::make_tuple(
s,
'o');
392 TEST(InvokeMethodTest, MethodThatTakes4Arguments) {
395 EXPECT_EQ(1357,
a.Perform(std::make_tuple(1000, 200, 30, 4)));
399 TEST(InvokeMethodTest, MethodThatTakes5Arguments) {
402 EXPECT_EQ(12345,
a.Perform(std::make_tuple(10000, 2000, 300, 40, 5)));
406 TEST(InvokeMethodTest, MethodThatTakes6Arguments) {
408 Action<int(
int,
int,
int,
int,
int,
int)>
a =
411 a.Perform(std::make_tuple(100000, 20000, 3000, 400, 50, 6)));
415 TEST(InvokeMethodTest, MethodThatTakes7Arguments) {
418 const char*,
const char*,
const char*)>
427 TEST(InvokeMethodTest, MethodThatTakes8Arguments) {
430 const char*,
const char*,
const char*,
const char*)>
439 TEST(InvokeMethodTest, MethodThatTakes9Arguments) {
442 const char*,
const char*,
const char*,
const char*,
445 EXPECT_EQ(
"123456789",
a.Perform(std::make_tuple(
452 TEST(InvokeMethodTest, MethodThatTakes10Arguments) {
455 const char*,
const char*,
const char*,
const char*,
456 const char*,
const char*)>
466 TEST(InvokeMethodTest, MethodWithCompatibleType) {
486 TEST(ReturnArgActionTest, WorksForOneArgIntArg0) {
487 const Action<int(
int)>
a = ReturnArg<0>();
491 TEST(ReturnArgActionTest, WorksForMultiArgBoolArg0) {
492 const Action<bool(
bool,
bool,
bool)>
a = ReturnArg<0>();
493 EXPECT_TRUE(
a.Perform(std::make_tuple(
true,
false,
false)));
496 TEST(ReturnArgActionTest, WorksForMultiArgStringArg2) {
501 TEST(SaveArgActionTest, WorksForSameType) {
503 const Action<
void(
int n)> a1 = SaveArg<0>(&result);
504 a1.
Perform(std::make_tuple(5));
508 TEST(SaveArgActionTest, WorksForCompatibleType) {
510 const Action<
void(
bool,
char)> a1 = SaveArg<1>(&result);
511 a1.
Perform(std::make_tuple(
true,
'a'));
515 TEST(SaveArgPointeeActionTest, WorksForSameType) {
518 const Action<
void(
const int*)> a1 = SaveArgPointee<0>(&result);
523 TEST(SaveArgPointeeActionTest, WorksForCompatibleType) {
526 const Action<
void(
bool,
char*)> a1 = SaveArgPointee<1>(&result);
531 TEST(SetArgRefereeActionTest, WorksForSameType) {
533 const Action<
void(
int&)> a1 = SetArgReferee<0>(1);
538 TEST(SetArgRefereeActionTest, WorksForCompatibleType) {
540 const Action<
void(
int,
int&)> a1 = SetArgReferee<1>(
'a');
545 TEST(SetArgRefereeActionTest, WorksWithExtraArguments) {
547 const Action<
void(
bool,
int,
int&,
const char*)> a1 = SetArgReferee<2>(
'a');
548 a1.
Perform(std::tuple<bool, int, int&, const char*>(
true, 0,
value,
"hi"));
570 TEST(DeleteArgActionTest, OneArg) {
571 bool is_deleted =
false;
575 a1.
Perform(std::make_tuple(t));
579 TEST(DeleteArgActionTest, TenArgs) {
580 bool is_deleted =
false;
582 const Action<
void(
bool,
int,
int,
const char*,
bool,
585 a1.
Perform(std::make_tuple(
true, 5, 6,
CharPtr(
"hi"),
false, 7, 8, 9, 10, t));
589 #if GTEST_HAS_EXCEPTIONS
591 TEST(ThrowActionTest, ThrowsGivenExceptionInVoidFunction) {
596 class MyException {};
598 TEST(ThrowActionTest, ThrowsGivenExceptionInNonVoidFunction) {
599 const Action<double(
char ch)>
a = Throw(MyException());
603 TEST(ThrowActionTest, ThrowsGivenExceptionInNullaryFunction) {
604 const Action<double()>
a = Throw(MyException());
608 #endif // GTEST_HAS_EXCEPTIONS
612 TEST(SetArrayArgumentTest, SetsTheNthArray) {
614 int numbers[] = { 1, 2, 3 };
621 a.Perform(std::make_tuple(
true, pn, pch));
633 a = SetArrayArgument<2>(letters.begin(), letters.end());
634 std::fill_n(
n, 4, 0);
635 std::fill_n(
ch, 4,
'\0');
636 a.Perform(std::make_tuple(
true, pn, pch));
648 TEST(SetArrayArgumentTest, SetsTheNthArrayWithEmptyRange) {
650 int numbers[] = { 1, 2, 3 };
655 a.Perform(std::make_tuple(
true, pn));
664 TEST(SetArrayArgumentTest, SetsTheNthArrayWithConvertibleType) {
666 char chars[] = { 97, 98, 99 };
669 int codes[4] = { 111, 222, 333, 444 };
671 a.Perform(std::make_tuple(
true, pcodes));
679 TEST(SetArrayArgumentTest, SetsTheNthArrayWithIteratorArgument) {
680 typedef void MyFunction(
bool, std::back_insert_iterator<std::string>);
685 a.Perform(std::make_tuple(
true, back_inserter(
s)));
689 TEST(ReturnPointeeTest, Works) {
691 const Action<int()>
a = ReturnPointee(&
n);