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..c20f0ac2fa3740e5d17a6205a9971b66462c8605 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 |
@@ -19,6 +19,8 @@ |
#import "ui/events/test/cocoa_test_event_utils.h" |
#include "testing/gmock/include/gmock/gmock.h" |
+@class ConstrainedWindowButton; |
+ |
@interface PermissionBubbleController (ExposedForTesting) |
- (void)ok:(id)sender; |
- (void)onAllow:(id)sender; |
@@ -73,19 +75,28 @@ class PermissionBubbleControllerTest : public CocoaTest, |
} |
NSButton* FindButtonWithTitle(const std::string& title) { |
- return FindButtonWithTitle(base::SysUTF8ToNSString(title)); |
+ return FindButtonWithTitle(base::SysUTF8ToNSString(title), |
+ [ConstrainedWindowButton class]); |
} |
NSButton* FindButtonWithTitle(int title_id) { |
- return FindButtonWithTitle(l10n_util::GetNSString(title_id)); |
+ return FindButtonWithTitle(l10n_util::GetNSString(title_id), |
+ [ConstrainedWindowButton class]); |
} |
- NSButton* FindButtonWithTitle(NSString* title) { |
- NSView* parent = base::mac::ObjCCastStrict<NSView>([controller_ bubble]); |
- for (NSView* child in [parent subviews]) { |
- NSButton* button = base::mac::ObjCCast<NSButton>(child); |
- if ([title isEqualToString:[button title]]) { |
- return button; |
+ NSButton* FindMenuButtonWithTitle(int title_id) { |
+ return FindButtonWithTitle(l10n_util::GetNSString(title_id), |
+ [NSPopUpButton class]); |
+ } |
+ |
+ // IDS_PERMISSION_ALLOW and IDS_PERMISSION_DENY are used for two distinct |
+ // UI elements, both of which derive from NSButton. So check the expected |
+ // class, not just NSButton, as well as the title. |
+ NSButton* FindButtonWithTitle(NSString* title, Class button_class) { |
+ for (NSButton* view in [[controller_ bubble] subviews]) { |
+ if ([view isKindOfClass:button_class] && |
+ [title isEqualToString:[view title]]) { |
+ return view; |
} |
} |
return nil; |
@@ -109,6 +120,15 @@ class PermissionBubbleControllerTest : public CocoaTest, |
return textField; |
} |
+ void ChangePermissionMenuSelection(NSButton* menu_button, int next_title_id) { |
+ NSMenu* menu = [base::mac::ObjCCastStrict<NSPopUpButton>(menu_button) menu]; |
+ 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 +190,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 +260,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 +274,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) { |