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

Unified Diff: chrome/browser/ui/cocoa/extensions/toolbar_actions_bar_bubble_mac_unittest.mm

Issue 1086973004: [Extensions Mac] Implement developer mode warning on mac (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Finnur's Created 5 years, 8 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/extensions/toolbar_actions_bar_bubble_mac_unittest.mm
diff --git a/chrome/browser/ui/cocoa/extensions/toolbar_actions_bar_bubble_mac_unittest.mm b/chrome/browser/ui/cocoa/extensions/toolbar_actions_bar_bubble_mac_unittest.mm
new file mode 100644
index 0000000000000000000000000000000000000000..2fcd80df867fc06072b8538ef2524b4e4eb30ca2
--- /dev/null
+++ b/chrome/browser/ui/cocoa/extensions/toolbar_actions_bar_bubble_mac_unittest.mm
@@ -0,0 +1,190 @@
+// Copyright 2015 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.
+
+#include "base/logging.h"
+#import "base/mac/foundation_util.h"
+#import "base/mac/scoped_nsobject.h"
+#include "base/strings/utf_string_conversions.h"
+#import "chrome/browser/ui/cocoa/cocoa_test_helper.h"
+#import "chrome/browser/ui/cocoa/extensions/toolbar_actions_bar_bubble_mac.h"
+#import "chrome/browser/ui/cocoa/info_bubble_window.h"
+#import "chrome/browser/ui/cocoa/run_loop_testing.h"
+#include "chrome/browser/ui/toolbar/test_toolbar_actions_bar_bubble_delegate.h"
+#import "ui/events/test/cocoa_test_event_utils.h"
+
+// A simple class to observe when a window is destructing.
+@interface WindowObserver : NSObject {
+ BOOL windowIsClosing_;
+}
+
+- (id)initWithWindow:(NSWindow*)window;
+
+- (void)dealloc;
+
+- (void)onWindowClosing:(NSNotification*)notification;
+
+@property(nonatomic, assign) BOOL windowIsClosing;
+
+@end
+
+@implementation WindowObserver
+
+- (id)initWithWindow:(NSWindow*)window {
+ if ((self = [super init])) {
+ [[NSNotificationCenter defaultCenter]
+ addObserver:self
+ selector:@selector(onWindowClosing:)
+ name:NSWindowWillCloseNotification
+ object:window];
+ }
+ return self;
+}
+
+- (void)dealloc {
+ [[NSNotificationCenter defaultCenter] removeObserver:self];
+ [super dealloc];
+}
+
+- (void)onWindowClosing:(NSNotification*)notification {
+ windowIsClosing_ = YES;
+}
+
+@synthesize windowIsClosing = windowIsClosing_;
+
+@end
+
+class ToolbarActionsBarBubbleMacTest : public CocoaTest {
+ public:
+ ToolbarActionsBarBubbleMacTest() {}
+ ~ToolbarActionsBarBubbleMacTest() override {}
+
+ // Create and display a new bubble with the given |delegate|.
+ ToolbarActionsBarBubbleMac* CreateAndShowBubble(
+ TestToolbarActionsBarBubbleDelegate* delegate);
+
+ // Test that clicking on the corresponding button produces the
+ // |expected_action|, and closes the bubble.
+ void TestBubbleButton(
+ ToolbarActionsBarBubbleDelegate::CloseAction expected_action);
+
+ base::string16 HeadingString() { return base::ASCIIToUTF16("Heading"); }
+ base::string16 BodyString() { return base::ASCIIToUTF16("Body"); }
+ base::string16 ActionString() { return base::ASCIIToUTF16("Action"); }
+ base::string16 DismissString() { return base::ASCIIToUTF16("Dismiss"); }
+ base::string16 LearnMoreString() { return base::ASCIIToUTF16("LearnMore"); }
+
+ private:
+ DISALLOW_COPY_AND_ASSIGN(ToolbarActionsBarBubbleMacTest);
+};
+
+ToolbarActionsBarBubbleMac* ToolbarActionsBarBubbleMacTest::CreateAndShowBubble(
+ TestToolbarActionsBarBubbleDelegate* delegate) {
+ ToolbarActionsBarBubbleMac* bubble =
+ [[ToolbarActionsBarBubbleMac alloc]
+ initWithParentWindow:test_window()
+ anchorPoint:NSZeroPoint
+ delegate:delegate->GetDelegate()];
+ EXPECT_FALSE(delegate->shown());
+ [bubble showWindow:nil];
+ [base::mac::ObjCCastStrict<InfoBubbleWindow>([bubble window])
+ setAllowedAnimations:info_bubble::kAnimateNone];
+ chrome::testing::NSRunLoopRunAllPending();
+ EXPECT_FALSE(delegate->close_action());
+ EXPECT_TRUE(delegate->shown());
+ return bubble;
+}
+
+void ToolbarActionsBarBubbleMacTest::TestBubbleButton(
+ ToolbarActionsBarBubbleDelegate::CloseAction expected_action) {
+ TestToolbarActionsBarBubbleDelegate delegate(
+ HeadingString(), BodyString(), ActionString());
+ delegate.set_dismiss_button_text(DismissString());
+ delegate.set_learn_more_button_text(LearnMoreString());
+ ToolbarActionsBarBubbleMac* bubble = CreateAndShowBubble(&delegate);
+ base::scoped_nsobject<WindowObserver> windowObserver(
+ [[WindowObserver alloc] initWithWindow:[bubble window]]);
+ EXPECT_FALSE([windowObserver windowIsClosing]);
+
+ // Find the appropriate button to click.
+ NSButton* button = nil;
+ switch (expected_action) {
+ case ToolbarActionsBarBubbleDelegate::CLOSE_EXECUTE:
+ button = [bubble actionButton];
+ break;
+ case ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS:
+ button = [bubble dismissButton];
+ break;
+ case ToolbarActionsBarBubbleDelegate::CLOSE_LEARN_MORE:
+ button = [bubble learnMoreButton];
+ break;
+ }
+ ASSERT_TRUE(button);
+
+ // Click the button.
+ std::pair<NSEvent*, NSEvent*> events =
+ cocoa_test_event_utils::MouseClickInView(button, 1);
+ [NSApp postEvent:events.second atStart:YES];
+ [NSApp sendEvent:events.first];
+ chrome::testing::NSRunLoopRunAllPending();
+
+ // The bubble should be closed, and the delegate should be told that the
+ // button was clicked.
+ ASSERT_TRUE(delegate.close_action());
+ EXPECT_EQ(expected_action, *delegate.close_action());
+ EXPECT_TRUE([windowObserver windowIsClosing]);
+}
+
+// Test clicking on the action button and dismissing the bubble.
+TEST_F(ToolbarActionsBarBubbleMacTest, CloseActionAndDismiss) {
+ // Test all the possible actions.
+ TestBubbleButton(ToolbarActionsBarBubbleDelegate::CLOSE_EXECUTE);
+ TestBubbleButton(ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS);
+ TestBubbleButton(ToolbarActionsBarBubbleDelegate::CLOSE_LEARN_MORE);
+
+ {
+ // Test dismissing the bubble without clicking the button.
+ TestToolbarActionsBarBubbleDelegate delegate(
+ HeadingString(), BodyString(), ActionString());
+ ToolbarActionsBarBubbleMac* bubble = CreateAndShowBubble(&delegate);
+ base::scoped_nsobject<WindowObserver> windowObserver(
+ [[WindowObserver alloc] initWithWindow:[bubble window]]);
+ EXPECT_FALSE([windowObserver windowIsClosing]);
+
+ // Close the bubble. The delegate should be told it was dismissed.
+ [bubble close];
+ chrome::testing::NSRunLoopRunAllPending();
+ ASSERT_TRUE(delegate.close_action());
+ EXPECT_EQ(ToolbarActionsBarBubbleDelegate::CLOSE_DISMISS,
+ *delegate.close_action());
+ EXPECT_TRUE([windowObserver windowIsClosing]);
+ }
+}
+
+// Test the basic layout of the bubble.
+TEST_F(ToolbarActionsBarBubbleMacTest, ToolbarActionsBarBubbleLayout) {
+ {
+ TestToolbarActionsBarBubbleDelegate delegate(
+ HeadingString(), BodyString(), ActionString());
+ ToolbarActionsBarBubbleMac* bubble = CreateAndShowBubble(&delegate);
+ // There should be no "learn more" or "dismiss" buttons.
+ EXPECT_FALSE([bubble learnMoreButton]);
+ EXPECT_FALSE([bubble dismissButton]);
+
+ [bubble close];
+ chrome::testing::NSRunLoopRunAllPending();
+ }
+
+ {
+ TestToolbarActionsBarBubbleDelegate delegate(
+ HeadingString(), BodyString(), ActionString());
+ delegate.set_dismiss_button_text(DismissString());
+ delegate.set_learn_more_button_text(LearnMoreString());
+ ToolbarActionsBarBubbleMac* bubble = CreateAndShowBubble(&delegate);
+ EXPECT_TRUE([bubble learnMoreButton]);
+ EXPECT_TRUE([bubble dismissButton]);
+
+ [bubble close];
+ chrome::testing::NSRunLoopRunAllPending();
+ }
+}

Powered by Google App Engine
This is Rietveld 408576698