@@ -59,6 +59,7 @@ using testing::Invoke;
5959using testing::ReturnArg;
6060using testing::ReturnPointee;
6161using testing::SaveArg;
62+ using testing::SaveArgByMove;
6263using testing::SaveArgPointee;
6364using testing::SetArgReferee;
6465using testing::Unused;
@@ -492,6 +493,34 @@ TEST(SaveArgActionTest, WorksForCompatibleType) {
492493 EXPECT_EQ (' a' , result);
493494}
494495
496+ struct MoveOnly {
497+ explicit MoveOnly (int v) : i(v) {}
498+ MoveOnly (MoveOnly&& o) {
499+ i = o.i ;
500+ o.i = -1 ;
501+ }
502+ MoveOnly& operator =(MoveOnly&& o) {
503+ i = o.i ;
504+ o.i = -1 ;
505+ return *this ;
506+ }
507+ int i;
508+ };
509+
510+ TEST (SaveArgByMoveActionTest, WorksForSameType) {
511+ MoveOnly result{0 };
512+ const Action<void (MoveOnly v)> a1 = SaveArgByMove<0 >(&result);
513+ a1.Perform (std::make_tuple (MoveOnly{5 }));
514+ EXPECT_EQ (5 , result.i );
515+ }
516+
517+ TEST (SaveArgByMoveActionTest, WorksForCompatibleType) {
518+ MoveOnly result{0 };
519+ const Action<void (bool , MoveOnly)> a1 = SaveArgByMove<1 >(&result);
520+ a1.Perform (std::make_tuple (true , MoveOnly{7 }));
521+ EXPECT_EQ (7 , result.i );
522+ }
523+
495524TEST (SaveArgPointeeActionTest, WorksForSameType) {
496525 int result = 0 ;
497526 const int value = 5 ;
@@ -756,34 +785,34 @@ TEST(InvokeArgumentTest, Functor6) {
756785
757786// Tests using InvokeArgument with a 7-ary function.
758787TEST (InvokeArgumentTest, Function7) {
759- Action<std::string (std::string (*)(const char *, const char *, const char *,
760- const char *, const char *, const char *,
761- const char *))>
788+ Action<std::string (std::string (*)(const char *, const char *, const char *,
789+ const char *, const char *, const char *,
790+ const char *))>
762791 a = InvokeArgument<0 >(" 1" , " 2" , " 3" , " 4" , " 5" , " 6" , " 7" );
763792 EXPECT_EQ (" 1234567" , a.Perform (std::make_tuple (&Concat7)));
764793}
765794
766795// Tests using InvokeArgument with a 8-ary function.
767796TEST (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 *))>
797+ Action<std::string (std::string (*)(const char *, const char *, const char *,
798+ const char *, const char *, const char *,
799+ const char *, const char *))>
771800 a = InvokeArgument<0 >(" 1" , " 2" , " 3" , " 4" , " 5" , " 6" , " 7" , " 8" );
772801 EXPECT_EQ (" 12345678" , a.Perform (std::make_tuple (&Concat8)));
773802}
774803
775804// Tests using InvokeArgument with a 9-ary function.
776805TEST (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 *))>
806+ Action<std::string (std::string (*)(const char *, const char *, const char *,
807+ const char *, const char *, const char *,
808+ const char *, const char *, const char *))>
780809 a = InvokeArgument<0 >(" 1" , " 2" , " 3" , " 4" , " 5" , " 6" , " 7" , " 8" , " 9" );
781810 EXPECT_EQ (" 123456789" , a.Perform (std::make_tuple (&Concat9)));
782811}
783812
784813// Tests using InvokeArgument with a 10-ary function.
785814TEST (InvokeArgumentTest, Function10) {
786- Action<std::string (std::string (*)(
815+ Action<std::string (std::string (*)(
787816 const char *, const char *, const char *, const char *, const char *,
788817 const char *, const char *, const char *, const char *, const char *))>
789818 a = InvokeArgument<0 >(" 1" , " 2" , " 3" , " 4" , " 5" , " 6" , " 7" , " 8" , " 9" , " 0" );
0 commit comments