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

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

Issue 15701007: BrowserContext should simply own DownloadManager (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Rebased version of patch for win_rel 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 content::DownloadItem::DownloadState state = 115 content::DownloadItem::DownloadState state =
116 i < in_progress_count ? content::DownloadItem::IN_PROGRESS 116 i < in_progress_count ? content::DownloadItem::IN_PROGRESS
117 : content::DownloadItem::CANCELLED; 117 : content::DownloadItem::CANCELLED;
118 EXPECT_CALL(*item, GetState()).WillRepeatedly(Return(state)); 118 EXPECT_CALL(*item, GetState()).WillRepeatedly(Return(state));
119 EXPECT_CALL(*item, AddObserver(_)) 119 EXPECT_CALL(*item, AddObserver(_))
120 .WillOnce(Return()); 120 .WillOnce(Return());
121 manager_items_[manager_index].push_back(item); 121 manager_items_[manager_index].push_back(item);
122 } 122 }
123 EXPECT_CALL(*manager, GetAllDownloads(_)) 123 EXPECT_CALL(*manager, GetAllDownloads(_))
124 .WillRepeatedly(SetArgPointee<0>(manager_items_[manager_index])); 124 .WillRepeatedly(SetArgPointee<0>(manager_items_[manager_index]));
125 } 125 }
126 126
127 // Return the specified manager. 127 // Return the specified manager.
128 content::MockDownloadManager* Manager(int manager_index) { 128 content::MockDownloadManager* Manager(int manager_index) {
129 DCHECK_GT(managers_.size(), static_cast<size_t>(manager_index)); 129 DCHECK_GT(managers_.size(), static_cast<size_t>(manager_index));
130 return managers_[manager_index].get(); 130 return managers_[manager_index];
131 } 131 }
132 132
133 // Return the specified item. 133 // Return the specified item.
134 content::MockDownloadItem* Item(int manager_index, int item_index) { 134 content::MockDownloadItem* Item(int manager_index, int item_index) {
135 DCHECK_GT(manager_items_.size(), static_cast<size_t>(manager_index)); 135 DCHECK_GT(manager_items_.size(), static_cast<size_t>(manager_index));
136 DCHECK_GT(manager_items_[manager_index].size(), 136 DCHECK_GT(manager_items_[manager_index].size(),
137 static_cast<size_t>(item_index)); 137 static_cast<size_t>(item_index));
138 // All DownloadItems in manager_items_ are MockDownloadItems. 138 // All DownloadItems in manager_items_ are MockDownloadItems.
139 return static_cast<content::MockDownloadItem*>( 139 return static_cast<content::MockDownloadItem*>(
140 manager_items_[manager_index][item_index]); 140 manager_items_[manager_index][item_index]);
(...skipping 15 matching lines...) Expand all
156 // Transition specified item to completed. 156 // Transition specified item to completed.
157 void CompleteItem(int manager_index, int item_index) { 157 void CompleteItem(int manager_index, int item_index) {
158 content::MockDownloadItem* item(Item(manager_index, item_index)); 158 content::MockDownloadItem* item(Item(manager_index, item_index));
159 EXPECT_CALL(*item, GetState()) 159 EXPECT_CALL(*item, GetState())
160 .WillRepeatedly(Return(content::DownloadItem::COMPLETE)); 160 .WillRepeatedly(Return(content::DownloadItem::COMPLETE));
161 updater_->OnDownloadUpdated(managers_[manager_index], item); 161 updater_->OnDownloadUpdated(managers_[manager_index], item);
162 } 162 }
163 163
164 // Verify and clear all mocks expectations. 164 // Verify and clear all mocks expectations.
165 void VerifyAndClearExpectations() { 165 void VerifyAndClearExpectations() {
166 for (std::vector<scoped_refptr<content::MockDownloadManager> >::iterator it 166 for (ScopedVector<content::MockDownloadManager>::iterator it
167 = managers_.begin(); it != managers_.end(); ++it) 167 = managers_.begin(); it != managers_.end(); ++it)
168 Mock::VerifyAndClearExpectations(it->get()); 168 Mock::VerifyAndClearExpectations(*it);
169 for (std::vector<Items>::iterator it = manager_items_.begin(); 169 for (std::vector<Items>::iterator it = manager_items_.begin();
170 it != manager_items_.end(); ++it) 170 it != manager_items_.end(); ++it)
171 for (Items::iterator sit = it->begin(); sit != it->end(); ++sit) 171 for (Items::iterator sit = it->begin(); sit != it->end(); ++sit)
172 Mock::VerifyAndClearExpectations(*sit); 172 Mock::VerifyAndClearExpectations(*sit);
173 } 173 }
174 174
175 std::vector<scoped_refptr<content::MockDownloadManager> > managers_; 175 ScopedVector<content::MockDownloadManager> managers_;
176 // DownloadItem so that it can be assigned to the result of SearchDownloads. 176 // DownloadItem so that it can be assigned to the result of SearchDownloads.
177 typedef std::vector<content::DownloadItem*> Items; 177 typedef std::vector<content::DownloadItem*> Items;
178 std::vector<Items> manager_items_; 178 std::vector<Items> manager_items_;
179 int manager_observer_index_; 179 int manager_observer_index_;
180 180
181 std::vector<content::DownloadManager::Observer*> manager_observers_; 181 std::vector<content::DownloadManager::Observer*> manager_observers_;
182 182
183 // Pointer so we can verify that destruction triggers appropriate 183 // Pointer so we can verify that destruction triggers appropriate
184 // changes. 184 // changes.
185 TestDownloadStatusUpdater *updater_; 185 TestDownloadStatusUpdater *updater_;
(...skipping 17 matching lines...) Expand all
203 203
204 // Test updater with null manager. 204 // Test updater with null manager.
205 TEST_F(DownloadStatusUpdaterTest, OneManagerNoItems) { 205 TEST_F(DownloadStatusUpdaterTest, OneManagerNoItems) {
206 SetupManagers(1); 206 SetupManagers(1);
207 AddItems(0, 0, 0); 207 AddItems(0, 0, 0);
208 LinkManager(0); 208 LinkManager(0);
209 VerifyAndClearExpectations(); 209 VerifyAndClearExpectations();
210 210
211 float progress = -1; 211 float progress = -1;
212 int download_count = -1; 212 int download_count = -1;
213 EXPECT_CALL(*managers_[0].get(), GetAllDownloads(_)) 213 EXPECT_CALL(*managers_[0], GetAllDownloads(_))
214 .WillRepeatedly(SetArgPointee<0>(manager_items_[0])); 214 .WillRepeatedly(SetArgPointee<0>(manager_items_[0]));
215 EXPECT_TRUE(updater_->GetProgress(&progress, &download_count)); 215 EXPECT_TRUE(updater_->GetProgress(&progress, &download_count));
216 EXPECT_FLOAT_EQ(0.0f, progress); 216 EXPECT_FLOAT_EQ(0.0f, progress);
217 EXPECT_EQ(0, download_count); 217 EXPECT_EQ(0, download_count);
218 } 218 }
219 219
220 // Test updater with non-null manager, including transition an item to 220 // Test updater with non-null manager, including transition an item to
221 // |content::DownloadItem::COMPLETE| and adding a new item. 221 // |content::DownloadItem::COMPLETE| and adding a new item.
222 TEST_F(DownloadStatusUpdaterTest, OneManagerManyItems) { 222 TEST_F(DownloadStatusUpdaterTest, OneManagerManyItems) {
223 SetupManagers(1); 223 SetupManagers(1);
(...skipping 116 matching lines...) Expand 10 before | Expand all | Expand 10 after
340 SetItemValues(0, 0, 10, 20, false); 340 SetItemValues(0, 0, 10, 20, false);
341 SetItemValues(0, 1, 50, 60, false); 341 SetItemValues(0, 1, 50, 60, false);
342 SetItemValues(1, 0, 80, 90, false); 342 SetItemValues(1, 0, 80, 90, false);
343 343
344 float progress = -1; 344 float progress = -1;
345 int download_count = -1; 345 int download_count = -1;
346 EXPECT_TRUE(updater_->GetProgress(&progress, &download_count)); 346 EXPECT_TRUE(updater_->GetProgress(&progress, &download_count));
347 EXPECT_FLOAT_EQ((10+50+80)/(20.0f+60+90), progress); 347 EXPECT_FLOAT_EQ((10+50+80)/(20.0f+60+90), progress);
348 EXPECT_EQ(3, download_count); 348 EXPECT_EQ(3, download_count);
349 } 349 }
OLDNEW
« no previous file with comments | « chrome/browser/download/download_shelf_unittest.cc ('k') | chrome/browser/download/download_ui_controller_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698