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

Side by Side Diff: ui/base/cocoa/events_mac_unittest.mm

Issue 8953037: Aura needs event translation for Mac (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 years 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
(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 <AppKit/NSEvent.h>
6
7 #include "testing/gtest/include/gtest/gtest.h"
8 #include "ui/base/events.h"
9 #import "ui/base/test/ui_cocoa_test_helper.h"
10 #include "ui/gfx/point.h"
11
12 namespace {
13
14 class EventsMacTest : public ui::CocoaTest {
15 public:
16 EventsMacTest() {}
17
18 private:
19 DISALLOW_COPY_AND_ASSIGN(EventsMacTest);
20 };
21
22 // Utility for creating a mouse event.
23 NSEvent* MouseEventWithType(NSEventType event_type) {
24 return [NSEvent mouseEventWithType:event_type
Nico 2011/12/19 20:54:49 This looks a lot like the stuff in ui/base/test/co
dhollowa 2011/12/19 23:19:11 Done. Yes, I've consolidated these with those and
25 location:NSZeroPoint
26 modifierFlags:0
27 timestamp:[NSDate timeIntervalSinceReferenceDate]
28 windowNumber:0
29 context:nil
30 eventNumber:0
31 clickCount:1
32 pressure:0.0f];
33 }
34
35 // Utility for creating a key event.
36 NSEvent* KeyEventWithType(NSEventType event_type, NSUInteger modifiers) {
37 return [NSEvent keyEventWithType:event_type
38 location:NSZeroPoint
39 modifierFlags:modifiers
40 timestamp:[NSDate timeIntervalSinceReferenceDate]
41 windowNumber:0
42 context:nil
43 characters:@"x"
44 charactersIgnoringModifiers:@"x"
45 isARepeat:NO
46 keyCode:0x78];
47 }
48
49 // Utility for creating an enter/exit event.
50 NSEvent* EnterExitEventWithType(NSEventType event_type) {
51 return [NSEvent enterExitEventWithType:event_type
52 location:NSZeroPoint
53 modifierFlags:0
54 timestamp:[NSDate timeIntervalSinceReferenceDate]
55 windowNumber:0
56 context:nil
57 eventNumber:0
58 trackingNumber:0
59 userData:NULL];
60 }
61
62 // Utility for creating an "other" event.
63 NSEvent* OtherEventWithType(NSEventType event_type) {
64 return [NSEvent otherEventWithType:event_type
65 location:NSZeroPoint
66 modifierFlags:0
67 timestamp:[NSDate timeIntervalSinceReferenceDate]
68 windowNumber:0
69 context:nil
70 subtype:0
71 data1:0
72 data2:0];
73 }
74
75 TEST_F(EventsMacTest, EventTypeFromNative) {
76 NSEvent* native_event = nil;
77 ui::EventType type = ui::ET_UNKNOWN;
78
79 native_event = MouseEventWithType(NSLeftMouseDown);
80 type = ui::EventTypeFromNative(native_event);
81 EXPECT_EQ(ui::ET_MOUSE_PRESSED, type);
82
83 native_event = MouseEventWithType(NSLeftMouseUp);
84 type = ui::EventTypeFromNative(native_event);
85 EXPECT_EQ(ui::ET_MOUSE_RELEASED, type);
86
87 native_event = MouseEventWithType(NSRightMouseDown);
88 type = ui::EventTypeFromNative(native_event);
89 EXPECT_EQ(ui::ET_MOUSE_PRESSED, type);
90
91 native_event = MouseEventWithType(NSRightMouseUp);
92 type = ui::EventTypeFromNative(native_event);
93 EXPECT_EQ(ui::ET_MOUSE_RELEASED, type);
94
95 native_event = MouseEventWithType(NSMouseMoved);
96 type = ui::EventTypeFromNative(native_event);
97 EXPECT_EQ(ui::ET_MOUSE_MOVED, type);
98
99 native_event = MouseEventWithType(NSLeftMouseDragged);
100 type = ui::EventTypeFromNative(native_event);
101 EXPECT_EQ(ui::ET_MOUSE_DRAGGED, type);
102
103 native_event = MouseEventWithType(NSRightMouseDragged);
104 type = ui::EventTypeFromNative(native_event);
105 EXPECT_EQ(ui::ET_MOUSE_DRAGGED, type);
106
107 native_event = EnterExitEventWithType(NSMouseEntered);
108 type = ui::EventTypeFromNative(native_event);
109 EXPECT_EQ(ui::ET_MOUSE_ENTERED, type);
110
111 native_event = EnterExitEventWithType(NSMouseExited);
112 type = ui::EventTypeFromNative(native_event);
113 EXPECT_EQ(ui::ET_MOUSE_EXITED, type);
114
115 native_event = KeyEventWithType(NSKeyDown, 0);
116 type = ui::EventTypeFromNative(native_event);
117 EXPECT_EQ(ui::ET_KEY_PRESSED, type);
118
119 native_event = KeyEventWithType(NSKeyUp, 0);
120 type = ui::EventTypeFromNative(native_event);
121 EXPECT_EQ(ui::ET_KEY_RELEASED, type);
122
123 native_event = KeyEventWithType(NSFlagsChanged, 0);
124 type = ui::EventTypeFromNative(native_event);
125 EXPECT_EQ(ui::ET_KEY_PRESSED, type);
126
127 native_event = OtherEventWithType(NSAppKitDefined);
128 type = ui::EventTypeFromNative(native_event);
129 EXPECT_EQ(ui::ET_UNKNOWN, type);
130
131 native_event = OtherEventWithType(NSSystemDefined);
132 type = ui::EventTypeFromNative(native_event);
133 EXPECT_EQ(ui::ET_UNKNOWN, type);
134
135 native_event = OtherEventWithType(NSApplicationDefined);
136 type = ui::EventTypeFromNative(native_event);
137 EXPECT_EQ(ui::ET_UNKNOWN, type);
138
139 native_event = OtherEventWithType(NSPeriodic);
140 type = ui::EventTypeFromNative(native_event);
141 EXPECT_EQ(ui::ET_UNKNOWN, type);
142
143 native_event = EnterExitEventWithType(NSCursorUpdate);
144 type = ui::EventTypeFromNative(native_event);
145 EXPECT_EQ(ui::ET_UNKNOWN, type);
146
147 native_event = MouseEventWithType(NSOtherMouseDown);
148 type = ui::EventTypeFromNative(native_event);
149 EXPECT_EQ(ui::ET_MOUSE_PRESSED, type);
150
151 native_event = MouseEventWithType(NSOtherMouseUp);
152 type = ui::EventTypeFromNative(native_event);
153 EXPECT_EQ(ui::ET_MOUSE_RELEASED, type);
154
155 native_event = MouseEventWithType(NSOtherMouseDragged);
156 type = ui::EventTypeFromNative(native_event);
157 EXPECT_EQ(ui::ET_MOUSE_DRAGGED, type);
158 }
159
160 TEST_F(EventsMacTest, EventFlagsFromNative) {
161 NSEvent* native_event = nil;
162 int flags = 0;
163
164 // No key flags.
165 native_event = KeyEventWithType(NSKeyDown, 0);
166 flags = ui::EventFlagsFromNative(native_event);
167 EXPECT_EQ(0, flags);
168
169 // All key flags.
170 native_event = KeyEventWithType(NSKeyDown,
171 NSAlphaShiftKeyMask |
172 NSShiftKeyMask |
173 NSControlKeyMask |
174 NSAlternateKeyMask |
175 NSCommandKeyMask);
176 flags = ui::EventFlagsFromNative(native_event);
177 EXPECT_EQ(ui::EF_CAPS_LOCK_DOWN |
178 ui::EF_SHIFT_DOWN |
179 ui::EF_CONTROL_DOWN |
180 ui::EF_ALT_DOWN |
181 ui::EF_COMMAND_DOWN,
182 flags);
183
184 // Left mouse flags.
185 native_event = MouseEventWithType(NSLeftMouseDown);
186 flags = ui::EventFlagsFromNative(native_event);
187 EXPECT_EQ(ui::EF_LEFT_BUTTON_DOWN, flags);
188
189 // Right mouse flags.
190 native_event = MouseEventWithType(NSRightMouseDown);
191 flags = ui::EventFlagsFromNative(native_event);
192 EXPECT_EQ(ui::EF_RIGHT_BUTTON_DOWN, flags);
193
194 // Center mouse flags.
195 native_event = MouseEventWithType(NSOtherMouseDown);
196 flags = ui::EventFlagsFromNative(native_event);
197 EXPECT_EQ(ui::EF_MIDDLE_BUTTON_DOWN, flags);
198 }
199
200 TEST_F(EventsMacTest, EventLocationFromNative) {
201 NSWindow* window = [[NSWindow alloc]
202 initWithContentRect:NSMakeRect(10, 25, 200, 205)
203 styleMask:NSTitledWindowMask
204 backing:NSBackingStoreBuffered
205 defer:NO];
206 [window orderFront:nil];
207
208 // Construct mouse event from window number having position at bottom-left.
209 // Cocoa origin is at bottom-left. ui::Event origin is top-left.
210 NSEvent* native_event =
211 [NSEvent mouseEventWithType:NSLeftMouseDown
212 location:NSMakePoint(10, 15)
213 modifierFlags:0
214 timestamp:[NSDate timeIntervalSinceReferenceDate]
215 windowNumber:[window windowNumber]
216 context:[window graphicsContext]
217 eventNumber:0
218 clickCount:1
219 pressure:0.0f];
220
221 // Expect resulting event to be positioned relative to top-left.
222 gfx::Point location = ui::EventLocationFromNative(native_event);
223 EXPECT_EQ(gfx::Point(10, 190), location);
224
225 [window orderOut:nil];
226 [window close];
227 }
228
229 TEST_F(EventsMacTest, KeyboardCodeFromNative) {
230 NSEvent* native_event = nil;
231 ui::KeyboardCode code = ui::VKEY_UNKNOWN;
232
233 // Simple "x". No modifiers.
234 native_event =
235 [NSEvent keyEventWithType:NSKeyDown
236 location:NSZeroPoint
237 modifierFlags:0
238 timestamp:[NSDate timeIntervalSinceReferenceDate]
239 windowNumber:0
240 context:nil
241 characters:@"x"
242 charactersIgnoringModifiers:@"x"
243 isARepeat:NO
244 keyCode:0x58];
245 code = ui::KeyboardCodeFromNative(native_event);
246 EXPECT_EQ(ui::VKEY_X, code);
247
248 // Option/Alt "x".
249 native_event =
250 [NSEvent keyEventWithType:NSKeyDown
251 location:NSZeroPoint
252 modifierFlags:NSAlternateKeyMask
253 timestamp:[NSDate timeIntervalSinceReferenceDate]
254 windowNumber:0
255 context:nil
256 characters:@"\0x2248" // opt-x
257 charactersIgnoringModifiers:@"x"
258 isARepeat:NO
259 keyCode:0x58];
260 code = ui::KeyboardCodeFromNative(native_event);
261 EXPECT_EQ(ui::VKEY_X, code);
262
263 // Option/Alt (alone).
264 native_event =
265 [NSEvent keyEventWithType:NSFlagsChanged
266 location:NSZeroPoint
267 modifierFlags:NSAlternateKeyMask
268 timestamp:[NSDate timeIntervalSinceReferenceDate]
269 windowNumber:0
270 context:nil
271 characters:@""
272 charactersIgnoringModifiers:@""
273 isARepeat:NO
274 keyCode:0x3a];
275 code = ui::KeyboardCodeFromNative(native_event);
276 EXPECT_EQ(ui::VKEY_MENU, code);
277 }
278
279 TEST_F(EventsMacTest, IsMouseEvent) {
280 NSEvent* native_event = nil;
281
282 native_event = MouseEventWithType(NSLeftMouseDown);
283 EXPECT_TRUE(ui::IsMouseEvent(native_event));
284
285 native_event = MouseEventWithType(NSLeftMouseUp);
286 EXPECT_TRUE(ui::IsMouseEvent(native_event));
287
288 native_event = MouseEventWithType(NSRightMouseDown);
289 EXPECT_TRUE(ui::IsMouseEvent(native_event));
290
291 native_event = MouseEventWithType(NSRightMouseUp);
292 EXPECT_TRUE(ui::IsMouseEvent(native_event));
293
294 native_event = MouseEventWithType(NSMouseMoved);
295 EXPECT_TRUE(ui::IsMouseEvent(native_event));
296
297 native_event = MouseEventWithType(NSLeftMouseDragged);
298 EXPECT_TRUE(ui::IsMouseEvent(native_event));
299
300 native_event = MouseEventWithType(NSRightMouseDragged);
301 EXPECT_TRUE(ui::IsMouseEvent(native_event));
302
303 native_event = EnterExitEventWithType(NSMouseEntered);
304 EXPECT_TRUE(ui::IsMouseEvent(native_event));
305
306 native_event = EnterExitEventWithType(NSMouseExited);
307 EXPECT_TRUE(ui::IsMouseEvent(native_event));
308
309 native_event = KeyEventWithType(NSKeyDown, 0);
310 EXPECT_FALSE(ui::IsMouseEvent(native_event));
311
312 native_event = KeyEventWithType(NSKeyUp, 0);
313 EXPECT_FALSE(ui::IsMouseEvent(native_event));
314
315 native_event = KeyEventWithType(NSFlagsChanged, 0);
316 EXPECT_FALSE(ui::IsMouseEvent(native_event));
317
318 native_event = OtherEventWithType(NSAppKitDefined);
319 EXPECT_FALSE(ui::IsMouseEvent(native_event));
320
321 native_event = OtherEventWithType(NSSystemDefined);
322 EXPECT_FALSE(ui::IsMouseEvent(native_event));
323
324 native_event = OtherEventWithType(NSApplicationDefined);
325 EXPECT_FALSE(ui::IsMouseEvent(native_event));
326
327 native_event = OtherEventWithType(NSPeriodic);
328 EXPECT_FALSE(ui::IsMouseEvent(native_event));
329
330 native_event = EnterExitEventWithType(NSCursorUpdate);
331 EXPECT_FALSE(ui::IsMouseEvent(native_event));
332
333 native_event = MouseEventWithType(NSOtherMouseDown);
334 EXPECT_TRUE(ui::IsMouseEvent(native_event));
335
336 native_event = MouseEventWithType(NSOtherMouseUp);
337 EXPECT_TRUE(ui::IsMouseEvent(native_event));
338
339 native_event = MouseEventWithType(NSOtherMouseDragged);
340 EXPECT_TRUE(ui::IsMouseEvent(native_event));
341 }
342
343 TEST_F(EventsMacTest, CreateNoopEvent) {
344 NSEvent* native_event = ui::CreateNoopEvent();
345 EXPECT_TRUE(native_event != nil);
346 }
Nico 2011/12/19 20:54:49 should there be a test that converts from native t
dhollowa 2011/12/19 23:19:11 The back-conversion is not used for production cod
347
348 } // namespace
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698