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

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: Rebase 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.
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>
7
8 #include "content/browser/renderer_host/input/web_input_event_builders_mac.h"
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 macKeyCode;
19 unichar character;
20 int windowsKeyCode;
21 };
22
23 struct ModifierKey {
24 int macKeyCode;
25 int leftOrRightMask;
26 int nonSpecificMask;
27 };
28
29 // Modifier keys, grouped into left/right pairs.
30 ModifierKey modifierKeys[] = {
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 keyCode,
42 unichar character,
43 NSUInteger modifierFlags,
44 NSEventType eventType) {
45 NSString* string = [NSString stringWithCharacters:&character length:1];
46 return [NSEvent keyEventWithType:eventType
47 location:NSZeroPoint
48 modifierFlags:modifierFlags
49 timestamp:0.0
50 windowNumber:0
51 context:nil
52 characters:string
53 charactersIgnoringModifiers:string
54 isARepeat:NO
55 keyCode:keyCode];
56 }
57
58 } // namespace
59
60 // Test that arrow keys don't have numpad modifier set.
61 TEST(WebInputEventBuilderMacTest, ArrowKeyNumPad) {
62 // Left
63 NSEvent* macEvent = BuildFakeKeyEvent(0x7B, NSLeftArrowFunctionKey,
64 NSNumericPadKeyMask, NSKeyDown);
65 WebKeyboardEvent webEvent = WebKeyboardEventBuilder::Build(macEvent);
66 EXPECT_EQ(0, webEvent.modifiers);
67
68 // Right
69 macEvent = BuildFakeKeyEvent(0x7C, NSRightArrowFunctionKey,
70 NSNumericPadKeyMask, NSKeyDown);
71 webEvent = WebKeyboardEventBuilder::Build(macEvent);
72 EXPECT_EQ(0, webEvent.modifiers);
73
74 // Down
75 macEvent = BuildFakeKeyEvent(0x7D, NSDownArrowFunctionKey,
76 NSNumericPadKeyMask, NSKeyDown);
77 webEvent = WebKeyboardEventBuilder::Build(macEvent);
78 EXPECT_EQ(0, webEvent.modifiers);
79
80 // Up
81 macEvent = BuildFakeKeyEvent(0x7E, NSUpArrowFunctionKey, NSNumericPadKeyMask,
82 NSKeyDown);
83 webEvent = WebKeyboardEventBuilder::Build(macEvent);
84 EXPECT_EQ(0, webEvent.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* macEvent = BuildFakeKeyEvent(table[i].macKeyCode,
112 table[i].character, 0, NSKeyDown);
113 WebKeyboardEvent webEvent = WebKeyboardEventBuilder::Build(macEvent);
114 EXPECT_EQ(table[i].windowsKeyCode, webEvent.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(modifierKeys) / 2; ++i) {
122 const ModifierKey& left = modifierKeys[2 * i];
123 const ModifierKey& right = modifierKeys[2 * i + 1];
124 // Press the left key.
125 NSEvent* macEvent = BuildFakeKeyEvent(
126 left.macKeyCode, 0, left.leftOrRightMask | left.nonSpecificMask,
127 NSFlagsChanged);
128 WebKeyboardEvent webEvent = WebKeyboardEventBuilder::Build(macEvent);
129 EXPECT_EQ(WebInputEvent::RawKeyDown, webEvent.type);
130 // Press the right key
131 macEvent = BuildFakeKeyEvent(
132 right.macKeyCode, 0,
133 left.leftOrRightMask | right.leftOrRightMask | left.nonSpecificMask,
134 NSFlagsChanged);
135 webEvent = WebKeyboardEventBuilder::Build(macEvent);
136 EXPECT_EQ(WebInputEvent::RawKeyDown, webEvent.type);
137 // Release the right key
138 macEvent = BuildFakeKeyEvent(right.macKeyCode, 0,
139 left.leftOrRightMask | left.nonSpecificMask,
140 NSFlagsChanged);
141 // Release the left key
142 macEvent = BuildFakeKeyEvent(left.macKeyCode, 0, 0, NSFlagsChanged);
143 webEvent = WebKeyboardEventBuilder::Build(macEvent);
144 EXPECT_EQ(WebInputEvent::KeyUp, webEvent.type);
145 }
146 }
147
148 // Test that individual modifier keys are still reported correctly, even if the
149 // undocumented left- or right-hand flags are not set.
150 TEST(WebInputEventBuilderMacTest, MissingUndocumentedModifierFlags) {
151 for (size_t i = 0; i < arraysize(modifierKeys); ++i) {
152 const ModifierKey& key = modifierKeys[i];
153 NSEvent* macEvent = BuildFakeKeyEvent(key.macKeyCode, 0,
154 key.nonSpecificMask, NSFlagsChanged);
155 WebKeyboardEvent webEvent = WebKeyboardEventBuilder::Build(macEvent);
156 EXPECT_EQ(WebInputEvent::RawKeyDown, webEvent.type);
157 macEvent = BuildFakeKeyEvent(key.macKeyCode, 0, 0, NSFlagsChanged);
158 webEvent = WebKeyboardEventBuilder::Build(macEvent);
159 EXPECT_EQ(WebInputEvent::KeyUp, webEvent.type);
160 }
161 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698