Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(58)

Side by Side Diff: chrome/browser/download/download_query_unittest.cc

Issue 10905215: Kill DownloadManager::SearchDownloads, DownloadItem::MatchesQuery (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: . Created 8 years, 3 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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 <string> 5 #include <string>
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/file_path.h" 8 #include "base/file_path.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after
126 // Syntactic sugar for an expression version of the switch-case statement. 126 // Syntactic sugar for an expression version of the switch-case statement.
127 // Cf. Lisp's |case| form. 127 // Cf. Lisp's |case| form.
128 #define SWITCH2(_index, _col1, _ret1, _default) \ 128 #define SWITCH2(_index, _col1, _ret1, _default) \
129 ((_index == (_col1)) ? _ret1 : _default) 129 ((_index == (_col1)) ? _ret1 : _default)
130 #define SWITCH3(_index, _col1, _ret1, _col2, _ret2, _default) \ 130 #define SWITCH3(_index, _col1, _ret1, _col2, _ret2, _default) \
131 SWITCH2(_index, _col1, _ret1, SWITCH2(_index, _col2, _ret2, _default)) 131 SWITCH2(_index, _col1, _ret1, SWITCH2(_index, _col2, _ret2, _default))
132 #define SWITCH4(_index, _col1, _ret1, _col2, _ret2, _col3, _ret3, _default) \ 132 #define SWITCH4(_index, _col1, _ret1, _col2, _ret2, _col3, _ret3, _default) \
133 SWITCH3(_index, _col1, _ret1, _col2, _ret2, \ 133 SWITCH3(_index, _col1, _ret1, _col2, _ret2, \
134 SWITCH2(_index, _col3, _ret3, _default)) 134 SWITCH2(_index, _col3, _ret3, _default))
135 135
136 TEST_F(DownloadQueryTest, DownloadQuery_QueryFilter) {
Randy Smith (Not in Mondays) 2012/09/12 18:20:57 Maybe switch Pawel's TODO over here? This is wher
benjhayden 2012/09/12 19:31:57 Done.
137 FilePath match_filename(FILE_PATH_LITERAL("query"));
138 FilePath fail_filename(FILE_PATH_LITERAL("fail"));
139 GURL fail_url("http://example.com/fail");
140 GURL match_url("http://query.com/query");
141 scoped_ptr<base::Value> query_str(base::Value::CreateStringValue("query"));
142 static const size_t kNumItems = 4;
143 CreateMocks(kNumItems);
144 for (size_t i = 0; i < kNumItems; ++i) {
145 if (i != 0)
146 EXPECT_CALL(mock(i), GetId()).WillOnce(Return(i));
147 EXPECT_CALL(mock(i), GetTargetFilePath())
148 .WillRepeatedly(ReturnRef((i & 1) ? match_filename : fail_filename));
149 EXPECT_CALL(mock(i), GetOriginalUrl())
150 .WillRepeatedly(ReturnRef((i & 2) ? match_url : fail_url));
151 EXPECT_CALL(mock(i), GetBrowserContext()).WillRepeatedly(Return(
152 static_cast<content::BrowserContext*>(NULL)));
153 }
154 query()->AddFilter(DownloadQuery::FILTER_QUERY, *query_str.get());
155 Search();
156 ASSERT_EQ(3U, results()->size());
157 EXPECT_EQ(1, results()->at(0)->GetId());
158 EXPECT_EQ(2, results()->at(1)->GetId());
159 EXPECT_EQ(3, results()->at(2)->GetId());
160 }
161
136 TEST_F(DownloadQueryTest, DownloadQueryAllFilters) { 162 TEST_F(DownloadQueryTest, DownloadQueryAllFilters) {
137 // Set up mocks such that only mock(0) matches all filters, and every other 163 // Set up mocks such that only mock(0) matches all filters, and every other
138 // mock fails a different filter (or two for GREATER/LESS filters). 164 // mock fails a different filter (or two for GREATER/LESS filters).
139 static const size_t kNumItems = 19; 165 static const size_t kNumItems = 18;
140 CreateMocks(kNumItems); 166 CreateMocks(kNumItems);
141 FilePath refail_filename(FILE_PATH_LITERAL("z")); 167 FilePath refail_filename(FILE_PATH_LITERAL("z"));
142 FilePath fail_filename(FILE_PATH_LITERAL("fail")); 168 FilePath fail_filename(FILE_PATH_LITERAL("fail"));
143 FilePath match_filename(FILE_PATH_LITERAL("match")); 169 FilePath match_filename(FILE_PATH_LITERAL("match"));
144 GURL refail_url("http://z.com/"); 170 GURL refail_url("http://z.com/");
145 GURL fail_url("http://example.com/fail"); 171 GURL fail_url("http://example.com/fail");
146 GURL match_url("http://example.com/match"); 172 GURL match_url("http://example.com/match");
147 // Picture a 2D matrix. The rows are MockDownloadItems and the columns are 173 // Picture a 2D matrix. The rows are MockDownloadItems and the columns are
148 // filter types. Every cell contains a value that matches all filters, except 174 // filter types. Every cell contains a value that matches all filters, except
149 // for the diagonal. Every item matches all the filters except one filter, 175 // for the diagonal. Every item matches all the filters except one filter,
150 // which it fails, except one item, which matches all the filters without 176 // which it fails, except one item, which matches all the filters without
151 // exception. Each mocked method is used to test (corresponds to) one or more 177 // exception. Each mocked method is used to test (corresponds to) one or more
152 // filter types (columns). For example, GetTotalBytes() is used to test 178 // filter types (columns). For example, GetTotalBytes() is used to test
153 // FILTER_TOTAL_BYTES_GREATER, FILTER_TOTAL_BYTES_LESS, and 179 // FILTER_TOTAL_BYTES_GREATER, FILTER_TOTAL_BYTES_LESS, and
154 // FILTER_TOTAL_BYTES, so it uses 3 columns: it returns 1 for row (item) 11, 180 // FILTER_TOTAL_BYTES, so it uses 3 columns: it returns 1 for row (item) 11,
155 // it returns 4 for row 12, 3 for 13, and it returns 2 for all other rows 181 // it returns 4 for row 12, 3 for 13, and it returns 2 for all other rows
156 // (items). 182 // (items).
157 for (size_t i = 0; i < kNumItems; ++i) { 183 for (size_t i = 0; i < kNumItems; ++i) {
158 EXPECT_CALL(mock(i), GetId()).WillRepeatedly(Return(i)); 184 EXPECT_CALL(mock(i), GetId()).WillRepeatedly(Return(i));
159 EXPECT_CALL(mock(i), GetReceivedBytes()).WillRepeatedly(Return(SWITCH2(i, 185 EXPECT_CALL(mock(i), GetReceivedBytes()).WillRepeatedly(Return(SWITCH2(i,
160 1, 2, 186 1, 2,
161 1))); 187 1)));
162 EXPECT_CALL(mock(i), GetSafetyState()).WillRepeatedly(Return(SWITCH2(i, 188 EXPECT_CALL(mock(i), GetSafetyState()).WillRepeatedly(Return(SWITCH2(i,
163 2, DownloadItem::DANGEROUS, 189 2, DownloadItem::DANGEROUS,
164 DownloadItem::DANGEROUS_BUT_VALIDATED))); 190 DownloadItem::DANGEROUS_BUT_VALIDATED)));
165 EXPECT_CALL(mock(i), GetFullPath()).WillRepeatedly(ReturnRef(SWITCH3(i, 191 EXPECT_CALL(mock(i), GetTargetFilePath())
192 .WillRepeatedly(ReturnRef(SWITCH3(i,
166 3, refail_filename, 193 3, refail_filename,
167 4, fail_filename, 194 4, fail_filename,
168 match_filename))); 195 match_filename)));
169 EXPECT_CALL(mock(i), GetMimeType()).WillRepeatedly(Return(SWITCH2(i, 196 EXPECT_CALL(mock(i), GetMimeType()).WillRepeatedly(Return(SWITCH2(i,
170 5, "image", 197 5, "image",
171 "text"))); 198 "text")));
172 EXPECT_CALL(mock(i), IsPaused()).WillRepeatedly(Return(SWITCH2(i, 199 EXPECT_CALL(mock(i), IsPaused()).WillRepeatedly(Return(SWITCH2(i,
173 6, false, 200 6, false,
174 true))); 201 true)));
175 EXPECT_CALL(mock(i), MatchesQuery(_)).WillRepeatedly(Return(SWITCH2(i,
176 7, false,
177 true)));
178 EXPECT_CALL(mock(i), GetStartTime()).WillRepeatedly(Return(SWITCH4(i, 202 EXPECT_CALL(mock(i), GetStartTime()).WillRepeatedly(Return(SWITCH4(i,
179 8, base::Time::FromTimeT(1), 203 7, base::Time::FromTimeT(1),
180 9, base::Time::FromTimeT(4), 204 8, base::Time::FromTimeT(4),
181 10, base::Time::FromTimeT(3), 205 9, base::Time::FromTimeT(3),
182 base::Time::FromTimeT(2)))); 206 base::Time::FromTimeT(2))));
183 EXPECT_CALL(mock(i), GetTotalBytes()).WillRepeatedly(Return(SWITCH4(i, 207 EXPECT_CALL(mock(i), GetTotalBytes()).WillRepeatedly(Return(SWITCH4(i,
184 11, 1, 208 10, 1,
185 12, 4, 209 11, 4,
186 13, 3, 210 12, 3,
187 2))); 211 2)));
188 EXPECT_CALL(mock(i), GetOriginalUrl()).WillRepeatedly(ReturnRef(SWITCH3(i, 212 EXPECT_CALL(mock(i), GetOriginalUrl()).WillRepeatedly(ReturnRef(SWITCH3(i,
189 14, refail_url, 213 13, refail_url,
190 15, fail_url, 214 14, fail_url,
191 match_url))); 215 match_url)));
216 // 15 is AddFilter(Bind(IdNotEqual, 15))
192 EXPECT_CALL(mock(i), GetState()).WillRepeatedly(Return(SWITCH2(i, 217 EXPECT_CALL(mock(i), GetState()).WillRepeatedly(Return(SWITCH2(i,
193 17, DownloadItem::CANCELLED, 218 16, DownloadItem::CANCELLED,
194 DownloadItem::IN_PROGRESS))); 219 DownloadItem::IN_PROGRESS)));
195 EXPECT_CALL(mock(i), GetDangerType()).WillRepeatedly(Return(SWITCH2(i, 220 EXPECT_CALL(mock(i), GetDangerType()).WillRepeatedly(Return(SWITCH2(i,
196 18, content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE, 221 17, content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE,
197 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS))); 222 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS)));
198 } 223 }
199 for (size_t i = 0; i < kNumItems; ++i) { 224 for (size_t i = 0; i < kNumItems; ++i) {
200 switch (i) { 225 switch (i) {
201 case 0: break; 226 case 0: break;
202 case 1: AddFilter(DownloadQuery::FILTER_BYTES_RECEIVED, 1); break; 227 case 1: AddFilter(DownloadQuery::FILTER_BYTES_RECEIVED, 1); break;
203 case 2: AddFilter(DownloadQuery::FILTER_DANGER_ACCEPTED, true); 228 case 2: AddFilter(DownloadQuery::FILTER_DANGER_ACCEPTED, true);
204 break; 229 break;
205 case 3: AddFilter(DownloadQuery::FILTER_FILENAME_REGEX, "a"); break; 230 case 3: AddFilter(DownloadQuery::FILTER_FILENAME_REGEX, "a"); break;
206 case 4: AddFilter(DownloadQuery::FILTER_FILENAME, 231 case 4: AddFilter(DownloadQuery::FILTER_FILENAME,
207 match_filename.value().c_str()); break; 232 match_filename.value().c_str()); break;
208 case 5: AddFilter(DownloadQuery::FILTER_MIME, "text"); break; 233 case 5: AddFilter(DownloadQuery::FILTER_MIME, "text"); break;
209 case 6: AddFilter(DownloadQuery::FILTER_PAUSED, true); break; 234 case 6: AddFilter(DownloadQuery::FILTER_PAUSED, true); break;
210 case 7: AddFilter(DownloadQuery::FILTER_QUERY, ""); break; 235 case 7: AddFilter(DownloadQuery::FILTER_STARTED_AFTER, 1000); break;
211 case 8: AddFilter(DownloadQuery::FILTER_STARTED_AFTER, 1000); break; 236 case 8: AddFilter(DownloadQuery::FILTER_STARTED_BEFORE, 4000);
212 case 9: AddFilter(DownloadQuery::FILTER_STARTED_BEFORE, 4000);
213 break; 237 break;
214 case 10: AddFilter(DownloadQuery::FILTER_START_TIME, 2000); break; 238 case 9: AddFilter(DownloadQuery::FILTER_START_TIME, 2000); break;
215 case 11: AddFilter(DownloadQuery::FILTER_TOTAL_BYTES_GREATER, 1); 239 case 10: AddFilter(DownloadQuery::FILTER_TOTAL_BYTES_GREATER, 1);
216 break; 240 break;
217 case 12: AddFilter(DownloadQuery::FILTER_TOTAL_BYTES_LESS, 4); 241 case 11: AddFilter(DownloadQuery::FILTER_TOTAL_BYTES_LESS, 4);
218 break; 242 break;
219 case 13: AddFilter(DownloadQuery::FILTER_TOTAL_BYTES, 2); break; 243 case 12: AddFilter(DownloadQuery::FILTER_TOTAL_BYTES, 2); break;
220 case 14: AddFilter(DownloadQuery::FILTER_URL_REGEX, "example"); 244 case 13: AddFilter(DownloadQuery::FILTER_URL_REGEX, "example");
221 break; 245 break;
222 case 15: AddFilter(DownloadQuery::FILTER_URL, 246 case 14: AddFilter(DownloadQuery::FILTER_URL,
223 match_url.spec().c_str()); break; 247 match_url.spec().c_str()); break;
224 case 16: CHECK(query()->AddFilter(base::Bind(&IdNotEqual, 16))); break; 248 case 15: CHECK(query()->AddFilter(base::Bind(&IdNotEqual, 15))); break;
225 case 17: query()->AddFilter(DownloadItem::IN_PROGRESS); break; 249 case 16: query()->AddFilter(DownloadItem::IN_PROGRESS); break;
226 case 18: query()->AddFilter(content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); 250 case 17: query()->AddFilter(content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
227 break; 251 break;
228 default: NOTREACHED(); break; 252 default: NOTREACHED(); break;
229 } 253 }
230 Search(); 254 Search();
231 ASSERT_EQ(kNumItems - i, results()->size()) 255 ASSERT_EQ(kNumItems - i, results()->size())
232 << "Failing filter: " << i; 256 << "Failing filter: " << i;
233 if (i > 0) { 257 if (i > 0) {
234 ASSERT_EQ(0, results()->at(0)->GetId()) 258 ASSERT_EQ(0, results()->at(0)->GetId())
235 << "Failing filter: " << i; 259 << "Failing filter: " << i;
236 for (size_t j = 1; j < kNumItems - i; ++j) { 260 for (size_t j = 1; j < kNumItems - i; ++j) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 query()->AddSorter( 300 query()->AddSorter(
277 DownloadQuery::SORT_DANGER_ACCEPTED, DownloadQuery::DESCENDING); 301 DownloadQuery::SORT_DANGER_ACCEPTED, DownloadQuery::DESCENDING);
278 Search(); 302 Search();
279 EXPECT_EQ(DownloadItem::DANGEROUS_BUT_VALIDATED, 303 EXPECT_EQ(DownloadItem::DANGEROUS_BUT_VALIDATED,
280 results()->at(0)->GetSafetyState()); 304 results()->at(0)->GetSafetyState());
281 EXPECT_EQ(DownloadItem::DANGEROUS, results()->at(1)->GetSafetyState()); 305 EXPECT_EQ(DownloadItem::DANGEROUS, results()->at(1)->GetSafetyState());
282 } 306 }
283 307
284 TEST_F(DownloadQueryTest, DownloadQuerySortFilename) { 308 TEST_F(DownloadQueryTest, DownloadQuerySortFilename) {
285 CreateMocks(2); 309 CreateMocks(2);
286 FilePath a_filename(FILE_PATH_LITERAL("a")); 310 FilePath a_path(FILE_PATH_LITERAL("a"));
287 FilePath b_filename(FILE_PATH_LITERAL("b")); 311 FilePath b_path(FILE_PATH_LITERAL("b"));
288 EXPECT_CALL(mock(0), GetFullPath()).WillRepeatedly(ReturnRef(b_filename)); 312 EXPECT_CALL(mock(0), GetTargetFilePath()).WillRepeatedly(ReturnRef(b_path));
289 EXPECT_CALL(mock(1), GetFullPath()).WillRepeatedly(ReturnRef(a_filename)); 313 EXPECT_CALL(mock(1), GetTargetFilePath()).WillRepeatedly(ReturnRef(a_path));
290 query()->AddSorter( 314 query()->AddSorter(
291 DownloadQuery::SORT_FILENAME, DownloadQuery::ASCENDING); 315 DownloadQuery::SORT_FILENAME, DownloadQuery::ASCENDING);
292 Search(); 316 Search();
293 EXPECT_EQ(a_filename, results()->at(0)->GetFullPath()); 317 EXPECT_EQ(a_path, results()->at(0)->GetTargetFilePath());
294 EXPECT_EQ(b_filename, results()->at(1)->GetFullPath()); 318 EXPECT_EQ(b_path, results()->at(1)->GetTargetFilePath());
295 } 319 }
296 320
297 TEST_F(DownloadQueryTest, DownloadQuerySortMime) { 321 TEST_F(DownloadQueryTest, DownloadQuerySortMime) {
298 CreateMocks(2); 322 CreateMocks(2);
299 EXPECT_CALL(mock(0), GetMimeType()).WillRepeatedly(Return("a")); 323 EXPECT_CALL(mock(0), GetMimeType()).WillRepeatedly(Return("a"));
300 EXPECT_CALL(mock(1), GetMimeType()).WillRepeatedly(Return("b")); 324 EXPECT_CALL(mock(1), GetMimeType()).WillRepeatedly(Return("b"));
301 query()->AddSorter( 325 query()->AddSorter(
302 DownloadQuery::SORT_MIME, DownloadQuery::DESCENDING); 326 DownloadQuery::SORT_MIME, DownloadQuery::DESCENDING);
303 Search(); 327 Search();
304 EXPECT_EQ("b", results()->at(0)->GetMimeType()); 328 EXPECT_EQ("b", results()->at(0)->GetMimeType());
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
390 base::Time start = base::Time::Now(); 414 base::Time start = base::Time::Now();
391 Search(); 415 Search();
392 base::Time end = base::Time::Now(); 416 base::Time end = base::Time::Now();
393 double nanos = (end - start).InMillisecondsF() * 1000.0 * 1000.0; 417 double nanos = (end - start).InMillisecondsF() * 1000.0 * 1000.0;
394 double nanos_per_item = nanos / static_cast<double>(kNumItems); 418 double nanos_per_item = nanos / static_cast<double>(kNumItems);
395 double nanos_per_item_per_filter = nanos_per_item 419 double nanos_per_item_per_filter = nanos_per_item
396 / static_cast<double>(kNumFilters); 420 / static_cast<double>(kNumFilters);
397 std::cout << "Search took " << nanos_per_item_per_filter 421 std::cout << "Search took " << nanos_per_item_per_filter
398 << " nanoseconds per item per filter.\n"; 422 << " nanoseconds per item per filter.\n";
399 } 423 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698