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

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

Issue 14593012: BrowserContext should simply own DownloadManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 7 years, 7 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
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 "base/memory/scoped_ptr.h" 5 #include "base/memory/scoped_vector.h"
6 #include "base/memory/weak_ptr.h" 6 #include "base/memory/weak_ptr.h"
7 #include "base/message_loop.h" 7 #include "base/message_loop.h"
8 #include "base/stl_util.h" 8 #include "base/stl_util.h"
9 #include "chrome/browser/download/download_status_updater.h" 9 #include "chrome/browser/download/download_status_updater.h"
10 #include "content/public/test/mock_download_item.h" 10 #include "content/public/test/mock_download_item.h"
11 #include "content/public/test/mock_download_manager.h" 11 #include "content/public/test/mock_download_manager.h"
12 #include "content/public/test/test_browser_thread.h" 12 #include "content/public/test/test_browser_thread.h"
13 #include "testing/gmock/include/gmock/gmock.h" 13 #include "testing/gmock/include/gmock/gmock.h"
14 #include "testing/gtest/include/gtest/gtest.h" 14 #include "testing/gtest/include/gtest/gtest.h"
15 15
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 loop_.RunUntilIdle(); // Allow DownloadManager destruction. 72 loop_.RunUntilIdle(); // Allow DownloadManager destruction.
73 } 73 }
74 74
75 protected: 75 protected:
76 // Attach some number of DownloadManagers to the updater. 76 // Attach some number of DownloadManagers to the updater.
77 void SetupManagers(int manager_count) { 77 void SetupManagers(int manager_count) {
78 DCHECK_EQ(0U, managers_.size()); 78 DCHECK_EQ(0U, managers_.size());
79 for (int i = 0; i < manager_count; ++i) { 79 for (int i = 0; i < manager_count; ++i) {
80 content::MockDownloadManager* mgr = 80 content::MockDownloadManager* mgr =
81 new StrictMock<content::MockDownloadManager>; 81 new StrictMock<content::MockDownloadManager>;
82 managers_.push_back(make_scoped_refptr(mgr)); 82 managers_.push_back(mgr);
83 } 83 }
84 } 84 }
85 85
86 void SetObserver(content::DownloadManager::Observer* observer) { 86 void SetObserver(content::DownloadManager::Observer* observer) {
87 manager_observers_[manager_observer_index_] = observer; 87 manager_observers_[manager_observer_index_] = observer;
88 } 88 }
89 89
90 // Hook the specified manager into the updater. 90 // Hook the specified manager into the updater.
91 void LinkManager(int i) { 91 void LinkManager(int i) {
92 content::MockDownloadManager* mgr = managers_[i].get(); 92 content::MockDownloadManager* mgr = managers_[i];
93 manager_observer_index_ = i; 93 manager_observer_index_ = i;
94 while (manager_observers_.size() <= static_cast<size_t>(i)) { 94 while (manager_observers_.size() <= static_cast<size_t>(i)) {
95 manager_observers_.push_back(NULL); 95 manager_observers_.push_back(NULL);
96 } 96 }
97 EXPECT_CALL(*mgr, AddObserver(_)) 97 EXPECT_CALL(*mgr, AddObserver(_))
98 .WillOnce(WithArg<0>(Invoke( 98 .WillOnce(WithArg<0>(Invoke(
99 this, &DownloadStatusUpdaterTest::SetObserver))); 99 this, &DownloadStatusUpdaterTest::SetObserver)));
100 updater_->AddManager(mgr); 100 updater_->AddManager(mgr);
101 } 101 }
102 102
103 // Add some number of Download items to a particular manager. 103 // Add some number of Download items to a particular manager.
104 void AddItems(int manager_index, int item_count, int in_progress_count) { 104 void AddItems(int manager_index, int item_count, int in_progress_count) {
105 DCHECK_GT(managers_.size(), static_cast<size_t>(manager_index)); 105 DCHECK_GT(managers_.size(), static_cast<size_t>(manager_index));
106 content::MockDownloadManager* manager = managers_[manager_index].get(); 106 content::MockDownloadManager* manager = managers_[manager_index];
107 107
108 if (manager_items_.size() <= static_cast<size_t>(manager_index)) 108 if (manager_items_.size() <= static_cast<size_t>(manager_index))
109 manager_items_.resize(manager_index+1); 109 manager_items_.resize(manager_index+1);
110 110
111 std::vector<content::DownloadItem*> item_list; 111 std::vector<content::DownloadItem*> item_list;
112 for (int i = 0; i < item_count; ++i) { 112 for (int i = 0; i < item_count; ++i) {
113 content::MockDownloadItem* item = 113 content::MockDownloadItem* item =
114 new StrictMock<content::MockDownloadItem>; 114 new StrictMock<content::MockDownloadItem>;
115 EXPECT_CALL(*item, IsInProgress()) 115 EXPECT_CALL(*item, IsInProgress())
116 .WillRepeatedly(Return(i < in_progress_count)); 116 .WillRepeatedly(Return(i < in_progress_count));
117 EXPECT_CALL(*item, AddObserver(_)) 117 EXPECT_CALL(*item, AddObserver(_))
118 .WillOnce(Return()); 118 .WillOnce(Return());
119 manager_items_[manager_index].push_back(item); 119 manager_items_[manager_index].push_back(item);
120 } 120 }
121 EXPECT_CALL(*manager, GetAllDownloads(_)) 121 EXPECT_CALL(*manager, GetAllDownloads(_))
122 .WillRepeatedly(SetArgPointee<0>(manager_items_[manager_index])); 122 .WillRepeatedly(SetArgPointee<0>(manager_items_[manager_index]));
123 } 123 }
124 124
125 // Return the specified manager. 125 // Return the specified manager.
126 content::MockDownloadManager* Manager(int manager_index) { 126 content::MockDownloadManager* Manager(int manager_index) {
127 DCHECK_GT(managers_.size(), static_cast<size_t>(manager_index)); 127 DCHECK_GT(managers_.size(), static_cast<size_t>(manager_index));
128 return managers_[manager_index].get(); 128 return managers_[manager_index];
129 } 129 }
130 130
131 // Return the specified item. 131 // Return the specified item.
132 content::MockDownloadItem* Item(int manager_index, int item_index) { 132 content::MockDownloadItem* Item(int manager_index, int item_index) {
133 DCHECK_GT(manager_items_.size(), static_cast<size_t>(manager_index)); 133 DCHECK_GT(manager_items_.size(), static_cast<size_t>(manager_index));
134 DCHECK_GT(manager_items_[manager_index].size(), 134 DCHECK_GT(manager_items_[manager_index].size(),
135 static_cast<size_t>(item_index)); 135 static_cast<size_t>(item_index));
136 // All DownloadItems in manager_items_ are MockDownloadItems. 136 // All DownloadItems in manager_items_ are MockDownloadItems.
137 return static_cast<content::MockDownloadItem*>( 137 return static_cast<content::MockDownloadItem*>(
138 manager_items_[manager_index][item_index]); 138 manager_items_[manager_index][item_index]);
(...skipping 15 matching lines...) Expand all
154 // Transition specified item to completed. 154 // Transition specified item to completed.
155 void CompleteItem(int manager_index, int item_index) { 155 void CompleteItem(int manager_index, int item_index) {
156 content::MockDownloadItem* item(Item(manager_index, item_index)); 156 content::MockDownloadItem* item(Item(manager_index, item_index));
157 EXPECT_CALL(*item, IsInProgress()) 157 EXPECT_CALL(*item, IsInProgress())
158 .WillRepeatedly(Return(false)); 158 .WillRepeatedly(Return(false));
159 updater_->OnDownloadUpdated(managers_[manager_index], item); 159 updater_->OnDownloadUpdated(managers_[manager_index], item);
160 } 160 }
161 161
162 // Verify and clear all mocks expectations. 162 // Verify and clear all mocks expectations.
163 void VerifyAndClearExpectations() { 163 void VerifyAndClearExpectations() {
164 for (std::vector<scoped_refptr<content::MockDownloadManager> >::iterator it 164 for (ScopedVector<content::MockDownloadManager>::iterator it
165 = managers_.begin(); it != managers_.end(); ++it) 165 = managers_.begin(); it != managers_.end(); ++it)
166 Mock::VerifyAndClearExpectations(it->get()); 166 Mock::VerifyAndClearExpectations(*it);
167 for (std::vector<Items>::iterator it = manager_items_.begin(); 167 for (std::vector<Items>::iterator it = manager_items_.begin();
168 it != manager_items_.end(); ++it) 168 it != manager_items_.end(); ++it)
169 for (Items::iterator sit = it->begin(); sit != it->end(); ++sit) 169 for (Items::iterator sit = it->begin(); sit != it->end(); ++sit)
170 Mock::VerifyAndClearExpectations(*sit); 170 Mock::VerifyAndClearExpectations(*sit);
171 } 171 }
172 172
173 std::vector<scoped_refptr<content::MockDownloadManager> > managers_; 173 ScopedVector<content::MockDownloadManager> managers_;
174 // DownloadItem so that it can be assigned to the result of SearchDownloads. 174 // DownloadItem so that it can be assigned to the result of SearchDownloads.
175 typedef std::vector<content::DownloadItem*> Items; 175 typedef std::vector<content::DownloadItem*> Items;
176 std::vector<Items> manager_items_; 176 std::vector<Items> manager_items_;
177 int manager_observer_index_; 177 int manager_observer_index_;
178 178
179 std::vector<content::DownloadManager::Observer*> manager_observers_; 179 std::vector<content::DownloadManager::Observer*> manager_observers_;
180 180
181 // Pointer so we can verify that destruction triggers appropriate 181 // Pointer so we can verify that destruction triggers appropriate
182 // changes. 182 // changes.
183 TestDownloadStatusUpdater *updater_; 183 TestDownloadStatusUpdater *updater_;
(...skipping 17 matching lines...) Expand all
201 201
202 // Test updater with null manager. 202 // Test updater with null manager.
203 TEST_F(DownloadStatusUpdaterTest, OneManagerNoItems) { 203 TEST_F(DownloadStatusUpdaterTest, OneManagerNoItems) {
204 SetupManagers(1); 204 SetupManagers(1);
205 AddItems(0, 0, 0); 205 AddItems(0, 0, 0);
206 LinkManager(0); 206 LinkManager(0);
207 VerifyAndClearExpectations(); 207 VerifyAndClearExpectations();
208 208
209 float progress = -1; 209 float progress = -1;
210 int download_count = -1; 210 int download_count = -1;
211 EXPECT_CALL(*managers_[0].get(), GetAllDownloads(_)) 211 EXPECT_CALL(*managers_[0], GetAllDownloads(_))
212 .WillRepeatedly(SetArgPointee<0>(manager_items_[0])); 212 .WillRepeatedly(SetArgPointee<0>(manager_items_[0]));
213 EXPECT_TRUE(updater_->GetProgress(&progress, &download_count)); 213 EXPECT_TRUE(updater_->GetProgress(&progress, &download_count));
214 EXPECT_FLOAT_EQ(0.0f, progress); 214 EXPECT_FLOAT_EQ(0.0f, progress);
215 EXPECT_EQ(0, download_count); 215 EXPECT_EQ(0, download_count);
216 } 216 }
217 217
218 // Test updater with non-null manager, including transition an item to 218 // Test updater with non-null manager, including transition an item to
219 // |content::DownloadItem::COMPLETE| and adding a new item. 219 // |content::DownloadItem::COMPLETE| and adding a new item.
220 TEST_F(DownloadStatusUpdaterTest, OneManagerManyItems) { 220 TEST_F(DownloadStatusUpdaterTest, OneManagerManyItems) {
221 SetupManagers(1); 221 SetupManagers(1);
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
338 SetItemValues(0, 0, 10, 20, false); 338 SetItemValues(0, 0, 10, 20, false);
339 SetItemValues(0, 1, 50, 60, false); 339 SetItemValues(0, 1, 50, 60, false);
340 SetItemValues(1, 0, 80, 90, false); 340 SetItemValues(1, 0, 80, 90, false);
341 341
342 float progress = -1; 342 float progress = -1;
343 int download_count = -1; 343 int download_count = -1;
344 EXPECT_TRUE(updater_->GetProgress(&progress, &download_count)); 344 EXPECT_TRUE(updater_->GetProgress(&progress, &download_count));
345 EXPECT_FLOAT_EQ((10+50+80)/(20.0f+60+90), progress); 345 EXPECT_FLOAT_EQ((10+50+80)/(20.0f+60+90), progress);
346 EXPECT_EQ(3, download_count); 346 EXPECT_EQ(3, download_count);
347 } 347 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698