// Copyright 2013 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 #include "testing/gtest/include/gtest/gtest.h" #include "testing/platform_test.h" #include "ui/base/cocoa/cocoa_event_utils.h" #include "ui/events/event_constants.h" #import "ui/base/test/cocoa_test_event_utils.h" #import "ui/base/test/ui_cocoa_test_helper.h" // We provide a donor class with a specially modified |modifierFlags| // implementation that we swap with NSEvent's. This is because we can't create a // NSEvent that represents a middle click with modifiers. @interface TestEvent : NSObject @end @implementation TestEvent - (NSUInteger)modifierFlags { return NSShiftKeyMask; } @end namespace ui { namespace { class EventUtilsTest : public CocoaTest { }; TEST_F(EventUtilsTest, TestWindowOpenDispositionFromNSEvent) { // Left Click = same tab. NSEvent* me = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp, 0); EXPECT_EQ(CURRENT_TAB, WindowOpenDispositionFromNSEvent(me)); // Middle Click = new background tab. me = cocoa_test_event_utils::MouseEventWithType(NSOtherMouseUp, 0); EXPECT_EQ(NEW_BACKGROUND_TAB, WindowOpenDispositionFromNSEvent(me)); // Shift+Middle Click = new foreground tab. { ScopedClassSwizzler swizzler([NSEvent class], [TestEvent class], @selector(modifierFlags)); me = cocoa_test_event_utils::MouseEventWithType(NSOtherMouseUp, NSShiftKeyMask); EXPECT_EQ(NEW_FOREGROUND_TAB, WindowOpenDispositionFromNSEvent(me)); } // Cmd+Left Click = new background tab. me = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp, NSCommandKeyMask); EXPECT_EQ(NEW_BACKGROUND_TAB, WindowOpenDispositionFromNSEvent(me)); // Cmd+Shift+Left Click = new foreground tab. me = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp, NSCommandKeyMask | NSShiftKeyMask); EXPECT_EQ(NEW_FOREGROUND_TAB, WindowOpenDispositionFromNSEvent(me)); // Shift+Left Click = new window me = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp, NSShiftKeyMask); EXPECT_EQ(NEW_WINDOW, WindowOpenDispositionFromNSEvent(me)); } TEST_F(EventUtilsTest, TestEventFlagsFromNSEvent) { // Left click. NSEvent* left = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp, 0); EXPECT_EQ(EF_LEFT_MOUSE_BUTTON, EventFlagsFromNSEvent(left)); // Right click. NSEvent* right = cocoa_test_event_utils::MouseEventWithType(NSRightMouseUp, 0); EXPECT_EQ(EF_RIGHT_MOUSE_BUTTON, EventFlagsFromNSEvent(right)); // Middle click. NSEvent* middle = cocoa_test_event_utils::MouseEventWithType(NSOtherMouseUp, 0); EXPECT_EQ(EF_MIDDLE_MOUSE_BUTTON, EventFlagsFromNSEvent(middle)); // Caps + Left NSEvent* caps = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp, NSAlphaShiftKeyMask); EXPECT_EQ(EF_LEFT_MOUSE_BUTTON | EF_CAPS_LOCK_DOWN, EventFlagsFromNSEvent(caps)); // Shift + Left NSEvent* shift = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp, NSShiftKeyMask); EXPECT_EQ(EF_LEFT_MOUSE_BUTTON | EF_SHIFT_DOWN, EventFlagsFromNSEvent(shift)); // Ctrl + Left NSEvent* ctrl = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp, NSControlKeyMask); EXPECT_EQ(EF_LEFT_MOUSE_BUTTON | EF_CONTROL_DOWN, EventFlagsFromNSEvent(ctrl)); // Alt + Left NSEvent* alt = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp, NSAlternateKeyMask); EXPECT_EQ(EF_LEFT_MOUSE_BUTTON | EF_ALT_DOWN, EventFlagsFromNSEvent(alt)); // Cmd + Left NSEvent* cmd = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp, NSCommandKeyMask); EXPECT_EQ(EF_LEFT_MOUSE_BUTTON | EF_COMMAND_DOWN, EventFlagsFromNSEvent(cmd)); // Shift + Ctrl + Left NSEvent* shiftctrl = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp, NSShiftKeyMask | NSControlKeyMask); EXPECT_EQ(EF_LEFT_MOUSE_BUTTON | EF_SHIFT_DOWN | EF_CONTROL_DOWN, EventFlagsFromNSEvent(shiftctrl)); // Cmd + Alt + Right NSEvent* cmdalt = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp, NSCommandKeyMask | NSAlternateKeyMask); EXPECT_EQ(EF_LEFT_MOUSE_BUTTON | EF_COMMAND_DOWN | EF_ALT_DOWN, EventFlagsFromNSEvent(cmdalt)); } } // namespace } // namespace ui