130 #ifndef GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_
131 #define GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_
139 #include <functional>
143 #include <type_traits>
170 template <
typename T,
bool kDefaultConstructible>
174 template <
typename T>
177 Assert(
false, __FILE__, __LINE__,
178 "Default action undefined for the function return type.");
179 #if defined(__GNUC__) || defined(__clang__)
180 __builtin_unreachable();
181 #elif defined(_MSC_VER)
198 template <
typename T>
213 template <
typename T>
222 template <
typename T>
226 static T*
Get() {
return nullptr; }
231 #define GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(type, value) \
233 class BuiltInDefaultValue<type> { \
235 static bool Exists() { return true; } \
236 static type Get() { return value; } \
252 #if GMOCK_WCHAR_T_IS_NATIVE_
267 #undef GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_
272 template <
typename P>
275 : std::integral_constant<bool, bool(!P::value)> {};
278 template <
typename...>
282 template <
typename P1>
287 template <
typename P1,
typename... Ps>
289 : std::conditional<bool(P1::value), conjunction<Ps...>, P1>::type {};
291 template <
typename...>
294 template <
typename P1>
297 template <
typename P1,
typename... Ps>
300 : std::conditional<!bool(P1::value), disjunction<Ps...>, P1>::type {};
302 template <
typename...>
327 template <
typename From,
typename To>
332 template <
typename T>
333 static void Accept(
T);
336 template <
typename T>
340 template <
typename T,
typename = decltype(Accept<To>(Make<T>()))>
341 static std::true_type TestImplicitConversion(
int);
344 template <
typename T>
345 static std::false_type TestImplicitConversion(...);
348 using type = decltype(TestImplicitConversion<From>(0));
355 template <
typename F,
typename... Args>
358 template <
typename Void,
typename R,
typename F,
typename... Args>
364 template <
typename R,
typename F,
typename... Args>
367 std::is_void<R>::value,
369 is_implicitly_convertible<call_result_t<F, Args...>, R>>::type {};
373 template <
typename R,
typename F,
typename... Args>
377 template <
typename T>
385 template <
typename F>
423 template <
typename Result,
typename... Args>
428 template <
typename Callable>
431 std::is_constructible<typename std::decay<Callable>::type, Callable>,
438 template <
typename Callable>
441 std::is_constructible<typename std::decay<Callable>::type, Callable>,
450 template <
typename Callable,
451 typename std::enable_if<
458 OnceAction,
typename std::decay<Callable>::type>>,
463 : function_(StdFunctionAdaptor<typename std::decay<Callable>::type>(
464 {}, std::forward<Callable>(callable))) {}
467 template <
typename Callable,
468 typename std::enable_if<
469 internal::conjunction<
474 internal::negation<std::is_same<
475 OnceAction,
typename std::decay<Callable>::type>>,
478 internal::negation<IsDirectlyCompatible<Callable>>,
479 IsCompatibleAfterIgnoringArguments<Callable>>
::value,
484 :
OnceAction(IgnoreIncomingArguments<typename std::decay<Callable>::type>{
485 std::forward<Callable>(callable)}) {}
496 return function_(std::forward<Args>(args)...);
507 template <
typename Callable>
508 class StdFunctionAdaptor final {
513 struct CallableTag final {};
515 template <
typename F>
517 : callable_(std::make_shared<Callable>(std::forward<
F>(callable))) {}
537 template <
typename... ArgRefs>
539 ArgRefs&&... args)
const {
540 return std::move(*callable_)(std::forward<ArgRefs>(args)...);
551 template <
typename Callable>
552 struct IgnoreIncomingArguments {
554 return std::move(callable)();
576 template <
typename T>
589 typedef T (*FactoryFunction)();
602 static bool IsSet() {
return producer_ !=
nullptr; }
615 : producer_->Produce();
622 virtual T Produce() = 0;
639 : factory_(factory) {}
653 template <
typename T>
662 static void Clear() { address_ =
nullptr; }
665 static bool IsSet() {
return address_ !=
nullptr; }
695 template <
typename T>
696 typename DefaultValue<T>::ValueProducer* DefaultValue<T>::producer_ =
nullptr;
699 template <
typename T>
700 T* DefaultValue<T&>::address_ =
nullptr;
703 template <
typename F>
723 template <
typename F>
732 template <
typename R,
typename... Args>
735 using F =
R(Args...);
739 struct ActionAdapter {
741 ::std::shared_ptr<ActionInterface<F>>
impl_;
743 template <
typename... InArgs>
745 return impl_->Perform(
746 ::std::forward_as_tuple(::std::forward<InArgs>(args)...));
750 template <
typename G>
775 : fun_(ActionAdapter{::std::shared_ptr<ActionInterface<F>>(impl)}) {}
780 template <
typename Func>
782 : fun_(action.fun_) {}
809 R operator()(Args... args) && {
810 return action.Perform(
811 std::forward_as_tuple(std::forward<Args>(args)...));
819 template <
typename G>
822 template <
typename G>
823 void Init(G&& g, ::std::true_type) {
824 fun_ = ::std::forward<G>(
g);
827 template <
typename G>
828 void Init(G&& g, ::std::false_type) {
829 fun_ = IgnoreArgs<typename ::std::decay<G>::type>{::std::forward<G>(
g)};
832 template <
typename FunctionImpl>
834 template <
typename... InArgs>
836 return function_impl();
867 template <
typename Impl>
872 template <
typename F>
878 template <
typename F>
887 return impl_.template Perform<Result>(args);
899 template <
typename F>
911 template <
typename Impl>
920 template <
typename T>
927 template <
typename R>
932 template <
typename U,
typename... Args,
937 std::is_convertible<R, U>,
938 std::is_move_constructible<U>>
::value>::type>
943 template <
typename U,
typename... Args,
948 std::is_convertible<const R&, U>,
949 std::is_copy_constructible<U>>
::value>::type>
956 template <
typename U>
962 : state_(new
State(std::move(input_value))) {}
966 explicit Impl(
const R& input_value) : state_(new
State(input_value)) {}
985 : input_value(input_value_in),
999 : input_value(std::move(input_value_in)),
1093 template <
typename T>
1097 : state_(new State(std::move(wrapper.payload))) {}
1101 <<
"A ByMove() action must be performed at most once.";
1103 state_->called =
true;
1104 return std::move(state_->value);
1114 bool called =
false;
1126 template <
typename Result,
typename ArgumentTuple>
1136 template <
typename Result,
typename ArgumentTuple>
1145 template <
typename T>
1153 template <
typename F>
1160 "use Return instead of ReturnRef to return a value");
1166 template <
typename F>
1186 template <
typename T>
1195 template <
typename F>
1202 "use Return instead of ReturnRefOfCopy to return a value");
1208 template <
typename F>
1227 template <
typename T>
1232 <<
"ReturnRoundRobin requires at least one element.";
1233 state_->values = std::move(values);
1236 template <
typename... Args>
1238 return state_->Next();
1244 T ret_val = values[
i++];
1245 if (
i == values.size())
i = 0;
1252 std::shared_ptr<State> state_ = std::make_shared<State>();
1260 template <
typename F>
1268 template <
typename T1,
typename T2>
1273 template <
typename Result,
typename ArgumentTuple>
1283 #ifndef GTEST_OS_WINDOWS_MOBILE
1287 template <
typename T>
1291 : errno_(errno_value), result_(result) {}
1292 template <
typename Result,
typename ArgumentTuple>
1303 #endif // !GTEST_OS_WINDOWS_MOBILE
1307 template <
size_t N,
typename A,
typename =
void>
1311 template <
typename... Args>
1313 *::std::get<N>(std::tie(args...)) =
value;
1318 template <
class Class,
typename MethodPtr>
1323 template <
typename... Args>
1325 -> decltype((obj_ptr->*method_ptr)(std::forward<Args>(args)...)) {
1326 return (obj_ptr->*method_ptr)(std::forward<Args>(args)...);
1334 template <
typename FunctionImpl>
1340 template <
typename... Args>
1342 return function_impl();
1347 template <
class Class,
typename MethodPtr>
1353 decltype((std::declval<Class*>()->*std::declval<MethodPtr>())());
1355 template <
typename... Args>
1357 return (obj_ptr->*method_ptr)();
1362 template <
typename A>
1367 template <
typename F>
1386 template <
typename F>
1392 explicit Impl(
const A& action) : action_(action) {}
1396 action_.Perform(args);
1411 template <
typename InnerAction,
size_t... I>
1417 template <
typename R,
typename... Args>
1419 R(
typename std::tuple_element<I, std::tuple<Args...>>::type...);
1428 typename R,
typename... Args,
1429 typename std::enable_if<
1430 std::is_convertible<InnerAction,
1438 I, std::tuple<Args...>>...)>>
::value,
1444 R operator()(Args&&... args) && {
1445 return std::move(inner_action)
1447 std::forward_as_tuple(std::forward<Args>(args)...))...);
1451 return OA{std::move(inner_action)};
1455 typename R,
typename... Args,
1456 typename std::enable_if<
1457 std::is_convertible<
const InnerAction&,
1465 I, std::tuple<Args...>>...)>>
::value,
1470 return [converted](Args&&... args) -> R {
1471 return converted.Perform(std::forward_as_tuple(
1472 std::get<I>(std::forward_as_tuple(std::forward<Args>(args)...))...));
1477 template <
typename... Actions>
1481 template <
typename FinalAction>
1484 struct UserConstructorTag {};
1486 template <
typename T>
1488 : final_action_(std::forward<
T>(action)) {}
1497 template <
typename R,
typename... Args,
1498 typename std::enable_if<
1502 return std::move(final_action_);
1508 typename R,
typename... Args,
1509 typename std::enable_if<
1512 std::is_convertible<FinalAction,
OnceAction<
R(Args...)>>>,
1516 return Action<
R(Args...)>(std::move(final_action_));
1521 typename R,
typename... Args,
1522 typename std::enable_if<
1523 std::is_convertible<
const FinalAction&,
Action<
R(Args...)>>
::value,
1526 return final_action_;
1535 template <
typename InitialAction,
typename... OtherActions>
1586 template <
typename T>
1591 struct UserConstructorTag {};
1593 template <
typename T,
typename... U>
1595 U&&... other_actions)
1596 :
Base({}, std::forward<U>(other_actions)...),
1602 typename R,
typename... Args,
1603 typename std::enable_if<
1617 R operator()(Args... args) && {
1618 std::move(initial_action)
1621 return std::move(remaining_actions).Call(std::forward<Args>(args)...);
1626 std::move(initial_action_),
1627 std::move(static_cast<Base&>(*
this)),
1637 typename R,
typename... Args,
1638 typename std::enable_if<
1643 std::is_convertible<InitialAction,
1650 std::move(static_cast<Base&>(*
this)));
1656 typename R,
typename... Args,
1657 typename std::enable_if<
1659 std::is_convertible<
const InitialAction&,
1669 Action<
R(Args...)> remaining_actions;
1671 R operator()(Args... args)
const {
1672 initial_action.Perform(std::forward_as_tuple(
1675 return remaining_actions.Perform(
1676 std::forward_as_tuple(std::forward<Args>(args)...));
1682 static_cast<const Base&
>(*this),
1690 template <
typename T,
typename... Params>
1694 [](
const Params&... unpacked_params) {
1695 return new T(unpacked_params...);
1704 template <
typename... Args,
1705 typename =
typename std::enable_if<(k <
sizeof...(Args))>::type>
1706 auto operator()(Args&&... args)
const
1707 -> decltype(std::get<k>(
1708 std::forward_as_tuple(std::forward<Args>(args)...))) {
1709 return std::get<k>(std::forward_as_tuple(std::forward<Args>(args)...));
1713 template <
size_t k,
typename Ptr>
1717 template <
typename... Args>
1719 *pointer = std::get<k>(std::tie(args...));
1723 template <
size_t k,
typename Ptr>
1727 template <
typename... Args>
1729 *pointer = *std::get<k>(std::tie(args...));
1733 template <
size_t k,
typename T>
1737 template <
typename... Args>
1740 typename ::std::tuple_element<k, std::tuple<Args...>>::type;
1742 "Argument must be a reference type.");
1743 std::get<k>(std::tie(args...)) =
value;
1747 template <
size_t k,
typename I1,
typename I2>
1752 template <
typename... Args>
1754 auto value = std::get<k>(std::tie(args...));
1755 for (
auto it = first; it != last; ++it, (
void)++
value) {
1763 template <
typename... Args>
1765 delete std::get<k>(std::tie(args...));
1769 template <
typename Ptr>
1772 template <
typename... Args>
1778 #if GTEST_HAS_EXCEPTIONS
1779 template <
typename T>
1780 struct ThrowAction {
1783 template <
typename R,
typename... Args>
1784 operator Action<
R(Args...)>()
const {
1786 return [
copy](Args...) ->
R {
throw copy; };
1789 struct RethrowAction {
1790 std::exception_ptr exception;
1791 template <
typename R,
typename... Args>
1792 operator Action<
R(Args...)>()
const {
1793 return [ex = exception](Args...) ->
R { std::rethrow_exception(ex); };
1796 #endif // GTEST_HAS_EXCEPTIONS
1835 template <
typename...
Action>
1839 {}, std::forward<Action>(action)...);
1847 template <
size_t k,
typename InnerAction>
1849 InnerAction&& action) {
1850 return {std::forward<InnerAction>(action)};
1857 template <
size_t k,
size_t... ks,
typename InnerAction>
1860 return {std::forward<InnerAction>(action)};
1867 template <
typename InnerAction>
1868 internal::WithArgsAction<typename std::decay<InnerAction>::type>
WithoutArgs(
1869 InnerAction&& action) {
1870 return {std::forward<InnerAction>(action)};
1897 template <
typename R>
1913 template <
typename R>
1919 template <
typename R, R* =
nullptr>
1920 internal::ReturnRefAction<R>
ReturnRef(
R&&) =
delete;
1925 template <
typename R>
1936 template <
typename R>
1944 template <
typename T>
1952 template <
typename T>
1954 std::initializer_list<T> vals) {
1965 template <
size_t N,
typename T>
1967 return {std::move(value)};
1971 template <
size_t N,
typename T>
1973 return {std::move(value)};
1977 template <
typename T1,
typename T2>
1982 #ifndef GTEST_OS_WINDOWS_MOBILE
1985 template <
typename T>
1987 int errval,
T result) {
1992 #endif // !GTEST_OS_WINDOWS_MOBILE
2000 template <
typename FunctionImpl>
2001 typename std::decay<FunctionImpl>::type
Invoke(FunctionImpl&& function_impl) {
2002 return std::forward<FunctionImpl>(function_impl);
2007 template <
class Class,
typename MethodPtr>
2009 MethodPtr method_ptr) {
2010 return {obj_ptr, method_ptr};
2014 template <
typename FunctionImpl>
2015 internal::InvokeWithoutArgsAction<typename std::decay<FunctionImpl>::type>
2017 return {std::move(function_impl)};
2022 template <
class Class,
typename MethodPtr>
2024 Class* obj_ptr, MethodPtr method_ptr) {
2025 return {obj_ptr, method_ptr};
2031 template <
typename A>
2046 template <
typename T>
2047 inline ::std::reference_wrapper<T>
ByRef(
T& l_value) {
2048 return ::std::reference_wrapper<T>(l_value);
2054 template <
typename T,
typename... Params>
2056 Params&&... params) {
2057 return {std::forward_as_tuple(std::forward<Params>(params)...)};
2068 template <
size_t k,
typename Ptr>
2075 template <
size_t k,
typename Ptr>
2082 template <
size_t k,
typename T>
2085 return {std::forward<T>(
value)};
2093 template <
size_t k,
typename I1,
typename I2>
2096 return {first, last};
2107 template <
typename Ptr>
2112 #if GTEST_HAS_EXCEPTIONS
2117 template <
typename T>
2118 typename std::enable_if<
2119 !std::is_base_of<std::exception_ptr, typename std::decay<T>::type>
::value,
2120 internal::ThrowAction<typename std::decay<T>::type>>::type
2121 Throw(
T&& exception) {
2122 return {std::forward<T>(exception)};
2126 inline internal::RethrowAction Rethrow(std::exception_ptr exception) {
2127 return {std::move(exception)};
2129 #endif // GTEST_HAS_EXCEPTIONS
2131 namespace internal {
2151 template <
typename F,
typename Impl>
2154 template <
typename Impl>
2158 explicit operator const Impl&()
const {
return *ptr; }
2165 template <
typename R,
typename... Args,
typename Impl>
2175 static constexpr
size_t kMaxArgs =
2176 sizeof...(Args) <= 10 ?
sizeof...(Args) : 10;
2177 return Apply(std::make_index_sequence<kMaxArgs>{},
2178 std::make_index_sequence<10 - kMaxArgs>{},
2182 template <std::size_t... arg_id, std::size_t... excess_id>
2183 R Apply(std::index_sequence<arg_id...>, std::index_sequence<excess_id...>,
2191 return static_cast<const Impl&
>(*this)
2192 .template gmock_PerformImpl<
2196 typename std::tuple_element<arg_id, args_type>::type...>(
2197 args, std::get<arg_id>(args)...,
2198 ((
void)excess_id, kExcessArg)...);
2204 template <
typename F,
typename Impl>
2210 template <
typename F,
typename Impl>
2215 #define GMOCK_INTERNAL_ARG_UNUSED(i, data, el) \
2216 , GTEST_INTERNAL_ATTRIBUTE_MAYBE_UNUSED const arg##i##_type& arg##i
2217 #define GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_ \
2218 GTEST_INTERNAL_ATTRIBUTE_MAYBE_UNUSED const args_type& args GMOCK_PP_REPEAT( \
2219 GMOCK_INTERNAL_ARG_UNUSED, , 10)
2221 #define GMOCK_INTERNAL_ARG(i, data, el) , const arg##i##_type& arg##i
2222 #define GMOCK_ACTION_ARG_TYPES_AND_NAMES_ \
2223 const args_type& args GMOCK_PP_REPEAT(GMOCK_INTERNAL_ARG, , 10)
2225 #define GMOCK_INTERNAL_TEMPLATE_ARG(i, data, el) , typename arg##i##_type
2226 #define GMOCK_ACTION_TEMPLATE_ARGS_NAMES_ \
2227 GMOCK_PP_TAIL(GMOCK_PP_REPEAT(GMOCK_INTERNAL_TEMPLATE_ARG, , 10))
2229 #define GMOCK_INTERNAL_TYPENAME_PARAM(i, data, param) , typename param##_type
2230 #define GMOCK_ACTION_TYPENAME_PARAMS_(params) \
2231 GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_TYPENAME_PARAM, , params))
2233 #define GMOCK_INTERNAL_TYPE_PARAM(i, data, param) , param##_type
2234 #define GMOCK_ACTION_TYPE_PARAMS_(params) \
2235 GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_TYPE_PARAM, , params))
2237 #define GMOCK_INTERNAL_TYPE_GVALUE_PARAM(i, data, param) \
2238 , param##_type gmock_p##i
2239 #define GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params) \
2240 GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_TYPE_GVALUE_PARAM, , params))
2242 #define GMOCK_INTERNAL_GVALUE_PARAM(i, data, param) \
2243 , std::forward<param##_type>(gmock_p##i)
2244 #define GMOCK_ACTION_GVALUE_PARAMS_(params) \
2245 GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_GVALUE_PARAM, , params))
2247 #define GMOCK_INTERNAL_INIT_PARAM(i, data, param) \
2248 , param(::std::forward<param##_type>(gmock_p##i))
2249 #define GMOCK_ACTION_INIT_PARAMS_(params) \
2250 GMOCK_PP_TAIL(GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_INIT_PARAM, , params))
2252 #define GMOCK_INTERNAL_FIELD_PARAM(i, data, param) param##_type param;
2253 #define GMOCK_ACTION_FIELD_PARAMS_(params) \
2254 GMOCK_PP_FOR_EACH(GMOCK_INTERNAL_FIELD_PARAM, , params)
2256 #define GMOCK_INTERNAL_ACTION(name, full_name, params) \
2257 template <GMOCK_ACTION_TYPENAME_PARAMS_(params)> \
2260 explicit full_name(GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) \
2261 : impl_(std::make_shared<gmock_Impl>( \
2262 GMOCK_ACTION_GVALUE_PARAMS_(params))) {} \
2263 full_name(const full_name&) = default; \
2264 full_name(full_name&&) noexcept = default; \
2265 template <typename F> \
2266 operator ::testing::Action<F>() const { \
2267 return ::testing::internal::MakeAction<F>(impl_); \
2271 class gmock_Impl { \
2273 explicit gmock_Impl(GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) \
2274 : GMOCK_ACTION_INIT_PARAMS_(params) {} \
2275 template <typename function_type, typename return_type, \
2276 typename args_type, GMOCK_ACTION_TEMPLATE_ARGS_NAMES_> \
2277 return_type gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_) const; \
2278 GMOCK_ACTION_FIELD_PARAMS_(params) \
2280 std::shared_ptr<const gmock_Impl> impl_; \
2282 template <GMOCK_ACTION_TYPENAME_PARAMS_(params)> \
2283 inline full_name<GMOCK_ACTION_TYPE_PARAMS_(params)> name( \
2284 GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) GTEST_MUST_USE_RESULT_; \
2285 template <GMOCK_ACTION_TYPENAME_PARAMS_(params)> \
2286 inline full_name<GMOCK_ACTION_TYPE_PARAMS_(params)> name( \
2287 GMOCK_ACTION_TYPE_GVALUE_PARAMS_(params)) { \
2288 return full_name<GMOCK_ACTION_TYPE_PARAMS_(params)>( \
2289 GMOCK_ACTION_GVALUE_PARAMS_(params)); \
2291 template <GMOCK_ACTION_TYPENAME_PARAMS_(params)> \
2292 template <typename function_type, typename return_type, typename args_type, \
2293 GMOCK_ACTION_TEMPLATE_ARGS_NAMES_> \
2295 full_name<GMOCK_ACTION_TYPE_PARAMS_(params)>::gmock_Impl::gmock_PerformImpl( \
2296 GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
2301 #define ACTION(name) \
2302 class name##Action { \
2304 explicit name##Action() noexcept {} \
2305 name##Action(const name##Action&) noexcept {} \
2306 template <typename F> \
2307 operator ::testing::Action<F>() const { \
2308 return ::testing::internal::MakeAction<F, gmock_Impl>(); \
2312 class gmock_Impl { \
2314 template <typename function_type, typename return_type, \
2315 typename args_type, GMOCK_ACTION_TEMPLATE_ARGS_NAMES_> \
2316 return_type gmock_PerformImpl(GMOCK_ACTION_ARG_TYPES_AND_NAMES_) const; \
2319 inline name##Action name() GTEST_MUST_USE_RESULT_; \
2320 inline name##Action name() { return name##Action(); } \
2321 template <typename function_type, typename return_type, typename args_type, \
2322 GMOCK_ACTION_TEMPLATE_ARGS_NAMES_> \
2323 return_type name##Action::gmock_Impl::gmock_PerformImpl( \
2324 GMOCK_ACTION_ARG_TYPES_AND_NAMES_UNUSED_) const
2326 #define ACTION_P(name, ...) \
2327 GMOCK_INTERNAL_ACTION(name, name##ActionP, (__VA_ARGS__))
2329 #define ACTION_P2(name, ...) \
2330 GMOCK_INTERNAL_ACTION(name, name##ActionP2, (__VA_ARGS__))
2332 #define ACTION_P3(name, ...) \
2333 GMOCK_INTERNAL_ACTION(name, name##ActionP3, (__VA_ARGS__))
2335 #define ACTION_P4(name, ...) \
2336 GMOCK_INTERNAL_ACTION(name, name##ActionP4, (__VA_ARGS__))
2338 #define ACTION_P5(name, ...) \
2339 GMOCK_INTERNAL_ACTION(name, name##ActionP5, (__VA_ARGS__))
2341 #define ACTION_P6(name, ...) \
2342 GMOCK_INTERNAL_ACTION(name, name##ActionP6, (__VA_ARGS__))
2344 #define ACTION_P7(name, ...) \
2345 GMOCK_INTERNAL_ACTION(name, name##ActionP7, (__VA_ARGS__))
2347 #define ACTION_P8(name, ...) \
2348 GMOCK_INTERNAL_ACTION(name, name##ActionP8, (__VA_ARGS__))
2350 #define ACTION_P9(name, ...) \
2351 GMOCK_INTERNAL_ACTION(name, name##ActionP9, (__VA_ARGS__))
2353 #define ACTION_P10(name, ...) \
2354 GMOCK_INTERNAL_ACTION(name, name##ActionP10, (__VA_ARGS__))
2360 #endif // GOOGLEMOCK_INCLUDE_GMOCK_GMOCK_ACTIONS_H_
Sacado::Fad::DFad< double > F
internal::SetArgRefereeAction< k, typename std::decay< T >::type > SetArgReferee(T &&value)
internal::call_result_t< Callable, ArgRefs...> operator()(ArgRefs &&...args) const
R operator()(Args &&...arg) const
void operator()(const Args &...args) const
auto operator()(const Args &...) const -> decltype(*pointer)
internal::Function< F >::Result Result
static Result Perform(const ArgumentTuple &)
ReturnAction(ByMoveWrapper< T > wrapper)
PolymorphicAction< internal::ReturnNullAction > ReturnNull()
GTEST_DISABLE_MSC_WARNINGS_POP_() TEST(LinkTest
internal::Function< F >::ArgumentTuple ArgumentTuple
internal::IgnoredValue Unused
R Apply(std::index_sequence< arg_id...>, std::index_sequence< excess_id...>, const args_type &args) const
void operator()(const Args &...args) const
::std::shared_ptr< ActionInterface< F > > impl_
internal::ReturnRoundRobinAction< T > ReturnRoundRobin(std::vector< T > vals)
GTEST_API_ void IllegalDoDefault(const char *file, int line)
Impl(const R &input_value)
void operator()(const Args &...args) const
static void SetFactory(FactoryFunction factory)
State(const R &input_value_in)
void Init(G &&g,::std::true_type)
PolymorphicAction< internal::AssignAction< T1, T2 > > Assign(T1 *ptr, T2 val)
const MethodPtr method_ptr
FunctionImpl function_impl
AssignAction(T1 *ptr, T2 value)
Function< F >::Result Result
internal::Function< F >::Result Result
PolymorphicAction(const Impl &impl)
internal::DoAllAction< typename std::decay< Action >::type...> DoAll(Action &&...action)
IgnoreResultAction(const A &action)
DoAllAction(UserConstructorTag, T &&action)
internal::SaveArgPointeeAction< k, Ptr > SaveArgPointee(Ptr pointer)
#define GMOCK_DEFINE_DEFAULT_ACTION_FOR_RETURN_TYPE_(type, value)
::std::function< F > fun_
internal::Function< F >::Result operator()(InArgs &&...args)
ReturnType operator()(const Args &...) const
FinalAction final_action_
internal::InvokeWithoutArgsAction< typename std::decay< FunctionImpl >::type > InvokeWithoutArgs(FunctionImpl function_impl)
auto operator()(Args &&...args) const -> decltype((obj_ptr-> *method_ptr)(std::forward< Args >(args)...))
internal::WithArgsAction< typename std::decay< InnerAction >::type, k, ks...> WithArgs(InnerAction &&action)
Function< F >::ArgumentTuple ArgumentTuple
static void Perform(const ArgumentTuple &)
PolymorphicAction< Impl > MakePolymorphicAction(const Impl &impl)
FixedValueProducer(T value)
DoAllAction(UserConstructorTag, T &&initial_action, U &&...other_actions)
Function< F >::ArgumentTuple ArgumentTuple
Sacado::Rad::ADvar< double > R
internal::Function< F >::MakeResultIgnoredValue OriginalFunction
inline::std::reference_wrapper< T > ByRef(T &l_value)
PolymorphicAction< internal::SetErrnoAndReturnAction< T > > SetErrnoAndReturn(int errval, T result)
std::tuple< Args...> args_type
internal::Function< F >::ArgumentTuple ArgumentTuple
internal::SaveArgAction< k, Ptr > SaveArg(Ptr pointer)
internal::ReturnRefAction< R > ReturnRef(R &x)
Result operator()(const InArgs &...) const
std::decay< FunctionImpl >::type Invoke(FunctionImpl &&function_impl)
auto Apply(F &&f, Tuple &&args) -> decltype(ApplyImpl(std::forward< F >(f), std::forward< Tuple >(args), std::make_index_sequence< std::tuple_size< typename std::remove_reference< Tuple >::type >::value >()))
void operator()(const Args &...args) const
T operator()(Args &&...) const
Result Perform(const ArgumentTuple &) override
const MethodPtr method_ptr
#define GTEST_DISABLE_MSC_WARNINGS_PUSH_(warnings)
std::tuple< Params...> params
void operator()(const Args &...args) const
Action(const Action< Func > &action)
#define GTEST_CHECK_(condition)
FactoryValueProducer(FactoryFunction factory)
Action(ActionInterface< F > *impl)
internal::WithArgsAction< typename std::decay< InnerAction >::type > WithoutArgs(InnerAction &&action)
internal::ReturnRefOfCopyAction< R > ReturnRefOfCopy(const R &x)
State(R &&input_value_in)
SetErrnoAndReturnAction(int errno_value, T result)
FunctionImpl function_impl
OnceAction(Callable &&callable)
internal::DeleteArgAction< k > DeleteArg()
internal::Function< F >::ArgumentTuple ArgumentTuple
const std::shared_ptr< State > state_
const std::shared_ptr< State > state_
internal::Function< F >::Result Result
typename std::conditional< std::is_constructible< Impl >::value, Impl, Holder >::type type
ReturnRefOfCopyAction(const T &value)
internal::SetArgumentPointeeAction< N, T > SetArgPointee(T value)
internal::Function< F >::Result Result
decltype(std::declval< F >()(std::declval< Args >()...)) call_result_t
ReturnRoundRobinAction(std::vector< T > values)
InitialAction initial_action_
internal::Function< F >::ArgumentTuple ArgumentTuple
Result Perform(const ArgumentTuple &) override
std::add_const< T >::type & as_const(T &t)
auto operator()(const Args &...) -> decltype(function_impl())
internal::ReturnArgAction< k > ReturnArg()
internal::DoDefaultAction DoDefault()
internal::ReturnAction< R > Return(R value)
std::shared_ptr< Callable > callable_
internal::call_result_t< Callable > operator()(Args &&...)
typename std::conditional< std::is_scalar< T >::value, T, const T & >::type InitialActionArgType
Function< F >::Result Result
ActionImpl(std::shared_ptr< Impl > impl)
decltype(TestImplicitConversion< From >(0)) type
void Assert(bool condition, const char *file, int line, const std::string &msg)
const Action< OriginalFunction > action_
MonomorphicImpl(const Impl &impl)
std::is_constructible< std::function< F >, G > IsCompatibleFunctor
Result Perform(const ArgumentTuple &) const
internal::SetArgumentPointeeAction< N, T > SetArgumentPointee(T value)
internal::ByMoveWrapper< R > ByMove(R x)
internal::SetArrayArgumentAction< k, I1, I2 > SetArrayArgument(I1 first, I2 last)
internal::WithArgsAction< typename std::decay< InnerAction >::type, k > WithArg(InnerAction &&action)
StdFunctionAdaptor(CallableTag, F &&callable)
Result Perform(ArgumentTuple args) const
Result Perform(const ArgumentTuple &args) override
static ValueProducer * producer_
std::shared_ptr< Impl > ptr
internal::ReturnNewAction< T, typename std::decay< Params >::type...> ReturnNew(Params &&...params)
R(typename std::tuple_element< I, std::tuple< Args...>>::type...) InnerSignature
void Perform(const ArgumentTuple &args) override
std::function< Result(Args...)> function_
void Perform(const ArgumentTuple &) const
internal::ReturnPointeeAction< Ptr > ReturnPointee(Ptr pointer)
internal::IgnoreResultAction< A > IgnoreResult(const A &an_action)
const FactoryFunction factory_
void Init(G &&g,::std::false_type)
Result Call(Args...args)&&
ADvari & copy(const IndepADvar &x)
initial_action_(std::forward< T >(initial_action))
typename std::tuple_element< I, T >::type TupleElement
void operator()(Args &&...args) const
decltype((std::declval< Class * >() -> *std::declval< MethodPtr >())()) ReturnType
Action< F > MakeAction(ActionInterface< F > *impl)