Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 72 EXPECT_EQ(3U, menu_->GetNumberOfItems()); | 72 EXPECT_EQ(3U, menu_->GetNumberOfItems()); |
| 73 } | 73 } |
| 74 | 74 |
| 75 void TearDown() override { | 75 void TearDown() override { |
| 76 [controller() close]; | 76 [controller() close]; |
| 77 controller_.reset(); | 77 controller_.reset(); |
| 78 CocoaProfileTest::TearDown(); | 78 CocoaProfileTest::TearDown(); |
| 79 } | 79 } |
| 80 | 80 |
| 81 void StartProfileChooserController() { | 81 void StartProfileChooserController() { |
| 82 StartProfileChooserControllerWithTutorialMode(profiles::TUTORIAL_MODE_NONE); | |
| 83 } | |
| 84 | |
| 85 void StartProfileChooserControllerWithTutorialMode( | |
| 86 profiles::TutorialMode mode) { | |
| 82 NSRect frame = [test_window() frame]; | 87 NSRect frame = [test_window() frame]; |
| 83 NSPoint point = NSMakePoint(NSMidX(frame), NSMidY(frame)); | 88 NSPoint point = NSMakePoint(NSMidX(frame), NSMidY(frame)); |
| 84 controller_.reset([[ProfileChooserController alloc] | 89 controller_.reset([[ProfileChooserController alloc] |
| 85 initWithBrowser:browser() | 90 initWithBrowser:browser() |
| 86 anchoredAt:point | 91 anchoredAt:point |
| 87 viewMode:profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER | 92 viewMode:profiles::BUBBLE_VIEW_MODE_PROFILE_CHOOSER |
| 88 tutorialMode:profiles::TUTORIAL_MODE_NONE | 93 tutorialMode:mode |
| 89 serviceType:signin::GAIA_SERVICE_TYPE_NONE]); | 94 serviceType:signin::GAIA_SERVICE_TYPE_NONE]); |
| 90 [controller_ showWindow:nil]; | 95 [controller_ showWindow:nil]; |
| 91 } | 96 } |
| 92 | 97 |
| 98 void AssertRightClickTutorialShown() { | |
| 99 NSArray* subviews = [[[controller() window] contentView] subviews]; | |
| 100 ASSERT_EQ(2U, [subviews count]); | |
| 101 subviews = [[subviews objectAtIndex:0] subviews]; | |
| 102 | |
| 103 // There should be 4 views: the tutorial, the active profile card, a | |
| 104 // separator and the options view. | |
| 105 ASSERT_EQ(4U, [subviews count]); | |
| 106 | |
| 107 // The tutorial is the topmost view, so the last in the array. It should | |
| 108 // contain 3 views: the title, the content text and the OK button. | |
| 109 NSArray* tutorialSubviews = [[subviews objectAtIndex:3] subviews]; | |
| 110 ASSERT_EQ(3U, [tutorialSubviews count]); | |
| 111 | |
| 112 NSTextField* tutorialTitle = base::mac::ObjCCast<NSTextField>( | |
|
groby-ooo-7-16
2015/05/12 19:27:57
Should those be ObjCCastStrict?
anthonyvd
2015/05/15 19:25:27
Done.
| |
| 113 [tutorialSubviews objectAtIndex:2]); | |
| 114 EXPECT_GT([[tutorialTitle stringValue] length], 0U); | |
| 115 | |
| 116 NSTextField* tutorialContent = base::mac::ObjCCast<NSTextField>( | |
| 117 [tutorialSubviews objectAtIndex:1]); | |
| 118 EXPECT_GT([[tutorialContent stringValue] length], 0U); | |
| 119 | |
| 120 NSButton* tutorialOKButton = base::mac::ObjCCast<NSButton>( | |
| 121 [tutorialSubviews objectAtIndex:0]); | |
| 122 EXPECT_GT([[tutorialOKButton title] length], 0U); | |
| 123 } | |
| 124 | |
| 93 void EnableFastUserSwitching() { | 125 void EnableFastUserSwitching() { |
| 94 base::CommandLine::ForCurrentProcess()->AppendSwitch( | 126 base::CommandLine::ForCurrentProcess()->AppendSwitch( |
| 95 switches::kFastUserSwitching); | 127 switches::kFastUserSwitching); |
| 96 } | 128 } |
| 97 | 129 |
| 98 ProfileChooserController* controller() { return controller_; } | 130 ProfileChooserController* controller() { return controller_; } |
| 99 AvatarMenu* menu() { return menu_; } | 131 AvatarMenu* menu() { return menu_; } |
| 100 | 132 |
| 101 private: | 133 private: |
| 102 base::scoped_nsobject<ProfileChooserController> controller_; | 134 base::scoped_nsobject<ProfileChooserController> controller_; |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 167 NSButton* link = base::mac::ObjCCast<NSButton>( | 199 NSButton* link = base::mac::ObjCCast<NSButton>( |
| 168 [linksSubviews objectAtIndex:0]); | 200 [linksSubviews objectAtIndex:0]); |
| 169 EXPECT_EQ(@selector(showInlineSigninPage:), [link action]); | 201 EXPECT_EQ(@selector(showInlineSigninPage:), [link action]); |
| 170 EXPECT_EQ(controller(), [link target]); | 202 EXPECT_EQ(controller(), [link target]); |
| 171 | 203 |
| 172 NSTextField* promo = base::mac::ObjCCast<NSTextField>( | 204 NSTextField* promo = base::mac::ObjCCast<NSTextField>( |
| 173 [linksSubviews objectAtIndex:1]); | 205 [linksSubviews objectAtIndex:1]); |
| 174 EXPECT_GT([[promo stringValue] length], 0U); | 206 EXPECT_GT([[promo stringValue] length], 0U); |
| 175 } | 207 } |
| 176 | 208 |
| 209 TEST_F(ProfileChooserControllerTest, RightClickTutorialShownAfterWelcome) { | |
| 210 switches::EnableNewAvatarMenuForTesting( | |
| 211 base::CommandLine::ForCurrentProcess()); | |
| 212 // The welcome upgrade tutorial takes precedence so show it then dismiss it. | |
| 213 // The right click tutorial should be shown right away. | |
| 214 StartProfileChooserControllerWithTutorialMode( | |
| 215 profiles::TUTORIAL_MODE_WELCOME_UPGRADE); | |
| 216 | |
| 217 [controller() dismissTutorial:nil]; | |
| 218 AssertRightClickTutorialShown(); | |
| 219 } | |
| 220 | |
| 221 TEST_F(ProfileChooserControllerTest, RightClickTutorialShownAfterReopen) { | |
| 222 switches::EnableNewAvatarMenuForTesting( | |
| 223 base::CommandLine::ForCurrentProcess()); | |
| 224 // The welcome upgrade tutorial takes precedence so show it then close the | |
| 225 // menu. Reopening the menu should show the tutorial. | |
| 226 StartProfileChooserController(); | |
| 227 | |
| 228 [controller() close]; | |
| 229 StartProfileChooserController(); | |
| 230 AssertRightClickTutorialShown(); | |
| 231 | |
| 232 // The tutorial must be manually dismissed so it should still be shown after | |
| 233 // closing and reopening the menu, | |
| 234 [controller() close]; | |
| 235 StartProfileChooserController(); | |
| 236 AssertRightClickTutorialShown(); | |
| 237 } | |
| 238 | |
| 239 TEST_F(ProfileChooserControllerTest, RightClickTutorialNotShownAfterDismiss) { | |
| 240 switches::EnableNewAvatarMenuForTesting( | |
| 241 base::CommandLine::ForCurrentProcess()); | |
| 242 // The welcome upgrade tutorial takes precedence so show it then close the | |
| 243 // menu. Reopening the menu should show the tutorial. | |
| 244 StartProfileChooserController(); | |
| 245 | |
| 246 [controller() close]; | |
| 247 StartProfileChooserControllerWithTutorialMode( | |
| 248 profiles::TUTORIAL_MODE_RIGHT_CLICK_SWITCHING); | |
| 249 AssertRightClickTutorialShown(); | |
| 250 | |
| 251 // Dismissing the tutorial should prevent it from being shown forever. | |
| 252 [controller() dismissTutorial:nil]; | |
| 253 NSArray* subviews = [[[controller() window] contentView] subviews]; | |
| 254 ASSERT_EQ(2U, [subviews count]); | |
| 255 subviews = [[subviews objectAtIndex:0] subviews]; | |
| 256 | |
| 257 // There should be 3 views since there's no tutorial | |
| 258 ASSERT_EQ(3U, [subviews count]); | |
| 259 | |
| 260 // Closing and reopening the menu shouldn't show the tutorial. | |
| 261 [controller() close]; | |
| 262 StartProfileChooserControllerWithTutorialMode( | |
| 263 profiles::TUTORIAL_MODE_RIGHT_CLICK_SWITCHING); | |
| 264 subviews = [[[controller() window] contentView] subviews]; | |
| 265 ASSERT_EQ(2U, [subviews count]); | |
| 266 subviews = [[subviews objectAtIndex:0] subviews]; | |
| 267 | |
| 268 // There should be 3 views since there's no tutorial | |
| 269 ASSERT_EQ(3U, [subviews count]); | |
| 270 } | |
| 271 | |
| 177 TEST_F(ProfileChooserControllerTest, InitialLayoutWithFastUserSwitcher) { | 272 TEST_F(ProfileChooserControllerTest, InitialLayoutWithFastUserSwitcher) { |
| 178 switches::EnableNewAvatarMenuForTesting( | 273 switches::EnableNewAvatarMenuForTesting( |
| 179 base::CommandLine::ForCurrentProcess()); | 274 base::CommandLine::ForCurrentProcess()); |
| 180 EnableFastUserSwitching(); | 275 EnableFastUserSwitching(); |
| 181 StartProfileChooserController(); | 276 StartProfileChooserController(); |
| 182 | 277 |
| 183 NSArray* subviews = [[[controller() window] contentView] subviews]; | 278 NSArray* subviews = [[[controller() window] contentView] subviews]; |
| 184 ASSERT_EQ(2U, [subviews count]); | 279 ASSERT_EQ(2U, [subviews count]); |
| 185 subviews = [[subviews objectAtIndex:0] subviews]; | 280 subviews = [[subviews objectAtIndex:0] subviews]; |
| 186 | 281 |
| (...skipping 330 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 517 ASSERT_EQ(5U, [buttonSubviews count]); | 612 ASSERT_EQ(5U, [buttonSubviews count]); |
| 518 | 613 |
| 519 // There should be a lock button. | 614 // There should be a lock button. |
| 520 NSButton* lockButton = | 615 NSButton* lockButton = |
| 521 base::mac::ObjCCast<NSButton>([buttonSubviews objectAtIndex:0]); | 616 base::mac::ObjCCast<NSButton>([buttonSubviews objectAtIndex:0]); |
| 522 ASSERT_TRUE(lockButton); | 617 ASSERT_TRUE(lockButton); |
| 523 EXPECT_EQ(@selector(lockProfile:), [lockButton action]); | 618 EXPECT_EQ(@selector(lockProfile:), [lockButton action]); |
| 524 EXPECT_EQ(controller(), [lockButton target]); | 619 EXPECT_EQ(controller(), [lockButton target]); |
| 525 EXPECT_TRUE([lockButton isEnabled]); | 620 EXPECT_TRUE([lockButton isEnabled]); |
| 526 } | 621 } |
| OLD | NEW |