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

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) {
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 // TODO(phajdan.jr): Also test these strings:
162 // "/\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xbd\xa0\xe5\xa5\xbd",
163 // L"/\x4f60\x597d\x4f60\x597d",
164 // "/%E4%BD%A0%E5%A5%BD%E4%BD%A0%E5%A5%BD"
165 }
166
136 TEST_F(DownloadQueryTest, DownloadQueryAllFilters) { 167 TEST_F(DownloadQueryTest, DownloadQueryAllFilters) {
137 // Set up mocks such that only mock(0) matches all filters, and every other 168 // 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). 169 // mock fails a different filter (or two for GREATER/LESS filters).
139 static const size_t kNumItems = 19; 170 static const size_t kNumItems = 18;
140 CreateMocks(kNumItems); 171 CreateMocks(kNumItems);
141 FilePath refail_filename(FILE_PATH_LITERAL("z")); 172 FilePath refail_filename(FILE_PATH_LITERAL("z"));
142 FilePath fail_filename(FILE_PATH_LITERAL("fail")); 173 FilePath fail_filename(FILE_PATH_LITERAL("fail"));
143 FilePath match_filename(FILE_PATH_LITERAL("match")); 174 FilePath match_filename(FILE_PATH_LITERAL("match"));
144 GURL refail_url("http://z.com/"); 175 GURL refail_url("http://z.com/");
145 GURL fail_url("http://example.com/fail"); 176 GURL fail_url("http://example.com/fail");
146 GURL match_url("http://example.com/match"); 177 GURL match_url("http://example.com/match");
147 // Picture a 2D matrix. The rows are MockDownloadItems and the columns are 178 // 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 179 // 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, 180 // 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 181 // 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 182 // exception. Each mocked method is used to test (corresponds to) one or more
152 // filter types (columns). For example, GetTotalBytes() is used to test 183 // filter types (columns). For example, GetTotalBytes() is used to test
153 // FILTER_TOTAL_BYTES_GREATER, FILTER_TOTAL_BYTES_LESS, and 184 // 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, 185 // 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 186 // it returns 4 for row 12, 3 for 13, and it returns 2 for all other rows
156 // (items). 187 // (items).
157 for (size_t i = 0; i < kNumItems; ++i) { 188 for (size_t i = 0; i < kNumItems; ++i) {
158 EXPECT_CALL(mock(i), GetId()).WillRepeatedly(Return(i)); 189 EXPECT_CALL(mock(i), GetId()).WillRepeatedly(Return(i));
159 EXPECT_CALL(mock(i), GetReceivedBytes()).WillRepeatedly(Return(SWITCH2(i, 190 EXPECT_CALL(mock(i), GetReceivedBytes()).WillRepeatedly(Return(SWITCH2(i,
160 1, 2, 191 1, 2,
161 1))); 192 1)));
162 EXPECT_CALL(mock(i), GetSafetyState()).WillRepeatedly(Return(SWITCH2(i, 193 EXPECT_CALL(mock(i), GetSafetyState()).WillRepeatedly(Return(SWITCH2(i,
163 2, DownloadItem::DANGEROUS, 194 2, DownloadItem::DANGEROUS,
164 DownloadItem::DANGEROUS_BUT_VALIDATED))); 195 DownloadItem::DANGEROUS_BUT_VALIDATED)));
165 EXPECT_CALL(mock(i), GetFullPath()).WillRepeatedly(ReturnRef(SWITCH3(i, 196 EXPECT_CALL(mock(i), GetTargetFilePath())
197 .WillRepeatedly(ReturnRef(SWITCH3(i,
166 3, refail_filename, 198 3, refail_filename,
167 4, fail_filename, 199 4, fail_filename,
168 match_filename))); 200 match_filename)));
169 EXPECT_CALL(mock(i), GetMimeType()).WillRepeatedly(Return(SWITCH2(i, 201 EXPECT_CALL(mock(i), GetMimeType()).WillRepeatedly(Return(SWITCH2(i,
170 5, "image", 202 5, "image",
171 "text"))); 203 "text")));
172 EXPECT_CALL(mock(i), IsPaused()).WillRepeatedly(Return(SWITCH2(i, 204 EXPECT_CALL(mock(i), IsPaused()).WillRepeatedly(Return(SWITCH2(i,
173 6, false, 205 6, false,
174 true))); 206 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, 207 EXPECT_CALL(mock(i), GetStartTime()).WillRepeatedly(Return(SWITCH4(i,
179 8, base::Time::FromTimeT(1), 208 7, base::Time::FromTimeT(1),
180 9, base::Time::FromTimeT(4), 209 8, base::Time::FromTimeT(4),
181 10, base::Time::FromTimeT(3), 210 9, base::Time::FromTimeT(3),
182 base::Time::FromTimeT(2)))); 211 base::Time::FromTimeT(2))));
183 EXPECT_CALL(mock(i), GetTotalBytes()).WillRepeatedly(Return(SWITCH4(i, 212 EXPECT_CALL(mock(i), GetTotalBytes()).WillRepeatedly(Return(SWITCH4(i,
184 11, 1, 213 10, 1,
185 12, 4, 214 11, 4,
186 13, 3, 215 12, 3,
187 2))); 216 2)));
188 EXPECT_CALL(mock(i), GetOriginalUrl()).WillRepeatedly(ReturnRef(SWITCH3(i, 217 EXPECT_CALL(mock(i), GetOriginalUrl()).WillRepeatedly(ReturnRef(SWITCH3(i,
189 14, refail_url, 218 13, refail_url,
190 15, fail_url, 219 14, fail_url,
191 match_url))); 220 match_url)));
221 // 15 is AddFilter(Bind(IdNotEqual, 15))
192 EXPECT_CALL(mock(i), GetState()).WillRepeatedly(Return(SWITCH2(i, 222 EXPECT_CALL(mock(i), GetState()).WillRepeatedly(Return(SWITCH2(i,
193 17, DownloadItem::CANCELLED, 223 16, DownloadItem::CANCELLED,
194 DownloadItem::IN_PROGRESS))); 224 DownloadItem::IN_PROGRESS)));
195 EXPECT_CALL(mock(i), GetDangerType()).WillRepeatedly(Return(SWITCH2(i, 225 EXPECT_CALL(mock(i), GetDangerType()).WillRepeatedly(Return(SWITCH2(i,
196 18, content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE, 226 17, content::DOWNLOAD_DANGER_TYPE_DANGEROUS_FILE,
197 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS))); 227 content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS)));
198 } 228 }
199 for (size_t i = 0; i < kNumItems; ++i) { 229 for (size_t i = 0; i < kNumItems; ++i) {
200 switch (i) { 230 switch (i) {
201 case 0: break; 231 case 0: break;
202 case 1: AddFilter(DownloadQuery::FILTER_BYTES_RECEIVED, 1); break; 232 case 1: AddFilter(DownloadQuery::FILTER_BYTES_RECEIVED, 1); break;
203 case 2: AddFilter(DownloadQuery::FILTER_DANGER_ACCEPTED, true); 233 case 2: AddFilter(DownloadQuery::FILTER_DANGER_ACCEPTED, true);
204 break; 234 break;
205 case 3: AddFilter(DownloadQuery::FILTER_FILENAME_REGEX, "a"); break; 235 case 3: AddFilter(DownloadQuery::FILTER_FILENAME_REGEX, "a"); break;
206 case 4: AddFilter(DownloadQuery::FILTER_FILENAME, 236 case 4: AddFilter(DownloadQuery::FILTER_FILENAME,
207 match_filename.value().c_str()); break; 237 match_filename.value().c_str()); break;
208 case 5: AddFilter(DownloadQuery::FILTER_MIME, "text"); break; 238 case 5: AddFilter(DownloadQuery::FILTER_MIME, "text"); break;
209 case 6: AddFilter(DownloadQuery::FILTER_PAUSED, true); break; 239 case 6: AddFilter(DownloadQuery::FILTER_PAUSED, true); break;
210 case 7: AddFilter(DownloadQuery::FILTER_QUERY, ""); break; 240 case 7: AddFilter(DownloadQuery::FILTER_STARTED_AFTER, 1000); break;
211 case 8: AddFilter(DownloadQuery::FILTER_STARTED_AFTER, 1000); break; 241 case 8: AddFilter(DownloadQuery::FILTER_STARTED_BEFORE, 4000);
212 case 9: AddFilter(DownloadQuery::FILTER_STARTED_BEFORE, 4000);
213 break; 242 break;
214 case 10: AddFilter(DownloadQuery::FILTER_START_TIME, 2000); break; 243 case 9: AddFilter(DownloadQuery::FILTER_START_TIME, 2000); break;
215 case 11: AddFilter(DownloadQuery::FILTER_TOTAL_BYTES_GREATER, 1); 244 case 10: AddFilter(DownloadQuery::FILTER_TOTAL_BYTES_GREATER, 1);
216 break; 245 break;
217 case 12: AddFilter(DownloadQuery::FILTER_TOTAL_BYTES_LESS, 4); 246 case 11: AddFilter(DownloadQuery::FILTER_TOTAL_BYTES_LESS, 4);
218 break; 247 break;
219 case 13: AddFilter(DownloadQuery::FILTER_TOTAL_BYTES, 2); break; 248 case 12: AddFilter(DownloadQuery::FILTER_TOTAL_BYTES, 2); break;
220 case 14: AddFilter(DownloadQuery::FILTER_URL_REGEX, "example"); 249 case 13: AddFilter(DownloadQuery::FILTER_URL_REGEX, "example");
221 break; 250 break;
222 case 15: AddFilter(DownloadQuery::FILTER_URL, 251 case 14: AddFilter(DownloadQuery::FILTER_URL,
223 match_url.spec().c_str()); break; 252 match_url.spec().c_str()); break;
224 case 16: CHECK(query()->AddFilter(base::Bind(&IdNotEqual, 16))); break; 253 case 15: CHECK(query()->AddFilter(base::Bind(&IdNotEqual, 15))); break;
225 case 17: query()->AddFilter(DownloadItem::IN_PROGRESS); break; 254 case 16: query()->AddFilter(DownloadItem::IN_PROGRESS); break;
226 case 18: query()->AddFilter(content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS); 255 case 17: query()->AddFilter(content::DOWNLOAD_DANGER_TYPE_NOT_DANGEROUS);
227 break; 256 break;
228 default: NOTREACHED(); break; 257 default: NOTREACHED(); break;
229 } 258 }
230 Search(); 259 Search();
231 ASSERT_EQ(kNumItems - i, results()->size()) 260 ASSERT_EQ(kNumItems - i, results()->size())
232 << "Failing filter: " << i; 261 << "Failing filter: " << i;
233 if (i > 0) { 262 if (i > 0) {
234 ASSERT_EQ(0, results()->at(0)->GetId()) 263 ASSERT_EQ(0, results()->at(0)->GetId())
235 << "Failing filter: " << i; 264 << "Failing filter: " << i;
236 for (size_t j = 1; j < kNumItems - i; ++j) { 265 for (size_t j = 1; j < kNumItems - i; ++j) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
276 query()->AddSorter( 305 query()->AddSorter(
277 DownloadQuery::SORT_DANGER_ACCEPTED, DownloadQuery::DESCENDING); 306 DownloadQuery::SORT_DANGER_ACCEPTED, DownloadQuery::DESCENDING);
278 Search(); 307 Search();
279 EXPECT_EQ(DownloadItem::DANGEROUS_BUT_VALIDATED, 308 EXPECT_EQ(DownloadItem::DANGEROUS_BUT_VALIDATED,
280 results()->at(0)->GetSafetyState()); 309 results()->at(0)->GetSafetyState());
281 EXPECT_EQ(DownloadItem::DANGEROUS, results()->at(1)->GetSafetyState()); 310 EXPECT_EQ(DownloadItem::DANGEROUS, results()->at(1)->GetSafetyState());
282 } 311 }
283 312
284 TEST_F(DownloadQueryTest, DownloadQuerySortFilename) { 313 TEST_F(DownloadQueryTest, DownloadQuerySortFilename) {
285 CreateMocks(2); 314 CreateMocks(2);
286 FilePath a_filename(FILE_PATH_LITERAL("a")); 315 FilePath a_path(FILE_PATH_LITERAL("a"));
287 FilePath b_filename(FILE_PATH_LITERAL("b")); 316 FilePath b_path(FILE_PATH_LITERAL("b"));
288 EXPECT_CALL(mock(0), GetFullPath()).WillRepeatedly(ReturnRef(b_filename)); 317 EXPECT_CALL(mock(0), GetTargetFilePath()).WillRepeatedly(ReturnRef(b_path));
289 EXPECT_CALL(mock(1), GetFullPath()).WillRepeatedly(ReturnRef(a_filename)); 318 EXPECT_CALL(mock(1), GetTargetFilePath()).WillRepeatedly(ReturnRef(a_path));
290 query()->AddSorter( 319 query()->AddSorter(
291 DownloadQuery::SORT_FILENAME, DownloadQuery::ASCENDING); 320 DownloadQuery::SORT_FILENAME, DownloadQuery::ASCENDING);
292 Search(); 321 Search();
293 EXPECT_EQ(a_filename, results()->at(0)->GetFullPath()); 322 EXPECT_EQ(a_path, results()->at(0)->GetTargetFilePath());
294 EXPECT_EQ(b_filename, results()->at(1)->GetFullPath()); 323 EXPECT_EQ(b_path, results()->at(1)->GetTargetFilePath());
295 } 324 }
296 325
297 TEST_F(DownloadQueryTest, DownloadQuerySortMime) { 326 TEST_F(DownloadQueryTest, DownloadQuerySortMime) {
298 CreateMocks(2); 327 CreateMocks(2);
299 EXPECT_CALL(mock(0), GetMimeType()).WillRepeatedly(Return("a")); 328 EXPECT_CALL(mock(0), GetMimeType()).WillRepeatedly(Return("a"));
300 EXPECT_CALL(mock(1), GetMimeType()).WillRepeatedly(Return("b")); 329 EXPECT_CALL(mock(1), GetMimeType()).WillRepeatedly(Return("b"));
301 query()->AddSorter( 330 query()->AddSorter(
302 DownloadQuery::SORT_MIME, DownloadQuery::DESCENDING); 331 DownloadQuery::SORT_MIME, DownloadQuery::DESCENDING);
303 Search(); 332 Search();
304 EXPECT_EQ("b", results()->at(0)->GetMimeType()); 333 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(); 419 base::Time start = base::Time::Now();
391 Search(); 420 Search();
392 base::Time end = base::Time::Now(); 421 base::Time end = base::Time::Now();
393 double nanos = (end - start).InMillisecondsF() * 1000.0 * 1000.0; 422 double nanos = (end - start).InMillisecondsF() * 1000.0 * 1000.0;
394 double nanos_per_item = nanos / static_cast<double>(kNumItems); 423 double nanos_per_item = nanos / static_cast<double>(kNumItems);
395 double nanos_per_item_per_filter = nanos_per_item 424 double nanos_per_item_per_filter = nanos_per_item
396 / static_cast<double>(kNumFilters); 425 / static_cast<double>(kNumFilters);
397 std::cout << "Search took " << nanos_per_item_per_filter 426 std::cout << "Search took " << nanos_per_item_per_filter
398 << " nanoseconds per item per filter.\n"; 427 << " nanoseconds per item per filter.\n";
399 } 428 }
OLDNEW
« no previous file with comments | « chrome/browser/download/download_query.cc ('k') | chrome/browser/download/save_page_browsertest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698