| 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];
|
| +}
|
|
|