| Index: chrome/browser/download/download_status_updater_unittest.cc
|
| diff --git a/chrome/browser/download/download_status_updater_unittest.cc b/chrome/browser/download/download_status_updater_unittest.cc
|
| index 6cc7ec03cbf801bbe5a9008956d5b8f1eb3f7176..7a361243004fd7f53c29fba415d22d372a0b9e99 100644
|
| --- a/chrome/browser/download/download_status_updater_unittest.cc
|
| +++ b/chrome/browser/download/download_status_updater_unittest.cc
|
| @@ -13,7 +13,6 @@
|
| #include "testing/gmock/include/gmock/gmock.h"
|
| #include "testing/gtest/include/gtest/gtest.h"
|
|
|
| -
|
| using ::testing::AtLeast;
|
| using ::testing::Mock;
|
| using ::testing::Return;
|
| @@ -22,10 +21,26 @@ using ::testing::StrictMock;
|
| using ::testing::_;
|
|
|
| class TestDownloadStatusUpdater : public DownloadStatusUpdater {
|
| + public:
|
| + TestDownloadStatusUpdater() : notification_count_(0),
|
| + acceptable_notification_item_(NULL) {
|
| + }
|
| + void SetAcceptableNotificationItem(content::DownloadItem* item) {
|
| + acceptable_notification_item_ = item;
|
| + }
|
| + size_t NotificationCount() {
|
| + return notification_count_;
|
| + }
|
| protected:
|
| - virtual void UpdateAppIconDownloadProgress() OVERRIDE {
|
| - return;
|
| + virtual void UpdateAppIconDownloadProgress(
|
| + content::DownloadItem* download) OVERRIDE {
|
| + ++notification_count_;
|
| + if (acceptable_notification_item_)
|
| + EXPECT_EQ(acceptable_notification_item_, download);
|
| }
|
| + private:
|
| + size_t notification_count_;
|
| + content::DownloadItem* acceptable_notification_item_;
|
| };
|
|
|
| class DownloadStatusUpdaterTest : public testing::Test {
|
| @@ -120,13 +135,16 @@ class DownloadStatusUpdaterTest : public testing::Test {
|
| }
|
|
|
| // Set return values relevant to |DownloadStatusUpdater::GetProgress()|
|
| - // for the specified item
|
| + // for the specified item.
|
| void SetItemValues(int manager_index, int item_index,
|
| - int received_bytes, int total_bytes) {
|
| - EXPECT_CALL(*Item(manager_index, item_index), GetReceivedBytes())
|
| + int received_bytes, int total_bytes, bool notify) {
|
| + content::MockDownloadItem* item(Item(manager_index, item_index));
|
| + EXPECT_CALL(*item, GetReceivedBytes())
|
| .WillRepeatedly(Return(received_bytes));
|
| - EXPECT_CALL(*Item(manager_index, item_index), GetTotalBytes())
|
| + EXPECT_CALL(*item, GetTotalBytes())
|
| .WillRepeatedly(Return(total_bytes));
|
| + if (notify)
|
| + updater_->OnDownloadUpdated(item);
|
| }
|
|
|
| // Transition specified item to completed.
|
| @@ -157,7 +175,7 @@ class DownloadStatusUpdaterTest : public testing::Test {
|
|
|
| // Pointer so we can verify that destruction triggers appropriate
|
| // changes.
|
| - DownloadStatusUpdater *updater_;
|
| + TestDownloadStatusUpdater *updater_;
|
|
|
| // Thread so that the DownloadManager (which is a DeleteOnUIThread
|
| // object) can be deleted.
|
| @@ -198,9 +216,9 @@ TEST_F(DownloadStatusUpdaterTest, OneManagerManyItems) {
|
| LinkManager(0);
|
|
|
| // Prime items
|
| - SetItemValues(0, 0, 10, 20);
|
| - SetItemValues(0, 1, 50, 60);
|
| - SetItemValues(0, 2, 90, 90);
|
| + SetItemValues(0, 0, 10, 20, false);
|
| + SetItemValues(0, 1, 50, 60, false);
|
| + SetItemValues(0, 2, 90, 90, false);
|
|
|
| float progress = -1;
|
| int download_count = -1;
|
| @@ -218,13 +236,46 @@ TEST_F(DownloadStatusUpdaterTest, OneManagerManyItems) {
|
| // Add a new item to manager and confirm progress is updated properly.
|
| AddItems(0, 1, 1);
|
| updater_->ModelChanged(Manager(0));
|
| - SetItemValues(0, 3, 150, 200);
|
| + SetItemValues(0, 3, 150, 200, false);
|
|
|
| EXPECT_TRUE(updater_->GetProgress(&progress, &download_count));
|
| EXPECT_FLOAT_EQ((50+150)/(60+200.0f), progress);
|
| EXPECT_EQ(2, download_count);
|
| }
|
|
|
| +// Test to ensure that the download progress notification is called correctly.
|
| +TEST_F(DownloadStatusUpdaterTest, ProgressNotification) {
|
| + size_t expected_notifications = updater_->NotificationCount();
|
| + SetupManagers(1);
|
| + AddItems(0, 2, 2);
|
| + LinkManager(0);
|
| +
|
| + // Expect two notifications, one for each item; which item will come first
|
| + // isn't defined so it cannot be tested.
|
| + expected_notifications += 2;
|
| + ASSERT_EQ(expected_notifications, updater_->NotificationCount());
|
| +
|
| + // Make progress on the first item.
|
| + updater_->SetAcceptableNotificationItem(Item(0, 0));
|
| + SetItemValues(0, 0, 10, 20, true);
|
| + ++expected_notifications;
|
| + ASSERT_EQ(expected_notifications, updater_->NotificationCount());
|
| +
|
| + // Second item completes!
|
| + updater_->SetAcceptableNotificationItem(Item(0, 1));
|
| + CompleteItem(0, 1);
|
| + ++expected_notifications;
|
| + ASSERT_EQ(expected_notifications, updater_->NotificationCount());
|
| +
|
| + // First item completes.
|
| + updater_->SetAcceptableNotificationItem(Item(0, 0));
|
| + CompleteItem(0, 0);
|
| + ++expected_notifications;
|
| + ASSERT_EQ(expected_notifications, updater_->NotificationCount());
|
| +
|
| + updater_->SetAcceptableNotificationItem(NULL);
|
| +}
|
| +
|
| // Confirm we recognize the situation where we have an unknown size.
|
| TEST_F(DownloadStatusUpdaterTest, UnknownSize) {
|
| SetupManagers(1);
|
| @@ -232,8 +283,8 @@ TEST_F(DownloadStatusUpdaterTest, UnknownSize) {
|
| LinkManager(0);
|
|
|
| // Prime items
|
| - SetItemValues(0, 0, 10, 20);
|
| - SetItemValues(0, 1, 50, -1);
|
| + SetItemValues(0, 0, 10, 20, false);
|
| + SetItemValues(0, 1, 50, -1, false);
|
|
|
| float progress = -1;
|
| int download_count = -1;
|
| @@ -276,9 +327,9 @@ TEST_F(DownloadStatusUpdaterTest, ManyManagersMixedItems) {
|
| AddItems(1, 3, 1);
|
| LinkManager(1);
|
|
|
| - SetItemValues(0, 0, 10, 20);
|
| - SetItemValues(0, 1, 50, 60);
|
| - SetItemValues(1, 0, 80, 90);
|
| + SetItemValues(0, 0, 10, 20, false);
|
| + SetItemValues(0, 1, 50, 60, false);
|
| + SetItemValues(1, 0, 80, 90, false);
|
|
|
| float progress = -1;
|
| int download_count = -1;
|
|
|