Index: chrome/browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm |
diff --git a/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm b/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm |
index 1a7a93c4f2e30c4ceae606b3145d7a6d736478d1..90639b4e294a7796d2f6cf316d9a0d7223dec61b 100644 |
--- a/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm |
+++ b/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm |
@@ -73,19 +73,29 @@ class PermissionBubbleControllerTest : public CocoaTest, |
} |
NSButton* FindButtonWithTitle(const std::string& title) { |
- return FindButtonWithTitle(base::SysUTF8ToNSString(title)); |
+ return FindButtonWithTitle(base::SysUTF8ToNSString(title), false); |
} |
NSButton* FindButtonWithTitle(int title_id) { |
- return FindButtonWithTitle(l10n_util::GetNSString(title_id)); |
+ return FindButtonWithTitle(l10n_util::GetNSString(title_id), false); |
} |
- NSButton* FindButtonWithTitle(NSString* title) { |
+ NSButton* FindMenuButtonWithTitle(int title_id) { |
+ return FindButtonWithTitle(l10n_util::GetNSString(title_id), true); |
+ } |
+ |
+ // IDS_PERMISSION_ALLOW and IDS_PERMISSION_DENY are used for two distinct |
+ // UI elements, both of which derive from NSButton. In order to test for |
+ // each kind of element, check the derived class of one - NSPopUpButton - |
+ // to distinguish between the two. |
+ NSButton* FindButtonWithTitle(NSString* title, bool want_nspopup) { |
NSView* parent = base::mac::ObjCCastStrict<NSView>([controller_ bubble]); |
groby-ooo-7-16
2014/04/18 18:18:18
No need to cast - the bubble is always an NSView
leng
2014/04/18 22:48:46
Made NSButton to avoid a cast.
|
for (NSView* child in [parent subviews]) { |
NSButton* button = base::mac::ObjCCast<NSButton>(child); |
groby-ooo-7-16
2014/04/18 18:18:18
Shorter & less casts:
Class button_class = want_n
leng
2014/04/18 22:48:46
I like it. I need to use ConstrainedWindowButton
|
if ([title isEqualToString:[button title]]) { |
- return button; |
+ NSPopUpButton* popup = base::mac::ObjCCast<NSPopUpButton>(button); |
+ if ((!want_nspopup && !popup) || (want_nspopup && popup)) |
+ return button; |
} |
} |
return nil; |
@@ -109,6 +119,15 @@ class PermissionBubbleControllerTest : public CocoaTest, |
return textField; |
} |
+ void ChangePermissionMenuSelection(NSButton* menu_button, int next_title_id) { |
+ NSMenu* menu = [base::mac::ObjCCast<NSPopUpButton>(menu_button) menu]; |
groby-ooo-7-16
2014/04/18 18:18:18
I think you want strict here, or even pass in an N
leng
2014/04/18 22:48:46
Done.
|
+ NSString* next_title = l10n_util::GetNSString(next_title_id); |
+ EXPECT_EQ([[menu itemWithTitle:[menu_button title]] state], NSOnState); |
+ NSMenuItem* next_item = [menu itemWithTitle:next_title]; |
+ EXPECT_EQ([next_item state], NSOffState); |
+ [menu performActionForItemAtIndex:[menu indexOfItem:next_item]]; |
+ } |
+ |
NSMenuItem* FindCustomizeMenuItem() { |
NSButton* button = FindButtonWithTitle(IDS_PERMISSION_DENY); |
if (!button || ![button isKindOfClass:[SplitBlockButton class]]) |
@@ -170,25 +189,35 @@ TEST_F(PermissionBubbleControllerTest, ShowMultiplePermissions) { |
EXPECT_FALSE(FindButtonWithTitle(IDS_OK)); |
} |
-TEST_F(PermissionBubbleControllerTest, ShowCustomizationMode) { |
- AddRequest(kPermissionB); |
- |
+TEST_F(PermissionBubbleControllerTest, ShowCustomizationModeAllow) { |
accept_states_.push_back(true); |
- accept_states_.push_back(false); |
+ [controller_ showAtAnchor:NSZeroPoint |
+ withDelegate:this |
+ forRequests:requests_ |
+ acceptStates:accept_states_ |
+ customizationMode:YES]; |
+ |
+ // Test that there is one menu, with 'Allow' visible. |
+ EXPECT_TRUE(FindMenuButtonWithTitle(IDS_PERMISSION_ALLOW)); |
+ EXPECT_FALSE(FindMenuButtonWithTitle(IDS_PERMISSION_DENY)); |
+ |
+ EXPECT_TRUE(FindButtonWithTitle(IDS_OK)); |
+ EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_ALLOW)); |
+ EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_DENY)); |
+ EXPECT_FALSE(FindCustomizeMenuItem()); |
+} |
+TEST_F(PermissionBubbleControllerTest, ShowCustomizationModeBlock) { |
+ accept_states_.push_back(false); |
[controller_ showAtAnchor:NSZeroPoint |
withDelegate:this |
forRequests:requests_ |
acceptStates:accept_states_ |
customizationMode:YES]; |
- // Test that each checkbox is visible and only the first is checked. |
- NSButton* checkbox_a = FindButtonWithTitle(kPermissionA); |
- NSButton* checkbox_b = FindButtonWithTitle(kPermissionB); |
- EXPECT_TRUE(checkbox_a); |
- EXPECT_TRUE(checkbox_b); |
- EXPECT_EQ(NSOnState, [checkbox_a state]); |
- EXPECT_EQ(NSOffState, [checkbox_b state]); |
+ // Test that there is one menu, with 'Block' visible. |
+ EXPECT_TRUE(FindMenuButtonWithTitle(IDS_PERMISSION_DENY)); |
+ EXPECT_FALSE(FindMenuButtonWithTitle(IDS_PERMISSION_ALLOW)); |
EXPECT_TRUE(FindButtonWithTitle(IDS_OK)); |
EXPECT_FALSE(FindButtonWithTitle(IDS_PERMISSION_ALLOW)); |
@@ -230,7 +259,7 @@ TEST_F(PermissionBubbleControllerTest, Deny) { |
[FindButtonWithTitle(IDS_PERMISSION_DENY) performClick:nil]; |
} |
-TEST_F(PermissionBubbleControllerTest, ToggleCheckbox) { |
+TEST_F(PermissionBubbleControllerTest, ChangePermissionSelection) { |
AddRequest(kPermissionB); |
accept_states_.push_back(true); |
@@ -244,8 +273,10 @@ TEST_F(PermissionBubbleControllerTest, ToggleCheckbox) { |
EXPECT_CALL(*this, ToggleAccept(0, false)).Times(1); |
EXPECT_CALL(*this, ToggleAccept(1, true)).Times(1); |
- [FindButtonWithTitle(kPermissionA) performClick:nil]; |
- [FindButtonWithTitle(kPermissionB) performClick:nil]; |
+ NSButton* menu_a = FindMenuButtonWithTitle(IDS_PERMISSION_ALLOW); |
+ NSButton* menu_b = FindMenuButtonWithTitle(IDS_PERMISSION_DENY); |
+ ChangePermissionMenuSelection(menu_a, IDS_PERMISSION_DENY); |
+ ChangePermissionMenuSelection(menu_b, IDS_PERMISSION_ALLOW); |
} |
TEST_F(PermissionBubbleControllerTest, ClickCustomize) { |