summaryrefslogtreecommitdiffstats
path: root/chrome/browser/ui/cocoa/event_utils_unittest.mm
blob: db2b7ac3d7a384569a210e9dde9f03ac55c3e122 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
// 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.

#import <objc/objc-class.h>

#import "chrome/browser/ui/cocoa/cocoa_test_helper.h"
#include "chrome/browser/ui/cocoa/event_utils.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "testing/platform_test.h"
#include "ui/base/events.h"
#include "ui/base/test/cocoa_test_event_utils.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 {

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, event_utils::WindowOpenDispositionFromNSEvent(me));

  // Middle Click = new background tab.
  me = cocoa_test_event_utils::MouseEventWithType(NSOtherMouseUp, 0);
  EXPECT_EQ(NEW_BACKGROUND_TAB,
            event_utils::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,
              event_utils::WindowOpenDispositionFromNSEvent(me));
  }

  // Cmd+Left Click = new background tab.
  me = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp,
                                                  NSCommandKeyMask);
  EXPECT_EQ(NEW_BACKGROUND_TAB,
            event_utils::WindowOpenDispositionFromNSEvent(me));

  // Cmd+Shift+Left Click = new foreground tab.
  me = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp,
                                              NSCommandKeyMask |
                                              NSShiftKeyMask);
  EXPECT_EQ(NEW_FOREGROUND_TAB,
            event_utils::WindowOpenDispositionFromNSEvent(me));

  // Shift+Left Click = new window
  me = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp,
                                                  NSShiftKeyMask);
  EXPECT_EQ(NEW_WINDOW, event_utils::WindowOpenDispositionFromNSEvent(me));
}


TEST_F(EventUtilsTest, TestEventFlagsFromNSEvent) {
  // Left click.
  NSEvent* left = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp, 0);
  EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON,
            event_utils::EventFlagsFromNSEvent(left));

  // Right click.
  NSEvent* right = cocoa_test_event_utils::MouseEventWithType(NSRightMouseUp,
                                                              0);
  EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON,
            event_utils::EventFlagsFromNSEvent(right));

  // Middle click.
  NSEvent* middle = cocoa_test_event_utils::MouseEventWithType(NSOtherMouseUp,
                                                               0);
  EXPECT_EQ(ui::EF_MIDDLE_MOUSE_BUTTON,
            event_utils::EventFlagsFromNSEvent(middle));

  // Caps + Left
  NSEvent* caps =
      cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp,
                                                 NSAlphaShiftKeyMask);
  EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CAPS_LOCK_DOWN,
            event_utils::EventFlagsFromNSEvent(caps));

  // Shift + Left
  NSEvent* shift = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp,
                                                              NSShiftKeyMask);
  EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_SHIFT_DOWN,
            event_utils::EventFlagsFromNSEvent(shift));

  // Ctrl + Left
  NSEvent* ctrl = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp,
                                                             NSControlKeyMask);
  EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN,
            event_utils::EventFlagsFromNSEvent(ctrl));

  // Alt + Left
  NSEvent* alt = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp,
                                                            NSAlternateKeyMask);
  EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN,
            event_utils::EventFlagsFromNSEvent(alt));

  // Cmd + Left
  NSEvent* cmd = cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp,
                                                            NSCommandKeyMask);
  EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_COMMAND_DOWN,
            event_utils::EventFlagsFromNSEvent(cmd));

  // Shift + Ctrl + Left
  NSEvent* shiftctrl =
      cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp,
                                                 NSShiftKeyMask |
                                                 NSControlKeyMask);
  EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN,
            event_utils::EventFlagsFromNSEvent(shiftctrl));

  // Cmd + Alt + Right
  NSEvent* cmdalt =
      cocoa_test_event_utils::MouseEventWithType(NSLeftMouseUp,
                                                 NSCommandKeyMask |
                                                 NSAlternateKeyMask);
  EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
            event_utils::EventFlagsFromNSEvent(cmdalt));
}

}  // namespace