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

Side by Side Diff: content/browser/renderer_host/input/web_input_event_builders_mac_unittest.mm

Issue 1331013004: [KeyEvent Mac] Move WebInputEventFactory into chromium. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Format imported code to chromium style Created 5 years, 3 months 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
OLDNEW
(Empty)
1 // Copyright (c) 2015 The Chromium Authors. All rights reserved.
Alexei Svitkine (slow) 2015/09/14 17:14:43 No (c)
dtapuska 2015/09/14 18:31:21 Done.
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 #include <gtest/gtest.h>
Alexei Svitkine (slow) 2015/09/14 17:14:43 Can this be #include "testing/gtest/include/gtest/
dtapuska 2015/09/14 18:31:21 Done.
7
8 #include "content/browser/renderer_host/input/web_input_event_builders_mac.h"
Alexei Svitkine (slow) 2015/09/14 17:14:43 This should be the first include.
dtapuska 2015/09/14 18:31:21 Done.
9 #include "ui/events/keycodes/keyboard_codes.h"
10
11 using blink::WebKeyboardEvent;
12 using blink::WebInputEvent;
13 using content::WebKeyboardEventBuilder;
14
15 namespace {
16
17 struct KeyMappingEntry {
18 int mac_key_code;
19 unichar character;
20 int windows_key_code;
21 };
22
23 struct ModifierKey {
24 int mac_key_code;
25 int left_or_right_mask;
26 int non_specific_mask;
27 };
28
29 // Modifier keys, grouped into left/right pairs.
30 const ModifierKey kModifierKeys[] = {
31 {56, 1 << 1, NSShiftKeyMask}, // Left Shift
32 {60, 1 << 2, NSShiftKeyMask}, // Right Shift
33 {55, 1 << 3, NSCommandKeyMask}, // Left Command
34 {54, 1 << 4, NSCommandKeyMask}, // Right Command
35 {58, 1 << 5, NSAlternateKeyMask}, // Left Alt
36 {61, 1 << 6, NSAlternateKeyMask}, // Right Alt
37 {59, 1 << 0, NSControlKeyMask}, // Left Control
38 {62, 1 << 13, NSControlKeyMask}, // Right Control
39 };
40
41 NSEvent* BuildFakeKeyEvent(NSUInteger key_code,
42 unichar character,
43 NSUInteger modifier_flags,
44 NSEventType event_type) {
45 NSString* string = [NSString stringWithCharacters:&character length:1];
46 return [NSEvent keyEventWithType:event_type
47 location:NSZeroPoint
48 modifierFlags:modifier_flags
49 timestamp:0.0
50 windowNumber:0
51 context:nil
52 characters:string
53 charactersIgnoringModifiers:string
54 isARepeat:NO
55 keyCode:key_code];
56 }
57
58 } // namespace
59
60 // Test that arrow keys don't have numpad modifier set.
61 TEST(WebInputEventBuilderMacTest, ArrowKeyNumPad) {
62 // Left
63 NSEvent* mac_event = BuildFakeKeyEvent(0x7B, NSLeftArrowFunctionKey,
64 NSNumericPadKeyMask, NSKeyDown);
65 WebKeyboardEvent web_event = WebKeyboardEventBuilder::Build(mac_event);
66 EXPECT_EQ(0, web_event.modifiers);
67
68 // Right
69 mac_event = BuildFakeKeyEvent(0x7C, NSRightArrowFunctionKey,
70 NSNumericPadKeyMask, NSKeyDown);
71 web_event = WebKeyboardEventBuilder::Build(mac_event);
72 EXPECT_EQ(0, web_event.modifiers);
73
74 // Down
75 mac_event = BuildFakeKeyEvent(0x7D, NSDownArrowFunctionKey,
76 NSNumericPadKeyMask, NSKeyDown);
77 web_event = WebKeyboardEventBuilder::Build(mac_event);
78 EXPECT_EQ(0, web_event.modifiers);
79
80 // Up
81 mac_event = BuildFakeKeyEvent(0x7E, NSUpArrowFunctionKey, NSNumericPadKeyMask,
82 NSKeyDown);
83 web_event = WebKeyboardEventBuilder::Build(mac_event);
84 EXPECT_EQ(0, web_event.modifiers);
85 }
86
87 // Test that numpad keys get mapped correctly.
88 TEST(WebInputEventBuilderMacTest, NumPadMapping) {
89 KeyMappingEntry table[] = {
90 {65, '.', ui::VKEY_DECIMAL},
91 {67, '*', ui::VKEY_MULTIPLY},
92 {69, '+', ui::VKEY_ADD},
93 {71, NSClearLineFunctionKey, ui::VKEY_CLEAR},
94 {75, '/', ui::VKEY_DIVIDE},
95 {76, 3, ui::VKEY_RETURN},
96 {78, '-', ui::VKEY_SUBTRACT},
97 {81, '=', ui::VKEY_OEM_PLUS},
98 {82, '0', ui::VKEY_0},
99 {83, '1', ui::VKEY_1},
100 {84, '2', ui::VKEY_2},
101 {85, '3', ui::VKEY_3},
102 {86, '4', ui::VKEY_4},
103 {87, '5', ui::VKEY_5},
104 {88, '6', ui::VKEY_6},
105 {89, '7', ui::VKEY_7},
106 {91, '8', ui::VKEY_8},
107 {92, '9', ui::VKEY_9},
108 };
109
110 for (size_t i = 0; i < arraysize(table); ++i) {
111 NSEvent* mac_event = BuildFakeKeyEvent(table[i].mac_key_code,
112 table[i].character, 0, NSKeyDown);
113 WebKeyboardEvent web_event = WebKeyboardEventBuilder::Build(mac_event);
114 EXPECT_EQ(table[i].windows_key_code, web_event.windowsKeyCode);
115 }
116 }
117
118 // Test that left- and right-hand modifier keys are interpreted correctly when
119 // pressed simultaneously.
120 TEST(WebInputEventFactoryTestMac, SimultaneousModifierKeys) {
121 for (size_t i = 0; i < arraysize(kModifierKeys) / 2; ++i) {
122 const ModifierKey& left = kModifierKeys[2 * i];
123 const ModifierKey& right = kModifierKeys[2 * i + 1];
124 // Press the left key.
125 NSEvent* mac_event = BuildFakeKeyEvent(
126 left.mac_key_code, 0, left.left_or_right_mask | left.non_specific_mask,
127 NSFlagsChanged);
128 WebKeyboardEvent web_event = WebKeyboardEventBuilder::Build(mac_event);
129 EXPECT_EQ(WebInputEvent::RawKeyDown, web_event.type);
130 // Press the right key
131 mac_event =
132 BuildFakeKeyEvent(right.mac_key_code, 0,
133 left.left_or_right_mask | right.left_or_right_mask |
134 left.non_specific_mask,
135 NSFlagsChanged);
136 web_event = WebKeyboardEventBuilder::Build(mac_event);
137 EXPECT_EQ(WebInputEvent::RawKeyDown, web_event.type);
138 // Release the right key
139 mac_event = BuildFakeKeyEvent(
140 right.mac_key_code, 0, left.left_or_right_mask | left.non_specific_mask,
141 NSFlagsChanged);
142 // Release the left key
143 mac_event = BuildFakeKeyEvent(left.mac_key_code, 0, 0, NSFlagsChanged);
144 web_event = WebKeyboardEventBuilder::Build(mac_event);
145 EXPECT_EQ(WebInputEvent::KeyUp, web_event.type);
146 }
147 }
148
149 // Test that individual modifier keys are still reported correctly, even if the
150 // undocumented left- or right-hand flags are not set.
151 TEST(WebInputEventBuilderMacTest, MissingUndocumentedModifierFlags) {
152 for (size_t i = 0; i < arraysize(kModifierKeys); ++i) {
153 const ModifierKey& key = kModifierKeys[i];
154 NSEvent* mac_event = BuildFakeKeyEvent(
155 key.mac_key_code, 0, key.non_specific_mask, NSFlagsChanged);
156 WebKeyboardEvent web_event = WebKeyboardEventBuilder::Build(mac_event);
157 EXPECT_EQ(WebInputEvent::RawKeyDown, web_event.type);
158 mac_event = BuildFakeKeyEvent(key.mac_key_code, 0, 0, NSFlagsChanged);
159 web_event = WebKeyboardEventBuilder::Build(mac_event);
160 EXPECT_EQ(WebInputEvent::KeyUp, web_event.type);
161 }
162 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698