media_galleries_dialog_cocoa_unittest.mm revision 1e9bf3e0803691d0a228da41fc608347b6db4340
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 "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/storage_monitor/storage_info.h" 9#include "chrome/browser/ui/cocoa/extensions/media_galleries_dialog_cocoa.h" 10#include "chrome/common/extensions/extension.h" 11#include "chrome/common/extensions/extension_test_util.h" 12#include "testing/gtest/include/gtest/gtest.h" 13 14using ::testing::_; 15using ::testing::NiceMock; 16using ::testing::Return; 17using ::testing::ReturnPointee; 18using ::testing::ReturnRef; 19 20MediaGalleryPrefInfo MakePrefInfoForTesting(MediaGalleryPrefId pref_id) { 21 MediaGalleryPrefInfo gallery; 22 gallery.pref_id = pref_id; 23 gallery.device_id = 24 StorageInfo::MakeDeviceId(StorageInfo::FIXED_MASS_STORAGE, 25 base::Int64ToString(pref_id)); 26 gallery.display_name = ASCIIToUTF16("name"); 27 return gallery; 28} 29 30class MediaGalleriesDialogTest : public testing::Test { 31 public: 32 MediaGalleriesDialogTest() {} 33 virtual ~MediaGalleriesDialogTest() {} 34 virtual void SetUp() OVERRIDE { 35 dummy_extension_ = extension_test_util::CreateExtensionWithID("dummy"); 36 } 37 virtual void TearDown() OVERRIDE { 38 dummy_extension_ = NULL; 39 } 40 41 const extensions::Extension& dummy_extension() const { 42 return *dummy_extension_; 43 } 44 45 private: 46 scoped_refptr<extensions::Extension> dummy_extension_; 47 48 DISALLOW_COPY_AND_ASSIGN(MediaGalleriesDialogTest); 49}; 50 51// Tests that checkboxes are initialized according to the contents of 52// permissions(). 53TEST_F(MediaGalleriesDialogTest, InitializeCheckboxes) { 54 NiceMock<MediaGalleriesDialogControllerMock> controller(dummy_extension()); 55 56 MediaGalleriesDialogController::GalleryPermissionsVector attached_permissions; 57 attached_permissions.push_back( 58 MediaGalleriesDialogController::GalleryPermission( 59 MakePrefInfoForTesting(1), true)); 60 attached_permissions.push_back( 61 MediaGalleriesDialogController::GalleryPermission( 62 MakePrefInfoForTesting(2), false)); 63 EXPECT_CALL(controller, AttachedPermissions()). 64 WillRepeatedly(Return(attached_permissions)); 65 66 MediaGalleriesDialogController::GalleryPermissionsVector 67 unattached_permissions; 68 EXPECT_CALL(controller, UnattachedPermissions()). 69 WillRepeatedly(Return(unattached_permissions)); 70 71 // Initializing checkboxes should not cause them to be toggled. 72 EXPECT_CALL(controller, DidToggleGalleryId(_, _)). 73 Times(0); 74 75 scoped_ptr<MediaGalleriesDialogCocoa> dialog( 76 static_cast<MediaGalleriesDialogCocoa*>( 77 MediaGalleriesDialog::Create(&controller))); 78 EXPECT_EQ(2U, [dialog->checkboxes_ count]); 79 80 NSButton* checkbox1 = [dialog->checkboxes_ objectAtIndex:0]; 81 EXPECT_EQ([checkbox1 state], NSOnState); 82 83 NSButton* checkbox2 = [dialog->checkboxes_ objectAtIndex:1]; 84 EXPECT_EQ([checkbox2 state], NSOffState); 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 scoped_ptr<MediaGalleriesDialogCocoa> dialog( 104 static_cast<MediaGalleriesDialogCocoa*>( 105 MediaGalleriesDialog::Create(&controller))); 106 EXPECT_EQ(1U, [dialog->checkboxes_ count]); 107 108 NSButton* checkbox = [dialog->checkboxes_ objectAtIndex:0]; 109 EXPECT_EQ([checkbox state], NSOnState); 110 111 EXPECT_CALL(controller, DidToggleGalleryId(1, false)); 112 [checkbox performClick:nil]; 113 EXPECT_EQ([checkbox state], NSOffState); 114 115 EXPECT_CALL(controller, DidToggleGalleryId(1, true)); 116 [checkbox performClick:nil]; 117 EXPECT_EQ([checkbox state], NSOnState); 118} 119 120// Tests that UpdateGalleries will add a new checkbox, but only if it refers to 121// a gallery that the dialog hasn't seen before. 122TEST_F(MediaGalleriesDialogTest, UpdateAdds) { 123 NiceMock<MediaGalleriesDialogControllerMock> controller(dummy_extension()); 124 125 MediaGalleriesDialogController::GalleryPermissionsVector attached_permissions; 126 EXPECT_CALL(controller, AttachedPermissions()). 127 WillRepeatedly(ReturnPointee(&attached_permissions)); 128 129 MediaGalleriesDialogController::GalleryPermissionsVector 130 unattached_permissions; 131 EXPECT_CALL(controller, UnattachedPermissions()). 132 WillRepeatedly(Return(unattached_permissions)); 133 134 scoped_ptr<MediaGalleriesDialogCocoa> dialog( 135 static_cast<MediaGalleriesDialogCocoa*>( 136 MediaGalleriesDialog::Create(&controller))); 137 138 EXPECT_EQ(0U, [dialog->checkboxes_ count]); 139 CGFloat old_container_height = NSHeight([dialog->checkbox_container_ frame]); 140 141 attached_permissions.push_back( 142 MediaGalleriesDialogController::GalleryPermission( 143 MakePrefInfoForTesting(1), true)); 144 dialog->UpdateGalleries(); 145 EXPECT_EQ(1U, [dialog->checkboxes_ count]); 146 147 // The checkbox container should be taller. 148 CGFloat new_container_height = NSHeight([dialog->checkbox_container_ frame]); 149 EXPECT_GT(new_container_height, old_container_height); 150 old_container_height = new_container_height; 151 152 attached_permissions.push_back( 153 MediaGalleriesDialogController::GalleryPermission( 154 MakePrefInfoForTesting(2), true)); 155 dialog->UpdateGalleries(); 156 EXPECT_EQ(2U, [dialog->checkboxes_ count]); 157 158 // The checkbox container should be taller. 159 new_container_height = NSHeight([dialog->checkbox_container_ frame]); 160 EXPECT_GT(new_container_height, old_container_height); 161 old_container_height = new_container_height; 162 163 attached_permissions[1].allowed = false; 164 dialog->UpdateGalleries(); 165 EXPECT_EQ(2U, [dialog->checkboxes_ count]); 166 167 // The checkbox container height should not have changed. 168 new_container_height = NSHeight([dialog->checkbox_container_ frame]); 169 EXPECT_EQ(new_container_height, old_container_height); 170} 171 172TEST_F(MediaGalleriesDialogTest, ForgetDeletes) { 173 NiceMock<MediaGalleriesDialogControllerMock> controller(dummy_extension()); 174 175 MediaGalleriesDialogController::GalleryPermissionsVector attached_permissions; 176 EXPECT_CALL(controller, AttachedPermissions()). 177 WillRepeatedly(ReturnPointee(&attached_permissions)); 178 179 MediaGalleriesDialogController::GalleryPermissionsVector 180 unattached_permissions; 181 EXPECT_CALL(controller, UnattachedPermissions()). 182 WillRepeatedly(Return(unattached_permissions)); 183 184 scoped_ptr<MediaGalleriesDialogCocoa> dialog( 185 static_cast<MediaGalleriesDialogCocoa*>( 186 MediaGalleriesDialog::Create(&controller))); 187 188 // Add a couple of galleries. 189 attached_permissions.push_back( 190 MediaGalleriesDialogController::GalleryPermission( 191 MakePrefInfoForTesting(1), true)); 192 dialog->UpdateGalleries(); 193 attached_permissions.push_back( 194 MediaGalleriesDialogController::GalleryPermission( 195 MakePrefInfoForTesting(2), true)); 196 dialog->UpdateGalleries(); 197 EXPECT_EQ(2U, [dialog->checkboxes_ count]); 198 CGFloat old_container_height = NSHeight([dialog->checkbox_container_ frame]); 199 200 // Remove a gallery. 201 attached_permissions.erase(attached_permissions.begin()); 202 dialog->UpdateGalleries(); 203 EXPECT_EQ(1U, [dialog->checkboxes_ count]); 204 205 // The checkbox container should be shorter. 206 CGFloat new_container_height = NSHeight([dialog->checkbox_container_ frame]); 207 EXPECT_LT(new_container_height, old_container_height); 208} 209