Go to the documentation of this file.
130 #ifndef GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_
131 #define GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_
138 #include <functional>
142 #include <type_traits>
145 #include "gmock/internal/gmock-internal-utils.h"
146 #include "gmock/internal/gmock-port.h"
147 #include "gmock/internal/gmock-pp.h"
150 # pragma warning(push)
151 # pragma warning(disable:4100)
172 template <
typename T,
bool kDefaultConstructible>
173 struct BuiltInDefaultValueGetter {
176 template <
typename T>
177 struct BuiltInDefaultValueGetter<
T,
false> {
179 Assert(
false, __FILE__, __LINE__,
180 "Default action undefined for the function return type.");
181 return internal::Invalid<T>();
194 template <
typename T>
195 class BuiltInDefaultValue {
211 template <
typename T>
212 class BuiltInDefaultValue<
const T> {
220 template <
typename T>
221 class BuiltInDefaultValue<
T*> {
224 static T*
Get() {
return nullptr; }
229 #define GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(type, value) \
231 class BuiltInDefaultValue<type> { \
233 static bool Exists() { return true; } \
234 static type Get() { return value; } \
250 #if GMOCK_WCHAR_T_IS_NATIVE_
265 #undef GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_
268 template <
typename P,
typename Q>
286 template <
typename T>
329 class ValueProducer {
335 class FixedValueProducer :
public ValueProducer {
345 class FactoryValueProducer :
public ValueProducer {
361 template <
typename T>
403 template <
typename T>
407 template <
typename T>
411 template <
typename F>
412 class ActionInterface {
437 template <
typename F>
441 struct ActionAdapter {
443 ::std::shared_ptr<ActionInterface<F>>
impl_;
445 template <
typename...
Args>
447 return impl_->Perform(
448 ::std::forward_as_tuple(::std::forward<Args>(
args)...));
452 template <
typename G>
477 :
fun_(ActionAdapter{::std::shared_ptr<ActionInterface<F>>(impl)}) {}
482 template <
typename Func>
502 template <
typename G>
505 template <
typename G>
507 fun_ = ::std::forward<G>(
g);
510 template <
typename G>
515 template <
typename FunctionImpl>
517 template <
typename...
Args>
526 ::std::function<F>
fun_;
550 template <
typename Impl>
555 template <
typename F>
561 template <
typename F>
570 return impl_.template Perform<Result>(
args);
582 template <
typename F>
583 Action<F>
MakeAction(ActionInterface<F>* impl) {
584 return Action<F>(impl);
594 template <
typename Impl>
596 return PolymorphicAction<Impl>(impl);
603 template <
typename T>
604 struct ByMoveWrapper {
636 template <
typename R>
646 template <
typename F>
659 use_ReturnRef_instead_of_Return_to_return_a_reference);
661 "Can't use Return() on an action expected to return `void`.");
667 template <
typename R_,
typename F>
688 Result_cannot_be_a_reference_type);
699 template <
typename R_,
typename F>
710 <<
"A ByMove() action should only be performed once.";
720 const std::shared_ptr<R>
value_;
724 class ReturnNullAction {
729 template <
typename Result,
typename ArgumentTuple>
736 class ReturnVoidAction {
739 template <
typename Result,
typename ArgumentTuple>
748 template <
typename T>
749 class ReturnRefAction {
756 template <
typename F>
763 use_Return_instead_of_ReturnRef_to_return_a_value);
769 template <
typename F>
789 template <
typename T>
790 class ReturnRefOfCopyAction {
798 template <
typename F>
806 use_Return_instead_of_ReturnRefOfCopy_to_return_a_value);
812 template <
typename F>
831 template <
typename T>
836 <<
"ReturnRoundRobin requires at least one element.";
840 template <
typename...
Args>
856 std::shared_ptr<State>
state_ = std::make_shared<State>();
864 template <
typename F>
870 template <
typename T1,
typename T2>
875 template <
typename Result,
typename ArgumentTuple>
885 #if !GTEST_OS_WINDOWS_MOBILE
889 template <
typename T>
890 class SetErrnoAndReturnAction {
895 template <
typename Result,
typename ArgumentTuple>
906 #endif // !GTEST_OS_WINDOWS_MOBILE
910 template <
size_t N,
typename A,
typename =
void>
911 struct SetArgumentPointeeAction {
914 template <
typename...
Args>
916 *::std::get<N>(std::tie(
args...)) =
value;
921 template <
class Class,
typename MethodPtr>
922 struct InvokeMethodAction {
926 template <
typename...
Args>
937 template <
typename FunctionImpl>
938 struct InvokeWithoutArgsAction {
943 template <
typename...
Args>
950 template <
class Class,
typename MethodPtr>
951 struct InvokeMethodWithoutArgsAction {
956 decltype((std::declval<Class*>()->*std::declval<MethodPtr>())());
958 template <
typename...
Args>
965 template <
typename A>
966 class IgnoreResultAction {
970 template <
typename F>
989 template <
typename F>
1014 template <
typename InnerAction,
size_t...
I>
1020 template <
typename R,
typename...
Args>
1022 using TupleType = std::tuple<
Args...>;
1026 return [converted](
Args...
args) -> R {
1027 return converted.Perform(std::forward_as_tuple(
1028 std::get<I>(std::forward_as_tuple(std::forward<Args>(
args)...))...));
1033 template <
typename... Actions>
1034 struct DoAllAction {
1036 template <
typename T>
1040 template <
typename ActionT,
size_t...
I>
1042 return {ActionT(std::get<I>(
actions))...};
1046 std::tuple<Actions...>
actions;
1048 template <
typename R,
typename...
Args>
1054 auto tuple_args = std::forward_as_tuple(std::forward<Args>(
args)...);
1055 for (
auto&
a : converted) {
1056 a.Perform(tuple_args);
1058 return last.Perform(
std::move(tuple_args));
1067 template <
typename T,
typename... Params>
1071 [](
const Params&... unpacked_params) {
1072 return new T(unpacked_params...);
1081 template <
typename...
Args>
1083 std::forward_as_tuple(std::forward<Args>(
args)...))) {
1084 return std::get<k>(std::forward_as_tuple(std::forward<Args>(
args)...));
1088 template <
size_t k,
typename Ptr>
1092 template <
typename...
Args>
1098 template <
size_t k,
typename Ptr>
1102 template <
typename...
Args>
1108 template <
size_t k,
typename T>
1112 template <
typename...
Args>
1115 typename ::std::tuple_element<
k, std::tuple<
Args...>>
::type;
1117 "Argument must be a reference type.");
1122 template <
size_t k,
typename I1,
typename I2>
1127 template <
typename...
Args>
1129 auto value = std::get<k>(std::tie(
args...));
1138 template <
typename...
Args>
1140 delete std::get<k>(std::tie(
args...));
1144 template <
typename Ptr>
1147 template <
typename...
Args>
1153 #if GTEST_HAS_EXCEPTIONS
1154 template <
typename T>
1155 struct ThrowAction {
1158 template <
typename R,
typename...
Args>
1164 #endif // GTEST_HAS_EXCEPTIONS
1198 typedef internal::IgnoredValue
Unused;
1203 template <
typename... Action>
1206 return {std::forward_as_tuple(std::forward<Action>(
action)...)};
1214 template <
size_t k,
typename InnerAction>
1217 return {std::forward<InnerAction>(
action)};
1224 template <
size_t k,
size_t... ks,
typename InnerAction>
1227 return {std::forward<InnerAction>(
action)};
1234 template <
typename InnerAction>
1237 return {std::forward<InnerAction>(
action)};
1243 template <
typename R>
1249 inline PolymorphicAction<internal::ReturnNullAction>
ReturnNull() {
1254 inline PolymorphicAction<internal::ReturnVoidAction>
Return() {
1259 template <
typename R>
1260 inline internal::ReturnRefAction<R>
ReturnRef(R& x) {
1261 return internal::ReturnRefAction<R>(x);
1265 template <
typename R, R* =
nullptr>
1266 internal::ReturnRefAction<R>
ReturnRef(R&&) =
delete;
1271 template <
typename R>
1272 inline internal::ReturnRefOfCopyAction<R>
ReturnRefOfCopy(
const R& x) {
1273 return internal::ReturnRefOfCopyAction<R>(x);
1280 template <
typename R>
1281 internal::ByMoveWrapper<R>
ByMove(R x) {
1282 return internal::ByMoveWrapper<R>(
std::move(x));
1288 template <
typename T>
1296 template <
typename T>
1298 std::initializer_list<T>
vals) {
1303 inline internal::DoDefaultAction
DoDefault() {
1304 return internal::DoDefaultAction();
1309 template <
size_t N,
typename T>
1315 template <
size_t N,
typename T>
1321 template <
typename T1,
typename T2>
1322 PolymorphicAction<internal::AssignAction<T1, T2> >
Assign(
T1*
ptr,
T2 val) {
1326 #if !GTEST_OS_WINDOWS_MOBILE
1329 template <
typename T>
1330 PolymorphicAction<internal::SetErrnoAndReturnAction<T> >
1333 internal::SetErrnoAndReturnAction<T>(errval,
result));
1336 #endif // !GTEST_OS_WINDOWS_MOBILE
1344 template <
typename FunctionImpl>
1346 return std::forward<FunctionImpl>(function_impl);
1351 template <
class Class,
typename MethodPtr>
1352 internal::InvokeMethodAction<Class, MethodPtr>
Invoke(Class* obj_ptr,
1353 MethodPtr method_ptr) {
1354 return {obj_ptr, method_ptr};
1358 template <
typename FunctionImpl>
1366 template <
class Class,
typename MethodPtr>
1368 Class* obj_ptr, MethodPtr method_ptr) {
1369 return {obj_ptr, method_ptr};
1375 template <
typename A>
1376 inline internal::IgnoreResultAction<A>
IgnoreResult(
const A& an_action) {
1377 return internal::IgnoreResultAction<A>(an_action);
1390 template <
typename T>
1391 inline ::std::reference_wrapper<T>
ByRef(
T& l_value) {
1392 return ::std::reference_wrapper<T>(l_value);
1398 template <
typename T,
typename... Params>
1400 Params&&... params) {
1401 return {std::forward_as_tuple(std::forward<Params>(params)...)};
1412 template <
size_t k,
typename Ptr>
1419 template <
size_t k,
typename Ptr>
1426 template <
size_t k,
typename T>
1429 return {std::forward<T>(
value)};
1437 template <
size_t k,
typename I1,
typename I2>
1440 return {
first, last};
1451 template <
typename Ptr>
1458 #if GTEST_HAS_EXCEPTIONS
1459 template <
typename T>
1461 return {std::forward<T>(exception)};
1463 #endif // GTEST_HAS_EXCEPTIONS
1481 struct ExcessiveArg {};
1487 template <
typename Impl>
1491 explicit operator const Impl&()
const {
return *
ptr; }
1498 template <
typename R,
typename...
Args,
typename Impl>
1509 sizeof...(Args) <= 10 ?
sizeof...(
Args) : 10;
1515 template <std::size_t... arg_id, std::size_t... excess_id>
1524 return static_cast<const Impl&
>(*this).template gmock_PerformImpl<
1529 ((void)excess_id, kExcessArg)...);
1535 template <
typename F,
typename Impl>
1541 template <
typename F,
typename Impl>
1546 #define GMOCK_INTERNAL_ARG_UNUSED(i, data, el) \
1547 , const arg##i##_type& arg##i GTEST_ATTRIBUTE_UNUSED_
1548 #define GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_ \
1549 const args_type& args GTEST_ATTRIBUTE_UNUSED_ GMOCK_PP_REPEAT( \
1550 GMOCK_INTERNAL_ARG_UNUSED, , 10)
1552 #define GMOCK_INTERNAL_ARG(i, data, el) , const arg##i##_type& arg##i
1553 #define GMOCK_ACTION_ARG_TYPES_AND_NAMES_ \
1554 const args_type& args GMOCK_PP_REPEAT(GMOCK_INTERNAL_ARG, , 10)
1556 #define GMOCK_INTERNAL_TEMPLATE_ARG(i, data, el) , typename arg##i##_type
1557 #define GMOCK_ACTION_TEMPLATE_ARGS_NAMES_ \
1558 GMOCK_PP_TAIL(GMOCK_PP_REPEAT(GMOCK_INTERNAL_TEMPLATE_ARG, , 10))
1560 #define GMOCK_INTERNAL_TYPENAME_PARAM(i, data, param) , typename param##_type
1561 #define GMOCK_ACTION_TYPENAME_PARAMS_(params) \
1562 GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_TYPENAME_PARAM, , params))
1564 #define GMOCK_INTERNAL_TYPE_PARAM(i, data, param) , param##_type
1565 #define GMOCK_ACTION_TYPE_PARAMS_(params) \
1566 GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_TYPE_PARAM, , params))
1568 #define GMOCK_INTERNAL_TYPE_GVALUE_PARAM(i, data, param) \
1569 , param##_type gmock_p##i
1570 #define GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params) \
1571 GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_TYPE_GVALUE_PARAM, , params))
1573 #define GMOCK_INTERNAL_GVALUE_PARAM(i, data, param) \
1574 , std::forward<param##_type>(gmock_p##i)
1575 #define GMOCK_ACTION_GVALUE_PARAMS_(params) \
1576 GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_GVALUE_PARAM, , params))
1578 #define GMOCK_INTERNAL_INIT_PARAM(i, data, param) \
1579 , param(::std::forward<param##_type>(gmock_p##i))
1580 #define GMOCK_ACTION_INIT_PARAMS_(params) \
1581 GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_INIT_PARAM, , params))
1583 #define GMOCK_INTERNAL_FIELD_PARAM(i, data, param) param##_type param;
1584 #define GMOCK_ACTION_FIELD_PARAMS_(params) \
1585 GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_FIELD_PARAM, , params)
1587 #define GMOCK_INTERNAL_ACTION(name, full_name, params) \
1588 template <GMOCK_ACTION_TYPENAME_PARAMS_(params)> \
1591 explicit full_name(GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) \
1592 : impl_(std::make_shared<gmock_Impl>( \
1593 GMOCK_ACTION_GVALUE_PARAMS_(params))) { } \
1594 full_name(const full_name&) = default; \
1595 full_name(full_name&&) noexcept = default; \
1596 template <typename F> \
1597 operator ::testing::Action<F>() const { \
1598 return ::testing::internal::MakeAction<F>(impl_); \
1601 class gmock_Impl { \
1603 explicit gmock_Impl(GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) \
1604 : GMOCK_ACTION_INIT_PARAMS_(params) {} \
1605 template <typename function_type, typename return_type, \
1606 typename args_type, GMOCK_ACTION_TEMPLATE_ARGS_NAMES_> \
1607 return_type gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_) const; \
1608 GMOCK_ACTION_FIELD_PARAMS_(params) \
1610 std::shared_ptr<const gmock_Impl> impl_; \
1612 template <GMOCK_ACTION_TYPENAME_PARAMS_(params)> \
1613 inline full_name<GMOCK_ACTION_TYPE_PARAMS_(params)> name( \
1614 GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) { \
1615 return full_name<GMOCK_ACTION_TYPE_PARAMS_(params)>( \
1616 GMOCK_ACTION_GVALUE_PARAMS_(params)); \
1618 template <GMOCK_ACTION_TYPENAME_PARAMS_(params)> \
1619 template <typename function_type, typename return_type, typename args_type, \
1620 GMOCK_ACTION_TEMPLATE_ARGS_NAMES_> \
1621 return_type full_name<GMOCK_ACTION_TYPE_PARAMS_(params)>::gmock_Impl:: \
1622 gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
1627 #define ACTION(name) \
1628 class name##Action { \
1630 explicit name##Action() noexcept {} \
1631 name##Action(const name##Action&) noexcept {} \
1632 template <typename F> \
1633 operator ::testing::Action<F>() const { \
1634 return ::testing::internal::MakeAction<F, gmock_Impl>(); \
1637 class gmock_Impl { \
1639 template <typename function_type, typename return_type, \
1640 typename args_type, GMOCK_ACTION_TEMPLATE_ARGS_NAMES_> \
1641 return_type gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_) const; \
1644 inline name##Action name() GTEST_MUST_USE_RESULT_; \
1645 inline name##Action name() { return name##Action(); } \
1646 template <typename function_type, typename return_type, typename args_type, \
1647 GMOCK_ACTION_TEMPLATE_ARGS_NAMES_> \
1648 return_type name##Action::gmock_Impl::gmock_PerformImpl( \
1649 GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
1651 #define ACTION_P(name, ...) \
1652 GMOCK_INTERNAL_ACTION(name, name##ActionP, (__VA_ARGS__))
1654 #define ACTION_P2(name, ...) \
1655 GMOCK_INTERNAL_ACTION(name, name##ActionP2, (__VA_ARGS__))
1657 #define ACTION_P3(name, ...) \
1658 GMOCK_INTERNAL_ACTION(name, name##ActionP3, (__VA_ARGS__))
1660 #define ACTION_P4(name, ...) \
1661 GMOCK_INTERNAL_ACTION(name, name##ActionP4, (__VA_ARGS__))
1663 #define ACTION_P5(name, ...) \
1664 GMOCK_INTERNAL_ACTION(name, name##ActionP5, (__VA_ARGS__))
1666 #define ACTION_P6(name, ...) \
1667 GMOCK_INTERNAL_ACTION(name, name##ActionP6, (__VA_ARGS__))
1669 #define ACTION_P7(name, ...) \
1670 GMOCK_INTERNAL_ACTION(name, name##ActionP7, (__VA_ARGS__))
1672 #define ACTION_P8(name, ...) \
1673 GMOCK_INTERNAL_ACTION(name, name##ActionP8, (__VA_ARGS__))
1675 #define ACTION_P9(name, ...) \
1676 GMOCK_INTERNAL_ACTION(name, name##ActionP9, (__VA_ARGS__))
1678 #define ACTION_P10(name, ...) \
1679 GMOCK_INTERNAL_ACTION(name, name##ActionP10, (__VA_ARGS__))
1684 # pragma warning(pop)
1687 #endif // GOOGLEMOCK_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
std::is_constructible< std::function< InnerFunctionType >, G > IsCompatibleFunctor
WeakRefCountedPtr< ChildPolicyWrapper > wrapper_
void Init(G &&g, ::std::true_type)
internal::Function< F >::ArgumentTuple ArgumentTuple
internal::SetArgRefereeAction< k, typename std::decay< T >::type > SetArgReferee(T &&value)
GTEST_DISALLOW_COPY_AND_ASSIGN_(ActionInterface)
GTEST_API_ void IllegalDoDefault(const char *file, int line)
absl::string_view get(const Cont &c)
R Apply(IndexSequence< arg_id... >, IndexSequence< excess_id... >, const args_type &args) const
std::tuple< Actions... > actions
auto operator()(Args &&... args) const -> decltype(std::get< k >(std::forward_as_tuple(std::forward< Args >(args)...)))
std::tuple< Params... > params
static void Perform(const ArgumentTuple &)
internal::Function< F >::MakeResultIgnoredValue OriginalFunction
typename std::conditional< std::is_scalar< T >::value, T, const T & >::type NonFinalType
internal::Function< F >::ArgumentTuple ArgumentTuple
::std::function< F > fun_
typename std::conditional< std::is_constructible< Impl >::value, Impl, Holder >::type type
internal::ReturnAction< R > Return(R value)
PolymorphicAction(const Impl &impl)
GTEST_DISALLOW_COPY_AND_ASSIGN_(FactoryValueProducer)
Function< F >::Result Result
static int copy(grpc_slice_buffer *input, grpc_slice_buffer *output)
integral_constant< bool, true > true_type
Result Perform(const ArgumentTuple &) override
integral_constant< bool, false > false_type
Function< F >::Result Result
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)
SetErrnoAndReturnAction(int errno_value, T result)
#define GTEST_COMPILE_ASSERT_(expr, msg)
internal::Function< F >::Result Result
Function< F >::ArgumentTuple ArgumentTuple
void operator()(const Args &... args) const
inline ::std::reference_wrapper< T > ByRef(T &l_value)
Action< F > MakeAction(ActionInterface< F > *impl)
internal::ReturnRoundRobinAction< T > ReturnRoundRobin(std::vector< T > vals)
PolymorphicAction< Impl > MakePolymorphicAction(const Impl &impl)
internal::ReturnRefAction< R > ReturnRef(R &x)
Impl(const std::shared_ptr< R > &wrapper)
void operator()(const Args &... args) const
#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
internal::Function< F >::Result Result
FactoryValueProducer(FactoryFunction factory)
Result Perform(const ArgumentTuple &) override
Action(const Action< Func > &action)
T operator()(Args &&...) const
R operator()(Args &&... arg) const
constexpr absl::remove_reference_t< T > && move(T &&t) noexcept
const MethodPtr method_ptr
internal::SaveArgPointeeAction< k, Ptr > SaveArgPointee(Ptr pointer)
TestInstance::Result Result
std::tuple< Args... > args_type
ReturnRefOfCopyAction(const T &value)
internal::SaveArgAction< k, Ptr > SaveArg(Ptr pointer)
internal::DoAllAction< typename std::decay< Action >::type... > DoAll(Action &&... action)
void operator()(const Args &... args) const
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
internal::ReturnNewAction< T, typename std::decay< Params >::type... > ReturnNew(Params &&... params)
virtual ~ActionInterface()
FunctionImpl function_impl
auto Apply(F &&f, Tuple &&args) -> decltype(ApplyImpl(std::forward< F >(f), std::forward< Tuple >(args), MakeIndexSequence< std::tuple_size< Tuple >::value >()))
std::vector< ActionT > Convert(IndexSequence< I... >) const
internal::Function< F >::Result Result
void Init(G &&g, ::std::false_type)
AssignAction(T1 *ptr, T2 value)
std::shared_ptr< State > state_
void operator()(const Args &... args) const
FixedValueProducer(T value)
#define GTEST_CHECK_(condition)
internal::Function< F >::ArgumentTuple ArgumentTuple
virtual Result Perform(const ArgumentTuple &args)=0
Result operator()(const Args &...) const
internal::ReturnArgAction< k > ReturnArg()
void Assert(bool condition, const char *file, int line)
internal::DeleteArgAction< k > DeleteArg()
Impl(const std::shared_ptr< R > &value)
PolymorphicAction< internal::SetErrnoAndReturnAction< T > > SetErrnoAndReturn(int errval, T result)
internal::IgnoreResultAction< A > IgnoreResult(const A &an_action)
std::shared_ptr< Impl > ptr
const FactoryFunction factory_
auto operator()(Args &&... args) const -> decltype((obj_ptr-> *method_ptr)(std::forward< Args >(args)...))
internal::ReturnPointeeAction< Ptr > ReturnPointee(Ptr pointer)
void Perform(const ArgumentTuple &args) override
ReturnRoundRobinAction(std::vector< T > values)
void operator()(const Args &... args) const
std::array< int64_t, Size > values
IgnoreResultAction(const A &action)
static ValueProducer * producer_
internal::WithArgsAction< typename std::decay< InnerAction >::type, k, ks... > WithArgs(InnerAction &&action)
ActionImpl(std::shared_ptr< Impl > impl)
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)
void operator()(Args &&... args) const
Result Perform(const ArgumentTuple &) const
ABSL_ATTRIBUTE_NORETURN void Throw(const char *str, int line)
FunctionImpl function_impl
internal::Function< F >::Result operator()(Args &&... args)
internal::SetArgumentPointeeAction< N, T > SetArgumentPointee(T x)
static const int kMaxArgs
::testing::Action< F > MakeAction()
auto operator()(const Args &...) -> decltype(function_impl())
internal::DoDefaultAction DoDefault()
auto operator()(const Args &...) const -> decltype(*pointer)
GTEST_DISALLOW_COPY_AND_ASSIGN_(Impl)
const T & move(const T &t)
internal::WithArgsAction< typename std::decay< InnerAction >::type > WithoutArgs(InnerAction &&action)
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
typename ::std::conditional< P::value, P, Q >::type disjunction
::std::shared_ptr< ActionInterface< F > > impl_
internal::SetArrayArgumentAction< k, I1, I2 > SetArrayArgument(I1 first, I2 last)
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