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

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

Issue 8601012: DownloadQuery filters and sorts DownloadItems. (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: comments Created 9 years 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
(Empty)
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
3 // found in the LICENSE file.
4
5 #include <string>
6
7 #include "base/bind.h"
8 #include "base/file_path.h"
9 #include "base/logging.h"
10 #include "base/stl_util.h"
11 #include "content/browser/download/download_query.h"
12 #include "content/browser/download/mock_download_item.h"
13 #include "testing/gmock/include/gmock/gmock.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 #include "base/utf_string_conversions.h"
17
18 using ::testing::Return;
19 using ::testing::ReturnRef;
20 typedef DownloadQuery::DownloadVector DownloadVector;
21
22 namespace {
23 bool OnlyEvenIds(const DownloadItem& item) {
24 return item.GetId() % 2 == 0;
25 }
26 }
27
28 class DownloadQueryTest : public testing::Test {
29 public:
30 DownloadQueryTest() {}
31 virtual ~DownloadQueryTest() {}
32 virtual void TearDown() {
33 STLDeleteElements(&mocks_);
34 }
35 void CreateMocks(int count) {
36 for (int i = 0; i < count; ++i) {
37 MockDownloadItem* mock = new MockDownloadItem();
38 mocks_.push_back(mock);
39 all_items_.push_back(mock);
40 }
41 }
42 MockDownloadItem& mock(int index) { return *mocks_[index]; }
43 DownloadQuery* query() { return &query_; }
44 DownloadVector* all_items() { return &all_items_; }
45 DownloadVector* results() { return &results_; }
46 void Search() {
47 results_.clear();
48 query()->Search(all_items_.begin(), all_items_.end(), &results_);
49 }
50
51 private:
52 std::vector<MockDownloadItem*> mocks_;
53 DownloadQuery query_;
54 DownloadVector all_items_;
55 DownloadVector results_;
56
57 DISALLOW_COPY_AND_ASSIGN(DownloadQueryTest);
58 };
59
60 TEST_F(DownloadQueryTest, EmptyQueryNoItems) {
61 Search();
62 EXPECT_EQ(0U, results()->size());
63 }
64
65 TEST_F(DownloadQueryTest, EmptyQuerySomeItems) {
66 CreateMocks(3);
67 Search();
68 EXPECT_EQ(3U, results()->size());
69 }
70
71 TEST_F(DownloadQueryTest, FilterBytesReceived) {
72 CreateMocks(2);
73 EXPECT_CALL(mock(0), GetReceivedBytes()).WillOnce(Return(0));
74 EXPECT_CALL(mock(1), GetReceivedBytes()).WillOnce(Return(1));
75 query()->Filter(DownloadQuery::FILTER_FIELD_BYTES_RECEIVED, 1);
76 Search();
77 EXPECT_EQ(1U, results()->size());
78 }
79
80 TEST_F(DownloadQueryTest, FilterUrlRegex) {
81 CreateMocks(3);
82 GURL url0("http://example.com");
83 GURL url1("http://foo.com");
84 GURL url2("http://bar.com/foo/bar");
85 EXPECT_CALL(mock(0), GetOriginalUrl()).WillOnce(ReturnRef(url0));
86 EXPECT_CALL(mock(1), GetOriginalUrl()).WillOnce(ReturnRef(url1));
87 EXPECT_CALL(mock(2), GetOriginalUrl()).WillOnce(ReturnRef(url2));
88 query()->Filter(DownloadQuery::FILTER_FIELD_URL_REGEX, std::string("fo{2}"));
89 Search();
90 EXPECT_EQ(2U, results()->size());
91 }
92
93 TEST_F(DownloadQueryTest, FilterFilter) {
94 CreateMocks(2);
95 EXPECT_CALL(mock(0), GetId()).WillOnce(Return(0));
96 EXPECT_CALL(mock(1), GetId()).WillOnce(Return(1));
97 query()->Filter(base::Bind(&OnlyEvenIds));
98 Search();
99 EXPECT_EQ(1U, results()->size());
100 }
101
102 TEST_F(DownloadQueryTest, InvalidFilter) {
103 EXPECT_FALSE(query()->Filter(DownloadQuery::FILTER_FIELD_FILENAME_REGEX,
104 std::string()));
105 EXPECT_FALSE(query()->Filter(DownloadQuery::FILTER_FIELD_URL_REGEX,
106 string16()));
107 DownloadQuery::FilterFieldName kInvalidName =
108 static_cast<DownloadQuery::FilterFieldName>(kint32max);
109 EXPECT_FALSE(query()->Filter(kInvalidName, 0));
110 EXPECT_FALSE(query()->Filter(kInvalidName, false));
111 EXPECT_FALSE(query()->Filter(kInvalidName, std::string()));
112 EXPECT_FALSE(query()->Filter(kInvalidName, string16()));
113 EXPECT_FALSE(query()->Filter(kInvalidName, DownloadStateInfo::DANGEROUS_URL));
114 EXPECT_FALSE(query()->Filter(kInvalidName, DownloadItem::IN_PROGRESS));
115 }
116
117 TEST_F(DownloadQueryTest, FilterFilenameRegex) {
118 CreateMocks(2);
119 FilePath file0("/foo/bar");
120 FilePath file1("/a/b/c");
121 EXPECT_CALL(mock(0), GetFullPath()).WillOnce(ReturnRef(file0));
122 EXPECT_CALL(mock(1), GetFullPath()).WillOnce(ReturnRef(file1));
123 query()->Filter(DownloadQuery::FILTER_FIELD_FILENAME_REGEX,
124 ASCIIToUTF16("fo{2}"));
125 Search();
126 EXPECT_EQ(1U, results()->size());
127 }
128
129 TEST_F(DownloadQueryTest, SortBytesReceived) {
130 CreateMocks(3);
131 EXPECT_CALL(mock(0), GetReceivedBytes()).WillRepeatedly(Return(2));
132 EXPECT_CALL(mock(1), GetReceivedBytes()).WillRepeatedly(Return(0));
133 EXPECT_CALL(mock(2), GetReceivedBytes()).WillRepeatedly(Return(1));
134 query()->Sort(DownloadQuery::SORT_FIELD_BYTES_RECEIVED,
135 DownloadQuery::ASCENDING);
136 Search();
137 EXPECT_EQ(3U, results()->size());
138 EXPECT_EQ(0, results()->at(0)->GetReceivedBytes());
139 EXPECT_EQ(1, results()->at(1)->GetReceivedBytes());
140 EXPECT_EQ(2, results()->at(2)->GetReceivedBytes());
141
142 // Automatically sort secondarily by Id.
143 CreateMocks(3);
144 EXPECT_CALL(mock(3), GetReceivedBytes()).WillRepeatedly(Return(2));
145 EXPECT_CALL(mock(4), GetReceivedBytes()).WillRepeatedly(Return(0));
146 EXPECT_CALL(mock(5), GetReceivedBytes()).WillRepeatedly(Return(1));
147 for (int i = 0; i < 6; ++i) {
148 EXPECT_CALL(mock(i), GetId()).WillRepeatedly(Return(i));
149 }
150 Search();
151 EXPECT_EQ(6U, results()->size());
152 EXPECT_EQ(1, results()->at(0)->GetId());
153 EXPECT_EQ(4, results()->at(1)->GetId());
154 EXPECT_EQ(2, results()->at(2)->GetId());
155 EXPECT_EQ(5, results()->at(3)->GetId());
156 EXPECT_EQ(0, results()->at(4)->GetId());
157 EXPECT_EQ(3, results()->at(5)->GetId());
158 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698