| OLD | NEW |
| (Empty) | |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #import <Cocoa/Cocoa.h> |
| 6 |
| 7 #include "testing/gtest/include/gtest/gtest.h" |
| 8 #include "ui/base/events.h" |
| 9 #include "ui/base/test/cocoa_test_event_utils.h" |
| 10 #import "ui/base/test/ui_cocoa_test_helper.h" |
| 11 #include "ui/gfx/point.h" |
| 12 |
| 13 using namespace cocoa_test_event_utils; |
| 14 |
| 15 namespace { |
| 16 |
| 17 class EventsMacTest : public ui::CocoaTest { |
| 18 public: |
| 19 EventsMacTest() {} |
| 20 |
| 21 private: |
| 22 DISALLOW_COPY_AND_ASSIGN(EventsMacTest); |
| 23 }; |
| 24 |
| 25 TEST_F(EventsMacTest, EventTypeFromNative) { |
| 26 NSEvent* native_event = nil; |
| 27 ui::EventType type = ui::ET_UNKNOWN; |
| 28 |
| 29 native_event = MouseEventWithType(NSLeftMouseDown, 0); |
| 30 type = ui::EventTypeFromNative(native_event); |
| 31 EXPECT_EQ(ui::ET_MOUSE_PRESSED, type); |
| 32 |
| 33 native_event = MouseEventWithType(NSLeftMouseUp, 0); |
| 34 type = ui::EventTypeFromNative(native_event); |
| 35 EXPECT_EQ(ui::ET_MOUSE_RELEASED, type); |
| 36 |
| 37 native_event = MouseEventWithType(NSRightMouseDown, 0); |
| 38 type = ui::EventTypeFromNative(native_event); |
| 39 EXPECT_EQ(ui::ET_MOUSE_PRESSED, type); |
| 40 |
| 41 native_event = MouseEventWithType(NSRightMouseUp, 0); |
| 42 type = ui::EventTypeFromNative(native_event); |
| 43 EXPECT_EQ(ui::ET_MOUSE_RELEASED, type); |
| 44 |
| 45 native_event = MouseEventWithType(NSMouseMoved, 0); |
| 46 type = ui::EventTypeFromNative(native_event); |
| 47 EXPECT_EQ(ui::ET_MOUSE_MOVED, type); |
| 48 |
| 49 native_event = MouseEventWithType(NSLeftMouseDragged, 0); |
| 50 type = ui::EventTypeFromNative(native_event); |
| 51 EXPECT_EQ(ui::ET_MOUSE_DRAGGED, type); |
| 52 |
| 53 native_event = MouseEventWithType(NSRightMouseDragged, 0); |
| 54 type = ui::EventTypeFromNative(native_event); |
| 55 EXPECT_EQ(ui::ET_MOUSE_DRAGGED, type); |
| 56 |
| 57 native_event = EnterExitEventWithType(NSMouseEntered); |
| 58 type = ui::EventTypeFromNative(native_event); |
| 59 EXPECT_EQ(ui::ET_MOUSE_ENTERED, type); |
| 60 |
| 61 native_event = EnterExitEventWithType(NSMouseExited); |
| 62 type = ui::EventTypeFromNative(native_event); |
| 63 EXPECT_EQ(ui::ET_MOUSE_EXITED, type); |
| 64 |
| 65 native_event = KeyEventWithType(NSKeyDown, 0); |
| 66 type = ui::EventTypeFromNative(native_event); |
| 67 EXPECT_EQ(ui::ET_KEY_PRESSED, type); |
| 68 |
| 69 native_event = KeyEventWithType(NSKeyUp, 0); |
| 70 type = ui::EventTypeFromNative(native_event); |
| 71 EXPECT_EQ(ui::ET_KEY_RELEASED, type); |
| 72 |
| 73 native_event = KeyEventWithType(NSFlagsChanged, 0); |
| 74 type = ui::EventTypeFromNative(native_event); |
| 75 EXPECT_EQ(ui::ET_KEY_PRESSED, type); |
| 76 |
| 77 native_event = OtherEventWithType(NSAppKitDefined); |
| 78 type = ui::EventTypeFromNative(native_event); |
| 79 EXPECT_EQ(ui::ET_UNKNOWN, type); |
| 80 |
| 81 native_event = OtherEventWithType(NSSystemDefined); |
| 82 type = ui::EventTypeFromNative(native_event); |
| 83 EXPECT_EQ(ui::ET_UNKNOWN, type); |
| 84 |
| 85 native_event = OtherEventWithType(NSApplicationDefined); |
| 86 type = ui::EventTypeFromNative(native_event); |
| 87 EXPECT_EQ(ui::ET_UNKNOWN, type); |
| 88 |
| 89 native_event = OtherEventWithType(NSPeriodic); |
| 90 type = ui::EventTypeFromNative(native_event); |
| 91 EXPECT_EQ(ui::ET_UNKNOWN, type); |
| 92 |
| 93 native_event = EnterExitEventWithType(NSCursorUpdate); |
| 94 type = ui::EventTypeFromNative(native_event); |
| 95 EXPECT_EQ(ui::ET_UNKNOWN, type); |
| 96 |
| 97 native_event = MouseEventWithType(NSOtherMouseDown, 0); |
| 98 type = ui::EventTypeFromNative(native_event); |
| 99 EXPECT_EQ(ui::ET_MOUSE_PRESSED, type); |
| 100 |
| 101 native_event = MouseEventWithType(NSOtherMouseUp, 0); |
| 102 type = ui::EventTypeFromNative(native_event); |
| 103 EXPECT_EQ(ui::ET_MOUSE_RELEASED, type); |
| 104 |
| 105 native_event = MouseEventWithType(NSOtherMouseDragged, 0); |
| 106 type = ui::EventTypeFromNative(native_event); |
| 107 EXPECT_EQ(ui::ET_MOUSE_DRAGGED, type); |
| 108 } |
| 109 |
| 110 TEST_F(EventsMacTest, EventFlagsFromNative) { |
| 111 NSEvent* native_event = nil; |
| 112 int flags = 0; |
| 113 |
| 114 // No key flags. |
| 115 native_event = KeyEventWithType(NSKeyDown, 0); |
| 116 flags = ui::EventFlagsFromNative(native_event); |
| 117 EXPECT_EQ(0, flags); |
| 118 |
| 119 // All key flags. |
| 120 native_event = KeyEventWithType(NSKeyDown, |
| 121 NSAlphaShiftKeyMask | |
| 122 NSShiftKeyMask | |
| 123 NSControlKeyMask | |
| 124 NSAlternateKeyMask | |
| 125 NSCommandKeyMask); |
| 126 flags = ui::EventFlagsFromNative(native_event); |
| 127 EXPECT_EQ(ui::EF_CAPS_LOCK_DOWN | |
| 128 ui::EF_SHIFT_DOWN | |
| 129 ui::EF_CONTROL_DOWN | |
| 130 ui::EF_ALT_DOWN | |
| 131 ui::EF_COMMAND_DOWN, |
| 132 flags); |
| 133 |
| 134 // Left mouse flags. |
| 135 native_event = MouseEventWithType(NSLeftMouseDown, 0); |
| 136 flags = ui::EventFlagsFromNative(native_event); |
| 137 EXPECT_EQ(ui::EF_LEFT_BUTTON_DOWN, flags); |
| 138 |
| 139 // Right mouse flags. |
| 140 native_event = MouseEventWithType(NSRightMouseDown, 0); |
| 141 flags = ui::EventFlagsFromNative(native_event); |
| 142 EXPECT_EQ(ui::EF_RIGHT_BUTTON_DOWN, flags); |
| 143 |
| 144 // Center mouse flags. |
| 145 native_event = MouseEventWithType(NSOtherMouseDown, 0); |
| 146 flags = ui::EventFlagsFromNative(native_event); |
| 147 EXPECT_EQ(ui::EF_MIDDLE_BUTTON_DOWN, flags); |
| 148 } |
| 149 |
| 150 TEST_F(EventsMacTest, EventLocationFromNative) { |
| 151 NSWindow* window = [[NSWindow alloc] |
| 152 initWithContentRect:NSMakeRect(10, 25, 200, 205) |
| 153 styleMask:NSTitledWindowMask |
| 154 backing:NSBackingStoreBuffered |
| 155 defer:NO]; |
| 156 [window orderFront:nil]; |
| 157 |
| 158 // Construct mouse event from window number having position at bottom-left. |
| 159 // Cocoa origin is at bottom-left. ui::Event origin is top-left. |
| 160 NSEvent* native_event = |
| 161 [NSEvent mouseEventWithType:NSLeftMouseDown |
| 162 location:NSMakePoint(10, 15) |
| 163 modifierFlags:0 |
| 164 timestamp:[NSDate timeIntervalSinceReferenceDate] |
| 165 windowNumber:[window windowNumber] |
| 166 context:[window graphicsContext] |
| 167 eventNumber:0 |
| 168 clickCount:1 |
| 169 pressure:0.0f]; |
| 170 |
| 171 // Expect resulting event to be positioned relative to top-left. |
| 172 gfx::Point location = ui::EventLocationFromNative(native_event); |
| 173 EXPECT_EQ(gfx::Point(10, 190), location); |
| 174 |
| 175 [window orderOut:nil]; |
| 176 [window close]; |
| 177 } |
| 178 |
| 179 TEST_F(EventsMacTest, KeyboardCodeFromNative) { |
| 180 NSEvent* native_event = nil; |
| 181 ui::KeyboardCode code = ui::VKEY_UNKNOWN; |
| 182 |
| 183 // Simple "x". No modifiers. |
| 184 native_event = |
| 185 [NSEvent keyEventWithType:NSKeyDown |
| 186 location:NSZeroPoint |
| 187 modifierFlags:0 |
| 188 timestamp:[NSDate timeIntervalSinceReferenceDate] |
| 189 windowNumber:0 |
| 190 context:nil |
| 191 characters:@"x" |
| 192 charactersIgnoringModifiers:@"x" |
| 193 isARepeat:NO |
| 194 keyCode:0x58]; |
| 195 code = ui::KeyboardCodeFromNative(native_event); |
| 196 EXPECT_EQ(ui::VKEY_X, code); |
| 197 |
| 198 // Option/Alt "x". |
| 199 native_event = |
| 200 [NSEvent keyEventWithType:NSKeyDown |
| 201 location:NSZeroPoint |
| 202 modifierFlags:NSAlternateKeyMask |
| 203 timestamp:[NSDate timeIntervalSinceReferenceDate] |
| 204 windowNumber:0 |
| 205 context:nil |
| 206 characters:@"\0x2248" // opt-x |
| 207 charactersIgnoringModifiers:@"x" |
| 208 isARepeat:NO |
| 209 keyCode:0x58]; |
| 210 code = ui::KeyboardCodeFromNative(native_event); |
| 211 EXPECT_EQ(ui::VKEY_X, code); |
| 212 |
| 213 // Option/Alt (alone). |
| 214 native_event = |
| 215 [NSEvent keyEventWithType:NSFlagsChanged |
| 216 location:NSZeroPoint |
| 217 modifierFlags:NSAlternateKeyMask |
| 218 timestamp:[NSDate timeIntervalSinceReferenceDate] |
| 219 windowNumber:0 |
| 220 context:nil |
| 221 characters:@"" |
| 222 charactersIgnoringModifiers:@"" |
| 223 isARepeat:NO |
| 224 keyCode:0x3a]; |
| 225 code = ui::KeyboardCodeFromNative(native_event); |
| 226 EXPECT_EQ(ui::VKEY_MENU, code); |
| 227 } |
| 228 |
| 229 TEST_F(EventsMacTest, IsMouseEvent) { |
| 230 NSEvent* native_event = nil; |
| 231 |
| 232 native_event = MouseEventWithType(NSLeftMouseDown, 0); |
| 233 EXPECT_TRUE(ui::IsMouseEvent(native_event)); |
| 234 |
| 235 native_event = MouseEventWithType(NSLeftMouseUp, 0); |
| 236 EXPECT_TRUE(ui::IsMouseEvent(native_event)); |
| 237 |
| 238 native_event = MouseEventWithType(NSRightMouseDown, 0); |
| 239 EXPECT_TRUE(ui::IsMouseEvent(native_event)); |
| 240 |
| 241 native_event = MouseEventWithType(NSRightMouseUp, 0); |
| 242 EXPECT_TRUE(ui::IsMouseEvent(native_event)); |
| 243 |
| 244 native_event = MouseEventWithType(NSMouseMoved, 0); |
| 245 EXPECT_TRUE(ui::IsMouseEvent(native_event)); |
| 246 |
| 247 native_event = MouseEventWithType(NSLeftMouseDragged, 0); |
| 248 EXPECT_TRUE(ui::IsMouseEvent(native_event)); |
| 249 |
| 250 native_event = MouseEventWithType(NSRightMouseDragged, 0); |
| 251 EXPECT_TRUE(ui::IsMouseEvent(native_event)); |
| 252 |
| 253 native_event = EnterExitEventWithType(NSMouseEntered); |
| 254 EXPECT_TRUE(ui::IsMouseEvent(native_event)); |
| 255 |
| 256 native_event = EnterExitEventWithType(NSMouseExited); |
| 257 EXPECT_TRUE(ui::IsMouseEvent(native_event)); |
| 258 |
| 259 native_event = KeyEventWithType(NSKeyDown, 0); |
| 260 EXPECT_FALSE(ui::IsMouseEvent(native_event)); |
| 261 |
| 262 native_event = KeyEventWithType(NSKeyUp, 0); |
| 263 EXPECT_FALSE(ui::IsMouseEvent(native_event)); |
| 264 |
| 265 native_event = KeyEventWithType(NSFlagsChanged, 0); |
| 266 EXPECT_FALSE(ui::IsMouseEvent(native_event)); |
| 267 |
| 268 native_event = OtherEventWithType(NSAppKitDefined); |
| 269 EXPECT_FALSE(ui::IsMouseEvent(native_event)); |
| 270 |
| 271 native_event = OtherEventWithType(NSSystemDefined); |
| 272 EXPECT_FALSE(ui::IsMouseEvent(native_event)); |
| 273 |
| 274 native_event = OtherEventWithType(NSApplicationDefined); |
| 275 EXPECT_FALSE(ui::IsMouseEvent(native_event)); |
| 276 |
| 277 native_event = OtherEventWithType(NSPeriodic); |
| 278 EXPECT_FALSE(ui::IsMouseEvent(native_event)); |
| 279 |
| 280 native_event = EnterExitEventWithType(NSCursorUpdate); |
| 281 EXPECT_FALSE(ui::IsMouseEvent(native_event)); |
| 282 |
| 283 native_event = MouseEventWithType(NSOtherMouseDown, 0); |
| 284 EXPECT_TRUE(ui::IsMouseEvent(native_event)); |
| 285 |
| 286 native_event = MouseEventWithType(NSOtherMouseUp, 0); |
| 287 EXPECT_TRUE(ui::IsMouseEvent(native_event)); |
| 288 |
| 289 native_event = MouseEventWithType(NSOtherMouseDragged, 0); |
| 290 EXPECT_TRUE(ui::IsMouseEvent(native_event)); |
| 291 } |
| 292 |
| 293 TEST_F(EventsMacTest, CreateNoopEvent) { |
| 294 NSEvent* native_event = ui::CreateNoopEvent(); |
| 295 EXPECT_TRUE(native_event != nil); |
| 296 } |
| 297 |
| 298 } // namespace |
| OLD | NEW |