52 namespace gmock_more_actions_test {
69 inline short Short(
short n) {
return n; }
79 bool ByConstRef(
const std::string& s) {
return s ==
"Hi"; }
98 const char*
Binary(
const char* input,
short n) {
return input + n; }
102 int SumOf4(
int a,
int b,
int c,
int d) {
return a + b + c + d; }
106 int SumOf5(
int a,
int b,
int c,
int d,
int e) {
return a + b + c + d + e; }
110 return a + b + c + d + e;
114 int SumOf6(
int a,
int b,
int c,
int d,
int e,
int f) {
115 return a + b + c + d + e + f;
120 return a + b + c + d + e + f;
124 std::string
Concat7(
const char* s1,
const char* s2,
const char* s3,
125 const char* s4,
const char* s5,
const char* s6,
127 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7;
130 std::string
Concat8(
const char* s1,
const char* s2,
const char* s3,
131 const char* s4,
const char* s5,
const char* s6,
132 const char* s7,
const char* s8) {
133 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7 + s8;
136 std::string
Concat9(
const char* s1,
const char* s2,
const char* s3,
137 const char* s4,
const char* s5,
const char* s6,
138 const char* s7,
const char* s8,
const char* s9) {
139 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9;
142 std::string
Concat10(
const char* s1,
const char* s2,
const char* s3,
143 const char* s4,
const char* s5,
const char* s6,
144 const char* s7,
const char* s8,
const char* s9,
146 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10;
157 std::string
Binary(
const std::string& str,
char c)
const {
return str +
c; }
162 return a + b + c + d +
value_;
167 int SumOf5(
int a,
int b,
int c,
int d,
int e) {
return a + b + c + d + e; }
169 int SumOf6(
int a,
int b,
int c,
int d,
int e,
int f) {
170 return a + b + c + d + e + f;
173 std::string
Concat7(
const char* s1,
const char* s2,
const char* s3,
174 const char* s4,
const char* s5,
const char* s6,
176 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7;
179 std::string
Concat8(
const char* s1,
const char* s2,
const char* s3,
180 const char* s4,
const char* s5,
const char* s6,
181 const char* s7,
const char* s8) {
182 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7 + s8;
185 std::string
Concat9(
const char* s1,
const char* s2,
const char* s3,
186 const char* s4,
const char* s5,
const char* s6,
187 const char* s7,
const char* s8,
const char* s9) {
188 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9;
191 std::string
Concat10(
const char* s1,
const char* s2,
const char* s3,
192 const char* s4,
const char* s5,
const char* s6,
193 const char* s7,
const char* s8,
const char* s9,
195 return std::string(s1) + s2 + s3 + s4 + s5 + s6 + s7 + s8 + s9 + s10;
205 EXPECT_EQ(1, a.Perform(std::make_tuple()));
218 const char*
p =
"Hello";
229 TEST(InvokeTest, FunctionThatTakes4Arguments) {
231 EXPECT_EQ(1234, a.Perform(std::make_tuple(1000, 200, 30, 4)));
235 TEST(InvokeTest, FunctionThatTakes5Arguments) {
237 EXPECT_EQ(12345, a.Perform(std::make_tuple(10000, 2000, 300, 40, 5)));
241 TEST(InvokeTest, FunctionThatTakes6Arguments) {
244 a.Perform(std::make_tuple(100000, 20000, 3000, 400, 50, 6)));
249 inline const char*
CharPtr(
const char* s) {
return s; }
252 TEST(InvokeTest, FunctionThatTakes7Arguments) {
253 Action<std::string(
const char*,
const char*,
const char*,
const char*,
254 const char*,
const char*,
const char*)>
263 TEST(InvokeTest, FunctionThatTakes8Arguments) {
264 Action<std::string(
const char*,
const char*,
const char*,
const char*,
265 const char*,
const char*,
const char*,
const char*)>
274 TEST(InvokeTest, FunctionThatTakes9Arguments) {
275 Action<std::string(
const char*,
const char*,
const char*,
const char*,
276 const char*,
const char*,
const char*,
const char*,
279 EXPECT_EQ(
"123456789", a.Perform(std::make_tuple(
286 TEST(InvokeTest, FunctionThatTakes10Arguments) {
287 Action<std::string(
const char*,
const char*,
const char*,
const char*,
288 const char*,
const char*,
const char*,
const char*,
289 const char*,
const char*)>
299 TEST(InvokeTest, FunctionWithUnusedParameters) {
301 std::tuple<int, int, double, std::string> dummy =
302 std::make_tuple(10, 2, 5.6, std::string(
"hi"));
307 23, a2.Perform(std::make_tuple(20, 3,
true, static_cast<int*>(
nullptr))));
311 TEST(InvokeTest, MethodWithUnusedParameters) {
317 EXPECT_EQ(23, a2.Perform(std::make_tuple(
'a', 2.5, 20, 3)));
323 EXPECT_EQ(3L, a.Perform(std::make_tuple(1, 2)));
327 TEST(InvokeTest, FunctionWithCompatibleType) {
338 EXPECT_EQ(123, a.Perform(std::make_tuple()));
345 EXPECT_EQ(4123, a.Perform(std::make_tuple(4000)));
352 std::string s(
"Hell");
353 std::tuple<std::string, char> dummy = std::make_tuple(s,
'o');
361 EXPECT_EQ(1124, a.Perform(std::make_tuple(1000,
true,
Char(1))));
365 TEST(InvokeMethodTest, MethodThatTakes4Arguments) {
368 EXPECT_EQ(1357, a.Perform(std::make_tuple(1000, 200, 30, 4)));
372 TEST(InvokeMethodTest, MethodThatTakes5Arguments) {
376 EXPECT_EQ(12345, a.Perform(std::make_tuple(10000, 2000, 300, 40, 5)));
380 TEST(InvokeMethodTest, MethodThatTakes6Arguments) {
385 a.Perform(std::make_tuple(100000, 20000, 3000, 400, 50, 6)));
389 TEST(InvokeMethodTest, MethodThatTakes7Arguments) {
391 Action<std::string(
const char*,
const char*,
const char*,
const char*,
392 const char*,
const char*,
const char*)>
401 TEST(InvokeMethodTest, MethodThatTakes8Arguments) {
403 Action<std::string(
const char*,
const char*,
const char*,
const char*,
404 const char*,
const char*,
const char*,
const char*)>
413 TEST(InvokeMethodTest, MethodThatTakes9Arguments) {
415 Action<std::string(
const char*,
const char*,
const char*,
const char*,
416 const char*,
const char*,
const char*,
const char*,
419 EXPECT_EQ(
"123456789", a.Perform(std::make_tuple(
426 TEST(InvokeMethodTest, MethodThatTakes10Arguments) {
428 Action<std::string(
const char*,
const char*,
const char*,
const char*,
429 const char*,
const char*,
const char*,
const char*,
430 const char*,
const char*)>
440 TEST(InvokeMethodTest, MethodWithCompatibleType) {
450 EXPECT_EQ(1, a.Perform(std::make_tuple(2)));
460 TEST(ReturnArgActionTest, WorksForOneArgIntArg0) {
462 EXPECT_EQ(5, a.Perform(std::make_tuple(5)));
465 TEST(ReturnArgActionTest, WorksForMultiArgBoolArg0) {
467 EXPECT_TRUE(a.Perform(std::make_tuple(
true,
false,
false)));
470 TEST(ReturnArgActionTest, WorksForMultiArgStringArg2) {
472 EXPECT_EQ(
"seven", a.Perform(std::make_tuple(5, 6, std::string(
"seven"), 8)));
475 TEST(ReturnArgActionTest, WorksForNonConstRefArg0) {
477 std::string s =
"12345";
478 EXPECT_EQ(&s, &a.Perform(std::forward_as_tuple(s)));
481 TEST(SaveArgActionTest, WorksForSameType) {
484 a1.Perform(std::make_tuple(5));
488 TEST(SaveArgActionTest, WorksForCompatibleType) {
491 a1.Perform(std::make_tuple(
true,
'a'));
495 TEST(SaveArgPointeeActionTest, WorksForSameType) {
499 a1.Perform(std::make_tuple(&value));
503 TEST(SaveArgPointeeActionTest, WorksForCompatibleType) {
507 a1.Perform(std::make_tuple(
true, &value));
511 TEST(SetArgRefereeActionTest, WorksForSameType) {
514 a1.Perform(std::tuple<int&>(value));
518 TEST(SetArgRefereeActionTest, WorksForCompatibleType) {
521 a1.Perform(std::tuple<int, int&>(0, value));
525 TEST(SetArgRefereeActionTest, WorksWithExtraArguments) {
528 a1.Perform(std::tuple<bool, int, int&, const char*>(
true, 0, value,
"hi"));
538 *is_deleted_ =
false;
547 TEST(DeleteArgActionTest, OneArg) {
548 bool is_deleted =
false;
552 a1.Perform(std::make_tuple(t));
556 TEST(DeleteArgActionTest, TenArgs) {
557 bool is_deleted =
false;
559 const Action<
void(
bool,
int,
int,
const char*,
bool,
int,
int,
int,
int,
563 a1.Perform(std::make_tuple(
true, 5, 6,
CharPtr(
"hi"),
false, 7, 8, 9, 10, t));
567 #if GTEST_HAS_EXCEPTIONS
569 TEST(ThrowActionTest, ThrowsGivenExceptionInVoidFunction) {
574 class MyException {};
576 TEST(ThrowActionTest, ThrowsGivenExceptionInNonVoidFunction) {
577 const Action<double(char ch)> a = Throw(MyException());
578 EXPECT_THROW(a.Perform(std::make_tuple(
'0')), MyException);
581 TEST(ThrowActionTest, ThrowsGivenExceptionInNullaryFunction) {
582 const Action<double()> a = Throw(MyException());
583 EXPECT_THROW(a.Perform(std::make_tuple()), MyException);
589 virtual void Func() {}
592 class MockObject :
public Object {
594 ~MockObject()
override {}
598 TEST(ThrowActionTest, Times0) {
603 ON_CALL(m, Func()).WillByDefault([] {
throw "something"; });
613 #endif // GTEST_HAS_EXCEPTIONS
617 TEST(SetArrayArgumentTest, SetsTheNthArray) {
619 int numbers[] = {1, 2, 3};
626 a.Perform(std::make_tuple(
true, pn, pch));
637 std::string letters =
"abc";
638 a = SetArrayArgument<2>(letters.begin(), letters.end());
639 std::fill_n(n, 4, 0);
640 std::fill_n(ch, 4,
'\0');
641 a.Perform(std::make_tuple(
true, pn, pch));
653 TEST(SetArrayArgumentTest, SetsTheNthArrayWithEmptyRange) {
655 int numbers[] = {1, 2, 3};
660 a.Perform(std::make_tuple(
true, pn));
669 TEST(SetArrayArgumentTest, SetsTheNthArrayWithConvertibleType) {
671 char chars[] = {97, 98, 99};
674 int codes[4] = {111, 222, 333, 444};
676 a.Perform(std::make_tuple(
true, pcodes));
684 TEST(SetArrayArgumentTest, SetsTheNthArrayWithIteratorArgument) {
685 using MyFunction =
void(
bool, std::back_insert_iterator<std::string>);
686 std::string letters =
"abc";
690 a.Perform(std::make_tuple(
true, std::back_inserter(s)));
694 TEST(ReturnPointeeTest, Works) {
697 EXPECT_EQ(42, a.Perform(std::make_tuple()));
700 EXPECT_EQ(43, a.Perform(std::make_tuple()));
706 TEST(InvokeArgumentTest, Function0) {
712 TEST(InvokeArgumentTest, Functor1) {
718 TEST(InvokeArgumentTest, Functor1MoveOnly) {
724 TEST(InvokeArgumentTest, OneShotFunctor1) {
730 TEST(InvokeArgumentTest, Function5) {
732 InvokeArgument<0>(10000, 2000, 300, 40, 5);
737 TEST(InvokeArgumentTest, Functor5) {
739 InvokeArgument<0>(10000, 2000, 300, 40, 5);
744 TEST(InvokeArgumentTest, Function6) {
746 InvokeArgument<0>(100000, 20000, 3000, 400, 50, 6);
751 TEST(InvokeArgumentTest, Functor6) {
753 InvokeArgument<0>(100000, 20000, 3000, 400, 50, 6);
758 TEST(InvokeArgumentTest, Function7) {
759 Action<std::string(std::string(*)(
const char*,
const char*,
const char*,
760 const char*,
const char*,
const char*,
762 a = InvokeArgument<0>(
"1",
"2",
"3",
"4",
"5",
"6",
"7");
767 TEST(InvokeArgumentTest, Function8) {
768 Action<std::string(std::string(*)(
const char*,
const char*,
const char*,
769 const char*,
const char*,
const char*,
770 const char*,
const char*))>
771 a = InvokeArgument<0>(
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8");
776 TEST(InvokeArgumentTest, Function9) {
777 Action<std::string(std::string(*)(
const char*,
const char*,
const char*,
778 const char*,
const char*,
const char*,
779 const char*,
const char*,
const char*))>
780 a = InvokeArgument<0>(
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9");
785 TEST(InvokeArgumentTest, Function10) {
786 Action<std::string(std::string(*)(
787 const char*,
const char*,
const char*,
const char*,
const char*,
788 const char*,
const char*,
const char*,
const char*,
const char*))>
789 a = InvokeArgument<0>(
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"0");
794 TEST(InvokeArgumentTest, ByPointerFunction) {
796 a = InvokeArgument<0>(
static_cast<const char*
>(
"Hi"),
Short(1));
802 TEST(InvokeArgumentTest, FunctionWithCStringLiteral) {
804 a = InvokeArgument<0>(
"Hi",
Short(1));
809 TEST(InvokeArgumentTest, ByConstReferenceFunction) {
811 InvokeArgument<0>(std::string(
"Hi"));
820 TEST(InvokeArgumentTest, ByExplicitConstReferenceFunction) {
827 a = InvokeArgument<0>(
ByRef(x));
831 TEST(InvokeArgumentTest, MoveOnlyType) {
837 (std::unique_ptr<Marker>, std::function<
int()>), ());
840 ON_CALL(mock, MockMethod(
_,
_)).WillByDefault(InvokeArgument<1>());
844 .WillByDefault(WithArg<1>(InvokeArgument<0>()));
852 EXPECT_EQ(2, a.Perform(std::make_tuple(&n)));
857 TEST(DoAllTest, ThreeActions) {
860 SetArgPointee<1>(2),
Return(3));
861 EXPECT_EQ(3, a.Perform(std::make_tuple(&m, &
n)));
871 DoAll(SetArgPointee<0>(1), SetArgPointee<1>(2), SetArgPointee<2>(
'a'),
873 EXPECT_EQ(3, a.Perform(std::make_tuple(&m, &
n, &ch)));
882 char a =
'\0', b =
'\0';
884 DoAll(SetArgPointee<0>(1), SetArgPointee<1>(2), SetArgPointee<2>(
'a'),
885 SetArgPointee<3>(
'b'),
Return(3));
886 EXPECT_EQ(3, action.Perform(std::make_tuple(&m, &
n, &a, &b)));
896 char a =
'\0', b =
'\0',
c =
'\0';
898 DoAll(SetArgPointee<0>(1), SetArgPointee<1>(2), SetArgPointee<2>(
'a'),
899 SetArgPointee<3>(
'b'), SetArgPointee<4>(
'c'),
Return(3));
900 EXPECT_EQ(3, action.Perform(std::make_tuple(&m, &
n, &a, &b, &
c)));
909 TEST(DoAllTest, SevenActions) {
911 char a =
'\0', b =
'\0',
c =
'\0', d =
'\0';
913 DoAll(SetArgPointee<0>(1), SetArgPointee<1>(2), SetArgPointee<2>(
'a'),
914 SetArgPointee<3>(
'b'), SetArgPointee<4>(
'c'), SetArgPointee<5>(
'd'),
916 EXPECT_EQ(3, action.Perform(std::make_tuple(&m, &
n, &a, &b, &
c, &d)));
926 TEST(DoAllTest, EightActions) {
928 char a =
'\0', b =
'\0',
c =
'\0', d =
'\0', e =
'\0';
929 Action<int(
int*,
int*,
char*,
char*,
char*,
char*,
932 DoAll(SetArgPointee<0>(1), SetArgPointee<1>(2), SetArgPointee<2>(
'a'),
933 SetArgPointee<3>(
'b'), SetArgPointee<4>(
'c'),
934 SetArgPointee<5>(
'd'), SetArgPointee<6>(
'e'),
Return(3));
935 EXPECT_EQ(3, action.Perform(std::make_tuple(&m, &
n, &a, &b, &
c, &d, &e)));
948 char a =
'\0', b =
'\0',
c =
'\0', d =
'\0', e =
'\0',
f =
'\0';
949 Action<int(
int*,
int*,
char*,
char*,
char*,
char*,
951 action =
DoAll(SetArgPointee<0>(1), SetArgPointee<1>(2),
952 SetArgPointee<2>(
'a'), SetArgPointee<3>(
'b'),
953 SetArgPointee<4>(
'c'), SetArgPointee<5>(
'd'),
954 SetArgPointee<6>(
'e'), SetArgPointee<7>(
'f'),
Return(3));
955 EXPECT_EQ(3, action.Perform(std::make_tuple(&m, &
n, &a, &b, &
c, &d, &e, &
f)));
969 char a =
'\0', b =
'\0',
c =
'\0', d =
'\0';
970 char e =
'\0',
f =
'\0',
g =
'\0';
971 Action<int(
int*,
int*,
char*,
char*,
char*,
char*,
972 char*,
char*,
char*)>
974 DoAll(SetArgPointee<0>(1), SetArgPointee<1>(2), SetArgPointee<2>(
'a'),
975 SetArgPointee<3>(
'b'), SetArgPointee<4>(
'c'),
976 SetArgPointee<5>(
'd'), SetArgPointee<6>(
'e'),
977 SetArgPointee<7>(
'f'), SetArgPointee<8>(
'g'),
Return(3));
979 3, action.Perform(std::make_tuple(&m, &
n, &a, &b, &
c, &d, &e, &
f, &
g)));
992 bool ran_first =
false;
994 DoAll([&] { ran_first =
true; }, [&] {
return ran_first; });
998 TEST(DoAllTest, MoveOnlyArgs) {
999 bool ran_first =
false;
1002 [](std::unique_ptr<int>
p) {
return *
p; });
1003 EXPECT_EQ(7, a.Perform(std::make_tuple(std::unique_ptr<int>(
new int(7)))));
1007 TEST(DoAllTest, ImplicitlyConvertsActionArguments) {
1008 bool ran_first =
false;
1013 DoAll(first, [](std::vector<int> arg) {
return arg.front(); });
1014 EXPECT_EQ(7, a.Perform(std::make_tuple(std::vector<int>{7})));
1031 TEST(ActionMacroTest, WorksWhenNotReferencingArguments) {
1036 EXPECT_EQ(5, a2.Perform(std::make_tuple(1,
true)));
1042 TEST(ActionMacroTest, WorksWhenReturningVoid) {
1045 a1.Perform(std::make_tuple(5, &n));
1052 StaticAssertTypeEq<int*, arg2_type>();
1053 arg2_type temp = arg2;
1057 TEST(ActionMacroTest, CanReferenceArgumentType) {
1060 a1.Perform(std::make_tuple(5,
false, &n));
1067 StaticAssertTypeEq<std::tuple<int, char, int*>, args_type>();
1068 args_type args_copy = args;
1069 return std::get<0>(args_copy) + std::get<1>(args_copy);
1072 TEST(ActionMacroTest, CanReferenceArgumentTuple) {
1075 EXPECT_EQ(11, a1.Perform(std::make_tuple(5,
Char(6), &dummy)));
1082 int Dummy(
bool flag) {
return flag ? 1 : 0; }
1087 StaticAssertTypeEq<int(bool), function_type>();
1088 function_type* fp = &Dummy;
1092 TEST(ActionMacroTest, CanReferenceMockFunctionType) {
1094 EXPECT_EQ(1, a1.Perform(std::make_tuple(
true)));
1095 EXPECT_EQ(1, a1.Perform(std::make_tuple(
false)));
1101 StaticAssertTypeEq<int, return_type>();
1102 return_type result = Dummy(
true);
1106 TEST(ActionMacroTest, CanReferenceMockFunctionReturnType) {
1108 EXPECT_EQ(1, a1.Perform(std::make_tuple(
true)));
1109 EXPECT_EQ(1, a1.Perform(std::make_tuple(
false)));
1114 StaticAssertTypeEq<const bool&, arg1_type>();
1118 TEST(ActionMacroTest, WorksForConstReferenceArg) {
1120 const bool b =
false;
1121 EXPECT_EQ(&b, a.Perform(std::tuple<int, const bool&>(0, b)));
1126 StaticAssertTypeEq<int&, arg0_type>();
1130 TEST(ActionMacroTest, WorksForNonConstReferenceArg) {
1133 EXPECT_EQ(&n, a.Perform(std::tuple<int&, bool, int>(n,
true, 1)));
1137 namespace action_test {
1141 TEST(ActionMacroTest, WorksInNamespace) {
1143 EXPECT_EQ(3, a1.Perform(std::make_tuple(1, 2)));
1150 TEST(ActionMacroTest, WorksForDifferentArgumentNumbers) {
1152 EXPECT_EQ(4, a1.Perform(std::make_tuple(2)));
1162 TEST(ActionPMacroTest, DefinesParameterizedAction) {
1164 EXPECT_EQ(10, a1.Perform(std::make_tuple(1,
true)));
1170 arg0_type t1 = arg0;
1175 TEST(ActionPMacroTest, CanReferenceArgumentAndParameterTypes) {
1182 TEST(ActionPMacroTest, WorksInCompatibleMockFunction) {
1184 const std::string re =
"re";
1185 std::tuple<const std::string> dummy = std::make_tuple(re);
1192 ACTION(OverloadedAction) {
return arg0 ? arg1 :
"hello"; }
1195 return arg0 ? arg1 : default_value;
1199 return arg0 ? true_value : false_value;
1202 TEST(ActionMacroTest, CanDefineOverloadedActions) {
1205 const MyAction a1 = OverloadedAction();
1209 const MyAction a2 = OverloadedAction(
"hi");
1213 const MyAction a3 = OverloadedAction(
"hi",
"you");
1222 TEST(ActionPnMacroTest, WorksFor3Parameters) {
1227 const std::string re =
"re";
1228 std::tuple<const std::string> dummy = std::make_tuple(re);
1229 EXPECT_EQ(
"retail->", a2.Perform(dummy));
1232 ACTION_P4(Plus, p0, p1, p2, p3) {
return arg0 + p0 + p1 + p2 + p3; }
1234 TEST(ActionPnMacroTest, WorksFor4Parameters) {
1236 EXPECT_EQ(10 + 1 + 2 + 3 + 4, a1.Perform(std::make_tuple(10)));
1239 ACTION_P5(Plus, p0, p1, p2, p3, p4) {
return arg0 + p0 + p1 + p2 + p3 + p4; }
1241 TEST(ActionPnMacroTest, WorksFor5Parameters) {
1243 EXPECT_EQ(10 + 1 + 2 + 3 + 4 + 5, a1.Perform(std::make_tuple(10)));
1247 return arg0 + p0 + p1 + p2 + p3 + p4 + p5;
1250 TEST(ActionPnMacroTest, WorksFor6Parameters) {
1252 EXPECT_EQ(10 + 1 + 2 + 3 + 4 + 5 + 6, a1.Perform(std::make_tuple(10)));
1256 return arg0 + p0 + p1 + p2 + p3 + p4 + p5 + p6;
1259 TEST(ActionPnMacroTest, WorksFor7Parameters) {
1261 EXPECT_EQ(10 + 1 + 2 + 3 + 4 + 5 + 6 + 7, a1.Perform(std::make_tuple(10)));
1265 return arg0 + p0 + p1 + p2 + p3 + p4 + p5 + p6 + p7;
1268 TEST(ActionPnMacroTest, WorksFor8Parameters) {
1270 EXPECT_EQ(10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8,
1271 a1.Perform(std::make_tuple(10)));
1275 return arg0 + p0 + p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8;
1278 TEST(ActionPnMacroTest, WorksFor9Parameters) {
1280 EXPECT_EQ(10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9,
1281 a1.Perform(std::make_tuple(10)));
1284 ACTION_P10(Plus, p0, p1, p2, p3, p4, p5, p6, p7, p8, last_param) {
1285 arg0_type t0 = arg0;
1286 last_param_type t9 = last_param;
1287 return t0 + p0 + p1 + p2 + p3 + p4 + p5 + p6 + p7 + p8 + t9;
1290 TEST(ActionPnMacroTest, WorksFor10Parameters) {
1292 EXPECT_EQ(10 + 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10,
1293 a1.Perform(std::make_tuple(10)));
1300 std::string prefix_str(prefix);
1301 char suffix_char =
static_cast<char>(suffix);
1302 return prefix_str + arg0 + suffix_char;
1305 TEST(ActionPnMacroTest, SimpleTypePromotion) {
1307 PadArgument(std::string(
"foo"),
'r');
1309 PadArgument(
"foo", static_cast<int>(
'r'));
1320 std::stringstream ss;
1330 template <
typename T1,
typename T2>
1334 ConcatImplActionP3<std::string, T1, T2>
Concat(
const std::string& a,
T1 b,
1341 return ConcatImpl(a, b, c);
1346 return ConcatImpl<std::string, T1, T2>(
a, b,
c);
1352 template <
typename T1,
typename T2>
1354 return ConcatImpl(a, b, c);
1357 TEST(ActionPnMacroTest, CanPartiallyRestrictParameterTypes) {
1359 EXPECT_EQ(
"Hello12", a1.Perform(std::make_tuple()));
1362 EXPECT_EQ(
"123", a1.Perform(std::make_tuple()));
1371 TEST(ActionPnMacroTest, TypesAreCorrect) {
1373 DoFooAction a0 = DoFoo();
1376 DoFooActionP<int> a1 = DoFoo(1);
1380 DoFooActionP2<int, char> a2 = DoFoo(1,
'2');
1381 PlusActionP3<int, int, char> a3 =
Plus(1, 2,
'3');
1382 PlusActionP4<int, int, int, char> a4 =
Plus(1, 2, 3,
'4');
1383 PlusActionP5<int, int, int, int, char> a5 =
Plus(1, 2, 3, 4,
'5');
1384 PlusActionP6<int, int, int, int, int, char> a6 =
Plus(1, 2, 3, 4, 5,
'6');
1385 PlusActionP7<int, int, int, int, int, int, char> a7 =
1386 Plus(1, 2, 3, 4, 5, 6,
'7');
1387 PlusActionP8<int, int, int, int, int, int, int, char> a8 =
1388 Plus(1, 2, 3, 4, 5, 6, 7,
'8');
1389 PlusActionP9<int, int, int, int, int, int, int, int, char> a9 =
1390 Plus(1, 2, 3, 4, 5, 6, 7, 8,
'9');
1391 PlusActionP10<int, int, int, int, int, int, int, int, int, char> a10 =
1392 Plus(1, 2, 3, 4, 5, 6, 7, 8, 9,
'0');
1414 ACTION_P10(Plus10, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) {
1415 return a0 + a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9;
1418 TEST(ActionPnMacroTest, CanExplicitlyInstantiateWithReferenceTypes) {
1419 int x = 1,
y = 2,
z = 3;
1420 const std::tuple<> empty = std::make_tuple();
1425 a = Plus2<const int&, int&>(
x,
y);
1428 a = Plus3<int&, const int&, int&>(
x,
y,
z);
1431 int n[10] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10};
1432 a = Plus10<
const int&,
int&,
const int&,
int&,
const int&,
int&,
const int&,
1433 int&,
const int&,
int&>(n[0], n[1], n[2], n[3], n[4], n[5], n[6],
1441 int a8,
int a9,
int a10)
1442 :
value_(a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9 + a10) {}
1448 AND_0_VALUE_PARAMS()) {
1452 TEST(ActionTemplateTest, WorksWithoutValueParam) {
1454 int*
p = a.Perform(std::make_tuple());
1460 AND_1_VALUE_PARAMS(a0)) {
1464 TEST(ActionTemplateTest, WorksWithValueParams) {
1466 int*
p = a.Perform(std::make_tuple());
1473 AND_0_VALUE_PARAMS()) {
1474 delete std::get<k>(args);
1487 TEST(ActionTemplateTest, WorksForIntegralTemplateParams) {
1492 a.Perform(std::make_tuple(&n, resetter));
1498 HAS_1_TEMPLATE_PARAMS(template <typename Pointee>
class,
1500 AND_1_VALUE_PARAMS(pointee)) {
1501 return Pointer<pointee_type>(
new pointee_type(pointee));
1504 TEST(ActionTemplateTest, WorksForTemplateTemplateParameters) {
1506 ReturnSmartPointer<std::shared_ptr>(42);
1507 std::shared_ptr<int>
p = a.Perform(std::make_tuple());
1512 template <
typename T1,
typename T2,
typename T3,
int k4,
bool k5,
1513 unsigned int k6,
typename T7,
typename T8,
typename T9>
1521 HAS_10_TEMPLATE_PARAMS(
typename,
T1,
typename, T2,
typename, T3,
1522 int, k4,
bool, k5,
unsigned int, k6,
1523 class, T7,
class, T8,
class, T9,
1524 template <typename T>
class, T10),
1525 AND_1_VALUE_PARAMS(
value)) {
1529 TEST(ActionTemplateTest, WorksFor10TemplateParameters) {
1531 char, unsigned,
int>;
1532 const Action<Giant()> a = ReturnGiant<int, bool, double, 5,
true, 6, char,
1533 unsigned, int, std::shared_ptr>(42);
1534 Giant giant = a.Perform(std::make_tuple());
1540 AND_10_VALUE_PARAMS(v1, v2, v3, v4, v5, v6, v7, v8, v9, v10)) {
1541 return static_cast<Number
>(v1) + v2 + v3 + v4 + v5 + v6 + v7 + v8 + v9 + v10;
1544 TEST(ActionTemplateTest, WorksFor10ValueParameters) {
1545 const Action<int()> a = ReturnSum<int>(1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
1546 EXPECT_EQ(55, a.Perform(std::make_tuple()));
1557 AND_2_VALUE_PARAMS(v1, v2)) {
1558 return static_cast<Number
>(v1) + v2;
1562 AND_3_VALUE_PARAMS(v1, v2, v3)) {
1563 return static_cast<Number
>(v1) + v2 + v3;
1567 AND_4_VALUE_PARAMS(v1, v2, v3, v4)) {
1568 return static_cast<Number
>(v1) + v2 + v3 + v4 + k;
1571 TEST(ActionTemplateTest, CanBeOverloadedOnNumberOfValueParameters) {
1576 const Action<int()> a4 = ReturnSum<int, 10000>(2000, 300, 40, 5);
1577 EXPECT_EQ(0, a0.Perform(std::make_tuple()));
1578 EXPECT_EQ(1, a1.Perform(std::make_tuple()));
1579 EXPECT_EQ(3, a2.Perform(std::make_tuple()));
1580 EXPECT_EQ(6, a3.Perform(std::make_tuple()));
1581 EXPECT_EQ(12345, a4.Perform(std::make_tuple()));
internal::SetArgRefereeAction< k, typename std::decay< T >::type > SetArgReferee(T &&value)
#define EXPECT_DOUBLE_EQ(val1, val2)
GTEST_DISABLE_MSC_WARNINGS_POP_() TEST(LinkTest
internal::IgnoredValue Unused
#define EXPECT_THROW(statement, expected_exception)
#define EXPECT_NONFATAL_FAILURE(statement, substr)
#define ACTION_P9(name,...)
#define ACTION_P(name,...)
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 SumOf4(int a, int b, int c, int d)
#define GTEST_INTENTIONAL_CONST_COND_PUSH_()
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)
int SumOf6(int a, int b, int c, int d, int e, int f)
internal::DoAllAction< typename std::decay< Action >::type...> DoAll(Action &&...action)
int SumOfLast2(Unused, Unused, int a, int b) const
int SumOf5(int a, int b, int c, int d, int e)
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)
BoolResetter(bool *value)
#define TEST(test_suite_name, test_name)
internal::SaveArgPointeeAction< k, Ptr > SaveArgPointee(Ptr pointer)
#define ON_CALL(obj, call)
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 Ternary(int x, bool y, char z)
#define ACTION_P3(name,...)
internal::InvokeWithoutArgsAction< typename std::decay< FunctionImpl >::type > InvokeWithoutArgs(FunctionImpl function_impl)
inline::std::reference_wrapper< T > ByRef(T &l_value)
internal::SaveArgAction< k, Ptr > SaveArg(Ptr pointer)
std::decay< FunctionImpl >::type Invoke(FunctionImpl &&function_impl)
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)
#define ACTION_P10(name,...)
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
#define ACTION_P6(name,...)
#define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings)
double Plus(double a, double b)
ConcatImplActionP3< std::string, T1, T2 > Concat(const std::string &a, T1 b, T2 c)
DeletionTester(bool *is_deleted)
TenArgConstructorClass(int a1, int a2, int a3, int a4, int a5, int a6, int a7, int a8, int a9, int a10)
internal::WithArgsAction< typename std::decay< InnerAction >::type > WithoutArgs(InnerAction &&action)
#define ACTION_P2(name,...)
int SumOf5(int a, int b, int c, int d, int e)
internal::DeleteArgAction< k > DeleteArg()
int SumOf6(int a, int b, int c, int d, int e, int f)
ADVar foo(double d, ADVar x, ADVar y)
#define ACTION_TEMPLATE(name, template_params, value_params)
#define EXPECT_STREQ(s1, s2)
int SumOf4(int a, int b, int c, int d) const
int SumOfFirst2(int a, int b, Unused, Unused)
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)
#define ACTION_P4(name,...)
#define ACTION_P8(name,...)
#define ACTION_P7(name,...)
bool ByConstRef(const std::string &s)
GiantTemplate(int a_value)
internal::ReturnArgAction< k > ReturnArg()
internal::ReturnAction< R > Return(R value)
int Ternary(int x, char y, short z)
#define EXPECT_CALL(obj, call)
std::string Concat7(const char *s1, const char *s2, const char *s3, const char *s4, const char *s5, const char *s6, const char *s7)
#define EXPECT_EQ(val1, val2)
internal::WithArgsAction< typename std::decay< InnerAction >::type, k > WithArg(InnerAction &&action)
#define ACTION_P5(name,...)
#define EXPECT_TRUE(condition)
std::string Binary(const std::string &str, char c) const
internal::ReturnPointeeAction< Ptr > ReturnPointee(Ptr pointer)
#define EXPECT_FALSE(condition)
bool ReferencesGlobalDouble(const double &x)
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)
#define GTEST_INTENTIONAL_CONST_COND_POP_()
const char * Binary(const char *input, short n)
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)