Home | History | Annotate | Download | only in download
      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