Go to the documentation of this file.
37 #ifndef GMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_
38 #define GMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_
48 #include <type_traits>
51 #include "gmock/internal/gmock-internal-utils.h"
52 #include "gmock/internal/gmock-port.h"
55 # pragma warning(push)
56 # pragma warning(disable:4100)
77 template <
typename T,
bool kDefaultConstructible>
78 struct BuiltInDefaultValueGetter {
82 struct BuiltInDefaultValueGetter<
T,
false> {
84 Assert(
false, __FILE__, __LINE__,
85 "Default action undefined for the function return type.");
86 return internal::Invalid<T>();
100 class BuiltInDefaultValue {
115 template <
typename T>
116 class BuiltInDefaultValue<
const T> {
124 template <
typename T>
125 class BuiltInDefaultValue<
T*> {
128 static T*
Get() {
return nullptr; }
133 #define GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(type, value) \
135 class BuiltInDefaultValue<type> { \
137 static bool Exists() { return true; } \
138 static type Get() { return value; } \
142 #if GTEST_HAS_GLOBAL_STRING
144 #endif // GTEST_HAS_GLOBAL_STRING
157 #if GMOCK_WCHAR_T_IS_NATIVE_
172 #undef GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_
189 template <
typename T>
232 class ValueProducer {
238 class FixedValueProducer :
public ValueProducer {
248 class FactoryValueProducer :
public ValueProducer {
264 template <
typename T>
306 template <
typename T>
310 template <
typename T>
314 template <
typename F>
315 class ActionInterface {
340 template <
typename F>
344 struct ActionAdapter {
346 ::std::shared_ptr<ActionInterface<F>>
impl_;
348 template <
typename...
Args>
350 return impl_->Perform(
351 ::std::forward_as_tuple(::std::forward<Args>(
args)...));
366 template <
typename G,
367 typename = typename ::std::enable_if<
373 :
fun_(ActionAdapter{::std::shared_ptr<ActionInterface<F>>(impl)}) {}
378 template <
typename Func>
398 template <
typename G>
402 ::std::function<F>
fun_;
426 template <
typename Impl>
427 class PolymorphicAction {
431 template <
typename F>
437 template <
typename F>
446 return impl_.template Perform<Result>(
args);
462 template <
typename F>
463 Action<F>
MakeAction(ActionInterface<F>* impl) {
464 return Action<F>(impl);
474 template <
typename Impl>
476 return PolymorphicAction<Impl>(impl);
483 template <
typename T>
484 struct ByMoveWrapper {
516 template <
typename R>
526 template <
typename F>
539 use_ReturnRef_instead_of_Return_to_return_a_reference);
541 "Can't use Return() on an action expected to return `void`.");
547 template <
typename R_,
typename F>
568 Result_cannot_be_a_reference_type);
579 template <
typename R_,
typename F>
590 <<
"A ByMove() action should only be performed once.";
602 const std::shared_ptr<R>
value_;
608 class ReturnNullAction {
613 template <
typename Result,
typename ArgumentTuple>
620 class ReturnVoidAction {
623 template <
typename Result,
typename ArgumentTuple>
632 template <
typename T>
633 class ReturnRefAction {
640 template <
typename F>
647 use_Return_instead_of_ReturnRef_to_return_a_value);
653 template <
typename F>
677 template <
typename T>
678 class ReturnRefOfCopyAction {
686 template <
typename F>
694 use_Return_instead_of_ReturnRefOfCopy_to_return_a_value);
700 template <
typename F>
722 class DoDefaultAction {
726 template <
typename F>
732 template <
typename T1,
typename T2>
737 template <
typename Result,
typename ArgumentTuple>
749 #if !GTEST_OS_WINDOWS_MOBILE
753 template <
typename T>
754 class SetErrnoAndReturnAction {
759 template <
typename Result,
typename ArgumentTuple>
772 #endif // !GTEST_OS_WINDOWS_MOBILE
778 template <
size_t N,
typename A,
bool kIsProto>
779 class SetArgumentPointeeAction {
785 template <
typename Result,
typename ArgumentTuple>
797 template <
size_t N,
typename Proto>
798 class SetArgumentPointeeAction<
N, Proto,
true> {
805 proto_->CopyFrom(proto);
808 template <
typename Result,
typename ArgumentTuple>
811 ::std::get<N>(
args)->CopyFrom(*proto_);
815 const std::shared_ptr<Proto> proto_;
821 template <
class Class,
typename MethodPtr>
822 struct InvokeMethodAction {
826 template <
typename...
Args>
837 template <
typename FunctionImpl>
838 struct InvokeWithoutArgsAction {
843 template <
typename...
Args>
850 template <
class Class,
typename MethodPtr>
851 struct InvokeMethodWithoutArgsAction {
857 template <
typename...
Args>
864 template <
typename A>
865 class IgnoreResultAction {
869 template <
typename F>
888 template <
typename F>
917 template <
typename InnerAction,
size_t...
I>
923 template <
typename R,
typename...
Args>
925 Action<R(
typename std::tuple_element<
I, std::tuple<Args...>>::
type...)>
928 return [converted](
Args...
args) -> R {
929 return converted.Perform(std::forward_as_tuple(
930 std::get<I>(std::forward_as_tuple(std::forward<Args>(
args)...))...));
935 template <
typename... Actions>
938 template <
typename...
Args,
size_t...
I>
940 return {std::get<I>(
actions)...};
944 std::tuple<Actions...>
actions;
946 template <
typename R,
typename...
Args>
952 auto tuple_args = std::forward_as_tuple(std::forward<Args>(
args)...);
953 for (
auto&
a : converted) {
954 a.Perform(tuple_args);
956 return last.Perform(tuple_args);
996 typedef internal::IgnoredValue
Unused;
1000 template <
typename... Action>
1003 return {std::forward_as_tuple(std::forward<Action>(
action)...)};
1011 template <
size_t k,
typename InnerAction>
1014 return {std::forward<InnerAction>(
action)};
1021 template <
size_t k,
size_t... ks,
typename InnerAction>
1024 return {std::forward<InnerAction>(
action)};
1031 template <
typename InnerAction>
1034 return {std::forward<InnerAction>(
action)};
1040 template <
typename R>
1046 inline PolymorphicAction<internal::ReturnNullAction>
ReturnNull() {
1051 inline PolymorphicAction<internal::ReturnVoidAction>
Return() {
1056 template <
typename R>
1057 inline internal::ReturnRefAction<R>
ReturnRef(R& x) {
1058 return internal::ReturnRefAction<R>(x);
1064 template <
typename R>
1065 inline internal::ReturnRefOfCopyAction<R>
ReturnRefOfCopy(
const R& x) {
1066 return internal::ReturnRefOfCopyAction<R>(x);
1073 template <
typename R>
1074 internal::ByMoveWrapper<R>
ByMove(R x) {
1075 return internal::ByMoveWrapper<R>(
std::move(x));
1079 inline internal::DoDefaultAction
DoDefault() {
1080 return internal::DoDefaultAction();
1085 template <
size_t N,
typename T>
1087 internal::SetArgumentPointeeAction<
1096 internal::SetArgumentPointeeAction<N, const char*, false> >
1099 N,
const char*,
false>(p));
1104 internal::SetArgumentPointeeAction<N, const wchar_t*, false> >
1107 N,
const wchar_t*,
false>(p));
1111 template <
size_t N,
typename T>
1113 internal::SetArgumentPointeeAction<
1121 template <
typename T1,
typename T2>
1122 PolymorphicAction<internal::AssignAction<T1, T2> >
Assign(
T1*
ptr,
T2 val) {
1126 #if !GTEST_OS_WINDOWS_MOBILE
1129 template <
typename T>
1130 PolymorphicAction<internal::SetErrnoAndReturnAction<T> >
1133 internal::SetErrnoAndReturnAction<T>(errval,
result));
1136 #endif // !GTEST_OS_WINDOWS_MOBILE
1144 template <
typename FunctionImpl>
1146 return std::forward<FunctionImpl>(function_impl);
1151 template <
class Class,
typename MethodPtr>
1152 internal::InvokeMethodAction<Class, MethodPtr>
Invoke(Class* obj_ptr,
1153 MethodPtr method_ptr) {
1154 return {obj_ptr, method_ptr};
1158 template <
typename FunctionImpl>
1166 template <
class Class,
typename MethodPtr>
1168 Class* obj_ptr, MethodPtr method_ptr) {
1169 return {obj_ptr, method_ptr};
1175 template <
typename A>
1176 inline internal::IgnoreResultAction<A>
IgnoreResult(
const A& an_action) {
1177 return internal::IgnoreResultAction<A>(an_action);
1190 template <
typename T>
1191 inline ::std::reference_wrapper<T>
ByRef(
T& l_value) {
1192 return ::std::reference_wrapper<T>(l_value);
1198 # pragma warning(pop)
1202 #endif // GMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_
internal::ReturnRefOfCopyAction< R > ReturnRefOfCopy(const R &x)
Result Perform(const ArgumentTuple &) override
Function< F >::ArgumentTuple ArgumentTuple
Function< F >::ArgumentTuple ArgumentTuple
WeakRefCountedPtr< ChildPolicyWrapper > wrapper_
GTEST_DISALLOW_ASSIGN_(ReturnAction)
internal::Function< F >::ArgumentTuple ArgumentTuple
GTEST_DISALLOW_COPY_AND_ASSIGN_(ActionInterface)
GTEST_API_ void IllegalDoDefault(const char *file, int line)
absl::string_view get(const Cont &c)
std::tuple< Actions... > actions
GTEST_DISALLOW_ASSIGN_(Impl)
static void Perform(const ArgumentTuple &)
internal::Function< F >::MakeResultIgnoredValue OriginalFunction
GTEST_DISALLOW_ASSIGN_(AssignAction)
internal::Function< F >::ArgumentTuple ArgumentTuple
::std::function< F > fun_
GTEST_DISALLOW_ASSIGN_(ReturnRefOfCopyAction)
internal::ReturnAction< R > Return(R value)
PolymorphicAction(const Impl &impl)
GTEST_DISALLOW_COPY_AND_ASSIGN_(FactoryValueProducer)
Function< F >::Result Result
GTEST_DISALLOW_ASSIGN_(PolymorphicAction)
Result Perform(const ArgumentTuple &) override
Function< F >::Result Result
GTEST_DISALLOW_ASSIGN_(MonomorphicImpl)
GTEST_COMPILE_ASSERT_(!std::is_reference< Result >::value, Result_cannot_be_a_reference_type)
static void SetFactory(FactoryFunction factory)
internal::ArgsMatcher< InnerMatcher > Args(const InnerMatcher &matcher)
TypeWithSize< 8 >::UInt UInt64
SetErrnoAndReturnAction(int errno_value, T result)
#define GTEST_COMPILE_ASSERT_(expr, msg)
internal::Function< F >::Result Result
Function< F >::ArgumentTuple ArgumentTuple
GTEST_DISALLOW_ASSIGN_(Impl)
inline ::std::reference_wrapper< T > ByRef(T &l_value)
Action< F > MakeAction(ActionInterface< F > *impl)
PolymorphicAction< Impl > MakePolymorphicAction(const Impl &impl)
internal::ReturnRefAction< R > ReturnRef(R &x)
Impl(const std::shared_ptr< R > &wrapper)
#define T(upbtypeconst, upbtype, ctype, default_value)
Function< F >::ArgumentTuple ArgumentTuple
Result Perform(const ArgumentTuple &) override
internal::WithArgsAction< typename std::decay< InnerAction >::type, k > WithArg(InnerAction &&action)
ReturnType operator()(const Args &...) const
GTEST_DISALLOW_ASSIGN_(ReturnRefAction)
internal::Function< F >::Result Result
FactoryValueProducer(FactoryFunction factory)
void Perform(const ArgumentTuple &args) const
Result Perform(const ArgumentTuple &) override
Action(const Action< Func > &action)
SetArgumentPointeeAction(const Proto &proto)
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
const MethodPtr method_ptr
std::result_of< F > result_of
TestInstance::Result Result
ReturnRefOfCopyAction(const T &value)
internal::DoAllAction< typename std::decay< Action >::type... > DoAll(Action &&... action)
internal::Function< F >::ArgumentTuple ArgumentTuple
GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(void,)
internal::ByMoveWrapper< R > ByMove(R x)
Action(ActionInterface< F > *impl)
static Result Perform(const ArgumentTuple &)
Function< F >::Result Result
std::string DefaultValue(const FieldDescriptor *field)
void Perform(const ArgumentTuple &) const
grpc_channel_wrapper * wrapper
std::vector< Action< void(Args...)> > Convert(IndexSequence< I... >) const
Function< F >::Result Result
virtual ~ActionInterface()
GTEST_DISALLOW_ASSIGN_(SetArgumentPointeeAction)
FunctionImpl function_impl
GTEST_DISALLOW_ASSIGN_(Impl)
GTEST_DISALLOW_ASSIGN_(IgnoreResultAction)
auto Apply(F &&f, Tuple &&args) -> decltype(ApplyImpl(std::forward< F >(f), std::forward< Tuple >(args), MakeIndexSequence< std::tuple_size< Tuple >::value >()))
internal::Function< F >::Result Result
void Perform(const ArgumentTuple &args) const
AssignAction(T1 *ptr, T2 value)
FixedValueProducer(T value)
#define GTEST_CHECK_(condition)
internal::Function< F >::ArgumentTuple ArgumentTuple
virtual Result Perform(const ArgumentTuple &args)=0
void Assert(bool condition, const char *file, int line)
Impl(const std::shared_ptr< R > &value)
PolymorphicAction< internal::SetErrnoAndReturnAction< T > > SetErrnoAndReturn(int errval, T result)
internal::IgnoreResultAction< A > IgnoreResult(const A &an_action)
const FactoryFunction factory_
auto operator()(Args &&... args) const -> decltype((obj_ptr-> *method_ptr)(std::forward< Args >(args)...))
void Perform(const ArgumentTuple &args) override
IgnoreResultAction(const A &action)
static ValueProducer * producer_
internal::WithArgsAction< typename std::decay< InnerAction >::type, k, ks... > WithArgs(InnerAction &&action)
const std::shared_ptr< R > value_
std::decay< FunctionImpl >::type Invoke(FunctionImpl &&function_impl)
Result Perform(ArgumentTuple args) const
PolymorphicAction< internal::ReturnNullAction > ReturnNull()
GTEST_DISALLOW_COPY_AND_ASSIGN_(FixedValueProducer)
Result Perform(const ArgumentTuple &) const
internal::Function< F >::Result operator()(Args &&... args)
internal::SetArgumentPointeeAction< N, T > SetArgumentPointee(T x)
TypeWithSize< 8 >::Int Int64
auto operator()(const Args &...) -> decltype(function_impl())
constexpr T && forward(absl::remove_reference_t< T > &t) noexcept
internal::DoDefaultAction DoDefault()
GTEST_DISALLOW_COPY_AND_ASSIGN_(Impl)
const T & move(const T &t)
internal::WithArgsAction< typename std::decay< InnerAction >::type > WithoutArgs(InnerAction &&action)
GTEST_DISALLOW_ASSIGN_(SetErrnoAndReturnAction)
const Action< OriginalFunction > action_
typename std::result_of< MethodPtr(Class *)>::type ReturnType
PolymorphicAction< internal::AssignAction< T1, T2 > > Assign(T1 *ptr, T2 val)
MonomorphicImpl(const Impl &impl)
internal::SetArgumentPointeeAction< N, T > SetArgPointee(T x)
internal::IgnoredValue Unused
::std::shared_ptr< ActionInterface< F > > impl_
SetArgumentPointeeAction(const A &value)
internal::Function< F >::Result Result
internal::InvokeWithoutArgsAction< typename std::decay< FunctionImpl >::type > InvokeWithoutArgs(FunctionImpl function_impl)
Result Perform(const ArgumentTuple &args) override
const MethodPtr method_ptr
grpc
Author(s):
autogenerated on Fri May 16 2025 02:58:29