36 #ifndef GMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_ 37 #define GMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_ 46 #include "gmock/internal/gmock-internal-utils.h" 47 #include "gmock/internal/gmock-port.h" 62 template <
typename F1,
typename F2>
71 class BuiltInDefaultValue {
74 static bool Exists() {
return false; }
76 Assert(
false, __FILE__, __LINE__,
77 "Default action undefined for the function return type.");
78 return internal::Invalid<T>();
87 class BuiltInDefaultValue<const T> {
96 class BuiltInDefaultValue<T*> {
98 static bool Exists() {
return true; }
99 static T*
Get() {
return NULL; }
104 #define GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(type, value) \ 106 class BuiltInDefaultValue<type> { \ 108 static bool Exists() { return true; } \ 109 static type Get() { return value; } \ 113 #if GTEST_HAS_GLOBAL_STRING 115 #endif // GTEST_HAS_GLOBAL_STRING 128 #if GMOCK_WCHAR_T_IS_NATIVE_ 143 #undef GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_ 160 template <
typename T>
177 static bool IsSet() {
return value_ != NULL; }
189 return value_ == NULL ?
194 static const T* value_;
199 template <
typename T>
200 class DefaultValue<T&> {
213 static bool IsSet() {
return address_ != NULL; }
225 return address_ == NULL ?
236 class DefaultValue<void> {
243 template <
typename T>
244 const T* DefaultValue<T>::value_ = NULL;
247 template <
typename T>
248 T* DefaultValue<T&>::address_ = NULL;
251 template <
typename F>
252 class ActionInterface {
279 template <
typename F>
300 template <
typename Func>
315 "You are using DoDefault() inside a composite action like " 316 "DoAll() or WithArgs(). This is not supported for technical " 317 "reasons. Please instead spell out the default action, or " 318 "assign the default action to an Action variable and use " 319 "the variable in various places.");
320 return impl_->Perform(args);
324 template <
typename F1,
typename F2>
351 template <
typename Impl>
356 template <
typename F>
358 return Action<F>(
new MonomorphicImpl<F>(impl_));
362 template <
typename F>
368 explicit MonomorphicImpl(
const Impl& impl) : impl_(impl) {}
370 virtual Result Perform(
const ArgumentTuple& args) {
371 return impl_.template Perform<Result>(args);
387 template <
typename F>
388 Action<F>
MakeAction(ActionInterface<F>* impl) {
389 return Action<F>(impl);
399 template <
typename Impl>
401 return PolymorphicAction<Impl>(impl);
408 template <
typename F1,
typename F2>
409 class ActionAdaptor :
public ActionInterface<F1> {
417 return impl_->Perform(args);
450 template <
typename R>
460 template <
typename F>
473 use_ReturnRef_instead_of_Return_to_return_a_reference);
479 template <
typename F>
492 explicit Impl(R value)
495 virtual Result Perform(
const ArgumentTuple&) {
return value_; }
499 Result_cannot_be_a_reference_type);
511 class ReturnNullAction {
514 template <
typename Result,
typename ArgumentTuple>
517 ReturnNull_can_be_used_to_return_a_pointer_only);
523 class ReturnVoidAction {
526 template <
typename Result,
typename ArgumentTuple>
535 template <
typename T>
536 class ReturnRefAction {
543 template <
typename F>
550 use_Return_instead_of_ReturnRef_to_return_a_value);
556 template <
typename F>
562 explicit Impl(T& ref) : ref_(ref) {}
564 virtual Result Perform(
const ArgumentTuple&) {
582 template <
typename T>
583 class ReturnRefOfCopyAction {
591 template <
typename F>
599 use_Return_instead_of_ReturnRefOfCopy_to_return_a_value);
605 template <
typename F>
611 explicit Impl(
const T& value) : value_(value) {}
613 virtual Result Perform(
const ArgumentTuple&) {
629 class DoDefaultAction {
633 template <
typename F>
639 template <
typename T1,
typename T2>
644 template <
typename Result,
typename ArgumentTuple>
656 #if !GTEST_OS_WINDOWS_MOBILE 660 template <
typename T>
661 class SetErrnoAndReturnAction {
664 : errno_(errno_value),
666 template <
typename Result,
typename ArgumentTuple>
679 #endif // !GTEST_OS_WINDOWS_MOBILE 685 template <
size_t N,
typename A,
bool kIsProto>
686 class SetArgumentPointeeAction {
692 template <
typename Result,
typename ArgumentTuple>
693 void Perform(
const ArgumentTuple& args)
const {
695 *::std::tr1::get<N>(args) = value_;
704 template <
size_t N,
typename Proto>
705 class SetArgumentPointeeAction<N, Proto, true> {
712 proto_->CopyFrom(proto);
715 template <
typename Result,
typename ArgumentTuple>
716 void Perform(
const ArgumentTuple& args)
const {
718 ::std::tr1::get<N>(args)->CopyFrom(*proto_);
732 template <
typename FunctionImpl>
733 class InvokeWithoutArgsAction {
738 : function_impl_(function_impl) {}
742 template <
typename Result,
typename ArgumentTuple>
743 Result
Perform(
const ArgumentTuple&) {
return function_impl_(); }
746 FunctionImpl function_impl_;
752 template <
class Class,
typename MethodPtr>
753 class InvokeMethodWithoutArgsAction {
756 : obj_ptr_(obj_ptr), method_ptr_(method_ptr) {}
758 template <
typename Result,
typename ArgumentTuple>
760 return (obj_ptr_->*method_ptr_)();
764 Class*
const obj_ptr_;
765 const MethodPtr method_ptr_;
771 template <
typename A>
772 class IgnoreResultAction {
776 template <
typename F>
795 template <
typename F>
801 explicit Impl(
const A& action) : action_(action) {}
803 virtual void Perform(
const ArgumentTuple& args) {
805 action_.Perform(args);
811 typedef typename internal::Function<F>::MakeResultIgnoredValue
814 const Action<OriginalFunction> action_;
831 template <
typename T>
832 class ReferenceWrapper {
839 operator T&()
const {
return *pointer_; }
845 template <
typename T>
846 void PrintTo(
const ReferenceWrapper<T>& ref, ::std::ostream* os) {
853 template <
typename Action1,
typename Action2>
857 : action1_(action1), action2_(action2) {}
861 template <
typename F>
863 return Action<F>(
new Impl<F>(action1_, action2_));
868 template <
typename F>
876 : action1_(action1), action2_(action2) {}
878 virtual Result Perform(
const ArgumentTuple& args) {
879 action1_.Perform(args);
880 return action2_.Perform(args);
884 const Action<VoidResult> action1_;
885 const Action<F> action2_;
928 typedef internal::IgnoredValue
Unused;
934 template <
typename To>
935 template <
typename From>
937 : impl_(new internal::ActionAdaptor<To, From>(from)) {}
942 template <
typename R>
943 internal::ReturnAction<R>
Return(R value) {
944 return internal::ReturnAction<R>(value);
948 inline PolymorphicAction<internal::ReturnNullAction>
ReturnNull() {
953 inline PolymorphicAction<internal::ReturnVoidAction>
Return() {
958 template <
typename R>
959 inline internal::ReturnRefAction<R>
ReturnRef(R& x) {
960 return internal::ReturnRefAction<R>(x);
966 template <
typename R>
967 inline internal::ReturnRefOfCopyAction<R>
ReturnRefOfCopy(
const R& x) {
968 return internal::ReturnRefOfCopyAction<R>(x);
972 inline internal::DoDefaultAction
DoDefault() {
973 return internal::DoDefaultAction();
978 template <
size_t N,
typename T>
980 internal::SetArgumentPointeeAction<
987 #if !((GTEST_GCC_VER_ && GTEST_GCC_VER_ < 40000) || GTEST_OS_SYMBIAN) 993 internal::SetArgumentPointeeAction<N, const char*, false> >
996 N,
const char*,
false>(p));
1001 internal::SetArgumentPointeeAction<N, const wchar_t*, false> >
1004 N,
const wchar_t*,
false>(p));
1009 template <
size_t N,
typename T>
1011 internal::SetArgumentPointeeAction<
1019 template <
typename T1,
typename T2>
1020 PolymorphicAction<internal::AssignAction<T1, T2> >
Assign(T1* ptr, T2 val) {
1024 #if !GTEST_OS_WINDOWS_MOBILE 1027 template <
typename T>
1028 PolymorphicAction<internal::SetErrnoAndReturnAction<T> >
1031 internal::SetErrnoAndReturnAction<T>(errval, result));
1034 #endif // !GTEST_OS_WINDOWS_MOBILE 1039 template <
typename FunctionImpl>
1040 PolymorphicAction<internal::InvokeWithoutArgsAction<FunctionImpl> >
1043 internal::InvokeWithoutArgsAction<FunctionImpl>(function_impl));
1048 template <
class Class,
typename MethodPtr>
1049 PolymorphicAction<internal::InvokeMethodWithoutArgsAction<Class, MethodPtr> >
1052 internal::InvokeMethodWithoutArgsAction<Class, MethodPtr>(
1053 obj_ptr, method_ptr));
1059 template <
typename A>
1060 inline internal::IgnoreResultAction<A>
IgnoreResult(
const A& an_action) {
1061 return internal::IgnoreResultAction<A>(an_action);
1071 template <
typename T>
1072 inline internal::ReferenceWrapper<T>
ByRef(T& l_value) {
1073 return internal::ReferenceWrapper<T>(l_value);
1078 #endif // GMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_ TypeWithSize< 8 >::Int Int64
Definition: dsd/test/gtest/include/gtest/internal/gtest-port.h:1902
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:63
To ImplicitCast_(To x)
Definition: dsd/test/gtest/include/gtest/internal/gtest-port.h:1098
static Result Perform(const ArgumentTuple &)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:515
void Perform(const ArgumentTuple &args) const
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:693
virtual Result Perform(const ArgumentTuple &args)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:416
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:49
internal::IgnoredValue Unused
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:928
static bool Exists()
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:89
static T * Get()
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:99
static bool Exists()
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:74
static const bool value
Definition: dsd/test/gtest/include/gtest/internal/gtest-port.h:1613
::std::string string
Definition: dsd/test/gtest/include/gtest/internal/gtest-port.h:872
PolymorphicAction< internal::SetArgumentPointeeAction< N, T, internal::IsAProtocolMessage< T >::value > > SetArgumentPointee(const T &x)
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:1013
static void Set(T x)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:165
static void Print(const T &value, ::std::ostream *os)
Definition: dsd/test/gtest/include/gtest/gtest-printers.h:591
internal::Function< F1 >::ArgumentTuple ArgumentTuple
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:412
void Perform(const ArgumentTuple &args) const
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:716
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:733
AssignAction(T1 *ptr, T2 value)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:642
PolymorphicAction< Impl > MakePolymorphicAction(const Impl &impl)
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:400
PolymorphicAction(const Impl &impl)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:354
Definition: dsd/test/gtest/include/gtest/internal/gtest-port.h:1621
DoBothAction(Action1 action1, Action2 action2)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:856
IgnoreResultAction(const A &action)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:774
static void Set(T &x)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:203
InvokeMethodWithoutArgsAction(Class *obj_ptr, MethodPtr method_ptr)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:755
TypeWithSize< 8 >::UInt UInt64
Definition: dsd/test/gtest/include/gtest/internal/gtest-port.h:1903
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:753
static T Get()
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:75
Definition: dsd/test/gtest/include/gtest/internal/gtest-internal.h:696
Result Perform(const ArgumentTuple &) const
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:667
static void Get()
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:239
PolymorphicAction< internal::InvokeWithoutArgsAction< FunctionImpl > > InvokeWithoutArgs(FunctionImpl function_impl)
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:1041
internal::ReturnRefAction< R > ReturnRef(R &x)
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:959
static void Perform(const ArgumentTuple &)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:527
static bool IsSet()
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:177
Action< F > MakeAction(ActionInterface< F > *impl)
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:388
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:280
static bool Exists()
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:98
static T Get()
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:90
Action(ActionInterface< F > *impl)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:291
virtual ~ActionInterface()
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:258
static T & Get()
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:224
Definition: dsd/test/gtest/include/gtest/internal/gtest-linked_ptr.h:136
static bool Exists()
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:181
PolymorphicAction< internal::SetArgumentPointeeAction< N, T, internal::IsAProtocolMessage< T >::value > > SetArgPointee(const T &x)
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:982
InvokeWithoutArgsAction(FunctionImpl function_impl)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:737
bool IsDoDefault() const
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:304
ReferenceWrapper(T &l_value)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:835
SetErrnoAndReturnAction(int errno_value, T result)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:663
#define GTEST_DISALLOW_ASSIGN_(type)
Definition: dsd/test/gtest/include/gtest/internal/gtest-port.h:721
static bool Exists()
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:217
#define GTEST_COMPILE_ASSERT_(expr, msg)
Definition: dsd/test/gtest/include/gtest/internal/gtest-port.h:815
Definition: dsd/test/gmock/include/gmock/internal/gmock-internal-utils.h:340
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:252
ReturnRefOfCopyAction(const T &value)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:587
internal::Function< F >::ArgumentTuple ArgumentTuple
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:283
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:640
GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(void,)
internal::Function< F >::Result Result
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:254
internal::Function< F1 >::Result Result
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:411
PolymorphicAction< internal::ReturnNullAction > ReturnNull()
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:948
internal::Function< F >::ArgumentTuple ArgumentTuple
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:255
static void Clear()
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:208
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:661
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:352
internal::DoDefaultAction DoDefault()
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:972
void Assert(bool condition, const char *file, int line)
Definition: dsd/test/gmock/include/gmock/internal/gmock-internal-utils.h:288
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:686
ActionAdaptor(const Action< F2 > &from)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:414
Matcher< T > A()
Definition: dsd/test/gmock/include/gmock/gmock-matchers.h:3415
void PrintTo(const ReferenceWrapper< T > &ref, ::std::ostream *os)
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:846
Definition: dsd/test/gmock/include/gmock/internal/gmock-generated-internal-utils.h:154
internal::ReferenceWrapper< T > ByRef(T &l_value)
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:1072
Result Perform(const ArgumentTuple &)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:743
PolymorphicAction< internal::AssignAction< T1, T2 > > Assign(T1 *ptr, T2 val)
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:1020
virtual Result Perform(const ArgumentTuple &args)=0
static bool IsSet()
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:213
static void Clear()
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:171
internal::Function< F >::Result Result
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:282
ReturnRefAction(T &ref)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:539
Result Perform(const ArgumentTuple &args) const
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:312
ReturnAction(R value)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:456
internal::IgnoreResultAction< A > IgnoreResult(const A &an_action)
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:1060
PolymorphicAction< internal::SetErrnoAndReturnAction< T > > SetErrnoAndReturn(int errval, T result)
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:1029
SetArgumentPointeeAction(const A &value)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:690
Result Perform(const ArgumentTuple &) const
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:759
Action(const Action &action)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:294
Action()
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:287
internal::ReturnRefOfCopyAction< R > ReturnRefOfCopy(const R &x)
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:967
ActionInterface()
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:257
internal::ReturnAction< R > Return(R value)
Definition: dsd/test/gmock/include/gmock/gmock-actions.h:943
static bool Exists()
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:238
void Perform(const ArgumentTuple &) const
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:645
SetArgumentPointeeAction(const Proto &proto)
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:711
static T Get()
Definition: mbelib/test/gmock/include/gmock/gmock-actions.h:188