blob: 4f83efd1797b635b4b124ad13694a4e1aa848587 [file] [log] [blame]
// Copyright (c) 2011 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 <Carbon/Carbon.h>
#include "base/debug/debugger.h"
#include "base/mac/scoped_nsobject.h"
#include "base/run_loop.h"
#import "chrome/browser/ui/cocoa/base_bubble_controller.h"
#include "chrome/browser/ui/cocoa/info_bubble_window.h"
#include "chrome/browser/ui/cocoa/test/cocoa_test_helper.h"
#include "chrome/browser/ui/cocoa/test/run_loop_testing.h"
#include "ui/events/test/cocoa_test_event_utils.h"
// Mock BaseBubbleController to pick up -cancel:, but don't call the designated
// initializer in order to test just InfoBubbleWindow.
@interface InfoBubbleWindowController : BaseBubbleController
@end
@implementation InfoBubbleWindowController
- (IBAction)cancel:(id)sender {
[self close];
}
@end
class InfoBubbleWindowTest : public CocoaTest {
public:
void SetUp() override {
CocoaTest::SetUp();
window_.reset(
[[InfoBubbleWindow alloc] initWithContentRect:NSMakeRect(0, 0, 10, 10)
styleMask:NSBorderlessWindowMask
backing:NSBackingStoreBuffered
defer:NO]);
[window_ setAllowedAnimations:info_bubble::kAnimateNone];
controller_.reset(
[[InfoBubbleWindowController alloc] initWithWindow:window_]);
}
void TearDown() override {
// Both controller and window need to be closed & released before TearDown,
// or CocoaTest will consider the window still open and spinwait for it to
// close.
[controller_ close];
chrome::testing::NSRunLoopRunAllPending();
controller_.reset();
window_.reset();
CocoaTest::TearDown();
}
base::scoped_nsobject<InfoBubbleWindow> window_;
base::scoped_nsobject<NSWindowController> controller_;
};
TEST_F(InfoBubbleWindowTest, Basics2) {
EXPECT_TRUE([window_ canBecomeKeyWindow]);
EXPECT_FALSE([window_ canBecomeMainWindow]);
EXPECT_TRUE([window_ isExcludedFromWindowsMenu]);
}
TEST_F(InfoBubbleWindowTest, EscapeCloses) {
[controller_ showWindow:nil];
EXPECT_TRUE([window_ isVisible]);
[window_ performKeyEquivalent:cocoa_test_event_utils::KeyEventWithKeyCode(
kVK_Escape, '\e', NSKeyDown, 0)];
EXPECT_FALSE([window_ isVisible]);
}
TEST_F(InfoBubbleWindowTest, CommandPeriodCloses) {
[controller_ showWindow:nil];
EXPECT_TRUE([window_ isVisible]);
[window_ performKeyEquivalent:cocoa_test_event_utils::KeyEventWithKeyCode(
kVK_ANSI_Period, '.', NSKeyDown,
NSCommandKeyMask)];
EXPECT_FALSE([window_ isVisible]);
}