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

Unified Diff: chrome/browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm

Issue 151593005: Implement permission bubble view for Cocoa. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Ensure only one delegate owns the view at a time Created 6 years, 10 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 side-by-side diff with in-line comments
Download patch
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
new file mode 100644
index 0000000000000000000000000000000000000000..60064e0915c2a332c35535d257626489293fa9ce
--- /dev/null
+++ b/chrome/browser/ui/cocoa/website_settings/permission_bubble_controller_unittest.mm
@@ -0,0 +1,230 @@
+// Copyright 2014 The Chromium Authors. All rights reserved.
+// Use of this source code is governed by a BSD-style license that can be
+// found in the LICENSE file.
+
+#import "chrome/browser/ui/cocoa/website_settings/permission_bubble_controller.h"
+
+#include "base/mac/foundation_util.h"
+#include "base/stl_util.h"
+#include "base/strings/sys_string_conversions.h"
+#include "base/strings/utf_string_conversions.h"
+#import "chrome/browser/ui/cocoa/cocoa_test_helper.h"
+#include "chrome/browser/ui/cocoa/run_loop_testing.h"
+#import "chrome/browser/ui/cocoa/website_settings/permission_bubble_cocoa.h"
+#include "chrome/browser/ui/website_settings/mock_permission_bubble_request.h"
+#import "ui/events/test/cocoa_test_event_utils.h"
+
+@interface PermissionBubbleController (ExposedForTesting)
+- (void)ok:(id)sender;
+- (void)onAllow:(id)sender;
+- (void)onBlock:(id)sender;
+- (void)onCustomize:(id)sender;
+- (void)onCheckboxChanged:(id)sender;
+@end
+
+namespace {
+const char* const kOKButtonLabel = "OK";
+const char* const kAllowButtonLabel = "Allow";
+const char* const kBlockButtonLabel = "Block";
+const char* const kCustomizeLabel = "Customize";
+const char* const kPermissionA = "Permission A";
+const char* const kPermissionB = "Permission B";
+const char* const kPermissionC = "Permission C";
+}
+
+class PermissionBubbleControllerTest : public CocoaTest,
+ public PermissionBubbleView::Delegate {
+ public:
+
+ MOCK_METHOD2(ToggleAccept, void(int, bool));
+ MOCK_METHOD0(SetCustomizationMode, void());
+ MOCK_METHOD0(Accept, void());
+ MOCK_METHOD0(Deny, void());
+ MOCK_METHOD0(Closing, void());
+ MOCK_METHOD1(SetView, void(PermissionBubbleView*));
+
+ virtual void SetUp() OVERRIDE {
+ CocoaTest::SetUp();
+ bridge_.reset(new PermissionBubbleCocoa(nil));
+ controller_ = [[PermissionBubbleController alloc]
+ initWithParentWindow:test_window()
+ bridge:bridge_.get()];
+ }
+
+ virtual void TearDown() OVERRIDE {
+ [controller_ close];
+ chrome::testing::NSRunLoopRunAllPending();
+ STLDeleteElements(&requests_);
+ CocoaTest::TearDown();
+ }
+
+ void AddRequest(const std::string& title) {
+ MockPermissionBubbleRequest* request =
+ new MockPermissionBubbleRequest(title);
+ requests_.push_back(request);
+ EXPECT_CALL(*request, GetMessageTextFragment()).Times(1);
+ }
+
+ NSButton* FindButtonWithTitle(const std::string& text) {
+ NSView* parent = base::mac::ObjCCastStrict<NSView>([controller_ bubble]);
+ NSString* title = base::SysUTF8ToNSString(text);
+ for (NSView* child in [parent subviews]) {
+ NSButton* button = base::mac::ObjCCast<NSButton>(child);
+ if ([title isEqualToString:[button title]]) {
+ return button;
+ }
+ }
+ return nil;
+ }
+
+ NSTextField* FindTextFieldWithString(const std::string& text) {
+ NSView* parent = base::mac::ObjCCastStrict<NSView>([controller_ bubble]);
+ NSString* title = base::SysUTF8ToNSString(text);
+ for (NSView* child in [parent subviews]) {
+ NSTextField* textField = base::mac::ObjCCast<NSTextField>(child);
+ if ([[textField stringValue] hasSuffix:title]) {
+ return textField;
+ }
+ }
+ return nil;
+ }
+
+ protected:
+ PermissionBubbleController* controller_; // Weak; it deletes itself.
+ scoped_ptr<PermissionBubbleCocoa> bridge_;
+ std::vector<PermissionBubbleRequest*> requests_;
+ std::vector<bool> accept_states_;
+};
+
+TEST_F(PermissionBubbleControllerTest, ShowAndClose) {
+ EXPECT_FALSE([[controller_ window] isVisible]);
+ [controller_ showWindow:nil];
+ EXPECT_TRUE([[controller_ window] isVisible]);
+}
+
+TEST_F(PermissionBubbleControllerTest, ShowSinglePermission) {
+ AddRequest(kPermissionA);
+
+ [controller_ showAtAnchor:NSZeroPoint
+ withDelegate:this
+ forRequests:requests_
+ acceptStates:accept_states_
+ customizationMode:NO];
+
+ EXPECT_TRUE(FindTextFieldWithString(kPermissionA));
+ EXPECT_TRUE(FindButtonWithTitle(kAllowButtonLabel));
+ EXPECT_TRUE(FindButtonWithTitle(kBlockButtonLabel));
+ EXPECT_FALSE(FindButtonWithTitle(kOKButtonLabel));
+ EXPECT_FALSE(FindButtonWithTitle(kCustomizeLabel));
+}
+
+TEST_F(PermissionBubbleControllerTest, ShowMultiplePermissions) {
+ AddRequest(kPermissionA);
+ AddRequest(kPermissionB);
+ AddRequest(kPermissionC);
+
+ [controller_ showAtAnchor:NSZeroPoint
+ withDelegate:this
+ forRequests:requests_
+ acceptStates:accept_states_
+ customizationMode:NO];
+
+ EXPECT_TRUE(FindTextFieldWithString(kPermissionA));
+ EXPECT_TRUE(FindTextFieldWithString(kPermissionB));
+ EXPECT_TRUE(FindTextFieldWithString(kPermissionC));
+
+ EXPECT_TRUE(FindButtonWithTitle(kAllowButtonLabel));
+ EXPECT_TRUE(FindButtonWithTitle(kBlockButtonLabel));
+ EXPECT_TRUE(FindButtonWithTitle(kCustomizeLabel));
+ EXPECT_FALSE(FindButtonWithTitle(kOKButtonLabel));
+}
+
+TEST_F(PermissionBubbleControllerTest, ShowCustomizationMode) {
+ AddRequest(kPermissionA);
+ AddRequest(kPermissionB);
+
+ accept_states_.push_back(true);
+ 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]);
+
+ EXPECT_TRUE(FindButtonWithTitle(kOKButtonLabel));
+ EXPECT_FALSE(FindButtonWithTitle(kAllowButtonLabel));
+ EXPECT_FALSE(FindButtonWithTitle(kBlockButtonLabel));
+ EXPECT_FALSE(FindButtonWithTitle(kCustomizeLabel));
+}
+
+TEST_F(PermissionBubbleControllerTest, OK) {
+ [controller_ showAtAnchor:NSZeroPoint
+ withDelegate:this
+ forRequests:requests_
+ acceptStates:accept_states_
+ customizationMode:YES];
+
+ EXPECT_CALL(*this, Closing()).Times(1);
+ [FindButtonWithTitle(kOKButtonLabel) performClick:nil];
+}
+
+TEST_F(PermissionBubbleControllerTest, Allow) {
+ [controller_ showAtAnchor:NSZeroPoint
+ withDelegate:this
+ forRequests:requests_
+ acceptStates:accept_states_
+ customizationMode:NO];
+
+ EXPECT_CALL(*this, Accept()).Times(1);
+ [FindButtonWithTitle(kAllowButtonLabel) performClick:nil];
+}
+
+TEST_F(PermissionBubbleControllerTest, Deny) {
+ [controller_ showAtAnchor:NSZeroPoint
+ withDelegate:this
+ forRequests:requests_
+ acceptStates:accept_states_
+ customizationMode:NO];
+
+ EXPECT_CALL(*this, Deny()).Times(1);
+ [FindButtonWithTitle(kBlockButtonLabel) performClick:nil];
+}
+
+TEST_F(PermissionBubbleControllerTest, ToggleCheckbox) {
+ AddRequest(kPermissionA);
+ AddRequest(kPermissionB);
+
+ accept_states_.push_back(true);
+ accept_states_.push_back(false);
+
+ [controller_ showAtAnchor:NSZeroPoint
+ withDelegate:this
+ forRequests:requests_
+ acceptStates:accept_states_
+ customizationMode:YES];
+
+ EXPECT_CALL(*this, ToggleAccept(0, false)).Times(1);
+ EXPECT_CALL(*this, ToggleAccept(1, true)).Times(1);
+ [FindButtonWithTitle(kPermissionA) performClick:nil];
+ [FindButtonWithTitle(kPermissionB) performClick:nil];
+}
+
+TEST_F(PermissionBubbleControllerTest, ClickCustomize) {
+ [controller_ showAtAnchor:NSZeroPoint
+ withDelegate:this
+ forRequests:requests_
+ acceptStates:accept_states_
+ customizationMode:NO];
+
+ EXPECT_CALL(*this, SetCustomizationMode()).Times(1);
+ [FindButtonWithTitle(kCustomizeLabel) performClick:nil];
+}

Powered by Google App Engine
This is Rietveld 408576698