OLD | NEW |
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/file_path.h" | 5 #include "base/file_path.h" |
6 #include "base/file_util.h" | 6 #include "base/file_util.h" |
7 #include "base/path_service.h" | 7 #include "base/path_service.h" |
8 #include "base/scoped_temp_dir.h" | 8 #include "base/scoped_temp_dir.h" |
9 #include "base/string_util.h" | 9 #include "base/string_util.h" |
10 #include "chrome/browser/history/url_database.h" | 10 #include "chrome/browser/history/url_database.h" |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
62 virtual sql::Connection& GetDB() { | 62 virtual sql::Connection& GetDB() { |
63 return db_; | 63 return db_; |
64 } | 64 } |
65 | 65 |
66 ScopedTempDir temp_dir_; | 66 ScopedTempDir temp_dir_; |
67 sql::Connection db_; | 67 sql::Connection db_; |
68 }; | 68 }; |
69 | 69 |
70 TEST_F(VisitDatabaseTest, Add) { | 70 TEST_F(VisitDatabaseTest, Add) { |
71 // Add one visit. | 71 // Add one visit. |
72 VisitRow visit_info1(1, Time::Now(), 0, PageTransition::LINK, 0); | 72 VisitRow visit_info1(1, Time::Now(), 0, content::PAGE_TRANSITION_LINK, 0); |
73 EXPECT_TRUE(AddVisit(&visit_info1, SOURCE_BROWSED)); | 73 EXPECT_TRUE(AddVisit(&visit_info1, SOURCE_BROWSED)); |
74 | 74 |
75 // Add second visit for the same page. | 75 // Add second visit for the same page. |
76 VisitRow visit_info2(visit_info1.url_id, | 76 VisitRow visit_info2(visit_info1.url_id, |
77 visit_info1.visit_time + TimeDelta::FromSeconds(1), 1, | 77 visit_info1.visit_time + TimeDelta::FromSeconds(1), 1, |
78 PageTransition::TYPED, 0); | 78 content::PAGE_TRANSITION_TYPED, 0); |
79 EXPECT_TRUE(AddVisit(&visit_info2, SOURCE_BROWSED)); | 79 EXPECT_TRUE(AddVisit(&visit_info2, SOURCE_BROWSED)); |
80 | 80 |
81 // Add third visit for a different page. | 81 // Add third visit for a different page. |
82 VisitRow visit_info3(2, | 82 VisitRow visit_info3(2, |
83 visit_info1.visit_time + TimeDelta::FromSeconds(2), 0, | 83 visit_info1.visit_time + TimeDelta::FromSeconds(2), 0, |
84 PageTransition::LINK, 0); | 84 content::PAGE_TRANSITION_LINK, 0); |
85 EXPECT_TRUE(AddVisit(&visit_info3, SOURCE_BROWSED)); | 85 EXPECT_TRUE(AddVisit(&visit_info3, SOURCE_BROWSED)); |
86 | 86 |
87 // Query the first two. | 87 // Query the first two. |
88 std::vector<VisitRow> matches; | 88 std::vector<VisitRow> matches; |
89 EXPECT_TRUE(GetVisitsForURL(visit_info1.url_id, &matches)); | 89 EXPECT_TRUE(GetVisitsForURL(visit_info1.url_id, &matches)); |
90 EXPECT_EQ(static_cast<size_t>(2), matches.size()); | 90 EXPECT_EQ(static_cast<size_t>(2), matches.size()); |
91 | 91 |
92 // Make sure we got both (order in result set is visit time). | 92 // Make sure we got both (order in result set is visit time). |
93 EXPECT_TRUE(IsVisitInfoEqual(matches[0], visit_info1) && | 93 EXPECT_TRUE(IsVisitInfoEqual(matches[0], visit_info1) && |
94 IsVisitInfoEqual(matches[1], visit_info2)); | 94 IsVisitInfoEqual(matches[1], visit_info2)); |
95 } | 95 } |
96 | 96 |
97 TEST_F(VisitDatabaseTest, Delete) { | 97 TEST_F(VisitDatabaseTest, Delete) { |
98 // Add three visits that form a chain of navigation, and then delete the | 98 // Add three visits that form a chain of navigation, and then delete the |
99 // middle one. We should be left with the outer two visits, and the chain | 99 // middle one. We should be left with the outer two visits, and the chain |
100 // should link them. | 100 // should link them. |
101 static const int kTime1 = 1000; | 101 static const int kTime1 = 1000; |
102 VisitRow visit_info1(1, Time::FromInternalValue(kTime1), 0, | 102 VisitRow visit_info1(1, Time::FromInternalValue(kTime1), 0, |
103 PageTransition::LINK, 0); | 103 content::PAGE_TRANSITION_LINK, 0); |
104 EXPECT_TRUE(AddVisit(&visit_info1, SOURCE_BROWSED)); | 104 EXPECT_TRUE(AddVisit(&visit_info1, SOURCE_BROWSED)); |
105 | 105 |
106 static const int kTime2 = kTime1 + 1; | 106 static const int kTime2 = kTime1 + 1; |
107 VisitRow visit_info2(1, Time::FromInternalValue(kTime2), | 107 VisitRow visit_info2(1, Time::FromInternalValue(kTime2), |
108 visit_info1.visit_id, PageTransition::LINK, 0); | 108 visit_info1.visit_id, content::PAGE_TRANSITION_LINK, 0); |
109 EXPECT_TRUE(AddVisit(&visit_info2, SOURCE_BROWSED)); | 109 EXPECT_TRUE(AddVisit(&visit_info2, SOURCE_BROWSED)); |
110 | 110 |
111 static const int kTime3 = kTime2 + 1; | 111 static const int kTime3 = kTime2 + 1; |
112 VisitRow visit_info3(1, Time::FromInternalValue(kTime3), | 112 VisitRow visit_info3(1, Time::FromInternalValue(kTime3), |
113 visit_info2.visit_id, PageTransition::LINK, 0); | 113 visit_info2.visit_id, content::PAGE_TRANSITION_LINK, 0); |
114 EXPECT_TRUE(AddVisit(&visit_info3, SOURCE_BROWSED)); | 114 EXPECT_TRUE(AddVisit(&visit_info3, SOURCE_BROWSED)); |
115 | 115 |
116 // First make sure all the visits are there. | 116 // First make sure all the visits are there. |
117 std::vector<VisitRow> matches; | 117 std::vector<VisitRow> matches; |
118 EXPECT_TRUE(GetVisitsForURL(visit_info1.url_id, &matches)); | 118 EXPECT_TRUE(GetVisitsForURL(visit_info1.url_id, &matches)); |
119 EXPECT_EQ(static_cast<size_t>(3), matches.size()); | 119 EXPECT_EQ(static_cast<size_t>(3), matches.size()); |
120 EXPECT_TRUE(IsVisitInfoEqual(matches[0], visit_info1) && | 120 EXPECT_TRUE(IsVisitInfoEqual(matches[0], visit_info1) && |
121 IsVisitInfoEqual(matches[1], visit_info2) && | 121 IsVisitInfoEqual(matches[1], visit_info2) && |
122 IsVisitInfoEqual(matches[2], visit_info3)); | 122 IsVisitInfoEqual(matches[2], visit_info3)); |
123 | 123 |
124 // Delete the middle one. | 124 // Delete the middle one. |
125 DeleteVisit(visit_info2); | 125 DeleteVisit(visit_info2); |
126 | 126 |
127 // The outer two should be left, and the last one should have the first as | 127 // The outer two should be left, and the last one should have the first as |
128 // the referrer. | 128 // the referrer. |
129 visit_info3.referring_visit = visit_info1.visit_id; | 129 visit_info3.referring_visit = visit_info1.visit_id; |
130 matches.clear(); | 130 matches.clear(); |
131 EXPECT_TRUE(GetVisitsForURL(visit_info1.url_id, &matches)); | 131 EXPECT_TRUE(GetVisitsForURL(visit_info1.url_id, &matches)); |
132 EXPECT_EQ(static_cast<size_t>(2), matches.size()); | 132 EXPECT_EQ(static_cast<size_t>(2), matches.size()); |
133 EXPECT_TRUE(IsVisitInfoEqual(matches[0], visit_info1) && | 133 EXPECT_TRUE(IsVisitInfoEqual(matches[0], visit_info1) && |
134 IsVisitInfoEqual(matches[1], visit_info3)); | 134 IsVisitInfoEqual(matches[1], visit_info3)); |
135 } | 135 } |
136 | 136 |
137 TEST_F(VisitDatabaseTest, Update) { | 137 TEST_F(VisitDatabaseTest, Update) { |
138 // Make something in the database. | 138 // Make something in the database. |
139 VisitRow original(1, Time::Now(), 23, 22, 19); | 139 VisitRow original(1, Time::Now(), 23, content::PageTransitionFromInt(0), 19); |
140 AddVisit(&original, SOURCE_BROWSED); | 140 AddVisit(&original, SOURCE_BROWSED); |
141 | 141 |
142 // Mutate that row. | 142 // Mutate that row. |
143 VisitRow modification(original); | 143 VisitRow modification(original); |
144 modification.url_id = 2; | 144 modification.url_id = 2; |
145 modification.transition = PageTransition::TYPED; | 145 modification.transition = content::PAGE_TRANSITION_TYPED; |
146 modification.visit_time = Time::Now() + TimeDelta::FromDays(1); | 146 modification.visit_time = Time::Now() + TimeDelta::FromDays(1); |
147 modification.referring_visit = 9292; | 147 modification.referring_visit = 9292; |
148 modification.is_indexed = true; | 148 modification.is_indexed = true; |
149 UpdateVisitRow(modification); | 149 UpdateVisitRow(modification); |
150 | 150 |
151 // Check that the mutated version was written. | 151 // Check that the mutated version was written. |
152 VisitRow final; | 152 VisitRow final; |
153 GetRowForVisit(original.visit_id, &final); | 153 GetRowForVisit(original.visit_id, &final); |
154 EXPECT_TRUE(IsVisitInfoEqual(modification, final)); | 154 EXPECT_TRUE(IsVisitInfoEqual(modification, final)); |
155 } | 155 } |
156 | 156 |
157 // TODO(brettw) write test for GetMostRecentVisitForURL! | 157 // TODO(brettw) write test for GetMostRecentVisitForURL! |
158 | 158 |
159 TEST_F(VisitDatabaseTest, GetVisibleVisitsInRange) { | 159 TEST_F(VisitDatabaseTest, GetVisibleVisitsInRange) { |
160 // Add one visit. | 160 // Add one visit. |
161 VisitRow visit_info1(1, Time::Now(), 0, | 161 VisitRow visit_info1(1, Time::Now(), 0, |
162 static_cast<PageTransition::Type>(PageTransition::LINK | | 162 static_cast<content::PageTransition>( |
163 PageTransition::CHAIN_START | | 163 content::PAGE_TRANSITION_LINK | |
164 PageTransition::CHAIN_END), | 164 content::PAGE_TRANSITION_CHAIN_START | |
| 165 content::PAGE_TRANSITION_CHAIN_END), |
165 0); | 166 0); |
166 visit_info1.visit_id = 1; | 167 visit_info1.visit_id = 1; |
167 EXPECT_TRUE(AddVisit(&visit_info1, SOURCE_BROWSED)); | 168 EXPECT_TRUE(AddVisit(&visit_info1, SOURCE_BROWSED)); |
168 | 169 |
169 // Add second visit for the same page. | 170 // Add second visit for the same page. |
170 VisitRow visit_info2(visit_info1.url_id, | 171 VisitRow visit_info2(visit_info1.url_id, |
171 visit_info1.visit_time + TimeDelta::FromSeconds(1), 1, | 172 visit_info1.visit_time + TimeDelta::FromSeconds(1), 1, |
172 static_cast<PageTransition::Type>(PageTransition::TYPED | | 173 static_cast<content::PageTransition>( |
173 PageTransition::CHAIN_START | | 174 content::PAGE_TRANSITION_TYPED | |
174 PageTransition::CHAIN_END), | 175 content::PAGE_TRANSITION_CHAIN_START | |
| 176 content::PAGE_TRANSITION_CHAIN_END), |
175 0); | 177 0); |
176 visit_info2.visit_id = 2; | 178 visit_info2.visit_id = 2; |
177 EXPECT_TRUE(AddVisit(&visit_info2, SOURCE_BROWSED)); | 179 EXPECT_TRUE(AddVisit(&visit_info2, SOURCE_BROWSED)); |
178 | 180 |
179 // Add third visit for a different page. | 181 // Add third visit for a different page. |
180 VisitRow visit_info3(2, | 182 VisitRow visit_info3(2, |
181 visit_info1.visit_time + TimeDelta::FromSeconds(2), 0, | 183 visit_info1.visit_time + TimeDelta::FromSeconds(2), 0, |
182 static_cast<PageTransition::Type>(PageTransition::LINK | | 184 static_cast<content::PageTransition>( |
183 PageTransition::CHAIN_START), | 185 content::PAGE_TRANSITION_LINK | |
| 186 content::PAGE_TRANSITION_CHAIN_START), |
184 0); | 187 0); |
185 visit_info3.visit_id = 3; | 188 visit_info3.visit_id = 3; |
186 EXPECT_TRUE(AddVisit(&visit_info3, SOURCE_BROWSED)); | 189 EXPECT_TRUE(AddVisit(&visit_info3, SOURCE_BROWSED)); |
187 | 190 |
188 // Add a redirect visit from the last page. | 191 // Add a redirect visit from the last page. |
189 VisitRow visit_info4(3, | 192 VisitRow visit_info4(3, |
190 visit_info1.visit_time + TimeDelta::FromSeconds(3), visit_info3.visit_id, | 193 visit_info1.visit_time + TimeDelta::FromSeconds(3), visit_info3.visit_id, |
191 static_cast<PageTransition::Type>(PageTransition::SERVER_REDIRECT | | 194 static_cast<content::PageTransition>( |
192 PageTransition::CHAIN_END), | 195 content::PAGE_TRANSITION_SERVER_REDIRECT | |
| 196 content::PAGE_TRANSITION_CHAIN_END), |
193 0); | 197 0); |
194 visit_info4.visit_id = 4; | 198 visit_info4.visit_id = 4; |
195 EXPECT_TRUE(AddVisit(&visit_info4, SOURCE_BROWSED)); | 199 EXPECT_TRUE(AddVisit(&visit_info4, SOURCE_BROWSED)); |
196 | 200 |
197 // Add a subframe visit. | 201 // Add a subframe visit. |
198 VisitRow visit_info5(4, | 202 VisitRow visit_info5(4, |
199 visit_info1.visit_time + TimeDelta::FromSeconds(4), visit_info4.visit_id, | 203 visit_info1.visit_time + TimeDelta::FromSeconds(4), visit_info4.visit_id, |
200 static_cast<PageTransition::Type>(PageTransition::AUTO_SUBFRAME | | 204 static_cast<content::PageTransition>( |
201 PageTransition::CHAIN_START | | 205 content::PAGE_TRANSITION_AUTO_SUBFRAME | |
202 PageTransition::CHAIN_END), | 206 content::PAGE_TRANSITION_CHAIN_START | |
| 207 content::PAGE_TRANSITION_CHAIN_END), |
203 0); | 208 0); |
204 visit_info5.visit_id = 5; | 209 visit_info5.visit_id = 5; |
205 EXPECT_TRUE(AddVisit(&visit_info5, SOURCE_BROWSED)); | 210 EXPECT_TRUE(AddVisit(&visit_info5, SOURCE_BROWSED)); |
206 | 211 |
207 // Query the visits for all time, we should not get the first (duplicate of | 212 // Query the visits for all time, we should not get the first (duplicate of |
208 // the second) or the redirect or subframe visits. | 213 // the second) or the redirect or subframe visits. |
209 VisitVector results; | 214 VisitVector results; |
210 GetVisibleVisitsInRange(Time(), Time(), 0, &results); | 215 GetVisibleVisitsInRange(Time(), Time(), 0, &results); |
211 ASSERT_EQ(static_cast<size_t>(2), results.size()); | 216 ASSERT_EQ(static_cast<size_t>(2), results.size()); |
212 EXPECT_TRUE(IsVisitInfoEqual(results[0], visit_info4) && | 217 EXPECT_TRUE(IsVisitInfoEqual(results[0], visit_info4) && |
213 IsVisitInfoEqual(results[1], visit_info2)); | 218 IsVisitInfoEqual(results[1], visit_info2)); |
214 | 219 |
215 // Query a time range and make sure beginning is inclusive and ending is | 220 // Query a time range and make sure beginning is inclusive and ending is |
216 // exclusive. | 221 // exclusive. |
217 GetVisibleVisitsInRange(visit_info2.visit_time, visit_info4.visit_time, 0, | 222 GetVisibleVisitsInRange(visit_info2.visit_time, visit_info4.visit_time, 0, |
218 &results); | 223 &results); |
219 ASSERT_EQ(static_cast<size_t>(1), results.size()); | 224 ASSERT_EQ(static_cast<size_t>(1), results.size()); |
220 EXPECT_TRUE(IsVisitInfoEqual(results[0], visit_info2)); | 225 EXPECT_TRUE(IsVisitInfoEqual(results[0], visit_info2)); |
221 | 226 |
222 // Query for a max count and make sure we get only that number. | 227 // Query for a max count and make sure we get only that number. |
223 GetVisibleVisitsInRange(Time(), Time(), 1, &results); | 228 GetVisibleVisitsInRange(Time(), Time(), 1, &results); |
224 ASSERT_EQ(static_cast<size_t>(1), results.size()); | 229 ASSERT_EQ(static_cast<size_t>(1), results.size()); |
225 EXPECT_TRUE(IsVisitInfoEqual(results[0], visit_info4)); | 230 EXPECT_TRUE(IsVisitInfoEqual(results[0], visit_info4)); |
226 } | 231 } |
227 | 232 |
228 TEST_F(VisitDatabaseTest, VisitSource) { | 233 TEST_F(VisitDatabaseTest, VisitSource) { |
229 // Add visits. | 234 // Add visits. |
230 VisitRow visit_info1(111, Time::Now(), 0, PageTransition::LINK, 0); | 235 VisitRow visit_info1(111, Time::Now(), 0, content::PAGE_TRANSITION_LINK, 0); |
231 ASSERT_TRUE(AddVisit(&visit_info1, SOURCE_BROWSED)); | 236 ASSERT_TRUE(AddVisit(&visit_info1, SOURCE_BROWSED)); |
232 | 237 |
233 VisitRow visit_info2(112, Time::Now(), 1, PageTransition::TYPED, 0); | 238 VisitRow visit_info2(112, Time::Now(), 1, content::PAGE_TRANSITION_TYPED, 0); |
234 ASSERT_TRUE(AddVisit(&visit_info2, SOURCE_SYNCED)); | 239 ASSERT_TRUE(AddVisit(&visit_info2, SOURCE_SYNCED)); |
235 | 240 |
236 VisitRow visit_info3(113, Time::Now(), 0, PageTransition::TYPED, 0); | 241 VisitRow visit_info3(113, Time::Now(), 0, content::PAGE_TRANSITION_TYPED, 0); |
237 ASSERT_TRUE(AddVisit(&visit_info3, SOURCE_EXTENSION)); | 242 ASSERT_TRUE(AddVisit(&visit_info3, SOURCE_EXTENSION)); |
238 | 243 |
239 // Query each visit. | 244 // Query each visit. |
240 std::vector<VisitRow> matches; | 245 std::vector<VisitRow> matches; |
241 ASSERT_TRUE(GetVisitsForURL(111, &matches)); | 246 ASSERT_TRUE(GetVisitsForURL(111, &matches)); |
242 ASSERT_EQ(1U, matches.size()); | 247 ASSERT_EQ(1U, matches.size()); |
243 VisitSourceMap sources; | 248 VisitSourceMap sources; |
244 GetVisitsSource(matches, &sources); | 249 GetVisitsSource(matches, &sources); |
245 EXPECT_EQ(0U, sources.size()); | 250 EXPECT_EQ(0U, sources.size()); |
246 | 251 |
247 ASSERT_TRUE(GetVisitsForURL(112, &matches)); | 252 ASSERT_TRUE(GetVisitsForURL(112, &matches)); |
248 ASSERT_EQ(1U, matches.size()); | 253 ASSERT_EQ(1U, matches.size()); |
249 GetVisitsSource(matches, &sources); | 254 GetVisitsSource(matches, &sources); |
250 ASSERT_EQ(1U, sources.size()); | 255 ASSERT_EQ(1U, sources.size()); |
251 EXPECT_EQ(SOURCE_SYNCED, sources[matches[0].visit_id]); | 256 EXPECT_EQ(SOURCE_SYNCED, sources[matches[0].visit_id]); |
252 | 257 |
253 ASSERT_TRUE(GetVisitsForURL(113, &matches)); | 258 ASSERT_TRUE(GetVisitsForURL(113, &matches)); |
254 ASSERT_EQ(1U, matches.size()); | 259 ASSERT_EQ(1U, matches.size()); |
255 GetVisitsSource(matches, &sources); | 260 GetVisitsSource(matches, &sources); |
256 ASSERT_EQ(1U, sources.size()); | 261 ASSERT_EQ(1U, sources.size()); |
257 EXPECT_EQ(SOURCE_EXTENSION, sources[matches[0].visit_id]); | 262 EXPECT_EQ(SOURCE_EXTENSION, sources[matches[0].visit_id]); |
258 } | 263 } |
259 | 264 |
260 TEST_F(VisitDatabaseTest, GetIndexedVisits) { | 265 TEST_F(VisitDatabaseTest, GetIndexedVisits) { |
261 // Add non-indexed visits. | 266 // Add non-indexed visits. |
262 int url_id = 111; | 267 int url_id = 111; |
263 VisitRow visit_info1(url_id, Time::Now(), 0, PageTransition::LINK, 0); | 268 VisitRow visit_info1( |
| 269 url_id, Time::Now(), 0, content::PAGE_TRANSITION_LINK, 0); |
264 ASSERT_TRUE(AddVisit(&visit_info1, SOURCE_BROWSED)); | 270 ASSERT_TRUE(AddVisit(&visit_info1, SOURCE_BROWSED)); |
265 | 271 |
266 VisitRow visit_info2(url_id, Time::Now(), 0, PageTransition::TYPED, 0); | 272 VisitRow visit_info2( |
| 273 url_id, Time::Now(), 0, content::PAGE_TRANSITION_TYPED, 0); |
267 ASSERT_TRUE(AddVisit(&visit_info2, SOURCE_SYNCED)); | 274 ASSERT_TRUE(AddVisit(&visit_info2, SOURCE_SYNCED)); |
268 | 275 |
269 std::vector<VisitRow> visits; | 276 std::vector<VisitRow> visits; |
270 EXPECT_TRUE(GetVisitsForURL(url_id, &visits)); | 277 EXPECT_TRUE(GetVisitsForURL(url_id, &visits)); |
271 EXPECT_EQ(static_cast<size_t>(2), visits.size()); | 278 EXPECT_EQ(static_cast<size_t>(2), visits.size()); |
272 EXPECT_TRUE(GetIndexedVisitsForURL(url_id, &visits)); | 279 EXPECT_TRUE(GetIndexedVisitsForURL(url_id, &visits)); |
273 EXPECT_EQ(static_cast<size_t>(0), visits.size()); | 280 EXPECT_EQ(static_cast<size_t>(0), visits.size()); |
274 | 281 |
275 VisitRow visit_info3(url_id, Time::Now(), 2, PageTransition::TYPED, 0); | 282 VisitRow visit_info3( |
| 283 url_id, Time::Now(), 2, content::PAGE_TRANSITION_TYPED, 0); |
276 visit_info3.is_indexed = true; | 284 visit_info3.is_indexed = true; |
277 ASSERT_TRUE(AddVisit(&visit_info3, SOURCE_SYNCED)); | 285 ASSERT_TRUE(AddVisit(&visit_info3, SOURCE_SYNCED)); |
278 EXPECT_TRUE(GetVisitsForURL(url_id, &visits)); | 286 EXPECT_TRUE(GetVisitsForURL(url_id, &visits)); |
279 EXPECT_EQ(static_cast<size_t>(3), visits.size()); | 287 EXPECT_EQ(static_cast<size_t>(3), visits.size()); |
280 EXPECT_TRUE(GetIndexedVisitsForURL(url_id, &visits)); | 288 EXPECT_TRUE(GetIndexedVisitsForURL(url_id, &visits)); |
281 EXPECT_EQ(static_cast<size_t>(1), visits.size()); | 289 EXPECT_EQ(static_cast<size_t>(1), visits.size()); |
282 } | 290 } |
283 | 291 |
284 } // namespace history | 292 } // namespace history |
OLD | NEW |