Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(214)

Side by Side Diff: chrome/browser/ui/cocoa/profiles/profile_chooser_controller_unittest.mm

Issue 1116353004: Remove the #enable-fast-user-switcher flag. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Fix Mac build and unit tests. Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 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 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 #import "chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h" 5 #import "chrome/browser/ui/cocoa/profiles/profile_chooser_controller.h"
6 6
7 #include "base/command_line.h" 7 #include "base/command_line.h"
8 #import "base/mac/foundation_util.h" 8 #import "base/mac/foundation_util.h"
9 #include "base/mac/scoped_nsobject.h" 9 #include "base/mac/scoped_nsobject.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
83 NSPoint point = NSMakePoint(NSMidX(frame), NSMidY(frame)); 83 NSPoint point = NSMakePoint(NSMidX(frame), NSMidY(frame));
84 controller_.reset([[ProfileChooserController alloc] 84 controller_.reset([[ProfileChooserController alloc]
85 initWithBrowser:browser() 85 initWithBrowser:browser()
86 anchoredAt:point 86 anchoredAt:point
87 viewMode:profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER 87 viewMode:profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER
88 tutorialMode:profiles::TUTORIAL_MODE_NONE 88 tutorialMode:profiles::TUTORIAL_MODE_NONE
89 serviceType:signin::GAIA_SERVICE_TYPE_NONE]); 89 serviceType:signin::GAIA_SERVICE_TYPE_NONE]);
90 [controller_ showWindow:nil]; 90 [controller_ showWindow:nil];
91 } 91 }
92 92
93 void EnableFastUserSwitching() { 93 void StartFastUserSwitcher() {
94 base::CommandLine::ForCurrentProcess()->AppendSwitch( 94 NSRect frame = [test_window() frame];
95 switches::kFastUserSwitching); 95 NSPoint point = NSMakePoint(NSMidX(frame), NSMidY(frame));
96 controller_.reset([[ProfileChooserController alloc]
97 initWithBrowser:browser()
98 anchoredAt:point
99 viewMode:profiles::BUBBLE_VIEW_MODE_FAST_PROFILE_CHOOSER
100 tutorialMode:profiles::TUTORIAL_MODE_NONE
101 serviceType:signin::GAIA_SERVICE_TYPE_NONE]);
102 [controller_ showWindow:nil];
96 } 103 }
97 104
98 ProfileChooserController* controller() { return controller_; } 105 ProfileChooserController* controller() { return controller_; }
99 AvatarMenu* menu() { return menu_; } 106 AvatarMenu* menu() { return menu_; }
100 107
101 private: 108 private:
102 base::scoped_nsobject<ProfileChooserController> controller_; 109 base::scoped_nsobject<ProfileChooserController> controller_;
103 110
104 // Weak; owned by |controller_|. 111 // Weak; owned by |controller_|.
105 AvatarMenu* menu_; 112 AvatarMenu* menu_;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 NSButton* link = base::mac::ObjCCast<NSButton>( 174 NSButton* link = base::mac::ObjCCast<NSButton>(
168 [linksSubviews objectAtIndex:0]); 175 [linksSubviews objectAtIndex:0]);
169 EXPECT_EQ(@selector(showInlineSigninPage:), [link action]); 176 EXPECT_EQ(@selector(showInlineSigninPage:), [link action]);
170 EXPECT_EQ(controller(), [link target]); 177 EXPECT_EQ(controller(), [link target]);
171 178
172 NSTextField* promo = base::mac::ObjCCast<NSTextField>( 179 NSTextField* promo = base::mac::ObjCCast<NSTextField>(
173 [linksSubviews objectAtIndex:1]); 180 [linksSubviews objectAtIndex:1]);
174 EXPECT_GT([[promo stringValue] length], 0U); 181 EXPECT_GT([[promo stringValue] length], 0U);
175 } 182 }
176 183
177 TEST_F(ProfileChooserControllerTest, InitialLayoutWithFastUserSwitcher) {
178 switches::EnableNewAvatarMenuForTesting(
179 base::CommandLine::ForCurrentProcess());
180 EnableFastUserSwitching();
181 StartProfileChooserController();
182
183 NSArray* subviews = [[[controller() window] contentView] subviews];
184 ASSERT_EQ(2U, [subviews count]);
185 subviews = [[subviews objectAtIndex:0] subviews];
186
187 // Three profiles means we should have one active card and a
188 // fast user switcher which has two "other" profiles and 2 separators, and
189 // an option buttons view with its separator. We also have a promo for
190 // the new avatar menu.
191 // TODO(noms): Enforcing 8U fails on the waterfall debug bots, but it's not
192 // reproducible anywhere else.
193 ASSERT_GE([subviews count], 7U);
194
195 // There should be two buttons and a separator in the option buttons view.
196 // These buttons are tested in InitialLayoutWithNewMenu.
197 NSArray* buttonSubviews = [[subviews objectAtIndex:0] subviews];
198 ASSERT_EQ(3U, [buttonSubviews count]);
199
200 // There should be a separator.
201 EXPECT_TRUE([[subviews objectAtIndex:1] isKindOfClass:[NSBox class]]);
202
203 // There should be two "other profiles" items. The items are drawn from the
204 // bottom up, so in the opposite order of those in the AvatarMenu.
205 int profileIndex = 1;
206 for (int i = 5; i >= 2; i -= 2) {
207 // Each profile button has a separator.
208 EXPECT_TRUE([[subviews objectAtIndex:i] isKindOfClass:[NSBox class]]);
209
210 NSButton* button = base::mac::ObjCCast<NSButton>(
211 [subviews objectAtIndex:i-1]);
212 EXPECT_EQ(menu()->GetItemAt(profileIndex).name,
213 base::SysNSStringToUTF16([button title]));
214 EXPECT_EQ(profileIndex, [button tag]);
215 EXPECT_EQ(@selector(switchToProfile:), [button action]);
216 EXPECT_EQ(controller(), [button target]);
217 profileIndex++;
218 }
219
220 // There should be the profile avatar, name and links container in the active
221 // card view. The links displayed in the container are checked separately.
222 NSArray* activeCardSubviews = [[subviews objectAtIndex:6] subviews];
223 ASSERT_EQ(3U, [activeCardSubviews count]);
224
225 // Profile icon.
226 NSView* activeProfileImage = [activeCardSubviews objectAtIndex:2];
227 EXPECT_TRUE([activeProfileImage isKindOfClass:[NSButton class]]);
228
229 // Profile name.
230 NSView* activeProfileName = [activeCardSubviews objectAtIndex:1];
231 EXPECT_TRUE([activeProfileName isKindOfClass:[NSButton class]]);
232 EXPECT_EQ(menu()->GetItemAt(0).name, base::SysNSStringToUTF16(
233 [base::mac::ObjCCast<NSButton>(activeProfileName) title]));
234
235 // Profile links. This is a local profile, so there should be a signin button
236 // and a signin promo. These are also tested in InitialLayoutWithNewMenu.
237 NSArray* linksSubviews = [[activeCardSubviews objectAtIndex:0] subviews];
238 EXPECT_EQ(2U, [linksSubviews count]);
239 }
240
241 TEST_F(ProfileChooserControllerTest, OtherProfilesSortedAlphabetically) { 184 TEST_F(ProfileChooserControllerTest, OtherProfilesSortedAlphabetically) {
242 switches::EnableNewAvatarMenuForTesting( 185 switches::EnableNewAvatarMenuForTesting(
243 base::CommandLine::ForCurrentProcess()); 186 base::CommandLine::ForCurrentProcess());
244 EnableFastUserSwitching();
245 187
246 // Add two extra profiles, to make sure sorting is alphabetical and not 188 // Add two extra profiles, to make sure sorting is alphabetical and not
247 // by order of creation. 189 // by order of creation.
248 testing_profile_manager()-> 190 testing_profile_manager()->
249 CreateTestingProfile("test3", scoped_ptr<PrefServiceSyncable>(), 191 CreateTestingProfile("test3", scoped_ptr<PrefServiceSyncable>(),
250 base::ASCIIToUTF16("New Profile"), 1, std::string(), 192 base::ASCIIToUTF16("New Profile"), 1, std::string(),
251 TestingProfile::TestingFactories()); 193 TestingProfile::TestingFactories());
252 testing_profile_manager()-> 194 testing_profile_manager()->
253 CreateTestingProfile("test4", scoped_ptr<PrefServiceSyncable>(), 195 CreateTestingProfile("test4", scoped_ptr<PrefServiceSyncable>(),
254 base::ASCIIToUTF16("Another Test"), 1, std::string(), 196 base::ASCIIToUTF16("Another Test"), 1, std::string(),
255 TestingProfile::TestingFactories()); 197 TestingProfile::TestingFactories());
256 StartProfileChooserController(); 198 StartFastUserSwitcher();
257 199
258 NSArray* subviews = [[[controller() window] contentView] subviews]; 200 NSArray* subviews = [[[controller() window] contentView] subviews];
259 ASSERT_EQ(2U, [subviews count]); 201 ASSERT_EQ(2U, [subviews count]);
260 subviews = [[subviews objectAtIndex:0] subviews]; 202 subviews = [[subviews objectAtIndex:0] subviews];
261 NSString* sortedNames[] = { @"Another Test", 203 NSString* sortedNames[] = { @"Another Test",
262 @"New Profile", 204 @"New Profile",
263 @"Test 1", 205 @"Test 1",
264 @"Test 2" }; 206 @"Test 2" };
265 // There are four "other" profiles, each with a button and a separator, an 207 // There are four "other" profiles, each with a button and a separator.
266 // active profile card, and an option buttons view with a separator. We 208 ASSERT_EQ([subviews count], 8U);
267 // also have an update promo for the new avatar menu.
268 // TODO(noms): Enforcing 12U fails on the waterfall debug bots, but it's not
269 // reproducible anywhere else.
270 ASSERT_GE([subviews count], 11U);
271 // There should be four "other profiles" items, sorted alphabetically. The 209 // There should be four "other profiles" items, sorted alphabetically. The
272 // "other profiles" start at index 2 (after the option buttons view and its 210 // "other profiles" start at index 2 (after the option buttons view and its
273 // separator), and each have a separator. We need to iterate through the 211 // separator), and each have a separator. We need to iterate through the
274 // profiles in the order displayed in the bubble, which is opposite from the 212 // profiles in the order displayed in the bubble, which is opposite from the
275 // drawn order. 213 // drawn order.
276 int sortedNameIndex = 0; 214 int sortedNameIndex = 0;
277 for (int i = 9; i >= 2; i -= 2) { 215 for (int i = 7; i > 0; i -= 2) {
278 // The item at index i is the separator. 216 // The item at index i is the separator.
279 NSButton* button = base::mac::ObjCCast<NSButton>( 217 NSButton* button = base::mac::ObjCCast<NSButton>(
280 [subviews objectAtIndex:i-1]); 218 [subviews objectAtIndex:i-1]);
281 EXPECT_TRUE( 219 EXPECT_TRUE(
282 [[button title] isEqualToString:sortedNames[sortedNameIndex++]]); 220 [[button title] isEqualToString:sortedNames[sortedNameIndex++]]);
283 } 221 }
284 } 222 }
285 223
286 TEST_F(ProfileChooserControllerTest, 224 TEST_F(ProfileChooserControllerTest,
287 LocalProfileActiveCardLinksWithNewMenu) { 225 LocalProfileActiveCardLinksWithNewMenu) {
(...skipping 229 matching lines...) Expand 10 before | Expand all | Expand 10 after
517 ASSERT_EQ(5U, [buttonSubviews count]); 455 ASSERT_EQ(5U, [buttonSubviews count]);
518 456
519 // There should be a lock button. 457 // There should be a lock button.
520 NSButton* lockButton = 458 NSButton* lockButton =
521 base::mac::ObjCCast<NSButton>([buttonSubviews objectAtIndex:0]); 459 base::mac::ObjCCast<NSButton>([buttonSubviews objectAtIndex:0]);
522 ASSERT_TRUE(lockButton); 460 ASSERT_TRUE(lockButton);
523 EXPECT_EQ(@selector(lockProfile:), [lockButton action]); 461 EXPECT_EQ(@selector(lockProfile:), [lockButton action]);
524 EXPECT_EQ(controller(), [lockButton target]); 462 EXPECT_EQ(controller(), [lockButton target]);
525 EXPECT_TRUE([lockButton isEnabled]); 463 EXPECT_TRUE([lockButton isEnabled]);
526 } 464 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698