OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "content/browser/renderer_host/web_input_event_aura.h" | 5 #include "content/browser/renderer_host/web_input_event_aura.h" |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "testing/gtest/include/gtest/gtest.h" | 8 #include "testing/gtest/include/gtest/gtest.h" |
9 #include "ui/events/event.h" | 9 #include "ui/events/event.h" |
10 #include "ui/events/event_utils.h" | 10 #include "ui/events/event_utils.h" |
11 #include "ui/events/keycodes/dom3/dom_code.h" | 11 #include "ui/events/keycodes/dom3/dom_code.h" |
12 #include "ui/events/keycodes/dom3/dom_key.h" | 12 #include "ui/events/keycodes/dom3/dom_key.h" |
13 #include "ui/events/keycodes/dom4/keycode_converter.h" | 13 #include "ui/events/keycodes/dom4/keycode_converter.h" |
14 | 14 |
15 #if defined(USE_X11) | 15 #if defined(USE_X11) |
16 #include <X11/keysym.h> | 16 #include <X11/keysym.h> |
17 #include <X11/Xlib.h> | 17 #include <X11/Xlib.h> |
18 #include "ui/events/test/events_test_utils_x11.h" | 18 #include "ui/events/test/events_test_utils_x11.h" |
19 #include "ui/gfx/x/x11_types.h" | 19 #include "ui/gfx/x/x11_types.h" |
20 #endif | 20 #endif |
21 | 21 |
22 namespace content { | 22 namespace content { |
23 | 23 |
24 // Checks that MakeWebKeyboardEvent makes a DOM3 spec compliant key event. | 24 // Checks that MakeWebKeyboardEvent makes a DOM3 spec compliant key event. |
25 // crbug.com/127142 | 25 // crbug.com/127142 |
26 TEST(WebInputEventAuraTest, TestMakeWebKeyboardEvent) { | 26 TEST(WebInputEventAuraTest, TestMakeWebKeyboardEvent) { |
27 { | |
28 // Press Ctrl. | |
29 ui::KeyEvent event(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, | |
30 ui::DomCode::CONTROL_LEFT, ui::EF_CONTROL_DOWN); | |
31 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); | |
32 // However, modifier bit for Control in |webkit_event| should be set. | |
33 EXPECT_EQ(blink::WebInputEvent::ControlKey | blink::WebInputEvent::IsLeft, | |
34 webkit_event.modifiers); | |
35 } | |
36 { | |
37 // Release Ctrl. | |
38 ui::KeyEvent event(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, | |
39 ui::DomCode::CONTROL_LEFT, ui::EF_NONE); | |
40 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); | |
41 // However, modifier bit for Control in |webkit_event| shouldn't be set. | |
42 EXPECT_EQ(blink::WebInputEvent::IsLeft, webkit_event.modifiers); | |
43 } | |
27 #if defined(USE_X11) | 44 #if defined(USE_X11) |
45 const int kLocationModifiers = | |
46 blink::WebInputEvent::IsLeft | blink::WebInputEvent::IsRight; | |
28 ui::ScopedXI2Event xev; | 47 ui::ScopedXI2Event xev; |
29 { | 48 { |
30 // Press Ctrl. | 49 // Press Ctrl. |
31 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); | 50 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); |
32 ui::KeyEvent event(xev); | 51 ui::KeyEvent event(xev); |
33 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); | 52 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); |
34 // However, modifier bit for Control in |webkit_event| should be set. | 53 // However, modifier bit for Control in |webkit_event| should be set. |
35 EXPECT_EQ(webkit_event.modifiers, blink::WebInputEvent::ControlKey); | 54 EXPECT_EQ(blink::WebInputEvent::ControlKey, |
55 webkit_event.modifiers & ~kLocationModifiers); | |
36 } | 56 } |
37 { | 57 { |
38 // Release Ctrl. | 58 // Release Ctrl. |
39 xev.InitKeyEvent(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, ControlMask); | 59 xev.InitKeyEvent(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, ControlMask); |
40 ui::KeyEvent event(xev); | 60 ui::KeyEvent event(xev); |
41 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); | 61 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); |
42 // However, modifier bit for Control in |webkit_event| shouldn't be set. | 62 // However, modifier bit for Control in |webkit_event| shouldn't be set. |
43 EXPECT_EQ(webkit_event.modifiers, 0); | 63 EXPECT_EQ(0, webkit_event.modifiers & ~kLocationModifiers); |
44 } | 64 } |
45 #endif | 65 #endif |
46 } | 66 } |
47 | 67 |
48 // Checks that MakeWebKeyboardEvent returns a correct windowsKeyCode. | 68 // Checks that MakeWebKeyboardEvent returns a correct windowsKeyCode. |
49 #if defined(OS_CHROMEOS) || defined(THREAD_SANITIZER) | 69 #if defined(OS_CHROMEOS) || defined(THREAD_SANITIZER) |
50 // Fails on Chrome OS and under ThreadSanitizer on Linux, see | 70 // Fails on Chrome OS and under ThreadSanitizer on Linux, see |
51 // https://crbug.com/449103. | 71 // https://crbug.com/449103. |
52 #define MAYBE_TestMakeWebKeyboardEventWindowsKeyCode \ | 72 #define MAYBE_TestMakeWebKeyboardEventWindowsKeyCode \ |
53 DISABLED_TestMakeWebKeyboardEventWindowsKeyCode | 73 DISABLED_TestMakeWebKeyboardEventWindowsKeyCode |
54 #else | 74 #else |
55 #define MAYBE_TestMakeWebKeyboardEventWindowsKeyCode \ | 75 #define MAYBE_TestMakeWebKeyboardEventWindowsKeyCode \ |
56 TestMakeWebKeyboardEventWindowsKeyCode | 76 TestMakeWebKeyboardEventWindowsKeyCode |
57 #endif | 77 #endif |
58 TEST(WebInputEventAuraTest, MAYBE_TestMakeWebKeyboardEventWindowsKeyCode) { | 78 TEST(WebInputEventAuraTest, MAYBE_TestMakeWebKeyboardEventWindowsKeyCode) { |
59 #if defined(USE_X11) | 79 #if defined(USE_X11) |
60 ui::ScopedXI2Event xev; | 80 ui::ScopedXI2Event xev; |
61 { | 81 { |
62 // Press left Ctrl. | 82 // Press left Ctrl. |
63 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); | 83 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); |
64 XEvent* xevent = xev; | 84 XEvent* xevent = xev; |
65 xevent->xkey.keycode = ui::KeycodeConverter::DomCodeToNativeKeycode( | 85 xevent->xkey.keycode = |
66 ui::DomCode::CONTROL_LEFT); | 86 ui::KeycodeConverter::DomCodeToNativeKeycode(ui::DomCode::CONTROL_LEFT); |
67 ui::KeyEvent event(xev); | 87 ui::KeyEvent event(xev); |
68 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); | 88 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); |
69 // ui::VKEY_LCONTROL, instead of ui::VKEY_CONTROL, should be filled. | 89 // ui::VKEY_LCONTROL, instead of ui::VKEY_CONTROL, should be filled. |
70 EXPECT_EQ(ui::VKEY_LCONTROL, webkit_event.windowsKeyCode); | 90 EXPECT_EQ(ui::VKEY_LCONTROL, webkit_event.windowsKeyCode); |
71 } | 91 } |
72 { | 92 { |
73 // Press right Ctrl. | 93 // Press right Ctrl. |
74 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); | 94 xev.InitKeyEvent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, 0); |
75 XEvent* xevent = xev; | 95 XEvent* xevent = xev; |
76 xevent->xkey.keycode = ui::KeycodeConverter::DomCodeToNativeKeycode( | 96 xevent->xkey.keycode = ui::KeycodeConverter::DomCodeToNativeKeycode( |
(...skipping 22 matching lines...) Expand all Loading... | |
99 // Press right Ctrl. | 119 // Press right Ctrl. |
100 ui::KeyEvent event(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, | 120 ui::KeyEvent event(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, |
101 ui::DomCode::CONTROL_RIGHT, ui::EF_CONTROL_DOWN, | 121 ui::DomCode::CONTROL_RIGHT, ui::EF_CONTROL_DOWN, |
102 ui::DomKey::CONTROL, 0, ui::EventTimeForNow()); | 122 ui::DomKey::CONTROL, 0, ui::EventTimeForNow()); |
103 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); | 123 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); |
104 // ui::VKEY_RCONTROL, instead of ui::VKEY_CONTROL, should be filled. | 124 // ui::VKEY_RCONTROL, instead of ui::VKEY_CONTROL, should be filled. |
105 EXPECT_EQ(ui::VKEY_RCONTROL, webkit_event.windowsKeyCode); | 125 EXPECT_EQ(ui::VKEY_RCONTROL, webkit_event.windowsKeyCode); |
106 } | 126 } |
107 } | 127 } |
108 | 128 |
109 // Checks that MakeWebKeyboardEvent fills a correct keypard modifier. | 129 // Checks that MakeWebKeyboardEvent fills a correct keypard modifier. |
Wez
2015/05/05 21:23:44
typo: keypard
kpschoedel
2015/05/05 22:19:08
Done.
| |
110 TEST(WebInputEventAuraTest, TestMakeWebKeyboardEventKeyPadKeyCode) { | 130 TEST(WebInputEventAuraTest, TestMakeWebKeyboardEventKeyPadKeyCode) { |
111 #if defined(USE_X11) | 131 #if defined(USE_X11) |
132 #define XK(x) XK_##x | |
133 #else | |
134 #define XK(x) 0 | |
135 #endif | |
112 struct TestCase { | 136 struct TestCase { |
137 ui::DomCode dom_code; // The physical key (location). | |
113 ui::KeyboardCode ui_keycode; // The virtual key code. | 138 ui::KeyboardCode ui_keycode; // The virtual key code. |
114 uint32 x_keycode; // The platform key code. | 139 uint32 x_keysym; // The X11 keysym. |
115 bool expected_result; // true if the event has "isKeyPad" modifier. | 140 bool expected_result; // true if the event has "isKeyPad" modifier. |
116 } kTesCases[] = { | 141 } kTesCases[] = { |
117 {ui::VKEY_0, XK_0, false}, | 142 {ui::DomCode::DIGIT0, ui::VKEY_0, XK(0), false}, |
118 {ui::VKEY_1, XK_1, false}, | 143 {ui::DomCode::DIGIT1, ui::VKEY_1, XK(1), false}, |
119 {ui::VKEY_2, XK_2, false}, | 144 {ui::DomCode::DIGIT2, ui::VKEY_2, XK(2), false}, |
120 {ui::VKEY_3, XK_3, false}, | 145 {ui::DomCode::DIGIT3, ui::VKEY_3, XK(3), false}, |
121 {ui::VKEY_4, XK_4, false}, | 146 {ui::DomCode::DIGIT4, ui::VKEY_4, XK(4), false}, |
122 {ui::VKEY_5, XK_5, false}, | 147 {ui::DomCode::DIGIT5, ui::VKEY_5, XK(5), false}, |
123 {ui::VKEY_6, XK_6, false}, | 148 {ui::DomCode::DIGIT6, ui::VKEY_6, XK(6), false}, |
124 {ui::VKEY_7, XK_7, false}, | 149 {ui::DomCode::DIGIT7, ui::VKEY_7, XK(7), false}, |
125 {ui::VKEY_8, XK_8, false}, | 150 {ui::DomCode::DIGIT8, ui::VKEY_8, XK(8), false}, |
126 {ui::VKEY_9, XK_9, false}, | 151 {ui::DomCode::DIGIT9, ui::VKEY_9, XK(9), false}, |
127 | 152 |
128 {ui::VKEY_NUMPAD0, XK_KP_0, true}, | 153 {ui::DomCode::NUMPAD0, ui::VKEY_NUMPAD0, XK(KP_0), true}, |
129 {ui::VKEY_NUMPAD1, XK_KP_1, true}, | 154 {ui::DomCode::NUMPAD1, ui::VKEY_NUMPAD1, XK(KP_1), true}, |
130 {ui::VKEY_NUMPAD2, XK_KP_2, true}, | 155 {ui::DomCode::NUMPAD2, ui::VKEY_NUMPAD2, XK(KP_2), true}, |
131 {ui::VKEY_NUMPAD3, XK_KP_3, true}, | 156 {ui::DomCode::NUMPAD3, ui::VKEY_NUMPAD3, XK(KP_3), true}, |
132 {ui::VKEY_NUMPAD4, XK_KP_4, true}, | 157 {ui::DomCode::NUMPAD4, ui::VKEY_NUMPAD4, XK(KP_4), true}, |
133 {ui::VKEY_NUMPAD5, XK_KP_5, true}, | 158 {ui::DomCode::NUMPAD5, ui::VKEY_NUMPAD5, XK(KP_5), true}, |
134 {ui::VKEY_NUMPAD6, XK_KP_6, true}, | 159 {ui::DomCode::NUMPAD6, ui::VKEY_NUMPAD6, XK(KP_6), true}, |
135 {ui::VKEY_NUMPAD7, XK_KP_7, true}, | 160 {ui::DomCode::NUMPAD7, ui::VKEY_NUMPAD7, XK(KP_7), true}, |
136 {ui::VKEY_NUMPAD8, XK_KP_8, true}, | 161 {ui::DomCode::NUMPAD8, ui::VKEY_NUMPAD8, XK(KP_8), true}, |
137 {ui::VKEY_NUMPAD9, XK_KP_9, true}, | 162 {ui::DomCode::NUMPAD9, ui::VKEY_NUMPAD9, XK(KP_9), true}, |
138 | 163 |
139 {ui::VKEY_MULTIPLY, XK_KP_Multiply, true}, | 164 {ui::DomCode::NUMPAD_MULTIPLY, ui::VKEY_MULTIPLY, XK(KP_Multiply), true}, |
140 {ui::VKEY_SUBTRACT, XK_KP_Subtract, true}, | 165 {ui::DomCode::NUMPAD_SUBTRACT, ui::VKEY_SUBTRACT, XK(KP_Subtract), true}, |
141 {ui::VKEY_ADD, XK_KP_Add, true}, | 166 {ui::DomCode::NUMPAD_ADD, ui::VKEY_ADD, XK(KP_Add), true}, |
142 {ui::VKEY_DIVIDE, XK_KP_Divide, true}, | 167 {ui::DomCode::NUMPAD_DIVIDE, ui::VKEY_DIVIDE, XK(KP_Divide), true}, |
143 {ui::VKEY_DECIMAL, XK_KP_Decimal, true}, | 168 {ui::DomCode::NUMPAD_DECIMAL, ui::VKEY_DECIMAL, XK(KP_Decimal), true}, |
144 {ui::VKEY_DELETE, XK_KP_Delete, true}, | 169 {ui::DomCode::NUMPAD_DECIMAL, ui::VKEY_DELETE, XK(KP_Delete), true}, |
145 {ui::VKEY_INSERT, XK_KP_Insert, true}, | 170 {ui::DomCode::NUMPAD0, ui::VKEY_INSERT, XK(KP_Insert), true}, |
146 {ui::VKEY_END, XK_KP_End, true}, | 171 {ui::DomCode::NUMPAD1, ui::VKEY_END, XK(KP_End), true}, |
147 {ui::VKEY_DOWN, XK_KP_Down, true}, | 172 {ui::DomCode::NUMPAD2, ui::VKEY_DOWN, XK(KP_Down), true}, |
148 {ui::VKEY_NEXT, XK_KP_Page_Down, true}, | 173 {ui::DomCode::NUMPAD3, ui::VKEY_NEXT, XK(KP_Page_Down), true}, |
149 {ui::VKEY_LEFT, XK_KP_Left, true}, | 174 {ui::DomCode::NUMPAD4, ui::VKEY_LEFT, XK(KP_Left), true}, |
150 {ui::VKEY_CLEAR, XK_KP_Begin, true}, | 175 {ui::DomCode::NUMPAD5, ui::VKEY_CLEAR, XK(KP_Begin), true}, |
151 {ui::VKEY_RIGHT, XK_KP_Right, true}, | 176 {ui::DomCode::NUMPAD6, ui::VKEY_RIGHT, XK(KP_Right), true}, |
152 {ui::VKEY_HOME, XK_KP_Home, true}, | 177 {ui::DomCode::NUMPAD7, ui::VKEY_HOME, XK(KP_Home), true}, |
153 {ui::VKEY_UP, XK_KP_Up, true}, | 178 {ui::DomCode::NUMPAD8, ui::VKEY_UP, XK(KP_Up), true}, |
154 {ui::VKEY_PRIOR, XK_KP_Page_Up, true}, | 179 {ui::DomCode::NUMPAD9, ui::VKEY_PRIOR, XK(KP_Page_Up), true}, |
155 }; | 180 }; |
181 for (const auto& test_case : kTesCases) { | |
182 ui::KeyEvent event(ui::ET_KEY_PRESSED, test_case.ui_keycode, | |
183 test_case.dom_code, ui::EF_NONE); | |
184 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); | |
185 EXPECT_EQ(test_case.expected_result, | |
186 (webkit_event.modifiers & blink::WebInputEvent::IsKeyPad) != 0) | |
187 << "Failed in " | |
188 << "{dom_code:" | |
189 << ui::KeycodeConverter::DomCodeToCodeString(test_case.dom_code) | |
190 << ", ui_keycode:" << test_case.ui_keycode | |
191 << "}, expect: " << test_case.expected_result; | |
192 } | |
193 #if defined(USE_X11) | |
156 ui::ScopedXI2Event xev; | 194 ui::ScopedXI2Event xev; |
157 for (size_t i = 0; i < arraysize(kTesCases); ++i) { | 195 for (size_t i = 0; i < arraysize(kTesCases); ++i) { |
158 const TestCase& test_case = kTesCases[i]; | 196 const TestCase& test_case = kTesCases[i]; |
159 | 197 |
160 xev.InitKeyEvent(ui::ET_KEY_PRESSED, test_case.ui_keycode, 0); | 198 xev.InitKeyEvent(ui::ET_KEY_PRESSED, test_case.ui_keycode, ui::EF_NONE); |
161 XEvent* xevent = xev; | 199 XEvent* xevent = xev; |
162 xevent->xkey.keycode = XKeysymToKeycode(gfx::GetXDisplay(), | 200 xevent->xkey.keycode = |
163 test_case.x_keycode); | 201 XKeysymToKeycode(gfx::GetXDisplay(), test_case.x_keysym); |
164 ui::KeyEvent event(xev); | 202 ui::KeyEvent event(xev); |
165 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); | 203 blink::WebKeyboardEvent webkit_event = MakeWebKeyboardEvent(event); |
166 EXPECT_EQ(test_case.expected_result, | 204 EXPECT_EQ(test_case.expected_result, |
167 (webkit_event.modifiers & blink::WebInputEvent::IsKeyPad) != 0) | 205 (webkit_event.modifiers & blink::WebInputEvent::IsKeyPad) != 0) |
168 << "Failed in " << i << "th test case: " | 206 << "Failed in " << i << "th test case: " |
169 << "{ui_keycode:" << test_case.ui_keycode | 207 << "{dom_code:" |
170 << ", x_keycode:" << test_case.x_keycode | 208 << ui::KeycodeConverter::DomCodeToCodeString(test_case.dom_code) |
209 << ", ui_keycode:" << test_case.ui_keycode | |
210 << ", x_keysym:" << test_case.x_keysym | |
171 << "}, expect: " << test_case.expected_result; | 211 << "}, expect: " << test_case.expected_result; |
172 } | 212 } |
173 #endif | 213 #endif |
174 } | 214 } |
175 | 215 |
176 } // namespace content | 216 } // namespace content |
OLD | NEW |