diff options
-rw-r--r-- | include/gmock/gmock-generated-actions.h | 220 | ||||
-rw-r--r-- | include/gmock/gmock-generated-actions.h.pump | 12 | ||||
-rw-r--r-- | test/gmock-generated-actions_test.cc | 30 |
3 files changed, 146 insertions, 116 deletions
diff --git a/include/gmock/gmock-generated-actions.h b/include/gmock/gmock-generated-actions.h index 04771419..5188b917 100644 --- a/include/gmock/gmock-generated-actions.h +++ b/include/gmock/gmock-generated-actions.h @@ -1611,12 +1611,12 @@ DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ arg9_type arg9) const;\ - const p0##_type p0;\ + p0##_type p0;\ };\ template <typename F> operator ::testing::Action<F>() const {\ return ::testing::Action<F>(new gmock_Impl<F>(p0));\ }\ - const p0##_type p0;\ + p0##_type p0;\ };\ template <typename p0##_type>\ inline name##ActionP<p0##_type> name(p0##_type p0) {\ @@ -1662,14 +1662,14 @@ DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ arg9_type arg9) const;\ - const p0##_type p0;\ - const p1##_type p1;\ + p0##_type p0;\ + p1##_type p1;\ };\ template <typename F> operator ::testing::Action<F>() const {\ return ::testing::Action<F>(new gmock_Impl<F>(p0, p1));\ }\ - const p0##_type p0;\ - const p1##_type p1;\ + p0##_type p0;\ + p1##_type p1;\ };\ template <typename p0##_type, typename p1##_type>\ inline name##ActionP2<p0##_type, p1##_type> name(p0##_type p0, \ @@ -1716,16 +1716,16 @@ DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ arg9_type arg9) const;\ - const p0##_type p0;\ - const p1##_type p1;\ - const p2##_type p2;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ };\ template <typename F> operator ::testing::Action<F>() const {\ return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2));\ }\ - const p0##_type p0;\ - const p1##_type p1;\ - const p2##_type p2;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ };\ template <typename p0##_type, typename p1##_type, typename p2##_type>\ inline name##ActionP3<p0##_type, p1##_type, p2##_type> name(p0##_type p0, \ @@ -1775,18 +1775,18 @@ DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ arg9_type arg9) const;\ - const p0##_type p0;\ - const p1##_type p1;\ - const p2##_type p2;\ - const p3##_type p3;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ };\ template <typename F> operator ::testing::Action<F>() const {\ return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3));\ }\ - const p0##_type p0;\ - const p1##_type p1;\ - const p2##_type p2;\ - const p3##_type p3;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ };\ template <typename p0##_type, typename p1##_type, typename p2##_type, \ typename p3##_type>\ @@ -1841,20 +1841,20 @@ DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ arg9_type arg9) const;\ - const p0##_type p0;\ - const p1##_type p1;\ - const p2##_type p2;\ - const p3##_type p3;\ - const p4##_type p4;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ };\ template <typename F> operator ::testing::Action<F>() const {\ return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4));\ }\ - const p0##_type p0;\ - const p1##_type p1;\ - const p2##_type p2;\ - const p3##_type p3;\ - const p4##_type p4;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ };\ template <typename p0##_type, typename p1##_type, typename p2##_type, \ typename p3##_type, typename p4##_type>\ @@ -1910,22 +1910,22 @@ DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ arg9_type arg9) const;\ - const p0##_type p0;\ - const p1##_type p1;\ - const p2##_type p2;\ - const p3##_type p3;\ - const p4##_type p4;\ - const p5##_type p5;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ };\ template <typename F> operator ::testing::Action<F>() const {\ return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5));\ }\ - const p0##_type p0;\ - const p1##_type p1;\ - const p2##_type p2;\ - const p3##_type p3;\ - const p4##_type p4;\ - const p5##_type p5;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ };\ template <typename p0##_type, typename p1##_type, typename p2##_type, \ typename p3##_type, typename p4##_type, typename p5##_type>\ @@ -1984,25 +1984,25 @@ DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ arg9_type arg9) const;\ - const p0##_type p0;\ - const p1##_type p1;\ - const p2##_type p2;\ - const p3##_type p3;\ - const p4##_type p4;\ - const p5##_type p5;\ - const p6##_type p6;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ };\ template <typename F> operator ::testing::Action<F>() const {\ return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \ p6));\ }\ - const p0##_type p0;\ - const p1##_type p1;\ - const p2##_type p2;\ - const p3##_type p3;\ - const p4##_type p4;\ - const p5##_type p5;\ - const p6##_type p6;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ };\ template <typename p0##_type, typename p1##_type, typename p2##_type, \ typename p3##_type, typename p4##_type, typename p5##_type, \ @@ -2066,27 +2066,27 @@ DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ arg9_type arg9) const;\ - const p0##_type p0;\ - const p1##_type p1;\ - const p2##_type p2;\ - const p3##_type p3;\ - const p4##_type p4;\ - const p5##_type p5;\ - const p6##_type p6;\ - const p7##_type p7;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + p7##_type p7;\ };\ template <typename F> operator ::testing::Action<F>() const {\ return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \ p6, p7));\ }\ - const p0##_type p0;\ - const p1##_type p1;\ - const p2##_type p2;\ - const p3##_type p3;\ - const p4##_type p4;\ - const p5##_type p5;\ - const p6##_type p6;\ - const p7##_type p7;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + p7##_type p7;\ };\ template <typename p0##_type, typename p1##_type, typename p2##_type, \ typename p3##_type, typename p4##_type, typename p5##_type, \ @@ -2152,29 +2152,29 @@ DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ arg9_type arg9) const;\ - const p0##_type p0;\ - const p1##_type p1;\ - const p2##_type p2;\ - const p3##_type p3;\ - const p4##_type p4;\ - const p5##_type p5;\ - const p6##_type p6;\ - const p7##_type p7;\ - const p8##_type p8;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + p7##_type p7;\ + p8##_type p8;\ };\ template <typename F> operator ::testing::Action<F>() const {\ return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \ p6, p7, p8));\ }\ - const p0##_type p0;\ - const p1##_type p1;\ - const p2##_type p2;\ - const p3##_type p3;\ - const p4##_type p4;\ - const p5##_type p5;\ - const p6##_type p6;\ - const p7##_type p7;\ - const p8##_type p8;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + p7##_type p7;\ + p8##_type p8;\ };\ template <typename p0##_type, typename p1##_type, typename p2##_type, \ typename p3##_type, typename p4##_type, typename p5##_type, \ @@ -2242,31 +2242,31 @@ DoAll(Action1 a1, Action2 a2, Action3 a3, Action4 a4, Action5 a5, Action6 a6, arg1_type arg1, arg2_type arg2, arg3_type arg3, arg4_type arg4, \ arg5_type arg5, arg6_type arg6, arg7_type arg7, arg8_type arg8, \ arg9_type arg9) const;\ - const p0##_type p0;\ - const p1##_type p1;\ - const p2##_type p2;\ - const p3##_type p3;\ - const p4##_type p4;\ - const p5##_type p5;\ - const p6##_type p6;\ - const p7##_type p7;\ - const p8##_type p8;\ - const p9##_type p9;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + p7##_type p7;\ + p8##_type p8;\ + p9##_type p9;\ };\ template <typename F> operator ::testing::Action<F>() const {\ return ::testing::Action<F>(new gmock_Impl<F>(p0, p1, p2, p3, p4, p5, \ p6, p7, p8, p9));\ }\ - const p0##_type p0;\ - const p1##_type p1;\ - const p2##_type p2;\ - const p3##_type p3;\ - const p4##_type p4;\ - const p5##_type p5;\ - const p6##_type p6;\ - const p7##_type p7;\ - const p8##_type p8;\ - const p9##_type p9;\ + p0##_type p0;\ + p1##_type p1;\ + p2##_type p2;\ + p3##_type p3;\ + p4##_type p4;\ + p5##_type p5;\ + p6##_type p6;\ + p7##_type p7;\ + p8##_type p8;\ + p9##_type p9;\ };\ template <typename p0##_type, typename p1##_type, typename p2##_type, \ typename p3##_type, typename p4##_type, typename p5##_type, \ diff --git a/include/gmock/gmock-generated-actions.h.pump b/include/gmock/gmock-generated-actions.h.pump index 121c2c1b..7b042ff8 100644 --- a/include/gmock/gmock-generated-actions.h.pump +++ b/include/gmock/gmock-generated-actions.h.pump @@ -718,15 +718,15 @@ $range j 0..i-1 $var ctor_param_list = [[$for j, [[p$j##_type gmock_p$j]]]] $var param_types_and_names = [[$for j, [[p$j##_type p$j]]]] $var inits = [[$if i==0 [[]] $else [[ : $for j, [[p$j(gmock_p$j)]]]]]] -$var const_param_field_decls = [[$for j +$var param_field_decls = [[$for j [[ - const p$j##_type p$j;\ + p$j##_type p$j;\ ]]]] -$var const_param_field_decls2 = [[$for j +$var param_field_decls2 = [[$for j [[ - const p$j##_type p$j;\ + p$j##_type p$j;\ ]]]] $var params = [[$for j, [[p$j]]]] $var param_types = [[$if i==0 [[]] $else [[<$for j, [[p$j##_type]]>]]]] @@ -754,11 +754,11 @@ $var macro_name = [[$if i==0 [[ACTION]] $elif i==1 [[ACTION_P]] }\ template <$typename_arg_types>\ return_type gmock_PerformImpl(const args_type& args, [[]] -$arg_types_and_names) const;\$const_param_field_decls +$arg_types_and_names) const;\$param_field_decls };\ template <typename F> operator ::testing::Action<F>() const {\ return ::testing::Action<F>(new gmock_Impl<F>($params));\ - }\$const_param_field_decls2 + }\$param_field_decls2 };\$template inline $class_name$param_types name($param_types_and_names) {\ return $class_name$param_types($params);\ diff --git a/test/gmock-generated-actions_test.cc b/test/gmock-generated-actions_test.cc index adf1f82a..aee2c905 100644 --- a/test/gmock-generated-actions_test.cc +++ b/test/gmock-generated-actions_test.cc @@ -1280,5 +1280,35 @@ TEST(ActionPnMacroTest, TypesAreCorrect) { Plus(1, 2, 3, 4, 5, 6, 7, 8, 9, '0'); } +// Tests that an ACTION_P*() action can be explicitly instantiated +// with reference-typed parameters. + +ACTION_P(Plus1, x) { return x; } +ACTION_P2(Plus2, x, y) { return x + y; } +ACTION_P3(Plus3, x, y, z) { return x + y + z; } +ACTION_P10(Plus10, a0, a1, a2, a3, a4, a5, a6, a7, a8, a9) { + return a0 + a1 + a2 + a3 + a4 + a5 + a6 + a7 + a8 + a9; +} + +TEST(ActionPnMacroTest, CanExplicitlyInstantiateWithReferenceTypes) { + int x = 1, y = 2, z = 3; + const tuple<> empty = make_tuple(); + + Action<int()> a = Plus1<int&>(x); + EXPECT_EQ(1, a.Perform(empty)); + + a = Plus2<const int&, int&>(x, y); + EXPECT_EQ(3, a.Perform(empty)); + + a = Plus3<int&, const int&, int&>(x, y, z); + EXPECT_EQ(6, a.Perform(empty)); + + int n[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; + a = Plus10<const int&, int&, const int&, int&, const int&, int&, const int&, + int&, const int&, int&>(n[0], n[1], n[2], n[3], n[4], n[5], n[6], n[7], + n[8], n[9]); + EXPECT_EQ(55, a.Perform(empty)); +} + } // namespace gmock_generated_actions_test } // namespace testing |