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 3 // found in the LICENSE file. 4 5 #include "chrome/browser/download/all_download_item_notifier.h" 6 7 #include "content/public/test/mock_download_item.h" 8 #include "content/public/test/mock_download_manager.h" 9 #include "testing/gmock/include/gmock/gmock.h" 10 #include "testing/gtest/include/gtest/gtest.h" 11 12 using testing::NiceMock; 13 using testing::SetArgPointee; 14 using testing::_; 15 16 namespace { 17 18 class MockNotifierObserver : public AllDownloadItemNotifier::Observer { 19 public: 20 MockNotifierObserver() { 21 } 22 virtual ~MockNotifierObserver() {} 23 24 MOCK_METHOD2(OnDownloadCreated, void( 25 content::DownloadManager* manager, content::DownloadItem* item)); 26 MOCK_METHOD2(OnDownloadUpdated, void( 27 content::DownloadManager* manager, content::DownloadItem* item)); 28 MOCK_METHOD2(OnDownloadOpened, void( 29 content::DownloadManager* manager, content::DownloadItem* item)); 30 MOCK_METHOD2(OnDownloadRemoved, void( 31 content::DownloadManager* manager, content::DownloadItem* item)); 32 33 private: 34 DISALLOW_COPY_AND_ASSIGN(MockNotifierObserver); 35 }; 36 37 class AllDownloadItemNotifierTest : public testing::Test { 38 public: 39 AllDownloadItemNotifierTest() 40 : download_manager_(new content::MockDownloadManager) { 41 } 42 43 virtual ~AllDownloadItemNotifierTest() {} 44 45 content::MockDownloadManager& manager() { 46 return *download_manager_.get(); 47 } 48 49 content::MockDownloadItem& item() { return item_; } 50 51 content::DownloadItem::Observer* NotifierAsItemObserver() const { 52 return notifier_.get(); 53 } 54 55 content::DownloadManager::Observer* NotifierAsManagerObserver() const { 56 return notifier_.get(); 57 } 58 59 MockNotifierObserver& observer() { return observer_; } 60 61 void SetNotifier() { 62 EXPECT_CALL(*download_manager_.get(), AddObserver(_)); 63 notifier_.reset(new AllDownloadItemNotifier( 64 download_manager_.get(), &observer_)); 65 } 66 67 void ClearNotifier() { 68 notifier_.reset(); 69 } 70 71 private: 72 NiceMock<content::MockDownloadItem> item_; 73 scoped_ptr<content::MockDownloadManager> download_manager_; 74 scoped_ptr<AllDownloadItemNotifier> notifier_; 75 NiceMock<MockNotifierObserver> observer_; 76 77 DISALLOW_COPY_AND_ASSIGN(AllDownloadItemNotifierTest); 78 }; 79 80 } // namespace 81 82 TEST_F(AllDownloadItemNotifierTest, 83 AllDownloadItemNotifierTest_0) { 84 content::DownloadManager::DownloadVector items; 85 items.push_back(&item()); 86 EXPECT_CALL(manager(), GetAllDownloads(_)) 87 .WillOnce(SetArgPointee<0>(items)); 88 EXPECT_CALL(item(), AddObserver(_)); 89 SetNotifier(); 90 91 EXPECT_CALL(observer(), OnDownloadUpdated(&manager(), &item())); 92 NotifierAsItemObserver()->OnDownloadUpdated(&item()); 93 94 EXPECT_CALL(observer(), OnDownloadOpened(&manager(), &item())); 95 NotifierAsItemObserver()->OnDownloadOpened(&item()); 96 97 EXPECT_CALL(observer(), OnDownloadRemoved(&manager(), &item())); 98 NotifierAsItemObserver()->OnDownloadRemoved(&item()); 99 100 EXPECT_CALL(item(), RemoveObserver(NotifierAsItemObserver())); 101 EXPECT_CALL(manager(), RemoveObserver(NotifierAsManagerObserver())); 102 ClearNotifier(); 103 } 104 105 TEST_F(AllDownloadItemNotifierTest, 106 AllDownloadItemNotifierTest_1) { 107 EXPECT_CALL(manager(), GetAllDownloads(_)); 108 SetNotifier(); 109 110 EXPECT_CALL(item(), AddObserver(NotifierAsItemObserver())); 111 EXPECT_CALL(observer(), OnDownloadCreated(&manager(), &item())); 112 NotifierAsManagerObserver()->OnDownloadCreated( 113 &manager(), &item()); 114 115 EXPECT_CALL(manager(), RemoveObserver(NotifierAsManagerObserver())); 116 NotifierAsManagerObserver()->ManagerGoingDown(&manager()); 117 118 EXPECT_CALL(item(), RemoveObserver(NotifierAsItemObserver())); 119 NotifierAsItemObserver()->OnDownloadDestroyed(&item()); 120 121 ClearNotifier(); 122 } 123