1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// found in the LICENSE file. 4f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/invalidation/unacked_invalidation_set_test_util.h" 6f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "base/json/json_string_value_serializer.h" 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "components/invalidation/object_id_invalidation_map.h" 9f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "testing/gmock/include/gmock/gmock-matchers.h" 10f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 11f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace syncer { 12f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 13f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using ::testing::MakeMatcher; 14f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using ::testing::MatchResultListener; 15f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using ::testing::Matcher; 16f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using ::testing::MatcherInterface; 17f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)using ::testing::PrintToString; 18f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 19f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace test_util { 20f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 21f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// This class needs to be declared outside the null namespace so the 22f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// UnackedInvalidationSet can declare it as a friend. This class needs access 23f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// to the UnackedInvalidationSet internals to implement its comparispon 24f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// function. 25f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class UnackedInvalidationSetEqMatcher 26f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : public testing::MatcherInterface<const UnackedInvalidationSet&> { 27f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 28f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) explicit UnackedInvalidationSetEqMatcher( 29f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const UnackedInvalidationSet& expected); 30f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 31f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual bool MatchAndExplain( 32f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const UnackedInvalidationSet& actual, 33f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MatchResultListener* listener) const OVERRIDE; 34f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void DescribeTo(::std::ostream* os) const OVERRIDE; 35f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void DescribeNegationTo(::std::ostream* os) const OVERRIDE; 36f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 37f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 38f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const UnackedInvalidationSet expected_; 39f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 40f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(UnackedInvalidationSetEqMatcher); 41f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 42f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 43f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace { 44f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 45f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)struct InvalidationEq { 46f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) bool operator()(const syncer::Invalidation& a, 47f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const syncer::Invalidation& b) const { 48f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return a.Equals(b); 49f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 50f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 51f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 52f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace 53f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 54f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)UnackedInvalidationSetEqMatcher::UnackedInvalidationSetEqMatcher( 55f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const UnackedInvalidationSet& expected) 56f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : expected_(expected) {} 57f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 58f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool UnackedInvalidationSetEqMatcher::MatchAndExplain( 59f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const UnackedInvalidationSet& actual, 60f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MatchResultListener* listener) const { 61f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Use our friendship with this class to compare the internals of two 62f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // instances. 63f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // 64f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // Note that the registration status is intentionally not considered 65f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) // when performing this comparison. 66f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return expected_.object_id_ == actual.object_id_ 67f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) && std::equal(expected_.invalidations_.begin(), 68f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) expected_.invalidations_.end(), 69f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) actual.invalidations_.begin(), 70f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) InvalidationEq()); 71f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 72f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 73f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void UnackedInvalidationSetEqMatcher::DescribeTo(::std::ostream* os) const { 74f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *os << " is equal to " << PrintToString(expected_); 75f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 76f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 77f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void UnackedInvalidationSetEqMatcher::DescribeNegationTo( 78f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ::std::ostream* os) const { 79f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *os << " isn't equal to " << PrintToString(expected_); 80f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 81f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 82f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// We're done declaring UnackedInvalidationSetEqMatcher. Everything else can 83f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)// go into the null namespace. 84f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)namespace { 85f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 86f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)ObjectIdInvalidationMap UnackedInvalidationsMapToObjectIdInvalidationMap( 87f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const UnackedInvalidationsMap& state_map) { 88f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ObjectIdInvalidationMap object_id_invalidation_map; 89f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (UnackedInvalidationsMap::const_iterator it = state_map.begin(); 90f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) it != state_map.end(); ++it) { 916e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) it->second.ExportInvalidations( 926e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) base::WeakPtr<AckHandler>(), 936e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) scoped_refptr<base::SingleThreadTaskRunner>(), 946e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) &object_id_invalidation_map); 95f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 96f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return object_id_invalidation_map; 97f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 98f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 99f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)class UnackedInvalidationsMapEqMatcher 100f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : public testing::MatcherInterface<const UnackedInvalidationsMap&> { 101f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) public: 102f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) explicit UnackedInvalidationsMapEqMatcher( 103f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const UnackedInvalidationsMap& expected); 104f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 105f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual bool MatchAndExplain(const UnackedInvalidationsMap& actual, 106f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MatchResultListener* listener) const; 107f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void DescribeTo(::std::ostream* os) const; 108f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) virtual void DescribeNegationTo(::std::ostream* os) const; 109f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 110f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) private: 111f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const UnackedInvalidationsMap expected_; 112f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 113f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(UnackedInvalidationsMapEqMatcher); 114f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 115f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 116f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)UnackedInvalidationsMapEqMatcher::UnackedInvalidationsMapEqMatcher( 117f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const UnackedInvalidationsMap& expected) 118f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) : expected_(expected) { 119f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 120f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 121f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)bool UnackedInvalidationsMapEqMatcher::MatchAndExplain( 122f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const UnackedInvalidationsMap& actual, 123f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) MatchResultListener* listener) const { 124f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ObjectIdInvalidationMap expected_inv = 125f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UnackedInvalidationsMapToObjectIdInvalidationMap(expected_); 126f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ObjectIdInvalidationMap actual_inv = 127f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) UnackedInvalidationsMapToObjectIdInvalidationMap(actual); 128f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 129f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return expected_inv == actual_inv; 130f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 131f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 132f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void UnackedInvalidationsMapEqMatcher::DescribeTo( 133f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ::std::ostream* os) const { 134f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *os << " is equal to " << PrintToString(expected_); 135f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 136f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 137f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void UnackedInvalidationsMapEqMatcher::DescribeNegationTo( 138f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ::std::ostream* os) const { 139f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) *os << " isn't equal to " << PrintToString(expected_); 140f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 141f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 142f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace 143f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 144f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void PrintTo(const UnackedInvalidationSet& invalidations, 145f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) ::std::ostream* os) { 146f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<base::DictionaryValue> value = invalidations.ToValue(); 147f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 148f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string output; 149f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) JSONStringValueSerializer serializer(&output); 150f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) serializer.set_pretty_print(true); 151f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) serializer.Serialize(*value.get()); 152f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 153f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) (*os) << output; 154f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 155f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 156f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)void PrintTo(const UnackedInvalidationsMap& map, ::std::ostream* os) { 157f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) scoped_ptr<base::ListValue> list(new base::ListValue); 158f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) for (UnackedInvalidationsMap::const_iterator it = map.begin(); 159f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) it != map.end(); ++it) { 160f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) list->Append(it->second.ToValue().release()); 161f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) } 162f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 163f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) std::string output; 164f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) JSONStringValueSerializer serializer(&output); 165f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) serializer.set_pretty_print(true); 166f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) serializer.Serialize(*list.get()); 167f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 168f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) (*os) << output; 169f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 170f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 171f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)Matcher<const UnackedInvalidationSet&> Eq( 172f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const UnackedInvalidationSet& expected) { 173f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return MakeMatcher(new UnackedInvalidationSetEqMatcher(expected)); 174f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 175f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 176f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)Matcher<const UnackedInvalidationsMap&> Eq( 177f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) const UnackedInvalidationsMap& expected) { 178f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) return MakeMatcher(new UnackedInvalidationsMapEqMatcher(expected)); 179f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} 180f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 181f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)} // namespace test_util 182f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles) 183f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)}; 184