// Copyright 2021 The Chromium Authors // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "net/dns/host_resolver_results_test_util.h" #include #include #include #include "net/base/connection_endpoint_metadata.h" #include "net/base/ip_endpoint.h" #include "net/dns/public/host_resolver_results.h" #include "testing/gmock/include/gmock/gmock.h" #include "testing/gtest/include/gtest/gtest.h" namespace net { namespace { class EndpointResultMatcher : public testing::MatcherInterface { public: EndpointResultMatcher( testing::Matcher> ip_endpoints_matcher, testing::Matcher metadata_matcher) : ip_endpoints_matcher_(std::move(ip_endpoints_matcher)), metadata_matcher_(std::move(metadata_matcher)) {} ~EndpointResultMatcher() override = default; EndpointResultMatcher(const EndpointResultMatcher&) = default; EndpointResultMatcher& operator=(const EndpointResultMatcher&) = default; EndpointResultMatcher(EndpointResultMatcher&&) = default; EndpointResultMatcher& operator=(EndpointResultMatcher&&) = default; bool MatchAndExplain( const HostResolverEndpointResult& endpoint, testing::MatchResultListener* result_listener) const override { return ExplainMatchResult( testing::Field("ip_endpoints", &HostResolverEndpointResult::ip_endpoints, ip_endpoints_matcher_), endpoint, result_listener) && ExplainMatchResult( testing::Field("metadata", &HostResolverEndpointResult::metadata, metadata_matcher_), endpoint, result_listener); } void DescribeTo(std::ostream* os) const override { *os << "matches "; Describe(*os); } void DescribeNegationTo(std::ostream* os) const override { *os << "does not match "; Describe(*os); } private: void Describe(std::ostream& os) const { os << "HostResolverEndpointResult {\nip_endpoints: " << testing::PrintToString(ip_endpoints_matcher_) << "\nmetadata: " << testing::PrintToString(metadata_matcher_) << "\n}"; } testing::Matcher> ip_endpoints_matcher_; testing::Matcher metadata_matcher_; }; } // namespace testing::Matcher ExpectEndpointResult( testing::Matcher> ip_endpoints_matcher, testing::Matcher metadata_matcher) { return testing::MakeMatcher(new EndpointResultMatcher( std::move(ip_endpoints_matcher), std::move(metadata_matcher))); } std::ostream& operator<<(std::ostream& os, const HostResolverEndpointResult& endpoint_result) { return os << "HostResolverEndpointResult {\nip_endpoints: " << testing::PrintToString(endpoint_result.ip_endpoints) << "\nmetadata: " << testing::PrintToString(endpoint_result.metadata) << "\n}"; } } // namespace net