From d68f001942bfa2c9301e7ae361eb8dd65d2556fb Mon Sep 17 00:00:00 2001 From: "zhanyong.wan" Date: Mon, 2 Feb 2009 20:51:53 +0000 Subject: Improves ACTION* to allow explicit instantiating with reference types. git-svn-id: http://googlemock.googlecode.com/svn/trunk@89 8415998a-534a-0410-bf83-d39667b30386 --- include/gmock/gmock-generated-actions.h | 220 +++++++++++++-------------- include/gmock/gmock-generated-actions.h.pump | 12 +- 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 0477141..5188b91 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 operator ::testing::Action() const {\ return ::testing::Action(new gmock_Impl(p0));\ }\ - const p0##_type p0;\ + p0##_type p0;\ };\ template \ inline name##ActionP 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 operator ::testing::Action() const {\ return ::testing::Action(new gmock_Impl(p0, p1));\ }\ - const p0##_type p0;\ - const p1##_type p1;\ + p0##_type p0;\ + p1##_type p1;\ };\ template \ inline name##ActionP2 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 operator ::testing::Action() const {\ return ::testing::Action(new gmock_Impl(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 \ inline name##ActionP3 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 operator ::testing::Action() const {\ return ::testing::Action(new gmock_Impl(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 \ @@ -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 operator ::testing::Action() const {\ return ::testing::Action(new gmock_Impl(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 \ @@ -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 operator ::testing::Action() const {\ return ::testing::Action(new gmock_Impl(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 \ @@ -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 operator ::testing::Action() const {\ return ::testing::Action(new gmock_Impl(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 operator ::testing::Action() const {\ return ::testing::Action(new gmock_Impl(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 operator ::testing::Action() const {\ return ::testing::Action(new gmock_Impl(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 operator ::testing::Action() const {\ return ::testing::Action(new gmock_Impl(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 ]]]] @@ -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 operator ::testing::Action() const {\ return ::testing::Action(new gmock_Impl($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 adf1f82..aee2c90 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 a = Plus1(x); + EXPECT_EQ(1, a.Perform(empty)); + + a = Plus2(x, y); + EXPECT_EQ(3, a.Perform(empty)); + + a = Plus3(x, y, z); + EXPECT_EQ(6, a.Perform(empty)); + + int n[10] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; + a = Plus10(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 -- cgit v1.2.1