diff options
Diffstat (limited to 'googlemock/include/gmock')
| -rw-r--r-- | googlemock/include/gmock/gmock-actions.h | 26 | ||||
| -rw-r--r-- | googlemock/include/gmock/gmock-generated-actions.h | 71 | ||||
| -rw-r--r-- | googlemock/include/gmock/gmock-generated-actions.h.pump | 18 | ||||
| -rw-r--r-- | googlemock/include/gmock/gmock-matchers.h | 2 | ||||
| -rw-r--r-- | googlemock/include/gmock/internal/gmock-internal-utils.h | 10 | 
5 files changed, 33 insertions, 94 deletions
| diff --git a/googlemock/include/gmock/gmock-actions.h b/googlemock/include/gmock/gmock-actions.h index 58089e3c..0f30abde 100644 --- a/googlemock/include/gmock/gmock-actions.h +++ b/googlemock/include/gmock/gmock-actions.h @@ -138,6 +138,7 @@  #include <functional>  #include <memory>  #include <string> +#include <tuple>  #include <type_traits>  #include <utility> @@ -1287,6 +1288,31 @@ inline ::std::reference_wrapper<T> ByRef(T& l_value) {  // NOLINT  namespace internal { +template <typename T, typename... Params> +struct ReturnNewAction { +  T* operator()() const { +    return internal::Apply( +        [](const Params&... unpacked_params) { +          return new T(unpacked_params...); +        }, +        params); +  } +  std::tuple<Params...> params; +}; + +}  // namespace internal + +// The ReturnNew<T>(a1, a2, ..., a_k) action returns a pointer to a new +// instance of type T, constructed on the heap with constructor arguments +// a1, a2, ..., and a_k. The caller assumes ownership of the returned value. +template <typename T, typename... Params> +internal::ReturnNewAction<T, typename std::decay<Params>::type...> ReturnNew( +    Params&&... params) { +  return {std::forward_as_tuple(std::forward<Params>(params)...)}; +} + +namespace internal { +  // A macro from the ACTION* family (defined later in gmock-generated-actions.h)  // defines an action that can be used in a mock function.  Typically,  // these actions only care about a subset of the arguments of the mock diff --git a/googlemock/include/gmock/gmock-generated-actions.h b/googlemock/include/gmock/gmock-generated-actions.h index 0fe6acbc..7030a98e 100644 --- a/googlemock/include/gmock/gmock-generated-actions.h +++ b/googlemock/include/gmock/gmock-generated-actions.h @@ -598,77 +598,6 @@ ACTION_TEMPLATE(InvokeArgument,                                 p8, p9);  } -// Various overloads for ReturnNew<T>(). -// -// The ReturnNew<T>(a1, a2, ..., a_k) action returns a pointer to a new -// instance of type T, constructed on the heap with constructor arguments -// a1, a2, ..., and a_k. The caller assumes ownership of the returned value. -ACTION_TEMPLATE(ReturnNew, -                HAS_1_TEMPLATE_PARAMS(typename, T), -                AND_0_VALUE_PARAMS()) { -  return new T(); -} - -ACTION_TEMPLATE(ReturnNew, -                HAS_1_TEMPLATE_PARAMS(typename, T), -                AND_1_VALUE_PARAMS(p0)) { -  return new T(p0); -} - -ACTION_TEMPLATE(ReturnNew, -                HAS_1_TEMPLATE_PARAMS(typename, T), -                AND_2_VALUE_PARAMS(p0, p1)) { -  return new T(p0, p1); -} - -ACTION_TEMPLATE(ReturnNew, -                HAS_1_TEMPLATE_PARAMS(typename, T), -                AND_3_VALUE_PARAMS(p0, p1, p2)) { -  return new T(p0, p1, p2); -} - -ACTION_TEMPLATE(ReturnNew, -                HAS_1_TEMPLATE_PARAMS(typename, T), -                AND_4_VALUE_PARAMS(p0, p1, p2, p3)) { -  return new T(p0, p1, p2, p3); -} - -ACTION_TEMPLATE(ReturnNew, -                HAS_1_TEMPLATE_PARAMS(typename, T), -                AND_5_VALUE_PARAMS(p0, p1, p2, p3, p4)) { -  return new T(p0, p1, p2, p3, p4); -} - -ACTION_TEMPLATE(ReturnNew, -                HAS_1_TEMPLATE_PARAMS(typename, T), -                AND_6_VALUE_PARAMS(p0, p1, p2, p3, p4, p5)) { -  return new T(p0, p1, p2, p3, p4, p5); -} - -ACTION_TEMPLATE(ReturnNew, -                HAS_1_TEMPLATE_PARAMS(typename, T), -                AND_7_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6)) { -  return new T(p0, p1, p2, p3, p4, p5, p6); -} - -ACTION_TEMPLATE(ReturnNew, -                HAS_1_TEMPLATE_PARAMS(typename, T), -                AND_8_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7)) { -  return new T(p0, p1, p2, p3, p4, p5, p6, p7); -} - -ACTION_TEMPLATE(ReturnNew, -                HAS_1_TEMPLATE_PARAMS(typename, T), -                AND_9_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8)) { -  return new T(p0, p1, p2, p3, p4, p5, p6, p7, p8); -} - -ACTION_TEMPLATE(ReturnNew, -                HAS_1_TEMPLATE_PARAMS(typename, T), -                AND_10_VALUE_PARAMS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9)) { -  return new T(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9); -} -  #ifdef _MSC_VER  # pragma warning(pop)  #endif diff --git a/googlemock/include/gmock/gmock-generated-actions.h.pump b/googlemock/include/gmock/gmock-generated-actions.h.pump index 02fd9ff7..3430204f 100644 --- a/googlemock/include/gmock/gmock-generated-actions.h.pump +++ b/googlemock/include/gmock/gmock-generated-actions.h.pump @@ -340,24 +340,6 @@ ACTION_TEMPLATE(InvokeArgument,  ]] -// Various overloads for ReturnNew<T>(). -// -// The ReturnNew<T>(a1, a2, ..., a_k) action returns a pointer to a new -// instance of type T, constructed on the heap with constructor arguments -// a1, a2, ..., and a_k. The caller assumes ownership of the returned value. -$range i 0..n -$for i [[ -$range j 0..i-1 -$var ps = [[$for j, [[p$j]]]] - -ACTION_TEMPLATE(ReturnNew, -                HAS_1_TEMPLATE_PARAMS(typename, T), -                AND_$i[[]]_VALUE_PARAMS($ps)) { -  return new T($ps); -} - -]] -  #ifdef _MSC_VER  # pragma warning(pop)  #endif diff --git a/googlemock/include/gmock/gmock-matchers.h b/googlemock/include/gmock/gmock-matchers.h index c474e0b9..08fd6d14 100644 --- a/googlemock/include/gmock/gmock-matchers.h +++ b/googlemock/include/gmock/gmock-matchers.h @@ -4689,7 +4689,7 @@ inline InnerMatcher AllArgs(const InnerMatcher& matcher) { return matcher; }  // and is printable using 'PrintToString'. It is compatible with  // std::optional/std::experimental::optional.  // Note that to compare an optional type variable against nullopt you should -// use Eq(nullopt) and not Optional(Eq(nullopt)). The latter implies that the +// use Eq(nullopt) and not Eq(Optional(nullopt)). The latter implies that the  // optional value contains an optional itself.  template <typename ValueMatcher>  inline internal::OptionalMatcher<ValueMatcher> Optional( diff --git a/googlemock/include/gmock/internal/gmock-internal-utils.h b/googlemock/include/gmock/internal/gmock-internal-utils.h index 66cf857b..5580dcb3 100644 --- a/googlemock/include/gmock/internal/gmock-internal-utils.h +++ b/googlemock/include/gmock/internal/gmock-internal-utils.h @@ -422,11 +422,13 @@ auto ApplyImpl(F&& f, Tuple&& args, IndexSequence<Idx...>) -> decltype(  // Apply the function to a tuple of arguments.  template <typename F, typename Tuple> -auto Apply(F&& f, Tuple&& args) -    -> decltype(ApplyImpl(std::forward<F>(f), std::forward<Tuple>(args), -                          MakeIndexSequence<std::tuple_size<Tuple>::value>())) { +auto Apply(F&& f, Tuple&& args) -> decltype( +    ApplyImpl(std::forward<F>(f), std::forward<Tuple>(args), +              MakeIndexSequence<std::tuple_size< +                  typename std::remove_reference<Tuple>::type>::value>())) {    return ApplyImpl(std::forward<F>(f), std::forward<Tuple>(args), -                   MakeIndexSequence<std::tuple_size<Tuple>::value>()); +                   MakeIndexSequence<std::tuple_size< +                       typename std::remove_reference<Tuple>::type>::value>());  }  // Template struct Function<F>, where F must be a function type, contains | 
