Home | History | Annotate | Download | only in extensions
      1 // Copyright 2014 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 "base/strings/string_number_conversions.h"
      6 #include "base/strings/utf_string_conversions.h"
      7 #include "chrome/browser/media_galleries/media_galleries_dialog_controller_mock.h"
      8 #include "chrome/browser/ui/views/extensions/media_galleries_dialog_views.h"
      9 #include "chrome/browser/ui/views/extensions/media_gallery_checkbox_view.h"
     10 #include "components/storage_monitor/storage_info.h"
     11 #include "testing/gtest/include/gtest/gtest.h"
     12 #include "ui/views/controls/button/checkbox.h"
     13 
     14 using ::testing::_;
     15 using ::testing::AnyNumber;
     16 using ::testing::Mock;
     17 using ::testing::NiceMock;
     18 using ::testing::Return;
     19 using ::testing::ReturnPointee;
     20 
     21 namespace {
     22 
     23 MediaGalleryPrefInfo MakePrefInfoForTesting(MediaGalleryPrefId id) {
     24   MediaGalleryPrefInfo gallery;
     25   gallery.pref_id = id;
     26   gallery.device_id = storage_monitor::StorageInfo::MakeDeviceId(
     27       storage_monitor::StorageInfo::FIXED_MASS_STORAGE,
     28       base::Int64ToString(id));
     29   gallery.display_name = base::ASCIIToUTF16("Display Name");
     30   return gallery;
     31 }
     32 
     33 }  // namespace
     34 
     35 class MediaGalleriesDialogTest : public testing::Test {
     36  public:
     37   MediaGalleriesDialogTest() {}
     38   virtual ~MediaGalleriesDialogTest() {}
     39   virtual void SetUp() OVERRIDE {
     40     std::vector<base::string16> headers;
     41     headers.push_back(base::string16());
     42     headers.push_back(base::ASCIIToUTF16("header2"));
     43     ON_CALL(controller_, GetSectionHeaders()).
     44         WillByDefault(Return(headers));
     45     EXPECT_CALL(controller_, GetSectionEntries(_)).
     46         Times(AnyNumber());
     47   }
     48 
     49   virtual void TearDown() OVERRIDE {
     50     Mock::VerifyAndClearExpectations(&controller_);
     51   }
     52 
     53   NiceMock<MediaGalleriesDialogControllerMock>* controller() {
     54     return &controller_;
     55   }
     56 
     57  private:
     58   // TODO(gbillock): Get rid of this mock; make something specialized.
     59   NiceMock<MediaGalleriesDialogControllerMock> controller_;
     60 
     61   DISALLOW_COPY_AND_ASSIGN(MediaGalleriesDialogTest);
     62 };
     63 
     64 // Tests that checkboxes are initialized according to the contents of
     65 // permissions in the registry.
     66 TEST_F(MediaGalleriesDialogTest, InitializeCheckboxes) {
     67   MediaGalleriesDialogController::Entries attached_permissions;
     68   attached_permissions.push_back(
     69       MediaGalleriesDialogController::Entry(MakePrefInfoForTesting(1), true));
     70   attached_permissions.push_back(
     71       MediaGalleriesDialogController::Entry(MakePrefInfoForTesting(2), false));
     72   EXPECT_CALL(*controller(), GetSectionEntries(0)).
     73       WillRepeatedly(Return(attached_permissions));
     74 
     75   MediaGalleriesDialogViews dialog(controller());
     76   EXPECT_EQ(2U, dialog.checkbox_map_.size());
     77 
     78   MediaGalleryCheckboxView* checkbox_view1 = dialog.checkbox_map_[1];
     79   EXPECT_TRUE(checkbox_view1->checkbox()->checked());
     80 
     81   MediaGalleryCheckboxView* checkbox_view2 = dialog.checkbox_map_[2];
     82   EXPECT_FALSE(checkbox_view2->checkbox()->checked());
     83 }
     84 
     85 // Tests that toggling checkboxes updates the controller.
     86 TEST_F(MediaGalleriesDialogTest, ToggleCheckboxes) {
     87   MediaGalleriesDialogController::Entries attached_permissions;
     88   attached_permissions.push_back(
     89       MediaGalleriesDialogController::Entry(MakePrefInfoForTesting(1), true));
     90   EXPECT_CALL(*controller(), GetSectionEntries(0)).
     91       WillRepeatedly(Return(attached_permissions));
     92 
     93   MediaGalleriesDialogViews dialog(controller());
     94   EXPECT_EQ(1U, dialog.checkbox_map_.size());
     95   views::Checkbox* checkbox = dialog.checkbox_map_[1]->checkbox();
     96   EXPECT_TRUE(checkbox->checked());
     97 
     98   ui::KeyEvent dummy_event(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE);
     99   EXPECT_CALL(*controller(), DidToggleEntry(1, false));
    100   checkbox->SetChecked(false);
    101   dialog.ButtonPressed(checkbox, dummy_event);
    102 
    103   EXPECT_CALL(*controller(), DidToggleEntry(1, true));
    104   checkbox->SetChecked(true);
    105   dialog.ButtonPressed(checkbox, dummy_event);
    106 }
    107 
    108 // Tests that UpdateGallery will add a new checkbox, but only if it refers to
    109 // a gallery that the dialog hasn't seen before.
    110 TEST_F(MediaGalleriesDialogTest, UpdateAdds) {
    111   MediaGalleriesDialogViews dialog(controller());
    112 
    113   MediaGalleriesDialogController::Entries attached_permissions;
    114   EXPECT_CALL(*controller(), GetSectionEntries(0)).
    115       WillRepeatedly(ReturnPointee(&attached_permissions));
    116 
    117   EXPECT_TRUE(dialog.checkbox_map_.empty());
    118 
    119   MediaGalleryPrefInfo gallery1 = MakePrefInfoForTesting(1);
    120   attached_permissions.push_back(
    121       MediaGalleriesDialogController::Entry(gallery1, true));
    122   dialog.UpdateGalleries();
    123   EXPECT_EQ(1U, dialog.checkbox_map_.size());
    124 
    125   MediaGalleryPrefInfo gallery2 = MakePrefInfoForTesting(2);
    126   attached_permissions.push_back(
    127       MediaGalleriesDialogController::Entry(gallery2, true));
    128   dialog.UpdateGalleries();
    129   EXPECT_EQ(2U, dialog.checkbox_map_.size());
    130 
    131   attached_permissions.push_back(
    132       MediaGalleriesDialogController::Entry(gallery2, false));
    133   dialog.UpdateGalleries();
    134   EXPECT_EQ(2U, dialog.checkbox_map_.size());
    135 }
    136 
    137 TEST_F(MediaGalleriesDialogTest, ForgetDeletes) {
    138   MediaGalleriesDialogViews dialog(controller());
    139 
    140   MediaGalleriesDialogController::Entries attached_permissions;
    141   EXPECT_CALL(*controller(), GetSectionEntries(0)).
    142       WillRepeatedly(ReturnPointee(&attached_permissions));
    143 
    144   EXPECT_TRUE(dialog.checkbox_map_.empty());
    145 
    146   MediaGalleryPrefInfo gallery1 = MakePrefInfoForTesting(1);
    147   attached_permissions.push_back(
    148       MediaGalleriesDialogController::Entry(gallery1, true));
    149   dialog.UpdateGalleries();
    150   EXPECT_EQ(1U, dialog.checkbox_map_.size());
    151 
    152   MediaGalleryPrefInfo gallery2 = MakePrefInfoForTesting(2);
    153   attached_permissions.push_back(
    154       MediaGalleriesDialogController::Entry(gallery2, true));
    155   dialog.UpdateGalleries();
    156   EXPECT_EQ(2U, dialog.checkbox_map_.size());
    157 
    158   attached_permissions.pop_back();
    159   dialog.UpdateGalleries();
    160   EXPECT_EQ(1U, dialog.checkbox_map_.size());
    161 }
    162