OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/strings/string_number_conversions.h" | 5 #include "base/strings/string_number_conversions.h" |
6 #include "base/strings/utf_string_conversions.h" | 6 #include "base/strings/utf_string_conversions.h" |
7 #include "chrome/browser/media_galleries/media_galleries_dialog_controller_mock.
h" | 7 #include "chrome/browser/media_galleries/media_galleries_dialog_controller_mock.
h" |
8 #include "chrome/browser/ui/cocoa/extensions/media_galleries_dialog_cocoa.h" | 8 #include "chrome/browser/ui/cocoa/extensions/media_galleries_dialog_cocoa.h" |
9 #include "components/storage_monitor/storage_info.h" | 9 #include "components/storage_monitor/storage_info.h" |
10 #include "extensions/common/extension.h" | 10 #include "extensions/common/extension.h" |
11 #include "extensions/common/test_util.h" | 11 #include "extensions/common/test_util.h" |
12 #include "testing/gtest/include/gtest/gtest.h" | 12 #include "testing/gtest/include/gtest/gtest.h" |
13 | 13 |
14 using ::testing::_; | 14 using ::testing::_; |
| 15 using ::testing::AnyNumber; |
| 16 using ::testing::Mock; |
15 using ::testing::NiceMock; | 17 using ::testing::NiceMock; |
16 using ::testing::Return; | 18 using ::testing::Return; |
17 using ::testing::ReturnPointee; | 19 using ::testing::ReturnPointee; |
18 using ::testing::ReturnRef; | 20 using ::testing::ReturnRef; |
19 | 21 |
20 @interface MediaGalleryListEntry (testing) | 22 @interface MediaGalleryListEntry (testing) |
21 - (NSInteger)state; | 23 - (NSInteger)state; |
22 - (void)performClick:(id)sender; | 24 - (void)performClick:(id)sender; |
23 @end | 25 @end |
24 | 26 |
(...skipping 17 matching lines...) Expand all Loading... |
42 storage_monitor::StorageInfo::FIXED_MASS_STORAGE, | 44 storage_monitor::StorageInfo::FIXED_MASS_STORAGE, |
43 base::Int64ToString(pref_id)); | 45 base::Int64ToString(pref_id)); |
44 gallery.display_name = base::ASCIIToUTF16("name"); | 46 gallery.display_name = base::ASCIIToUTF16("name"); |
45 return gallery; | 47 return gallery; |
46 } | 48 } |
47 | 49 |
48 class MediaGalleriesDialogTest : public testing::Test { | 50 class MediaGalleriesDialogTest : public testing::Test { |
49 public: | 51 public: |
50 MediaGalleriesDialogTest() {} | 52 MediaGalleriesDialogTest() {} |
51 virtual ~MediaGalleriesDialogTest() {} | 53 virtual ~MediaGalleriesDialogTest() {} |
| 54 |
52 virtual void SetUp() OVERRIDE { | 55 virtual void SetUp() OVERRIDE { |
53 dummy_extension_ = extensions::test_util::CreateExtensionWithID("dummy"); | 56 std::vector<base::string16> headers; |
54 } | 57 headers.push_back(base::string16()); |
55 virtual void TearDown() OVERRIDE { | 58 headers.push_back(base::ASCIIToUTF16("header2")); |
56 dummy_extension_ = NULL; | 59 ON_CALL(controller_, GetSectionHeaders()). |
| 60 WillByDefault(Return(headers)); |
| 61 EXPECT_CALL(controller_, GetSectionEntries(_)). |
| 62 Times(AnyNumber()); |
57 } | 63 } |
58 | 64 |
59 const extensions::Extension& dummy_extension() const { | 65 virtual void TearDown() OVERRIDE { |
60 return *dummy_extension_; | 66 Mock::VerifyAndClearExpectations(&controller_); |
| 67 dialog_.reset(); |
| 68 } |
| 69 |
| 70 NiceMock<MediaGalleriesDialogControllerMock>* controller() { |
| 71 return &controller_; |
| 72 } |
| 73 |
| 74 MediaGalleriesDialogCocoa* GetOrCreateDialog() { |
| 75 if (!dialog_.get()) { |
| 76 dialog_.reset(static_cast<MediaGalleriesDialogCocoa*>( |
| 77 MediaGalleriesDialog::Create(&controller_))); |
| 78 } |
| 79 return dialog_.get(); |
61 } | 80 } |
62 | 81 |
63 private: | 82 private: |
64 scoped_refptr<extensions::Extension> dummy_extension_; | 83 NiceMock<MediaGalleriesDialogControllerMock> controller_; |
| 84 |
| 85 scoped_ptr<MediaGalleriesDialogCocoa> dialog_; |
65 | 86 |
66 DISALLOW_COPY_AND_ASSIGN(MediaGalleriesDialogTest); | 87 DISALLOW_COPY_AND_ASSIGN(MediaGalleriesDialogTest); |
67 }; | 88 }; |
68 | 89 |
69 // Tests that checkboxes are initialized according to the contents of | 90 // Tests that checkboxes are initialized according to the contents of |
70 // permissions(). | 91 // permissions(). |
71 TEST_F(MediaGalleriesDialogTest, InitializeCheckboxes) { | 92 TEST_F(MediaGalleriesDialogTest, InitializeCheckboxes) { |
72 NiceMock<MediaGalleriesDialogControllerMock> controller(dummy_extension()); | 93 MediaGalleriesDialogController::Entries attached_permissions; |
73 | |
74 MediaGalleriesDialogController::GalleryPermissionsVector attached_permissions; | |
75 attached_permissions.push_back( | 94 attached_permissions.push_back( |
76 MediaGalleriesDialogController::GalleryPermission( | 95 MediaGalleriesDialogController::Entry(MakePrefInfoForTesting(1), true)); |
77 1, MakePrefInfoForTesting(10), true)); | |
78 attached_permissions.push_back( | 96 attached_permissions.push_back( |
79 MediaGalleriesDialogController::GalleryPermission( | 97 MediaGalleriesDialogController::Entry(MakePrefInfoForTesting(2), false)); |
80 2, MakePrefInfoForTesting(20), false)); | 98 EXPECT_CALL(*controller(), GetSectionEntries(0)). |
81 EXPECT_CALL(controller, AttachedPermissions()). | |
82 WillRepeatedly(Return(attached_permissions)); | 99 WillRepeatedly(Return(attached_permissions)); |
83 | 100 |
84 MediaGalleriesDialogController::GalleryPermissionsVector | |
85 unattached_permissions; | |
86 EXPECT_CALL(controller, UnattachedPermissions()). | |
87 WillRepeatedly(Return(unattached_permissions)); | |
88 | |
89 // Initializing checkboxes should not cause them to be toggled. | 101 // Initializing checkboxes should not cause them to be toggled. |
90 EXPECT_CALL(controller, DidToggleGallery(_, _)). | 102 EXPECT_CALL(*controller(), DidToggleEntry(_, _)). |
91 Times(0); | 103 Times(0); |
92 | 104 |
93 scoped_ptr<MediaGalleriesDialogCocoa> dialog( | 105 EXPECT_EQ(2U, [[GetOrCreateDialog()->checkbox_container_ subviews] count]); |
94 static_cast<MediaGalleriesDialogCocoa*>( | |
95 MediaGalleriesDialog::Create(&controller))); | |
96 EXPECT_EQ(2U, [[dialog->checkbox_container_ subviews] count]); | |
97 | 106 |
98 NSButton* checkbox1 = | 107 NSButton* checkbox1 = |
99 [[dialog->checkbox_container_ subviews] objectAtIndex:0]; | 108 [[GetOrCreateDialog()->checkbox_container_ subviews] objectAtIndex:0]; |
100 EXPECT_EQ([checkbox1 state], NSOnState); | 109 EXPECT_EQ([checkbox1 state], NSOnState); |
101 | 110 |
102 NSButton* checkbox2 = | 111 NSButton* checkbox2 = |
103 [[dialog->checkbox_container_ subviews] objectAtIndex:1]; | 112 [[GetOrCreateDialog()->checkbox_container_ subviews] objectAtIndex:1]; |
104 EXPECT_EQ([checkbox2 state], NSOffState); | 113 EXPECT_EQ([checkbox2 state], NSOffState); |
105 } | 114 } |
106 | 115 |
107 // Tests that toggling checkboxes updates the controller. | 116 // Tests that toggling checkboxes updates the controller. |
108 TEST_F(MediaGalleriesDialogTest, ToggleCheckboxes) { | 117 TEST_F(MediaGalleriesDialogTest, ToggleCheckboxes) { |
109 NiceMock<MediaGalleriesDialogControllerMock> controller(dummy_extension()); | 118 MediaGalleriesDialogController::Entries attached_permissions; |
110 | |
111 MediaGalleriesDialogController::GalleryPermissionsVector attached_permissions; | |
112 attached_permissions.push_back( | 119 attached_permissions.push_back( |
113 MediaGalleriesDialogController::GalleryPermission( | 120 MediaGalleriesDialogController::Entry(MakePrefInfoForTesting(1), true)); |
114 1, MakePrefInfoForTesting(10), true)); | 121 EXPECT_CALL(*controller(), GetSectionEntries(0)). |
115 EXPECT_CALL(controller, AttachedPermissions()). | |
116 WillRepeatedly(Return(attached_permissions)); | 122 WillRepeatedly(Return(attached_permissions)); |
117 | 123 |
118 MediaGalleriesDialogController::GalleryPermissionsVector | 124 EXPECT_EQ(1U, [[GetOrCreateDialog()->checkbox_container_ subviews] count]); |
119 unattached_permissions; | |
120 EXPECT_CALL(controller, UnattachedPermissions()). | |
121 WillRepeatedly(Return(unattached_permissions)); | |
122 | 125 |
123 scoped_ptr<MediaGalleriesDialogCocoa> dialog( | 126 NSButton* checkbox = |
124 static_cast<MediaGalleriesDialogCocoa*>( | 127 [[GetOrCreateDialog()->checkbox_container_ subviews] objectAtIndex:0]; |
125 MediaGalleriesDialog::Create(&controller))); | |
126 EXPECT_EQ(1U, [[dialog->checkbox_container_ subviews] count]); | |
127 | |
128 NSButton* checkbox = [[dialog->checkbox_container_ subviews] objectAtIndex:0]; | |
129 EXPECT_EQ([checkbox state], NSOnState); | 128 EXPECT_EQ([checkbox state], NSOnState); |
130 | 129 |
131 EXPECT_CALL(controller, DidToggleGallery(1, false)); | 130 EXPECT_CALL(*controller(), DidToggleEntry(1, false)); |
132 [checkbox performClick:nil]; | 131 [checkbox performClick:nil]; |
133 EXPECT_EQ([checkbox state], NSOffState); | 132 EXPECT_EQ([checkbox state], NSOffState); |
134 | 133 |
135 EXPECT_CALL(controller, DidToggleGallery(1, true)); | 134 EXPECT_CALL(*controller(), DidToggleEntry(1, true)); |
136 [checkbox performClick:nil]; | 135 [checkbox performClick:nil]; |
137 EXPECT_EQ([checkbox state], NSOnState); | 136 EXPECT_EQ([checkbox state], NSOnState); |
138 } | 137 } |
139 | 138 |
140 // Tests that UpdateGalleries will add a new checkbox, but only if it refers to | 139 // Tests that UpdateGalleries will add a new checkbox, but only if it refers to |
141 // a gallery that the dialog hasn't seen before. | 140 // a gallery that the dialog hasn't seen before. |
142 TEST_F(MediaGalleriesDialogTest, UpdateAdds) { | 141 TEST_F(MediaGalleriesDialogTest, UpdateAdds) { |
143 NiceMock<MediaGalleriesDialogControllerMock> controller(dummy_extension()); | 142 MediaGalleriesDialogController::Entries attached_permissions; |
144 | 143 EXPECT_CALL(*controller(), GetSectionEntries(0)). |
145 MediaGalleriesDialogController::GalleryPermissionsVector attached_permissions; | |
146 EXPECT_CALL(controller, AttachedPermissions()). | |
147 WillRepeatedly(ReturnPointee(&attached_permissions)); | 144 WillRepeatedly(ReturnPointee(&attached_permissions)); |
148 | 145 |
149 MediaGalleriesDialogController::GalleryPermissionsVector | 146 EXPECT_EQ(0U, [[GetOrCreateDialog()->checkbox_container_ subviews] count]); |
150 unattached_permissions; | 147 CGFloat old_container_height = |
151 EXPECT_CALL(controller, UnattachedPermissions()). | 148 NSHeight([GetOrCreateDialog()->checkbox_container_ frame]); |
152 WillRepeatedly(Return(unattached_permissions)); | |
153 | |
154 scoped_ptr<MediaGalleriesDialogCocoa> dialog( | |
155 static_cast<MediaGalleriesDialogCocoa*>( | |
156 MediaGalleriesDialog::Create(&controller))); | |
157 | |
158 EXPECT_EQ(0U, [[dialog->checkbox_container_ subviews] count]); | |
159 CGFloat old_container_height = NSHeight([dialog->checkbox_container_ frame]); | |
160 | 149 |
161 attached_permissions.push_back( | 150 attached_permissions.push_back( |
162 MediaGalleriesDialogController::GalleryPermission( | 151 MediaGalleriesDialogController::Entry(MakePrefInfoForTesting(1), true)); |
163 1, MakePrefInfoForTesting(10), true)); | 152 GetOrCreateDialog()->UpdateGalleries(); |
164 dialog->UpdateGalleries(); | 153 EXPECT_EQ(1U, [[GetOrCreateDialog()->checkbox_container_ subviews] count]); |
165 EXPECT_EQ(1U, [[dialog->checkbox_container_ subviews] count]); | |
166 | 154 |
167 // The checkbox container should be taller. | 155 // The checkbox container should be taller. |
168 CGFloat new_container_height = NSHeight([dialog->checkbox_container_ frame]); | 156 CGFloat new_container_height = |
| 157 NSHeight([GetOrCreateDialog()->checkbox_container_ frame]); |
169 EXPECT_GT(new_container_height, old_container_height); | 158 EXPECT_GT(new_container_height, old_container_height); |
170 old_container_height = new_container_height; | 159 old_container_height = new_container_height; |
171 | 160 |
172 attached_permissions.push_back( | 161 attached_permissions.push_back( |
173 MediaGalleriesDialogController::GalleryPermission( | 162 MediaGalleriesDialogController::Entry(MakePrefInfoForTesting(2), true)); |
174 2, MakePrefInfoForTesting(20), true)); | 163 GetOrCreateDialog()->UpdateGalleries(); |
175 dialog->UpdateGalleries(); | 164 EXPECT_EQ(2U, [[GetOrCreateDialog()->checkbox_container_ subviews] count]); |
176 EXPECT_EQ(2U, [[dialog->checkbox_container_ subviews] count]); | |
177 | 165 |
178 // The checkbox container should be taller. | 166 // The checkbox container should be taller. |
179 new_container_height = NSHeight([dialog->checkbox_container_ frame]); | 167 new_container_height = |
| 168 NSHeight([GetOrCreateDialog()->checkbox_container_ frame]); |
180 EXPECT_GT(new_container_height, old_container_height); | 169 EXPECT_GT(new_container_height, old_container_height); |
181 old_container_height = new_container_height; | 170 old_container_height = new_container_height; |
182 | 171 |
183 attached_permissions[1].allowed = false; | 172 attached_permissions[1].selected = false; |
184 dialog->UpdateGalleries(); | 173 GetOrCreateDialog()->UpdateGalleries(); |
185 EXPECT_EQ(2U, [[dialog->checkbox_container_ subviews] count]); | 174 EXPECT_EQ(2U, [[GetOrCreateDialog()->checkbox_container_ subviews] count]); |
186 | 175 |
187 // The checkbox container height should not have changed. | 176 // The checkbox container height should not have changed. |
188 new_container_height = NSHeight([dialog->checkbox_container_ frame]); | 177 new_container_height = |
| 178 NSHeight([GetOrCreateDialog()->checkbox_container_ frame]); |
189 EXPECT_EQ(new_container_height, old_container_height); | 179 EXPECT_EQ(new_container_height, old_container_height); |
190 } | 180 } |
191 | 181 |
192 TEST_F(MediaGalleriesDialogTest, ForgetDeletes) { | 182 TEST_F(MediaGalleriesDialogTest, ForgetDeletes) { |
193 NiceMock<MediaGalleriesDialogControllerMock> controller(dummy_extension()); | 183 MediaGalleriesDialogController::Entries attached_permissions; |
194 | 184 EXPECT_CALL(*controller(), GetSectionEntries(0)). |
195 MediaGalleriesDialogController::GalleryPermissionsVector attached_permissions; | |
196 EXPECT_CALL(controller, AttachedPermissions()). | |
197 WillRepeatedly(ReturnPointee(&attached_permissions)); | 185 WillRepeatedly(ReturnPointee(&attached_permissions)); |
198 | 186 |
199 MediaGalleriesDialogController::GalleryPermissionsVector | 187 GetOrCreateDialog(); |
200 unattached_permissions; | |
201 EXPECT_CALL(controller, UnattachedPermissions()). | |
202 WillRepeatedly(Return(unattached_permissions)); | |
203 | |
204 scoped_ptr<MediaGalleriesDialogCocoa> dialog( | |
205 static_cast<MediaGalleriesDialogCocoa*>( | |
206 MediaGalleriesDialog::Create(&controller))); | |
207 | 188 |
208 // Add a couple of galleries. | 189 // Add a couple of galleries. |
209 attached_permissions.push_back( | 190 attached_permissions.push_back( |
210 MediaGalleriesDialogController::GalleryPermission( | 191 MediaGalleriesDialogController::Entry(MakePrefInfoForTesting(1), true)); |
211 1, MakePrefInfoForTesting(10), true)); | 192 GetOrCreateDialog()->UpdateGalleries(); |
212 dialog->UpdateGalleries(); | |
213 attached_permissions.push_back( | 193 attached_permissions.push_back( |
214 MediaGalleriesDialogController::GalleryPermission( | 194 MediaGalleriesDialogController::Entry(MakePrefInfoForTesting(2), true)); |
215 2, MakePrefInfoForTesting(20), true)); | 195 GetOrCreateDialog()->UpdateGalleries(); |
216 dialog->UpdateGalleries(); | 196 EXPECT_EQ(2U, [[GetOrCreateDialog()->checkbox_container_ subviews] count]); |
217 EXPECT_EQ(2U, [[dialog->checkbox_container_ subviews] count]); | 197 CGFloat old_container_height = |
218 CGFloat old_container_height = NSHeight([dialog->checkbox_container_ frame]); | 198 NSHeight([GetOrCreateDialog()->checkbox_container_ frame]); |
219 | 199 |
220 // Remove a gallery. | 200 // Remove a gallery. |
221 attached_permissions.erase(attached_permissions.begin()); | 201 attached_permissions.erase(attached_permissions.begin()); |
222 dialog->UpdateGalleries(); | 202 GetOrCreateDialog()->UpdateGalleries(); |
223 EXPECT_EQ(1U, [[dialog->checkbox_container_ subviews] count]); | 203 EXPECT_EQ(1U, [[GetOrCreateDialog()->checkbox_container_ subviews] count]); |
224 | 204 |
225 // The checkbox container should be shorter. | 205 // The checkbox container should be shorter. |
226 CGFloat new_container_height = NSHeight([dialog->checkbox_container_ frame]); | 206 CGFloat new_container_height = |
| 207 NSHeight([GetOrCreateDialog()->checkbox_container_ frame]); |
227 EXPECT_LT(new_container_height, old_container_height); | 208 EXPECT_LT(new_container_height, old_container_height); |
228 } | 209 } |
OLD | NEW |