media_galleries_dialog_views_unittest.cc revision a1401311d1ab56c4ed0a474bd38c108f75cb0cd9
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 "extensions/common/extension.h" 12#include "extensions/common/test_util.h" 13#include "testing/gtest/include/gtest/gtest.h" 14#include "ui/views/controls/button/checkbox.h" 15 16using ::testing::_; 17using ::testing::NiceMock; 18using ::testing::Return; 19using ::testing::ReturnPointee; 20 21namespace { 22 23MediaGalleryPrefInfo 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 35class MediaGalleriesDialogTest : public testing::Test { 36 public: 37 MediaGalleriesDialogTest() {} 38 virtual ~MediaGalleriesDialogTest() {} 39 virtual void SetUp() OVERRIDE { 40 dummy_extension_ = extensions::test_util::CreateExtensionWithID("dummy"); 41 } 42 virtual void TearDown() OVERRIDE { 43 dummy_extension_ = NULL; 44 } 45 46 const extensions::Extension& dummy_extension() const { 47 return *dummy_extension_; 48 } 49 50 private: 51 scoped_refptr<extensions::Extension> dummy_extension_; 52 53 DISALLOW_COPY_AND_ASSIGN(MediaGalleriesDialogTest); 54}; 55 56// Tests that checkboxes are initialized according to the contents of 57// permissions in the registry. 58TEST_F(MediaGalleriesDialogTest, InitializeCheckboxes) { 59 // TODO(gbillock): Get rid of this mock; make something specialized. 60 NiceMock<MediaGalleriesDialogControllerMock> controller(dummy_extension()); 61 62 MediaGalleriesDialogController::GalleryPermissionsVector attached_permissions; 63 attached_permissions.push_back( 64 MediaGalleriesDialogController::GalleryPermission( 65 MakePrefInfoForTesting(1), true)); 66 attached_permissions.push_back( 67 MediaGalleriesDialogController::GalleryPermission( 68 MakePrefInfoForTesting(2), false)); 69 EXPECT_CALL(controller, AttachedPermissions()). 70 WillRepeatedly(Return(attached_permissions)); 71 72 MediaGalleriesDialogController::GalleryPermissionsVector 73 unattached_permissions; 74 EXPECT_CALL(controller, UnattachedPermissions()). 75 WillRepeatedly(Return(unattached_permissions)); 76 77 MediaGalleriesDialogViews dialog(&controller); 78 EXPECT_EQ(2U, dialog.checkbox_map_.size()); 79 80 MediaGalleryCheckboxView* checkbox_view1 = dialog.checkbox_map_[1]; 81 EXPECT_TRUE(checkbox_view1->checkbox()->checked()); 82 83 MediaGalleryCheckboxView* checkbox_view2 = dialog.checkbox_map_[2]; 84 EXPECT_FALSE(checkbox_view2->checkbox()->checked()); 85} 86 87// Tests that toggling checkboxes updates the controller. 88TEST_F(MediaGalleriesDialogTest, ToggleCheckboxes) { 89 NiceMock<MediaGalleriesDialogControllerMock> controller(dummy_extension()); 90 91 MediaGalleriesDialogController::GalleryPermissionsVector attached_permissions; 92 attached_permissions.push_back( 93 MediaGalleriesDialogController::GalleryPermission( 94 MakePrefInfoForTesting(1), true)); 95 EXPECT_CALL(controller, AttachedPermissions()). 96 WillRepeatedly(Return(attached_permissions)); 97 98 MediaGalleriesDialogController::GalleryPermissionsVector 99 unattached_permissions; 100 EXPECT_CALL(controller, UnattachedPermissions()). 101 WillRepeatedly(Return(unattached_permissions)); 102 103 MediaGalleriesDialogViews dialog(&controller); 104 EXPECT_EQ(1U, dialog.checkbox_map_.size()); 105 views::Checkbox* checkbox = dialog.checkbox_map_[1]->checkbox(); 106 EXPECT_TRUE(checkbox->checked()); 107 108 ui::KeyEvent dummy_event(ui::ET_KEY_PRESSED, ui::VKEY_A, ui::EF_NONE, false); 109 EXPECT_CALL(controller, DidToggleGalleryId(1, false)); 110 checkbox->SetChecked(false); 111 dialog.ButtonPressed(checkbox, dummy_event); 112 113 EXPECT_CALL(controller, DidToggleGalleryId(1, true)); 114 checkbox->SetChecked(true); 115 dialog.ButtonPressed(checkbox, dummy_event); 116} 117 118// Tests that UpdateGallery will add a new checkbox, but only if it refers to 119// a gallery that the dialog hasn't seen before. 120TEST_F(MediaGalleriesDialogTest, UpdateAdds) { 121 NiceMock<MediaGalleriesDialogControllerMock> controller(dummy_extension()); 122 123 MediaGalleriesDialogController::GalleryPermissionsVector attached_permissions; 124 EXPECT_CALL(controller, AttachedPermissions()). 125 WillRepeatedly(ReturnPointee(&attached_permissions)); 126 127 MediaGalleriesDialogController::GalleryPermissionsVector 128 unattached_permissions; 129 EXPECT_CALL(controller, UnattachedPermissions()). 130 WillRepeatedly(Return(unattached_permissions)); 131 132 MediaGalleriesDialogViews dialog(&controller); 133 134 EXPECT_TRUE(dialog.checkbox_map_.empty()); 135 136 MediaGalleryPrefInfo gallery1 = MakePrefInfoForTesting(1); 137 attached_permissions.push_back( 138 MediaGalleriesDialogController::GalleryPermission(gallery1, true)); 139 dialog.UpdateGalleries(); 140 EXPECT_EQ(1U, dialog.checkbox_map_.size()); 141 142 MediaGalleryPrefInfo gallery2 = MakePrefInfoForTesting(2); 143 attached_permissions.push_back( 144 MediaGalleriesDialogController::GalleryPermission(gallery2, true)); 145 dialog.UpdateGalleries(); 146 EXPECT_EQ(2U, dialog.checkbox_map_.size()); 147 148 attached_permissions.push_back( 149 MediaGalleriesDialogController::GalleryPermission(gallery2, false)); 150 dialog.UpdateGalleries(); 151 EXPECT_EQ(2U, dialog.checkbox_map_.size()); 152} 153 154TEST_F(MediaGalleriesDialogTest, ForgetDeletes) { 155 NiceMock<MediaGalleriesDialogControllerMock> controller(dummy_extension()); 156 157 MediaGalleriesDialogController::GalleryPermissionsVector attached_permissions; 158 EXPECT_CALL(controller, AttachedPermissions()). 159 WillRepeatedly(ReturnPointee(&attached_permissions)); 160 161 MediaGalleriesDialogController::GalleryPermissionsVector 162 unattached_permissions; 163 EXPECT_CALL(controller, UnattachedPermissions()). 164 WillRepeatedly(Return(unattached_permissions)); 165 166 MediaGalleriesDialogViews dialog(&controller); 167 168 EXPECT_TRUE(dialog.checkbox_map_.empty()); 169 170 MediaGalleryPrefInfo gallery1 = MakePrefInfoForTesting(1); 171 attached_permissions.push_back( 172 MediaGalleriesDialogController::GalleryPermission(gallery1, true)); 173 dialog.UpdateGalleries(); 174 EXPECT_EQ(1U, dialog.checkbox_map_.size()); 175 176 MediaGalleryPrefInfo gallery2 = MakePrefInfoForTesting(2); 177 attached_permissions.push_back( 178 MediaGalleriesDialogController::GalleryPermission(gallery2, true)); 179 dialog.UpdateGalleries(); 180 EXPECT_EQ(2U, dialog.checkbox_map_.size()); 181 182 attached_permissions.pop_back(); 183 dialog.UpdateGalleries(); 184 EXPECT_EQ(1U, dialog.checkbox_map_.size()); 185} 186