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