From a42cdf2abdc0ab7ddfbafc098cafdd6152ae1b70 Mon Sep 17 00:00:00 2001 From: Abseil Team Date: Mon, 3 Dec 2018 10:48:03 -0500 Subject: Googletest export Replace pump'd Args() matcher with variadic templates. PiperOrigin-RevId: 223794430 --- .../include/gmock/gmock-generated-matchers.h | 337 --------------------- 1 file changed, 337 deletions(-) (limited to 'googlemock/include/gmock/gmock-generated-matchers.h') diff --git a/googlemock/include/gmock/gmock-generated-matchers.h b/googlemock/include/gmock/gmock-generated-matchers.h index 1a88c715..b77b3f19 100644 --- a/googlemock/include/gmock/gmock-generated-matchers.h +++ b/googlemock/include/gmock/gmock-generated-matchers.h @@ -47,343 +47,6 @@ #include #include "gmock/gmock-matchers.h" -namespace testing { -namespace internal { - -// The type of the i-th (0-based) field of Tuple. -#define GMOCK_FIELD_TYPE_(Tuple, i) \ - typename ::std::tuple_element::type - -// TupleFields is for selecting fields from a -// tuple of type Tuple. It has two members: -// -// type: a tuple type whose i-th field is the ki-th field of Tuple. -// GetSelectedFields(t): returns fields k0, ..., and kn of t as a tuple. -// -// For example, in class TupleFields, 2, 0>, -// we have: -// -// type is std::tuple, and -// GetSelectedFields(std::make_tuple(true, 'a', 42)) is (42, true). - -template -class TupleFields; - -// This generic version is used when there are 10 selectors. -template -class TupleFields { - public: - typedef ::std::tuple type; - static type GetSelectedFields(const Tuple& t) { - return type(std::get(t), std::get(t), std::get(t), - std::get(t), std::get(t), std::get(t), std::get(t), - std::get(t), std::get(t), std::get(t)); - } -}; - -// The following specialization is used for 0 ~ 9 selectors. - -template -class TupleFields { - public: - typedef ::std::tuple<> type; - static type GetSelectedFields(const Tuple& /* t */) { - return type(); - } -}; - -template -class TupleFields { - public: - typedef ::std::tuple type; - static type GetSelectedFields(const Tuple& t) { - return type(std::get(t)); - } -}; - -template -class TupleFields { - public: - typedef ::std::tuple type; - static type GetSelectedFields(const Tuple& t) { - return type(std::get(t), std::get(t)); - } -}; - -template -class TupleFields { - public: - typedef ::std::tuple type; - static type GetSelectedFields(const Tuple& t) { - return type(std::get(t), std::get(t), std::get(t)); - } -}; - -template -class TupleFields { - public: - typedef ::std::tuple type; - static type GetSelectedFields(const Tuple& t) { - return type(std::get(t), std::get(t), std::get(t), - std::get(t)); - } -}; - -template -class TupleFields { - public: - typedef ::std::tuple type; - static type GetSelectedFields(const Tuple& t) { - return type(std::get(t), std::get(t), std::get(t), - std::get(t), std::get(t)); - } -}; - -template -class TupleFields { - public: - typedef ::std::tuple type; - static type GetSelectedFields(const Tuple& t) { - return type(std::get(t), std::get(t), std::get(t), - std::get(t), std::get(t), std::get(t)); - } -}; - -template -class TupleFields { - public: - typedef ::std::tuple type; - static type GetSelectedFields(const Tuple& t) { - return type(std::get(t), std::get(t), std::get(t), - std::get(t), std::get(t), std::get(t), std::get(t)); - } -}; - -template -class TupleFields { - public: - typedef ::std::tuple type; - static type GetSelectedFields(const Tuple& t) { - return type(std::get(t), std::get(t), std::get(t), - std::get(t), std::get(t), std::get(t), std::get(t), - std::get(t)); - } -}; - -template -class TupleFields { - public: - typedef ::std::tuple type; - static type GetSelectedFields(const Tuple& t) { - return type(std::get(t), std::get(t), std::get(t), - std::get(t), std::get(t), std::get(t), std::get(t), - std::get(t), std::get(t)); - } -}; - -#undef GMOCK_FIELD_TYPE_ - -// Implements the Args() matcher. -template -class ArgsMatcherImpl : public MatcherInterface { - public: - // ArgsTuple may have top-level const or reference modifiers. - typedef GTEST_REMOVE_REFERENCE_AND_CONST_(ArgsTuple) RawArgsTuple; - typedef typename internal::TupleFields::type SelectedArgs; - typedef Matcher MonomorphicInnerMatcher; - - template - explicit ArgsMatcherImpl(const InnerMatcher& inner_matcher) - : inner_matcher_(SafeMatcherCast(inner_matcher)) {} - - virtual bool MatchAndExplain(ArgsTuple args, - MatchResultListener* listener) const { - const SelectedArgs& selected_args = GetSelectedArgs(args); - if (!listener->IsInterested()) - return inner_matcher_.Matches(selected_args); - - PrintIndices(listener->stream()); - *listener << "are " << PrintToString(selected_args); - - StringMatchResultListener inner_listener; - const bool match = inner_matcher_.MatchAndExplain(selected_args, - &inner_listener); - PrintIfNotEmpty(inner_listener.str(), listener->stream()); - return match; - } - - virtual void DescribeTo(::std::ostream* os) const { - *os << "are a tuple "; - PrintIndices(os); - inner_matcher_.DescribeTo(os); - } - - virtual void DescribeNegationTo(::std::ostream* os) const { - *os << "are a tuple "; - PrintIndices(os); - inner_matcher_.DescribeNegationTo(os); - } - - private: - static SelectedArgs GetSelectedArgs(ArgsTuple args) { - return TupleFields::GetSelectedFields(args); - } - - // Prints the indices of the selected fields. - static void PrintIndices(::std::ostream* os) { - *os << "whose fields ("; - const int indices[10] = { k0, k1, k2, k3, k4, k5, k6, k7, k8, k9 }; - for (int i = 0; i < 10; i++) { - if (indices[i] < 0) - break; - - if (i >= 1) - *os << ", "; - - *os << "#" << indices[i]; - } - *os << ") "; - } - - const MonomorphicInnerMatcher inner_matcher_; - - GTEST_DISALLOW_ASSIGN_(ArgsMatcherImpl); -}; - -template -class ArgsMatcher { - public: - explicit ArgsMatcher(const InnerMatcher& inner_matcher) - : inner_matcher_(inner_matcher) {} - - template - operator Matcher() const { - return MakeMatcher(new ArgsMatcherImpl(inner_matcher_)); - } - - private: - const InnerMatcher inner_matcher_; - - GTEST_DISALLOW_ASSIGN_(ArgsMatcher); -}; - -} // namespace internal - -// Args(a_matcher) matches a tuple if the selected -// fields of it matches a_matcher. C++ doesn't support default -// arguments for function templates, so we have to overload it. -template -inline internal::ArgsMatcher -Args(const InnerMatcher& matcher) { - return internal::ArgsMatcher(matcher); -} - -template -inline internal::ArgsMatcher -Args(const InnerMatcher& matcher) { - return internal::ArgsMatcher(matcher); -} - -template -inline internal::ArgsMatcher -Args(const InnerMatcher& matcher) { - return internal::ArgsMatcher(matcher); -} - -template -inline internal::ArgsMatcher -Args(const InnerMatcher& matcher) { - return internal::ArgsMatcher(matcher); -} - -template -inline internal::ArgsMatcher -Args(const InnerMatcher& matcher) { - return internal::ArgsMatcher(matcher); -} - -template -inline internal::ArgsMatcher -Args(const InnerMatcher& matcher) { - return internal::ArgsMatcher(matcher); -} - -template -inline internal::ArgsMatcher -Args(const InnerMatcher& matcher) { - return internal::ArgsMatcher(matcher); -} - -template -inline internal::ArgsMatcher -Args(const InnerMatcher& matcher) { - return internal::ArgsMatcher(matcher); -} - -template -inline internal::ArgsMatcher -Args(const InnerMatcher& matcher) { - return internal::ArgsMatcher(matcher); -} - -template -inline internal::ArgsMatcher -Args(const InnerMatcher& matcher) { - return internal::ArgsMatcher(matcher); -} - -template -inline internal::ArgsMatcher -Args(const InnerMatcher& matcher) { - return internal::ArgsMatcher(matcher); -} - - -} // namespace testing - - // The MATCHER* family of macros can be used in a namespace scope to // define custom matchers easily. // -- cgit v1.2.3