@@ -59,6 +59,7 @@ using testing::Invoke;
59
59
using testing::ReturnArg;
60
60
using testing::ReturnPointee;
61
61
using testing::SaveArg;
62
+ using testing::SaveArgByMove;
62
63
using testing::SaveArgPointee;
63
64
using testing::SetArgReferee;
64
65
using testing::Unused;
@@ -492,6 +493,34 @@ TEST(SaveArgActionTest, WorksForCompatibleType) {
492
493
EXPECT_EQ (' a' , result);
493
494
}
494
495
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
+
495
524
TEST (SaveArgPointeeActionTest, WorksForSameType) {
496
525
int result = 0 ;
497
526
const int value = 5 ;
@@ -756,34 +785,34 @@ TEST(InvokeArgumentTest, Functor6) {
756
785
757
786
// Tests using InvokeArgument with a 7-ary function.
758
787
TEST (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 *))>
762
791
a = InvokeArgument<0 >(" 1" , " 2" , " 3" , " 4" , " 5" , " 6" , " 7" );
763
792
EXPECT_EQ (" 1234567" , a.Perform (std::make_tuple (&Concat7)));
764
793
}
765
794
766
795
// Tests using InvokeArgument with a 8-ary function.
767
796
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 *))>
797
+ Action<std::string (std::string (*)(const char *, const char *, const char *,
798
+ const char *, const char *, const char *,
799
+ const char *, const char *))>
771
800
a = InvokeArgument<0 >(" 1" , " 2" , " 3" , " 4" , " 5" , " 6" , " 7" , " 8" );
772
801
EXPECT_EQ (" 12345678" , a.Perform (std::make_tuple (&Concat8)));
773
802
}
774
803
775
804
// Tests using InvokeArgument with a 9-ary function.
776
805
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 *))>
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 *))>
780
809
a = InvokeArgument<0 >(" 1" , " 2" , " 3" , " 4" , " 5" , " 6" , " 7" , " 8" , " 9" );
781
810
EXPECT_EQ (" 123456789" , a.Perform (std::make_tuple (&Concat9)));
782
811
}
783
812
784
813
// Tests using InvokeArgument with a 10-ary function.
785
814
TEST (InvokeArgumentTest, Function10) {
786
- Action<std::string (std::string (*)(
815
+ Action<std::string (std::string (*)(
787
816
const char *, const char *, const char *, const char *, const char *,
788
817
const char *, const char *, const char *, const char *, const char *))>
789
818
a = InvokeArgument<0 >(" 1" , " 2" , " 3" , " 4" , " 5" , " 6" , " 7" , " 8" , " 9" , " 0" );
0 commit comments