OLD | NEW |
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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 "chrome/browser/chromeos/events/event_rewriter.h" | 5 #include "chrome/browser/chromeos/events/event_rewriter.h" |
6 | 6 |
7 #include <vector> | 7 #include <vector> |
8 | 8 |
9 #include "ash/shell.h" | 9 #include "ash/shell.h" |
10 #include "ash/sticky_keys/sticky_keys_controller.h" | 10 #include "ash/sticky_keys/sticky_keys_controller.h" |
(...skipping 12 matching lines...) Expand all Loading... |
23 #include "chrome/test/base/testing_pref_service_syncable.h" | 23 #include "chrome/test/base/testing_pref_service_syncable.h" |
24 #include "chromeos/chromeos_switches.h" | 24 #include "chromeos/chromeos_switches.h" |
25 #include "components/user_manager/fake_user_manager.h" | 25 #include "components/user_manager/fake_user_manager.h" |
26 #include "testing/gtest/include/gtest/gtest.h" | 26 #include "testing/gtest/include/gtest/gtest.h" |
27 #include "ui/aura/window.h" | 27 #include "ui/aura/window.h" |
28 #include "ui/aura/window_tree_host.h" | 28 #include "ui/aura/window_tree_host.h" |
29 #include "ui/base/ime/chromeos/fake_ime_keyboard.h" | 29 #include "ui/base/ime/chromeos/fake_ime_keyboard.h" |
30 #include "ui/events/event.h" | 30 #include "ui/events/event.h" |
31 #include "ui/events/event_rewriter.h" | 31 #include "ui/events/event_rewriter.h" |
32 #include "ui/events/event_utils.h" | 32 #include "ui/events/event_utils.h" |
33 #include "ui/events/keycodes/dom3/dom_code.h" | |
34 #include "ui/events/keycodes/dom3/dom_key.h" | |
35 #include "ui/events/keycodes/dom4/keycode_converter.h" | |
36 #include "ui/events/test/events_test_utils.h" | 33 #include "ui/events/test/events_test_utils.h" |
37 #include "ui/events/test/test_event_processor.h" | 34 #include "ui/events/test/test_event_processor.h" |
38 | 35 |
39 #if defined(USE_X11) | 36 #if defined(USE_X11) |
40 #include <X11/keysym.h> | 37 #include <X11/keysym.h> |
41 | 38 |
42 #include "ui/events/devices/x11/touch_factory_x11.h" | 39 #include "ui/events/devices/x11/touch_factory_x11.h" |
43 #include "ui/events/event_utils.h" | 40 #include "ui/events/event_utils.h" |
44 #include "ui/events/test/events_test_utils_x11.h" | 41 #include "ui/events/test/events_test_utils_x11.h" |
45 #include "ui/gfx/x/x11_types.h" | 42 #include "ui/gfx/x/x11_types.h" |
46 #endif | 43 #endif |
47 | 44 |
48 namespace { | 45 namespace { |
49 | 46 |
50 // The device id of the test touchpad device. | 47 // The device id of the test touchpad device. |
51 #if defined(USE_X11) | |
52 const int kTouchPadDeviceId = 1; | 48 const int kTouchPadDeviceId = 1; |
| 49 const int kKeyboardDeviceId = 2; |
53 const int kMasterKeyboardDeviceId = 3; | 50 const int kMasterKeyboardDeviceId = 3; |
54 #endif | |
55 const int kKeyboardDeviceId = 2; | |
56 | 51 |
57 std::string GetExpectedResultAsString(ui::EventType ui_type, | 52 std::string GetExpectedResultAsString(ui::KeyboardCode ui_keycode, |
58 ui::KeyboardCode ui_keycode, | 53 int ui_flags, |
59 ui::DomCode code, | 54 ui::EventType ui_type) { |
60 int ui_flags, // ui::EventFlags | |
61 ui::DomKey key, | |
62 base::char16 character) { | |
63 return base::StringPrintf("ui_keycode=0x%X ui_flags=0x%X ui_type=%d", | 55 return base::StringPrintf("ui_keycode=0x%X ui_flags=0x%X ui_type=%d", |
64 ui_keycode, | 56 ui_keycode, |
65 ui_flags & ~ui::EF_IS_REPEAT, | 57 ui_flags & ~ui::EF_IS_REPEAT, |
66 ui_type); | 58 ui_type); |
67 } | 59 } |
68 | 60 |
69 std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) { | 61 std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) { |
70 return GetExpectedResultAsString( | 62 return GetExpectedResultAsString( |
71 keyevent.type(), keyevent.key_code(), keyevent.code(), keyevent.flags(), | 63 keyevent.key_code(), keyevent.flags(), keyevent.type()); |
72 keyevent.GetDomKey(), keyevent.GetCharacter()); | |
73 } | 64 } |
74 | 65 |
75 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, | 66 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, |
76 ui::EventType ui_type, | |
77 ui::KeyboardCode ui_keycode, | 67 ui::KeyboardCode ui_keycode, |
78 ui::DomCode code, | 68 int ui_flags, |
79 int ui_flags, // ui::EventFlags | 69 ui::EventType ui_type) { |
80 ui::DomKey key, | 70 const ui::KeyEvent event(ui_type, ui_keycode, ui_flags); |
81 base::char16 character) { | |
82 const ui::KeyEvent event(ui_type, ui_keycode, code, ui_flags, key, character, | |
83 ui::EventTimeForNow()); | |
84 scoped_ptr<ui::Event> new_event; | 71 scoped_ptr<ui::Event> new_event; |
85 rewriter->RewriteEvent(event, &new_event); | 72 rewriter->RewriteEvent(event, &new_event); |
86 if (new_event) | 73 if (new_event) |
87 return GetKeyEventAsString( | 74 return GetKeyEventAsString( |
88 static_cast<const ui::KeyEvent&>(*new_event.get())); | 75 static_cast<const ui::KeyEvent&>(*new_event.get())); |
89 return GetKeyEventAsString(event); | 76 return GetKeyEventAsString(event); |
90 } | 77 } |
91 | 78 |
92 // Table entry for simple single key event rewriting tests. | 79 // Table entry for simple single key event rewriting tests. |
93 struct KeyTestCase { | 80 struct KeyTestCase { |
94 enum { | 81 enum { |
95 // Test types: | 82 // Test types: |
96 TEST_VKEY = 1 << 0, // Test ui::KeyEvent with no native event | 83 TEST_VKEY = 1 << 0, // Test ui::KeyEvent with no native event |
97 TEST_X11 = 1 << 1, // Test ui::KeyEvent with native XKeyEvent | 84 TEST_X11 = 1 << 1, // Test ui::KeyEvent with native XKeyEvent |
98 TEST_ALL = TEST_VKEY | TEST_X11, | 85 TEST_ALL = TEST_VKEY|TEST_X11, |
99 // Special test flags: | 86 // Special test flags: |
100 NUMPAD = 1 << 8, // Reset the XKB scan code on an X11 event based | 87 NUMPAD = 1 << 8, // Set EF_NUMPAD_KEY on native-based event, because |
101 // on the test DomCode, because | 88 // |XKeysymForWindowsKeyCode()| can not distinguish |
102 // |XKeysymForWindowsKeyCode()| can not distinguish | 89 // between pairs like XK_Insert and XK_KP_Insert. |
103 // between pairs like XK_Insert and XK_KP_Insert. | |
104 }; | 90 }; |
105 int test; | 91 int test; |
106 ui::EventType type; | 92 ui::EventType type; |
107 struct Event { | 93 struct { |
108 ui::KeyboardCode key_code; | 94 ui::KeyboardCode key_code; |
109 ui::DomCode code; | 95 int flags; |
110 int flags; // ui::EventFlags | |
111 ui::DomKey key; | |
112 base::char16 character; | |
113 } input, expected; | 96 } input, expected; |
114 }; | 97 }; |
115 | 98 |
116 std::string GetTestCaseAsString(ui::EventType ui_type, | |
117 const KeyTestCase::Event& test) { | |
118 return GetExpectedResultAsString(ui_type, test.key_code, test.code, | |
119 test.flags, test.key, test.character); | |
120 } | |
121 | |
122 #if defined(USE_X11) | 99 #if defined(USE_X11) |
123 // Check rewriting of an X11-based key event. | 100 // Check rewriting of an X11-based key event. |
124 void CheckX11KeyTestCase(const std::string& expected, | 101 void CheckX11KeyTestCase(const std::string& expected, |
125 chromeos::EventRewriter* rewriter, | 102 chromeos::EventRewriter* rewriter, |
126 const KeyTestCase& test, | 103 const KeyTestCase& test, |
127 XEvent* xevent) { | 104 XEvent* xevent) { |
128 ui::KeyEvent xkey_event(xevent); | 105 ui::KeyEvent xkey_event(xevent); |
| 106 if (test.test & KeyTestCase::NUMPAD) |
| 107 xkey_event.set_flags(xkey_event.flags() | ui::EF_NUMPAD_KEY); |
| 108 // Verify that the X11-based key event is as expected. |
| 109 EXPECT_EQ(GetExpectedResultAsString( |
| 110 test.input.key_code, test.input.flags, test.type), |
| 111 GetKeyEventAsString(xkey_event)); |
129 // Rewrite the event and check the result. | 112 // Rewrite the event and check the result. |
130 scoped_ptr<ui::Event> new_event; | 113 scoped_ptr<ui::Event> new_event; |
131 rewriter->RewriteEvent(xkey_event, &new_event); | 114 rewriter->RewriteEvent(xkey_event, &new_event); |
132 ui::KeyEvent& rewritten_key_event = | 115 ui::KeyEvent& rewritten_key_event = |
133 new_event ? *static_cast<ui::KeyEvent*>(new_event.get()) : xkey_event; | 116 new_event ? *static_cast<ui::KeyEvent*>(new_event.get()) : xkey_event; |
134 EXPECT_EQ(expected, GetKeyEventAsString(rewritten_key_event)); | 117 EXPECT_EQ(expected, GetKeyEventAsString(rewritten_key_event)); |
135 if ((rewritten_key_event.key_code() != ui::VKEY_UNKNOWN) && | 118 if ((rewritten_key_event.key_code() != ui::VKEY_UNKNOWN) && |
136 (rewritten_key_event.native_event()->xkey.keycode != 0)) { | 119 (rewritten_key_event.native_event()->xkey.keycode != 0)) { |
137 // Build a new ui::KeyEvent from the rewritten native component, | 120 // Build a new ui::KeyEvent from the rewritten native component, |
138 // and check that it also matches the rewritten event. | 121 // and check that it also matches the rewritten event. |
139 EXPECT_TRUE(rewritten_key_event.native_event()); | 122 EXPECT_TRUE(rewritten_key_event.native_event()); |
140 ui::KeyEvent from_native_event(rewritten_key_event.native_event()); | 123 ui::KeyEvent from_native_event(rewritten_key_event.native_event()); |
141 EXPECT_EQ(expected, GetKeyEventAsString(from_native_event)); | 124 EXPECT_EQ(expected, GetKeyEventAsString(from_native_event)); |
142 } | 125 } |
143 } | 126 } |
144 #endif | 127 #endif |
145 | 128 |
146 // Tests a single stateless key rewrite operation. | 129 // Tests a single stateless key rewrite operation. |
| 130 // |i| is a an identifying number to locate failing tests in the tables. |
147 void CheckKeyTestCase(chromeos::EventRewriter* rewriter, | 131 void CheckKeyTestCase(chromeos::EventRewriter* rewriter, |
148 const KeyTestCase& test) { | 132 const KeyTestCase& test) { |
149 std::string expected = GetTestCaseAsString(test.type, test.expected); | 133 std::string expected = |
| 134 GetExpectedResultAsString( |
| 135 test.expected.key_code, test.expected.flags, test.type); |
150 | 136 |
151 if (test.test & KeyTestCase::TEST_VKEY) { | 137 if (test.test & KeyTestCase::TEST_VKEY) { |
152 // Check rewriting of a non-native-based key event. | 138 // Check rewriting of a non-native-based key event. |
153 EXPECT_EQ(expected, | 139 EXPECT_EQ( |
154 GetRewrittenEventAsString( | 140 expected, |
155 rewriter, test.type, test.input.key_code, test.input.code, | 141 GetRewrittenEventAsString( |
156 test.input.flags, test.input.key, test.input.character)); | 142 rewriter, test.input.key_code, test.input.flags, test.type)); |
157 } | 143 } |
158 | 144 |
159 #if defined(USE_X11) | 145 #if defined(USE_X11) |
160 if (test.test & KeyTestCase::TEST_X11) { | 146 if (test.test & KeyTestCase::TEST_X11) { |
161 ui::ScopedXI2Event xev; | 147 ui::ScopedXI2Event xev; |
162 // Test an XKeyEvent. | 148 // Test an XKeyEvent. |
163 xev.InitKeyEvent(test.type, test.input.key_code, test.input.flags); | 149 xev.InitKeyEvent(test.type, test.input.key_code, test.input.flags); |
164 XEvent* xevent = xev; | 150 XEvent* xevent = xev; |
165 DCHECK((xevent->type == KeyPress) || (xevent->type == KeyRelease)); | 151 DCHECK((xevent->type == KeyPress) || (xevent->type == KeyRelease)); |
166 if (test.test & KeyTestCase::NUMPAD) { | 152 if (xevent->xkey.keycode) |
167 xevent->xkey.keycode = | |
168 ui::KeycodeConverter::DomCodeToNativeKeycode(test.input.code); | |
169 } | |
170 int keycode = xevent->xkey.keycode; | |
171 if (keycode) { | |
172 CheckX11KeyTestCase(expected, rewriter, test, xevent); | 153 CheckX11KeyTestCase(expected, rewriter, test, xevent); |
173 // Test an XI2 GenericEvent. | 154 // Test an XI2 GenericEvent. |
174 xev.InitGenericKeyEvent(kMasterKeyboardDeviceId, kKeyboardDeviceId, | 155 xev.InitGenericKeyEvent(kMasterKeyboardDeviceId, |
175 test.type, test.input.key_code, test.input.flags); | 156 kKeyboardDeviceId, |
176 xevent = xev; | 157 test.type, |
177 DCHECK(xevent->type == GenericEvent); | 158 test.input.key_code, |
178 XIDeviceEvent* xievent = | 159 test.input.flags); |
179 static_cast<XIDeviceEvent*>(xevent->xcookie.data); | 160 xevent = xev; |
180 DCHECK((xievent->evtype == XI_KeyPress) || | 161 DCHECK(xevent->type == GenericEvent); |
181 (xievent->evtype == XI_KeyRelease)); | 162 XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(xevent->xcookie.data); |
182 xievent->detail = keycode; | 163 DCHECK((xievent->evtype == XI_KeyPress) || |
| 164 (xievent->evtype == XI_KeyRelease)); |
| 165 if (xievent->detail) |
183 CheckX11KeyTestCase(expected, rewriter, test, xevent); | 166 CheckX11KeyTestCase(expected, rewriter, test, xevent); |
184 } | |
185 } | 167 } |
186 #endif | 168 #endif |
187 } | 169 } |
| 170 |
| 171 // Table entry for simple single function key event rewriting tests. |
| 172 struct FunctionKeyTestCase { |
| 173 ui::EventType type; |
| 174 struct { |
| 175 ui::KeyboardCode key_code; |
| 176 int flags; |
| 177 } input, vkey_expected, native_expected; |
| 178 }; |
| 179 |
| 180 // Tests a single stateless function key rewrite operation. |
| 181 // |i| is a an identifying number to locate failing tests in the tables. |
| 182 // Function key mapping differs from the other key mappings because the |
| 183 // EF_FUNCTION_KEY flag is set during ui::KeyEvent construction when passing in |
| 184 // a native X11 event and the flag is not set when using other constructors. |
| 185 void CheckFunctionKeyTestCase(chromeos::EventRewriter* rewriter, |
| 186 const FunctionKeyTestCase& test) { |
| 187 std::string vkey_expected = |
| 188 GetExpectedResultAsString( |
| 189 test.vkey_expected.key_code, |
| 190 test.vkey_expected.flags, |
| 191 test.type); |
| 192 // Check rewriting of a non-native-based key event. |
| 193 EXPECT_EQ( |
| 194 vkey_expected, |
| 195 GetRewrittenEventAsString( |
| 196 rewriter, test.input.key_code, test.input.flags, test.type)); |
| 197 |
| 198 #if defined(USE_X11) |
| 199 ui::ScopedXI2Event xev; |
| 200 xev.InitKeyEvent(test.type, test.input.key_code, test.input.flags); |
| 201 XEvent* xevent = xev; |
| 202 if (xevent->xkey.keycode) { |
| 203 ui::KeyEvent xkey_event(xevent); |
| 204 // Rewrite the event and check the result. |
| 205 scoped_ptr<ui::Event> new_event; |
| 206 rewriter->RewriteEvent(xkey_event, &new_event); |
| 207 ui::KeyEvent& rewritten_key_event = |
| 208 new_event ? *static_cast<ui::KeyEvent*>(new_event.get()) : xkey_event; |
| 209 std::string native_expected = |
| 210 GetExpectedResultAsString( |
| 211 test.native_expected.key_code, |
| 212 test.native_expected.flags, |
| 213 test.type); |
| 214 EXPECT_EQ(native_expected, GetKeyEventAsString(rewritten_key_event)); |
| 215 } |
| 216 #endif |
| 217 } |
188 | 218 |
189 } // namespace | 219 } // namespace |
190 | 220 |
191 namespace chromeos { | 221 namespace chromeos { |
192 | 222 |
193 class EventRewriterTest : public ash::test::AshTestBase { | 223 class EventRewriterTest : public ash::test::AshTestBase { |
194 public: | 224 public: |
195 EventRewriterTest() | 225 EventRewriterTest() |
196 : fake_user_manager_(new user_manager::FakeUserManager), | 226 : fake_user_manager_(new user_manager::FakeUserManager), |
197 user_manager_enabler_(fake_user_manager_), | 227 user_manager_enabler_(fake_user_manager_), |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 TEST_F(EventRewriterTest, TestRewriteCommandToControl) { | 264 TEST_F(EventRewriterTest, TestRewriteCommandToControl) { |
235 // First, test with a PC keyboard. | 265 // First, test with a PC keyboard. |
236 TestingPrefServiceSyncable prefs; | 266 TestingPrefServiceSyncable prefs; |
237 EventRewriter rewriter(NULL); | 267 EventRewriter rewriter(NULL); |
238 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 268 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
239 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 269 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
240 rewriter.set_pref_service_for_testing(&prefs); | 270 rewriter.set_pref_service_for_testing(&prefs); |
241 | 271 |
242 KeyTestCase pc_keyboard_tests[] = { | 272 KeyTestCase pc_keyboard_tests[] = { |
243 // VKEY_A, Alt modifier. | 273 // VKEY_A, Alt modifier. |
244 {KeyTestCase::TEST_ALL, | 274 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
245 ui::ET_KEY_PRESSED, | 275 {ui::VKEY_A, ui::EF_ALT_DOWN}, |
246 {ui::VKEY_A, | 276 {ui::VKEY_A, ui::EF_ALT_DOWN}}, |
247 ui::DomCode::KEY_A, | |
248 ui::EF_ALT_DOWN, | |
249 ui::DomKey::CHARACTER, | |
250 'a'}, | |
251 {ui::VKEY_A, | |
252 ui::DomCode::KEY_A, | |
253 ui::EF_ALT_DOWN, | |
254 ui::DomKey::CHARACTER, | |
255 'a'}}, | |
256 | 277 |
257 // VKEY_A, Win modifier. | 278 // VKEY_A, Win modifier. |
258 {KeyTestCase::TEST_ALL, | 279 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
259 ui::ET_KEY_PRESSED, | 280 {ui::VKEY_A, ui::EF_COMMAND_DOWN}, |
260 {ui::VKEY_A, | 281 {ui::VKEY_A, ui::EF_COMMAND_DOWN}}, |
261 ui::DomCode::KEY_A, | |
262 ui::EF_COMMAND_DOWN, | |
263 ui::DomKey::CHARACTER, | |
264 'a'}, | |
265 {ui::VKEY_A, | |
266 ui::DomCode::KEY_A, | |
267 ui::EF_COMMAND_DOWN, | |
268 ui::DomKey::CHARACTER, | |
269 'a'}}, | |
270 | 282 |
271 // VKEY_A, Alt+Win modifier. | 283 // VKEY_A, Alt+Win modifier. |
272 {KeyTestCase::TEST_ALL, | 284 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
273 ui::ET_KEY_PRESSED, | 285 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, |
274 {ui::VKEY_A, | 286 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, |
275 ui::DomCode::KEY_A, | |
276 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | |
277 ui::DomKey::CHARACTER, | |
278 'a'}, | |
279 {ui::VKEY_A, | |
280 ui::DomCode::KEY_A, | |
281 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | |
282 ui::DomKey::CHARACTER, | |
283 'a'}}, | |
284 | 287 |
285 // VKEY_LWIN (left Windows key), Alt modifier. | 288 // VKEY_LWIN (left Windows key), Alt modifier. |
286 {KeyTestCase::TEST_ALL, | 289 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
287 ui::ET_KEY_PRESSED, | 290 {ui::VKEY_LWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, |
288 {ui::VKEY_LWIN, | 291 {ui::VKEY_LWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, |
289 ui::DomCode::OS_LEFT, | |
290 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | |
291 ui::DomKey::OS, | |
292 0}, | |
293 {ui::VKEY_LWIN, | |
294 ui::DomCode::OS_LEFT, | |
295 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | |
296 ui::DomKey::OS, | |
297 0}}, | |
298 | 292 |
299 // VKEY_RWIN (right Windows key), Alt modifier. | 293 // VKEY_RWIN (right Windows key), Alt modifier. |
300 {KeyTestCase::TEST_ALL, | 294 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
301 ui::ET_KEY_PRESSED, | 295 {ui::VKEY_RWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, |
302 {ui::VKEY_RWIN, | 296 {ui::VKEY_RWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, |
303 ui::DomCode::OS_RIGHT, | |
304 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | |
305 ui::DomKey::OS, | |
306 0}, | |
307 {ui::VKEY_RWIN, | |
308 ui::DomCode::OS_RIGHT, | |
309 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | |
310 ui::DomKey::OS, | |
311 0}}, | |
312 }; | 297 }; |
313 | 298 |
314 for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) { | 299 for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) { |
315 SCOPED_TRACE(i); | 300 SCOPED_TRACE(i); |
316 CheckKeyTestCase(&rewriter, pc_keyboard_tests[i]); | 301 CheckKeyTestCase(&rewriter, pc_keyboard_tests[i]); |
317 } | 302 } |
318 | 303 |
319 // An Apple keyboard reusing the ID, zero. | 304 // An Apple keyboard reusing the ID, zero. |
320 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); | 305 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); |
321 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 306 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
322 | 307 |
323 KeyTestCase apple_keyboard_tests[] = { | 308 KeyTestCase apple_keyboard_tests[] = { |
324 // VKEY_A, Alt modifier. | 309 // VKEY_A, Alt modifier. |
325 {KeyTestCase::TEST_ALL, | 310 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
326 ui::ET_KEY_PRESSED, | 311 {ui::VKEY_A, ui::EF_ALT_DOWN}, |
327 {ui::VKEY_A, | 312 {ui::VKEY_A, ui::EF_ALT_DOWN}}, |
328 ui::DomCode::KEY_A, | |
329 ui::EF_ALT_DOWN, | |
330 ui::DomKey::CHARACTER, | |
331 'a'}, | |
332 {ui::VKEY_A, | |
333 ui::DomCode::KEY_A, | |
334 ui::EF_ALT_DOWN, | |
335 ui::DomKey::CHARACTER, | |
336 'a'}}, | |
337 | 313 |
338 // VKEY_A, Win modifier. | 314 // VKEY_A, Win modifier. |
339 {KeyTestCase::TEST_ALL, | 315 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
340 ui::ET_KEY_PRESSED, | 316 {ui::VKEY_A, ui::EF_COMMAND_DOWN}, |
341 {ui::VKEY_A, | 317 {ui::VKEY_A, ui::EF_CONTROL_DOWN}}, |
342 ui::DomCode::KEY_A, | |
343 ui::EF_COMMAND_DOWN, | |
344 ui::DomKey::CHARACTER, | |
345 'a'}, | |
346 {ui::VKEY_A, | |
347 ui::DomCode::KEY_A, | |
348 ui::EF_CONTROL_DOWN, | |
349 ui::DomKey::CHARACTER, | |
350 'a'}}, | |
351 | 318 |
352 // VKEY_A, Alt+Win modifier. | 319 // VKEY_A, Alt+Win modifier. |
353 {KeyTestCase::TEST_ALL, | 320 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
354 ui::ET_KEY_PRESSED, | 321 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, |
355 {ui::VKEY_A, | 322 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, |
356 ui::DomCode::KEY_A, | |
357 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | |
358 ui::DomKey::CHARACTER, | |
359 'a'}, | |
360 {ui::VKEY_A, | |
361 ui::DomCode::KEY_A, | |
362 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
363 ui::DomKey::CHARACTER, | |
364 'a'}}, | |
365 | 323 |
366 // VKEY_LWIN (left Windows key), Alt modifier. | 324 // VKEY_LWIN (left Windows key), Alt modifier. |
367 {KeyTestCase::TEST_ALL, | 325 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
368 ui::ET_KEY_PRESSED, | 326 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, |
369 {ui::VKEY_LWIN, | 327 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}, |
370 ui::DomCode::OS_LEFT, | |
371 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | |
372 ui::DomKey::OS, | |
373 0}, | |
374 {ui::VKEY_CONTROL, | |
375 ui::DomCode::CONTROL_LEFT, | |
376 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
377 ui::DomKey::CONTROL, | |
378 0}}, | |
379 | 328 |
380 // VKEY_RWIN (right Windows key), Alt modifier. | 329 // VKEY_RWIN (right Windows key), Alt modifier. |
381 {KeyTestCase::TEST_ALL, | 330 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
382 ui::ET_KEY_PRESSED, | 331 {ui::VKEY_RWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, |
383 {ui::VKEY_RWIN, | 332 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}, |
384 ui::DomCode::OS_RIGHT, | |
385 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | |
386 ui::DomKey::OS, | |
387 0}, | |
388 {ui::VKEY_CONTROL, | |
389 ui::DomCode::CONTROL_LEFT, | |
390 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
391 ui::DomKey::CONTROL, | |
392 0}}, | |
393 }; | 333 }; |
394 | 334 |
395 for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) { | 335 for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) { |
396 SCOPED_TRACE(i); | 336 SCOPED_TRACE(i); |
397 CheckKeyTestCase(&rewriter, apple_keyboard_tests[i]); | 337 CheckKeyTestCase(&rewriter, apple_keyboard_tests[i]); |
398 } | 338 } |
399 } | 339 } |
400 | 340 |
401 // For crbug.com/133896. | 341 // For crbug.com/133896. |
402 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { | 342 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { |
403 // Remap Control to Alt. | 343 // Remap Control to Alt. |
404 TestingPrefServiceSyncable prefs; | 344 TestingPrefServiceSyncable prefs; |
405 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 345 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
406 IntegerPrefMember control; | 346 IntegerPrefMember control; |
407 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 347 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
408 control.SetValue(chromeos::input_method::kAltKey); | 348 control.SetValue(chromeos::input_method::kAltKey); |
409 | 349 |
410 EventRewriter rewriter(NULL); | 350 EventRewriter rewriter(NULL); |
411 rewriter.set_pref_service_for_testing(&prefs); | 351 rewriter.set_pref_service_for_testing(&prefs); |
412 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 352 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
413 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 353 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
414 | 354 |
415 KeyTestCase pc_keyboard_tests[] = { | 355 KeyTestCase pc_keyboard_tests[] = {// Control should be remapped to Alt. |
416 // Control should be remapped to Alt. | 356 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
417 {KeyTestCase::TEST_ALL, | 357 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, |
418 ui::ET_KEY_PRESSED, | 358 {ui::VKEY_MENU, ui::EF_ALT_DOWN}}, |
419 {ui::VKEY_CONTROL, | |
420 ui::DomCode::CONTROL_LEFT, | |
421 ui::EF_CONTROL_DOWN, | |
422 ui::DomKey::CONTROL, | |
423 0}, | |
424 {ui::VKEY_MENU, | |
425 ui::DomCode::ALT_LEFT, | |
426 ui::EF_ALT_DOWN, | |
427 ui::DomKey::ALT, | |
428 0}}, | |
429 }; | 359 }; |
430 | 360 |
431 for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) { | 361 for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) { |
432 SCOPED_TRACE(i); | 362 SCOPED_TRACE(i); |
433 CheckKeyTestCase(&rewriter, pc_keyboard_tests[i]); | 363 CheckKeyTestCase(&rewriter, pc_keyboard_tests[i]); |
434 } | 364 } |
435 | 365 |
436 // An Apple keyboard reusing the ID, zero. | 366 // An Apple keyboard reusing the ID, zero. |
437 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); | 367 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); |
438 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 368 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
439 | 369 |
440 KeyTestCase apple_keyboard_tests[] = { | 370 KeyTestCase apple_keyboard_tests[] = { |
441 // VKEY_LWIN (left Command key) with Alt modifier. The remapped Command | 371 // VKEY_LWIN (left Command key) with Alt modifier. The remapped Command |
442 // key should never be re-remapped to Alt. | 372 // key should never be re-remapped to Alt. |
443 {KeyTestCase::TEST_ALL, | 373 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
444 ui::ET_KEY_PRESSED, | 374 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, |
445 {ui::VKEY_LWIN, | 375 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}, |
446 ui::DomCode::OS_LEFT, | |
447 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | |
448 ui::DomKey::OS, | |
449 0}, | |
450 {ui::VKEY_CONTROL, | |
451 ui::DomCode::CONTROL_LEFT, | |
452 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
453 ui::DomKey::CONTROL, | |
454 0}}, | |
455 | 376 |
456 // VKEY_RWIN (right Command key) with Alt modifier. The remapped Command | 377 // VKEY_RWIN (right Command key) with Alt modifier. The remapped Command |
457 // key should never be re-remapped to Alt. | 378 // key should never be re-remapped to Alt. |
458 {KeyTestCase::TEST_ALL, | 379 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
459 ui::ET_KEY_PRESSED, | 380 {ui::VKEY_RWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, |
460 {ui::VKEY_RWIN, | 381 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}, |
461 ui::DomCode::OS_RIGHT, | |
462 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | |
463 ui::DomKey::OS, | |
464 0}, | |
465 {ui::VKEY_CONTROL, | |
466 ui::DomCode::CONTROL_LEFT, | |
467 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
468 ui::DomKey::CONTROL, | |
469 0}}, | |
470 }; | 382 }; |
471 | 383 |
472 for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) { | 384 for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) { |
473 SCOPED_TRACE(i); | 385 SCOPED_TRACE(i); |
474 CheckKeyTestCase(&rewriter, apple_keyboard_tests[i]); | 386 CheckKeyTestCase(&rewriter, apple_keyboard_tests[i]); |
475 } | 387 } |
476 } | 388 } |
477 | 389 |
478 void EventRewriterTest::TestRewriteNumPadKeys() { | 390 void EventRewriterTest::TestRewriteNumPadKeys() { |
479 TestingPrefServiceSyncable prefs; | 391 TestingPrefServiceSyncable prefs; |
480 EventRewriter rewriter(NULL); | 392 EventRewriter rewriter(NULL); |
481 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 393 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
482 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 394 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
483 rewriter.set_pref_service_for_testing(&prefs); | 395 rewriter.set_pref_service_for_testing(&prefs); |
484 | 396 |
485 KeyTestCase tests[] = { | 397 KeyTestCase tests[] = { |
486 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. | 398 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. |
487 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 399 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
488 ui::ET_KEY_PRESSED, | 400 {ui::VKEY_INSERT, ui::EF_NUMPAD_KEY}, |
489 {ui::VKEY_INSERT, | 401 {ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY}}, |
490 ui::DomCode::NUMPAD0, | |
491 ui::EF_NONE, | |
492 ui::DomKey::INSERT, | |
493 0}, | |
494 {ui::VKEY_NUMPAD0, | |
495 ui::DomCode::NUMPAD0, | |
496 ui::EF_NONE, | |
497 ui::DomKey::CHARACTER, | |
498 '0'}}, | |
499 | 402 |
500 // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier. | 403 // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier. |
501 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 404 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
502 ui::ET_KEY_PRESSED, | 405 {ui::VKEY_INSERT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, |
503 {ui::VKEY_INSERT, | 406 {ui::VKEY_NUMPAD0, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, |
504 ui::DomCode::NUMPAD0, | |
505 ui::EF_ALT_DOWN, | |
506 ui::DomKey::INSERT, | |
507 0}, | |
508 {ui::VKEY_NUMPAD0, | |
509 ui::DomCode::NUMPAD0, | |
510 ui::EF_ALT_DOWN, | |
511 ui::DomKey::CHARACTER, | |
512 '0'}}, | |
513 | 407 |
514 // XK_KP_Delete (= NumPad . without Num Lock), Alt modifier. | 408 // XK_KP_Delete (= NumPad . without Num Lock), Alt modifier. |
515 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 409 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
516 ui::ET_KEY_PRESSED, | 410 {ui::VKEY_DELETE, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, |
517 {ui::VKEY_DELETE, | 411 {ui::VKEY_DECIMAL, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, |
518 ui::DomCode::NUMPAD_DECIMAL, | |
519 ui::EF_ALT_DOWN, | |
520 ui::DomKey::DEL, | |
521 0}, | |
522 {ui::VKEY_DECIMAL, | |
523 ui::DomCode::NUMPAD_DECIMAL, | |
524 ui::EF_ALT_DOWN, | |
525 ui::DomKey::CHARACTER, | |
526 '.'}}, | |
527 | 412 |
528 // XK_KP_End (= NumPad 1 without Num Lock), Alt modifier. | 413 // XK_KP_End (= NumPad 1 without Num Lock), Alt modifier. |
529 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 414 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
530 ui::ET_KEY_PRESSED, | 415 {ui::VKEY_END, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, |
531 {ui::VKEY_END, | 416 {ui::VKEY_NUMPAD1, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, |
532 ui::DomCode::NUMPAD1, | |
533 ui::EF_ALT_DOWN, | |
534 ui::DomKey::END, | |
535 0}, | |
536 {ui::VKEY_NUMPAD1, | |
537 ui::DomCode::NUMPAD1, | |
538 ui::EF_ALT_DOWN, | |
539 ui::DomKey::CHARACTER, | |
540 '1'}}, | |
541 | 417 |
542 // XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier. | 418 // XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier. |
543 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 419 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
544 ui::ET_KEY_PRESSED, | 420 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, |
545 {ui::VKEY_DOWN, | 421 {ui::VKEY_NUMPAD2, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, |
546 ui::DomCode::NUMPAD2, | |
547 ui::EF_ALT_DOWN, | |
548 ui::DomKey::ARROW_DOWN, | |
549 0}, | |
550 {ui::VKEY_NUMPAD2, | |
551 ui::DomCode::NUMPAD2, | |
552 ui::EF_ALT_DOWN, | |
553 ui::DomKey::CHARACTER, | |
554 '2'}}, | |
555 | 422 |
556 // XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier. | 423 // XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier. |
557 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 424 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
558 ui::ET_KEY_PRESSED, | 425 {ui::VKEY_NEXT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, |
559 {ui::VKEY_NEXT, | 426 {ui::VKEY_NUMPAD3, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, |
560 ui::DomCode::NUMPAD3, | |
561 ui::EF_ALT_DOWN, | |
562 ui::DomKey::PAGE_DOWN, | |
563 0}, | |
564 {ui::VKEY_NUMPAD3, | |
565 ui::DomCode::NUMPAD3, | |
566 ui::EF_ALT_DOWN, | |
567 ui::DomKey::CHARACTER, | |
568 '3'}}, | |
569 | 427 |
570 // XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier. | 428 // XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier. |
571 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 429 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
572 ui::ET_KEY_PRESSED, | 430 {ui::VKEY_LEFT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, |
573 {ui::VKEY_LEFT, | 431 {ui::VKEY_NUMPAD4, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, |
574 ui::DomCode::NUMPAD4, | |
575 ui::EF_ALT_DOWN, | |
576 ui::DomKey::ARROW_LEFT, | |
577 0}, | |
578 {ui::VKEY_NUMPAD4, | |
579 ui::DomCode::NUMPAD4, | |
580 ui::EF_ALT_DOWN, | |
581 ui::DomKey::CHARACTER, | |
582 '4'}}, | |
583 | 432 |
584 // XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier. | 433 // XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier. |
585 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 434 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
586 ui::ET_KEY_PRESSED, | 435 {ui::VKEY_CLEAR, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, |
587 {ui::VKEY_CLEAR, | 436 {ui::VKEY_NUMPAD5, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, |
588 ui::DomCode::NUMPAD5, | |
589 ui::EF_ALT_DOWN, | |
590 ui::DomKey::CLEAR, | |
591 0}, | |
592 {ui::VKEY_NUMPAD5, | |
593 ui::DomCode::NUMPAD5, | |
594 ui::EF_ALT_DOWN, | |
595 ui::DomKey::CHARACTER, | |
596 '5'}}, | |
597 | 437 |
598 // XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier. | 438 // XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier. |
599 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 439 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
600 ui::ET_KEY_PRESSED, | 440 {ui::VKEY_RIGHT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, |
601 {ui::VKEY_RIGHT, | 441 {ui::VKEY_NUMPAD6, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, |
602 ui::DomCode::NUMPAD6, | |
603 ui::EF_ALT_DOWN, | |
604 ui::DomKey::ARROW_RIGHT, | |
605 0}, | |
606 {ui::VKEY_NUMPAD6, | |
607 ui::DomCode::NUMPAD6, | |
608 ui::EF_ALT_DOWN, | |
609 ui::DomKey::CHARACTER, | |
610 '6'}}, | |
611 | 442 |
612 // XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier. | 443 // XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier. |
613 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 444 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
614 ui::ET_KEY_PRESSED, | 445 {ui::VKEY_HOME, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, |
615 {ui::VKEY_HOME, | 446 {ui::VKEY_NUMPAD7, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, |
616 ui::DomCode::NUMPAD7, | |
617 ui::EF_ALT_DOWN, | |
618 ui::DomKey::HOME, | |
619 0}, | |
620 {ui::VKEY_NUMPAD7, | |
621 ui::DomCode::NUMPAD7, | |
622 ui::EF_ALT_DOWN, | |
623 ui::DomKey::CHARACTER, | |
624 '7'}}, | |
625 | 447 |
626 // XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier. | 448 // XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier. |
627 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 449 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
628 ui::ET_KEY_PRESSED, | 450 {ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, |
629 {ui::VKEY_UP, | 451 {ui::VKEY_NUMPAD8, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, |
630 ui::DomCode::NUMPAD8, | |
631 ui::EF_ALT_DOWN, | |
632 ui::DomKey::ARROW_UP, | |
633 0}, | |
634 {ui::VKEY_NUMPAD8, | |
635 ui::DomCode::NUMPAD8, | |
636 ui::EF_ALT_DOWN, | |
637 ui::DomKey::CHARACTER, | |
638 '8'}}, | |
639 | 452 |
640 // XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier. | 453 // XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier. |
641 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 454 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
642 ui::ET_KEY_PRESSED, | 455 {ui::VKEY_PRIOR, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, |
643 {ui::VKEY_PRIOR, | 456 {ui::VKEY_NUMPAD9, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, |
644 ui::DomCode::NUMPAD9, | |
645 ui::EF_ALT_DOWN, | |
646 ui::DomKey::PAGE_UP, | |
647 0}, | |
648 {ui::VKEY_NUMPAD9, | |
649 ui::DomCode::NUMPAD9, | |
650 ui::EF_ALT_DOWN, | |
651 ui::DomKey::CHARACTER, | |
652 '9'}}, | |
653 | 457 |
654 // XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier. | 458 // XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier. |
655 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 459 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
656 ui::ET_KEY_PRESSED, | 460 {ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY}, |
657 {ui::VKEY_NUMPAD0, | 461 {ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY}}, |
658 ui::DomCode::NUMPAD0, | |
659 ui::EF_NONE, | |
660 ui::DomKey::CHARACTER, | |
661 '0'}, | |
662 {ui::VKEY_NUMPAD0, | |
663 ui::DomCode::NUMPAD0, | |
664 ui::EF_NONE, | |
665 ui::DomKey::CHARACTER, | |
666 '0'}}, | |
667 | 462 |
668 // XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier. | 463 // XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier. |
669 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 464 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
670 ui::ET_KEY_PRESSED, | 465 {ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY}, |
671 {ui::VKEY_DECIMAL, | 466 {ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY}}, |
672 ui::DomCode::NUMPAD_DECIMAL, | |
673 ui::EF_NONE, | |
674 ui::DomKey::CHARACTER, | |
675 '.'}, | |
676 {ui::VKEY_DECIMAL, | |
677 ui::DomCode::NUMPAD_DECIMAL, | |
678 ui::EF_NONE, | |
679 ui::DomKey::CHARACTER, | |
680 '.'}}, | |
681 | 467 |
682 // XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier. | 468 // XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier. |
683 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 469 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
684 ui::ET_KEY_PRESSED, | 470 {ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY}, |
685 {ui::VKEY_NUMPAD1, | 471 {ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY}}, |
686 ui::DomCode::NUMPAD1, | |
687 ui::EF_NONE, | |
688 ui::DomKey::CHARACTER, | |
689 '1'}, | |
690 {ui::VKEY_NUMPAD1, | |
691 ui::DomCode::NUMPAD1, | |
692 ui::EF_NONE, | |
693 ui::DomKey::CHARACTER, | |
694 '1'}}, | |
695 | 472 |
696 // XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier. | 473 // XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier. |
697 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 474 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
698 ui::ET_KEY_PRESSED, | 475 {ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY}, |
699 {ui::VKEY_NUMPAD2, | 476 {ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY}}, |
700 ui::DomCode::NUMPAD2, | |
701 ui::EF_NONE, | |
702 ui::DomKey::CHARACTER, | |
703 '2'}, | |
704 {ui::VKEY_NUMPAD2, | |
705 ui::DomCode::NUMPAD2, | |
706 ui::EF_NONE, | |
707 ui::DomKey::CHARACTER, | |
708 '2'}}, | |
709 | 477 |
710 // XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier. | 478 // XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier. |
711 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 479 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
712 ui::ET_KEY_PRESSED, | 480 {ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY}, |
713 {ui::VKEY_NUMPAD3, | 481 {ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY}}, |
714 ui::DomCode::NUMPAD3, | |
715 ui::EF_NONE, | |
716 ui::DomKey::CHARACTER, | |
717 '3'}, | |
718 {ui::VKEY_NUMPAD3, | |
719 ui::DomCode::NUMPAD3, | |
720 ui::EF_NONE, | |
721 ui::DomKey::CHARACTER, | |
722 '3'}}, | |
723 | 482 |
724 // XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier. | 483 // XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier. |
725 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 484 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
726 ui::ET_KEY_PRESSED, | 485 {ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY}, |
727 {ui::VKEY_NUMPAD4, | 486 {ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY}}, |
728 ui::DomCode::NUMPAD4, | |
729 ui::EF_NONE, | |
730 ui::DomKey::CHARACTER, | |
731 '4'}, | |
732 {ui::VKEY_NUMPAD4, | |
733 ui::DomCode::NUMPAD4, | |
734 ui::EF_NONE, | |
735 ui::DomKey::CHARACTER, | |
736 '4'}}, | |
737 | 487 |
738 // XK_KP_5 (= NumPad 5 with Num Lock), Num Lock | 488 // XK_KP_5 (= NumPad 5 with Num Lock), Num Lock modifier. |
739 // modifier. | 489 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
740 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 490 {ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY}, |
741 ui::ET_KEY_PRESSED, | 491 {ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY}}, |
742 {ui::VKEY_NUMPAD5, | |
743 ui::DomCode::NUMPAD5, | |
744 ui::EF_NONE, | |
745 ui::DomKey::CHARACTER, | |
746 '5'}, | |
747 {ui::VKEY_NUMPAD5, | |
748 ui::DomCode::NUMPAD5, | |
749 ui::EF_NONE, | |
750 ui::DomKey::CHARACTER, | |
751 '5'}}, | |
752 | 492 |
753 // XK_KP_6 (= NumPad 6 with Num Lock), Num Lock | 493 // XK_KP_6 (= NumPad 6 with Num Lock), Num Lock modifier. |
754 // modifier. | 494 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
755 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 495 {ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY}, |
756 ui::ET_KEY_PRESSED, | 496 {ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY}}, |
757 {ui::VKEY_NUMPAD6, | |
758 ui::DomCode::NUMPAD6, | |
759 ui::EF_NONE, | |
760 ui::DomKey::CHARACTER, | |
761 '6'}, | |
762 {ui::VKEY_NUMPAD6, | |
763 ui::DomCode::NUMPAD6, | |
764 ui::EF_NONE, | |
765 ui::DomKey::CHARACTER, | |
766 '6'}}, | |
767 | 497 |
768 // XK_KP_7 (= NumPad 7 with Num Lock), Num Lock | 498 // XK_KP_7 (= NumPad 7 with Num Lock), Num Lock modifier. |
769 // modifier. | 499 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
770 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 500 {ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY}, |
771 ui::ET_KEY_PRESSED, | 501 {ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY}}, |
772 {ui::VKEY_NUMPAD7, | |
773 ui::DomCode::NUMPAD7, | |
774 ui::EF_NONE, | |
775 ui::DomKey::CHARACTER, | |
776 '7'}, | |
777 {ui::VKEY_NUMPAD7, | |
778 ui::DomCode::NUMPAD7, | |
779 ui::EF_NONE, | |
780 ui::DomKey::CHARACTER, | |
781 '7'}}, | |
782 | 502 |
783 // XK_KP_8 (= NumPad 8 with Num Lock), Num Lock | 503 // XK_KP_8 (= NumPad 8 with Num Lock), Num Lock modifier. |
784 // modifier. | 504 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
785 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 505 {ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY}, |
786 ui::ET_KEY_PRESSED, | 506 {ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY}}, |
787 {ui::VKEY_NUMPAD8, | |
788 ui::DomCode::NUMPAD8, | |
789 ui::EF_NONE, | |
790 ui::DomKey::CHARACTER, | |
791 '8'}, | |
792 {ui::VKEY_NUMPAD8, | |
793 ui::DomCode::NUMPAD8, | |
794 ui::EF_NONE, | |
795 ui::DomKey::CHARACTER, | |
796 '8'}}, | |
797 | 507 |
798 // XK_KP_9 (= NumPad 9 with Num Lock), Num Lock | 508 // XK_KP_9 (= NumPad 9 with Num Lock), Num Lock modifier. |
799 // modifier. | 509 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
800 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 510 {ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY}, |
801 ui::ET_KEY_PRESSED, | 511 {ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY}}, |
802 {ui::VKEY_NUMPAD9, | |
803 ui::DomCode::NUMPAD9, | |
804 ui::EF_NONE, | |
805 ui::DomKey::CHARACTER, | |
806 '9'}, | |
807 {ui::VKEY_NUMPAD9, | |
808 ui::DomCode::NUMPAD9, | |
809 ui::EF_NONE, | |
810 ui::DomKey::CHARACTER, | |
811 '9'}}, | |
812 }; | 512 }; |
813 | 513 |
814 for (size_t i = 0; i < arraysize(tests); ++i) { | 514 for (size_t i = 0; i < arraysize(tests); ++i) { |
815 SCOPED_TRACE(i); | 515 SCOPED_TRACE(i); |
816 CheckKeyTestCase(&rewriter, tests[i]); | 516 CheckKeyTestCase(&rewriter, tests[i]); |
817 } | 517 } |
818 } | 518 } |
819 | 519 |
820 TEST_F(EventRewriterTest, TestRewriteNumPadKeys) { | 520 TEST_F(EventRewriterTest, TestRewriteNumPadKeys) { |
821 TestRewriteNumPadKeys(); | 521 TestRewriteNumPadKeys(); |
(...skipping 13 matching lines...) Expand all Loading... |
835 void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() { | 535 void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() { |
836 TestingPrefServiceSyncable prefs; | 536 TestingPrefServiceSyncable prefs; |
837 EventRewriter rewriter(NULL); | 537 EventRewriter rewriter(NULL); |
838 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); | 538 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard"); |
839 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 539 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
840 rewriter.set_pref_service_for_testing(&prefs); | 540 rewriter.set_pref_service_for_testing(&prefs); |
841 | 541 |
842 KeyTestCase tests[] = { | 542 KeyTestCase tests[] = { |
843 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier. | 543 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier. |
844 // The result should be "Num Pad 1 with Control + Num Lock modifiers". | 544 // The result should be "Num Pad 1 with Control + Num Lock modifiers". |
845 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 545 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
846 ui::ET_KEY_PRESSED, | 546 {ui::VKEY_END, ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY}, |
847 {ui::VKEY_END, | 547 {ui::VKEY_NUMPAD1, ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY}}, |
848 ui::DomCode::NUMPAD1, | |
849 ui::EF_COMMAND_DOWN, | |
850 ui::DomKey::END, | |
851 0}, | |
852 {ui::VKEY_NUMPAD1, | |
853 ui::DomCode::NUMPAD1, | |
854 ui::EF_CONTROL_DOWN, | |
855 ui::DomKey::CHARACTER, | |
856 '1'}}, | |
857 | 548 |
858 // XK_KP_1 (= NumPad 1 with Num Lock), Win modifier. | 549 // XK_KP_1 (= NumPad 1 with Num Lock), Win modifier. |
859 // The result should also be "Num Pad 1 with Control + Num Lock | 550 // The result should also be "Num Pad 1 with Control + Num Lock |
860 // modifiers". | 551 // modifiers". |
861 {KeyTestCase::TEST_ALL | KeyTestCase::NUMPAD, | 552 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, |
862 ui::ET_KEY_PRESSED, | 553 {ui::VKEY_NUMPAD1, ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY}, |
863 {ui::VKEY_NUMPAD1, | 554 {ui::VKEY_NUMPAD1, ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY}}, |
864 ui::DomCode::NUMPAD1, | 555 }; |
865 ui::EF_COMMAND_DOWN, | |
866 ui::DomKey::CHARACTER, | |
867 '1'}, | |
868 {ui::VKEY_NUMPAD1, | |
869 ui::DomCode::NUMPAD1, | |
870 ui::EF_CONTROL_DOWN, | |
871 ui::DomKey::CHARACTER, | |
872 '1'}}}; | |
873 | 556 |
874 for (size_t i = 0; i < arraysize(tests); ++i) { | 557 for (size_t i = 0; i < arraysize(tests); ++i) { |
875 SCOPED_TRACE(i); | 558 SCOPED_TRACE(i); |
876 CheckKeyTestCase(&rewriter, tests[i]); | 559 CheckKeyTestCase(&rewriter, tests[i]); |
877 } | 560 } |
878 } | 561 } |
879 | 562 |
880 TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) { | 563 TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) { |
881 TestRewriteNumPadKeysOnAppleKeyboard(); | 564 TestRewriteNumPadKeysOnAppleKeyboard(); |
882 } | 565 } |
(...skipping 10 matching lines...) Expand all Loading... |
893 } | 576 } |
894 | 577 |
895 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { | 578 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { |
896 TestingPrefServiceSyncable prefs; | 579 TestingPrefServiceSyncable prefs; |
897 EventRewriter rewriter(NULL); | 580 EventRewriter rewriter(NULL); |
898 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 581 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
899 rewriter.set_pref_service_for_testing(&prefs); | 582 rewriter.set_pref_service_for_testing(&prefs); |
900 | 583 |
901 KeyTestCase tests[] = { | 584 KeyTestCase tests[] = { |
902 // Press Search. Confirm the event is not rewritten. | 585 // Press Search. Confirm the event is not rewritten. |
903 {KeyTestCase::TEST_ALL, | 586 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
904 ui::ET_KEY_PRESSED, | 587 {ui::VKEY_LWIN, ui::EF_NONE}, |
905 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0}, | 588 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}}, |
906 {ui::VKEY_LWIN, | |
907 ui::DomCode::OS_LEFT, | |
908 ui::EF_COMMAND_DOWN, | |
909 ui::DomKey::OS, | |
910 0}}, | |
911 | 589 |
912 // Press left Control. Confirm the event is not rewritten. | 590 // Press left Control. Confirm the event is not rewritten. |
913 {KeyTestCase::TEST_ALL, | 591 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
914 ui::ET_KEY_PRESSED, | 592 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, |
915 {ui::VKEY_CONTROL, | 593 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, |
916 ui::DomCode::CONTROL_LEFT, | |
917 ui::EF_CONTROL_DOWN, | |
918 ui::DomKey::CONTROL, | |
919 0}, | |
920 {ui::VKEY_CONTROL, | |
921 ui::DomCode::CONTROL_LEFT, | |
922 ui::EF_CONTROL_DOWN, | |
923 ui::DomKey::CONTROL, | |
924 0}}, | |
925 | 594 |
926 // Press right Control. Confirm the event is not rewritten. | 595 // Press right Control. Confirm the event is not rewritten. |
927 {KeyTestCase::TEST_ALL, | 596 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
928 ui::ET_KEY_PRESSED, | 597 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, |
929 {ui::VKEY_CONTROL, | 598 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, |
930 ui::DomCode::CONTROL_LEFT, | |
931 ui::EF_CONTROL_DOWN, | |
932 ui::DomKey::CONTROL, | |
933 0}, | |
934 {ui::VKEY_CONTROL, | |
935 ui::DomCode::CONTROL_LEFT, | |
936 ui::EF_CONTROL_DOWN, | |
937 ui::DomKey::CONTROL, | |
938 0}}, | |
939 | 599 |
940 // Press left Alt. Confirm the event is not rewritten. | 600 // Press left Alt. Confirm the event is not rewritten. |
941 {KeyTestCase::TEST_ALL, | 601 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
942 ui::ET_KEY_PRESSED, | 602 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, |
943 {ui::VKEY_MENU, | 603 {ui::VKEY_MENU, ui::EF_ALT_DOWN}}, |
944 ui::DomCode::ALT_LEFT, | |
945 ui::EF_ALT_DOWN, | |
946 ui::DomKey::ALT, | |
947 0}, | |
948 {ui::VKEY_MENU, | |
949 ui::DomCode::ALT_LEFT, | |
950 ui::EF_ALT_DOWN, | |
951 ui::DomKey::ALT, | |
952 0}}, | |
953 | 604 |
954 // Press right Alt. Confirm the event is not rewritten. | 605 // Press right Alt. Confirm the event is not rewritten. |
955 {KeyTestCase::TEST_ALL, | 606 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
956 ui::ET_KEY_PRESSED, | 607 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, |
957 {ui::VKEY_MENU, | 608 {ui::VKEY_MENU, ui::EF_ALT_DOWN}}, |
958 ui::DomCode::ALT_LEFT, | |
959 ui::EF_ALT_DOWN, | |
960 ui::DomKey::ALT, | |
961 0}, | |
962 {ui::VKEY_MENU, | |
963 ui::DomCode::ALT_LEFT, | |
964 ui::EF_ALT_DOWN, | |
965 ui::DomKey::ALT, | |
966 0}}, | |
967 | 609 |
968 // Test KeyRelease event, just in case. | 610 // Test KeyRelease event, just in case. |
969 // Release Search. Confirm the release event is not rewritten. | 611 // Release Search. Confirm the release event is not rewritten. |
970 {KeyTestCase::TEST_ALL, | 612 {KeyTestCase::TEST_ALL, ui::ET_KEY_RELEASED, |
971 ui::ET_KEY_RELEASED, | 613 {ui::VKEY_LWIN, ui::EF_NONE}, |
972 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0}, | 614 {ui::VKEY_LWIN, ui::EF_NONE}}, |
973 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0}}, | |
974 }; | 615 }; |
975 | 616 |
976 for (size_t i = 0; i < arraysize(tests); ++i) { | 617 for (size_t i = 0; i < arraysize(tests); ++i) { |
977 SCOPED_TRACE(i); | 618 SCOPED_TRACE(i); |
978 CheckKeyTestCase(&rewriter, tests[i]); | 619 CheckKeyTestCase(&rewriter, tests[i]); |
979 } | 620 } |
980 } | 621 } |
981 | 622 |
982 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { | 623 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { |
983 TestingPrefServiceSyncable prefs; | 624 TestingPrefServiceSyncable prefs; |
984 EventRewriter rewriter(NULL); | 625 EventRewriter rewriter(NULL); |
985 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 626 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
986 rewriter.set_pref_service_for_testing(&prefs); | 627 rewriter.set_pref_service_for_testing(&prefs); |
987 | 628 |
988 KeyTestCase tests[] = { | 629 KeyTestCase tests[] = { |
989 // Press Alt with Shift. Confirm the event is not rewritten. | 630 // Press Alt with Shift. Confirm the event is not rewritten. |
990 {KeyTestCase::TEST_ALL, | 631 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
991 ui::ET_KEY_PRESSED, | 632 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}, |
992 {ui::VKEY_MENU, | 633 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}}, |
993 ui::DomCode::ALT_LEFT, | |
994 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | |
995 ui::DomKey::ALT, | |
996 0}, | |
997 {ui::VKEY_MENU, | |
998 ui::DomCode::ALT_LEFT, | |
999 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | |
1000 ui::DomKey::ALT, | |
1001 0}}, | |
1002 | 634 |
1003 // Press Search with Caps Lock mask. Confirm the event is not rewritten. | 635 // Press Search with Caps Lock mask. Confirm the event is not rewritten. |
1004 {KeyTestCase::TEST_ALL, | 636 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1005 ui::ET_KEY_PRESSED, | 637 {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN}, |
1006 {ui::VKEY_LWIN, | 638 {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN}}, |
1007 ui::DomCode::OS_LEFT, | |
1008 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, | |
1009 ui::DomKey::OS, | |
1010 0}, | |
1011 {ui::VKEY_LWIN, | |
1012 ui::DomCode::OS_LEFT, | |
1013 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, | |
1014 ui::DomKey::OS, | |
1015 0}}, | |
1016 | 639 |
1017 // Release Search with Caps Lock mask. Confirm the event is not rewritten. | 640 // Release Search with Caps Lock mask. Confirm the event is not rewritten. |
1018 {KeyTestCase::TEST_ALL, | 641 {KeyTestCase::TEST_ALL, ui::ET_KEY_RELEASED, |
1019 ui::ET_KEY_RELEASED, | 642 {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN}, |
1020 {ui::VKEY_LWIN, | 643 {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN}}, |
1021 ui::DomCode::OS_LEFT, | |
1022 ui::EF_CAPS_LOCK_DOWN, | |
1023 ui::DomKey::OS, | |
1024 0}, | |
1025 {ui::VKEY_LWIN, | |
1026 ui::DomCode::OS_LEFT, | |
1027 ui::EF_CAPS_LOCK_DOWN, | |
1028 ui::DomKey::OS, | |
1029 0}}, | |
1030 | 644 |
1031 // Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten. | 645 // Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten. |
1032 {KeyTestCase::TEST_ALL, | 646 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1033 ui::ET_KEY_PRESSED, | 647 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
1034 {ui::VKEY_B, | 648 ui::EF_COMMAND_DOWN}, |
1035 ui::DomCode::KEY_B, | 649 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
1036 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 650 ui::EF_COMMAND_DOWN}}, |
1037 ui::EF_COMMAND_DOWN, | |
1038 ui::DomKey::CHARACTER, | |
1039 'B'}, | |
1040 {ui::VKEY_B, | |
1041 ui::DomCode::KEY_B, | |
1042 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | |
1043 ui::EF_COMMAND_DOWN, | |
1044 ui::DomKey::CHARACTER, | |
1045 'B'}}, | |
1046 }; | 651 }; |
1047 | 652 |
1048 for (size_t i = 0; i < arraysize(tests); ++i) { | 653 for (size_t i = 0; i < arraysize(tests); ++i) { |
1049 SCOPED_TRACE(i); | 654 SCOPED_TRACE(i); |
1050 CheckKeyTestCase(&rewriter, tests[i]); | 655 CheckKeyTestCase(&rewriter, tests[i]); |
1051 } | 656 } |
1052 } | 657 } |
1053 | 658 |
1054 TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { | 659 TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { |
1055 // Disable Search and Control keys. | 660 // Disable Search and Control keys. |
1056 TestingPrefServiceSyncable prefs; | 661 TestingPrefServiceSyncable prefs; |
1057 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 662 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1058 IntegerPrefMember search; | 663 IntegerPrefMember search; |
1059 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 664 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
1060 search.SetValue(chromeos::input_method::kVoidKey); | 665 search.SetValue(chromeos::input_method::kVoidKey); |
1061 IntegerPrefMember control; | 666 IntegerPrefMember control; |
1062 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 667 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
1063 control.SetValue(chromeos::input_method::kVoidKey); | 668 control.SetValue(chromeos::input_method::kVoidKey); |
1064 | 669 |
1065 EventRewriter rewriter(NULL); | 670 EventRewriter rewriter(NULL); |
1066 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 671 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1067 rewriter.set_pref_service_for_testing(&prefs); | 672 rewriter.set_pref_service_for_testing(&prefs); |
1068 | 673 |
1069 KeyTestCase disabled_modifier_tests[] = { | 674 KeyTestCase disabled_modifier_tests[] = { |
1070 // Press Alt with Shift. This key press shouldn't be affected by the | 675 // Press Alt with Shift. This key press shouldn't be affected by the |
1071 // pref. Confirm the event is not rewritten. | 676 // pref. Confirm the event is not rewritten. |
1072 {KeyTestCase::TEST_ALL, | 677 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1073 ui::ET_KEY_PRESSED, | 678 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}, |
1074 {ui::VKEY_MENU, | 679 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}}, |
1075 ui::DomCode::ALT_LEFT, | |
1076 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | |
1077 ui::DomKey::ALT, | |
1078 0}, | |
1079 {ui::VKEY_MENU, | |
1080 ui::DomCode::ALT_LEFT, | |
1081 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | |
1082 ui::DomKey::ALT, | |
1083 0}}, | |
1084 | 680 |
1085 // Press Search. Confirm the event is now VKEY_UNKNOWN. | 681 // Press Search. Confirm the event is now VKEY_UNKNOWN. |
1086 {KeyTestCase::TEST_ALL, | 682 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1087 ui::ET_KEY_PRESSED, | 683 {ui::VKEY_LWIN, ui::EF_NONE}, |
1088 {ui::VKEY_LWIN, ui::DomCode::OS_LEFT, ui::EF_NONE, ui::DomKey::OS, 0}, | 684 {ui::VKEY_UNKNOWN, ui::EF_NONE}}, |
1089 {ui::VKEY_UNKNOWN, | |
1090 ui::DomCode::NONE, | |
1091 ui::EF_NONE, | |
1092 ui::DomKey::UNIDENTIFIED, | |
1093 0}}, | |
1094 | 685 |
1095 // Press Control. Confirm the event is now VKEY_UNKNOWN. | 686 // Press Control. Confirm the event is now VKEY_UNKNOWN. |
1096 {KeyTestCase::TEST_ALL, | 687 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1097 ui::ET_KEY_PRESSED, | 688 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, |
1098 {ui::VKEY_CONTROL, | 689 {ui::VKEY_UNKNOWN, ui::EF_NONE}}, |
1099 ui::DomCode::CONTROL_LEFT, | |
1100 ui::EF_CONTROL_DOWN, | |
1101 ui::DomKey::CONTROL, | |
1102 0}, | |
1103 {ui::VKEY_UNKNOWN, | |
1104 ui::DomCode::NONE, | |
1105 ui::EF_NONE, | |
1106 ui::DomKey::UNIDENTIFIED, | |
1107 0}}, | |
1108 | 690 |
1109 // Press Control+Search. Confirm the event is now VKEY_UNKNOWN | 691 // Press Control+Search. Confirm the event is now VKEY_UNKNOWN |
1110 // without any modifiers. | 692 // without any modifiers. |
1111 {KeyTestCase::TEST_ALL, | 693 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1112 ui::ET_KEY_PRESSED, | 694 {ui::VKEY_LWIN, ui::EF_CONTROL_DOWN}, |
1113 {ui::VKEY_LWIN, | 695 {ui::VKEY_UNKNOWN, ui::EF_NONE}}, |
1114 ui::DomCode::OS_LEFT, | |
1115 ui::EF_CONTROL_DOWN, | |
1116 ui::DomKey::OS, | |
1117 0}, | |
1118 {ui::VKEY_UNKNOWN, | |
1119 ui::DomCode::NONE, | |
1120 ui::EF_NONE, | |
1121 ui::DomKey::UNIDENTIFIED, | |
1122 0}}, | |
1123 | 696 |
1124 // Press Control+Search+a. Confirm the event is now VKEY_A without any | 697 // Press Control+Search+a. Confirm the event is now VKEY_A without any |
1125 // modifiers. | 698 // modifiers. |
1126 {KeyTestCase::TEST_ALL, | 699 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1127 ui::ET_KEY_PRESSED, | 700 {ui::VKEY_A, ui::EF_CONTROL_DOWN}, |
1128 {ui::VKEY_A, | 701 {ui::VKEY_A, ui::EF_NONE}}, |
1129 ui::DomCode::KEY_A, | |
1130 ui::EF_CONTROL_DOWN, | |
1131 ui::DomKey::CHARACTER, | |
1132 'a'}, | |
1133 {ui::VKEY_A, | |
1134 ui::DomCode::KEY_A, | |
1135 ui::EF_NONE, | |
1136 ui::DomKey::CHARACTER, | |
1137 'a'}}, | |
1138 | 702 |
1139 // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with | 703 // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with |
1140 // the Alt modifier. | 704 // the Alt modifier. |
1141 {KeyTestCase::TEST_ALL, | 705 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1142 ui::ET_KEY_PRESSED, | 706 {ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}, |
1143 {ui::VKEY_A, | 707 {ui::VKEY_A, ui::EF_ALT_DOWN}}, |
1144 ui::DomCode::KEY_A, | |
1145 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, | |
1146 ui::DomKey::CHARACTER, | |
1147 'a'}, | |
1148 {ui::VKEY_A, | |
1149 ui::DomCode::KEY_A, | |
1150 ui::EF_ALT_DOWN, | |
1151 ui::DomKey::CHARACTER, | |
1152 'a'}}, | |
1153 }; | 708 }; |
1154 | 709 |
1155 for (size_t i = 0; i < arraysize(disabled_modifier_tests); ++i) { | 710 for (size_t i = 0; i < arraysize(disabled_modifier_tests); ++i) { |
1156 SCOPED_TRACE(i); | 711 SCOPED_TRACE(i); |
1157 CheckKeyTestCase(&rewriter, disabled_modifier_tests[i]); | 712 CheckKeyTestCase(&rewriter, disabled_modifier_tests[i]); |
1158 } | 713 } |
1159 | 714 |
1160 // Remap Alt to Control. | 715 // Remap Alt to Control. |
1161 IntegerPrefMember alt; | 716 IntegerPrefMember alt; |
1162 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 717 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); |
1163 alt.SetValue(chromeos::input_method::kControlKey); | 718 alt.SetValue(chromeos::input_method::kControlKey); |
1164 | 719 |
1165 KeyTestCase tests[] = { | 720 KeyTestCase tests[] = { |
1166 // Press left Alt. Confirm the event is now VKEY_CONTROL | 721 // Press left Alt. Confirm the event is now VKEY_CONTROL |
1167 // even though the Control key itself is disabled. | 722 // even though the Control key itself is disabled. |
1168 {KeyTestCase::TEST_ALL, | 723 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1169 ui::ET_KEY_PRESSED, | 724 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, |
1170 {ui::VKEY_MENU, | 725 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, |
1171 ui::DomCode::ALT_LEFT, | |
1172 ui::EF_ALT_DOWN, | |
1173 ui::DomKey::ALT, | |
1174 0}, | |
1175 {ui::VKEY_CONTROL, | |
1176 ui::DomCode::CONTROL_LEFT, | |
1177 ui::EF_CONTROL_DOWN, | |
1178 ui::DomKey::CONTROL, | |
1179 0}}, | |
1180 | 726 |
1181 // Press Alt+a. Confirm the event is now Control+a even though the Control | 727 // Press Alt+a. Confirm the event is now Control+a even though the Control |
1182 // key itself is disabled. | 728 // key itself is disabled. |
1183 {KeyTestCase::TEST_ALL, | 729 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1184 ui::ET_KEY_PRESSED, | 730 {ui::VKEY_A, ui::EF_ALT_DOWN}, |
1185 {ui::VKEY_A, | 731 {ui::VKEY_A, ui::EF_CONTROL_DOWN}}, |
1186 ui::DomCode::KEY_A, | |
1187 ui::EF_ALT_DOWN, | |
1188 ui::DomKey::CHARACTER, | |
1189 'a'}, | |
1190 {ui::VKEY_A, | |
1191 ui::DomCode::KEY_A, | |
1192 ui::EF_CONTROL_DOWN, | |
1193 ui::DomKey::CHARACTER, | |
1194 'a'}}, | |
1195 }; | 732 }; |
1196 | 733 |
1197 for (size_t i = 0; i < arraysize(tests); ++i) { | 734 for (size_t i = 0; i < arraysize(tests); ++i) { |
1198 SCOPED_TRACE(i); | 735 SCOPED_TRACE(i); |
1199 CheckKeyTestCase(&rewriter, tests[i]); | 736 CheckKeyTestCase(&rewriter, tests[i]); |
1200 } | 737 } |
1201 } | 738 } |
1202 | 739 |
1203 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { | 740 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { |
1204 // Remap Search to Control. | 741 // Remap Search to Control. |
1205 TestingPrefServiceSyncable prefs; | 742 TestingPrefServiceSyncable prefs; |
1206 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 743 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1207 IntegerPrefMember search; | 744 IntegerPrefMember search; |
1208 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 745 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
1209 search.SetValue(chromeos::input_method::kControlKey); | 746 search.SetValue(chromeos::input_method::kControlKey); |
1210 | 747 |
1211 EventRewriter rewriter(NULL); | 748 EventRewriter rewriter(NULL); |
1212 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 749 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1213 rewriter.set_pref_service_for_testing(&prefs); | 750 rewriter.set_pref_service_for_testing(&prefs); |
1214 | 751 |
1215 KeyTestCase s_tests[] = { | 752 KeyTestCase s_tests[] = { |
1216 // Press Search. Confirm the event is now VKEY_CONTROL. | 753 // Press Search. Confirm the event is now VKEY_CONTROL. |
1217 {KeyTestCase::TEST_ALL, | 754 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1218 ui::ET_KEY_PRESSED, | 755 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}, |
1219 {ui::VKEY_LWIN, | 756 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, |
1220 ui::DomCode::OS_LEFT, | |
1221 ui::EF_COMMAND_DOWN, | |
1222 ui::DomKey::OS, | |
1223 0}, | |
1224 {ui::VKEY_CONTROL, | |
1225 ui::DomCode::CONTROL_LEFT, | |
1226 ui::EF_CONTROL_DOWN, | |
1227 ui::DomKey::CONTROL, | |
1228 0}}, | |
1229 }; | 757 }; |
1230 | 758 |
1231 for (size_t i = 0; i < arraysize(s_tests); ++i) { | 759 for (size_t i = 0; i < arraysize(s_tests); ++i) { |
1232 SCOPED_TRACE(i); | 760 SCOPED_TRACE(i); |
1233 CheckKeyTestCase(&rewriter, s_tests[i]); | 761 CheckKeyTestCase(&rewriter, s_tests[i]); |
1234 } | 762 } |
1235 | 763 |
1236 // Remap Alt to Control too. | 764 // Remap Alt to Control too. |
1237 IntegerPrefMember alt; | 765 IntegerPrefMember alt; |
1238 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 766 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); |
1239 alt.SetValue(chromeos::input_method::kControlKey); | 767 alt.SetValue(chromeos::input_method::kControlKey); |
1240 | 768 |
1241 KeyTestCase sa_tests[] = { | 769 KeyTestCase sa_tests[] = { |
1242 // Press Alt. Confirm the event is now VKEY_CONTROL. | 770 // Press Alt. Confirm the event is now VKEY_CONTROL. |
1243 {KeyTestCase::TEST_ALL, | 771 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1244 ui::ET_KEY_PRESSED, | 772 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, |
1245 {ui::VKEY_MENU, | 773 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, |
1246 ui::DomCode::ALT_LEFT, | |
1247 ui::EF_ALT_DOWN, | |
1248 ui::DomKey::ALT, | |
1249 0}, | |
1250 {ui::VKEY_CONTROL, | |
1251 ui::DomCode::CONTROL_LEFT, | |
1252 ui::EF_CONTROL_DOWN, | |
1253 ui::DomKey::CONTROL, | |
1254 0}}, | |
1255 | 774 |
1256 // Press Alt+Search. Confirm the event is now VKEY_CONTROL. | 775 // Press Alt+Search. Confirm the event is now VKEY_CONTROL. |
1257 {KeyTestCase::TEST_ALL, | 776 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1258 ui::ET_KEY_PRESSED, | 777 {ui::VKEY_LWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, |
1259 {ui::VKEY_LWIN, | 778 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, |
1260 ui::DomCode::OS_LEFT, | |
1261 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | |
1262 ui::DomKey::OS, | |
1263 0}, | |
1264 {ui::VKEY_CONTROL, | |
1265 ui::DomCode::CONTROL_LEFT, | |
1266 ui::EF_CONTROL_DOWN, | |
1267 ui::DomKey::CONTROL, | |
1268 0}}, | |
1269 | 779 |
1270 // Press Control+Alt+Search. Confirm the event is now VKEY_CONTROL. | 780 // Press Control+Alt+Search. Confirm the event is now VKEY_CONTROL. |
1271 {KeyTestCase::TEST_ALL, | 781 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1272 ui::ET_KEY_PRESSED, | |
1273 {ui::VKEY_LWIN, | 782 {ui::VKEY_LWIN, |
1274 ui::DomCode::OS_LEFT, | 783 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, |
1275 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 784 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, |
1276 ui::DomKey::OS, | |
1277 0}, | |
1278 {ui::VKEY_CONTROL, | |
1279 ui::DomCode::CONTROL_LEFT, | |
1280 ui::EF_CONTROL_DOWN, | |
1281 ui::DomKey::CONTROL, | |
1282 0}}, | |
1283 | 785 |
1284 // Press Shift+Control+Alt+Search. Confirm the event is now Control with | 786 // Press Shift+Control+Alt+Search. Confirm the event is now Control with |
1285 // Shift and Control modifiers. | 787 // Shift and Control modifiers. |
1286 {KeyTestCase::TEST_ALL, | 788 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1287 ui::ET_KEY_PRESSED, | 789 {ui::VKEY_LWIN, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
1288 {ui::VKEY_LWIN, | 790 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, |
1289 ui::DomCode::OS_LEFT, | 791 {ui::VKEY_CONTROL, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}, |
1290 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | |
1291 ui::EF_COMMAND_DOWN, | |
1292 ui::DomKey::OS, | |
1293 0}, | |
1294 {ui::VKEY_CONTROL, | |
1295 ui::DomCode::CONTROL_LEFT, | |
1296 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
1297 ui::DomKey::CONTROL, | |
1298 0}}, | |
1299 | 792 |
1300 // Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift | 793 // Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift |
1301 // and Control modifiers. | 794 // and Control modifiers. |
1302 {KeyTestCase::TEST_ALL, | 795 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1303 ui::ET_KEY_PRESSED, | 796 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
1304 {ui::VKEY_B, | 797 ui::EF_COMMAND_DOWN}, |
1305 ui::DomCode::KEY_B, | 798 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}, |
1306 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | |
1307 ui::EF_COMMAND_DOWN, | |
1308 ui::DomKey::CHARACTER, | |
1309 'B'}, | |
1310 {ui::VKEY_B, | |
1311 ui::DomCode::KEY_B, | |
1312 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
1313 ui::DomKey::CHARACTER, | |
1314 'B'}}, | |
1315 }; | 799 }; |
1316 | 800 |
1317 for (size_t i = 0; i < arraysize(sa_tests); ++i) { | 801 for (size_t i = 0; i < arraysize(sa_tests); ++i) { |
1318 SCOPED_TRACE(i); | 802 SCOPED_TRACE(i); |
1319 CheckKeyTestCase(&rewriter, sa_tests[i]); | 803 CheckKeyTestCase(&rewriter, sa_tests[i]); |
1320 } | 804 } |
1321 } | 805 } |
1322 | 806 |
1323 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { | 807 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { |
1324 // Remap Search to ESC. | 808 // Remap Search to ESC. |
1325 TestingPrefServiceSyncable prefs; | 809 TestingPrefServiceSyncable prefs; |
1326 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 810 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1327 IntegerPrefMember search; | 811 IntegerPrefMember search; |
1328 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 812 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
1329 search.SetValue(chromeos::input_method::kEscapeKey); | 813 search.SetValue(chromeos::input_method::kEscapeKey); |
1330 | 814 |
1331 EventRewriter rewriter(NULL); | 815 EventRewriter rewriter(NULL); |
1332 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 816 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1333 rewriter.set_pref_service_for_testing(&prefs); | 817 rewriter.set_pref_service_for_testing(&prefs); |
1334 | 818 |
1335 KeyTestCase tests[] = { | 819 KeyTestCase tests[] = {// Press Search. Confirm the event is now VKEY_ESCAPE. |
1336 // Press Search. Confirm the event is now VKEY_ESCAPE. | 820 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1337 {KeyTestCase::TEST_ALL, | 821 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}, |
1338 ui::ET_KEY_PRESSED, | 822 {ui::VKEY_ESCAPE, ui::EF_NONE}}, |
1339 {ui::VKEY_LWIN, | |
1340 ui::DomCode::OS_LEFT, | |
1341 ui::EF_COMMAND_DOWN, | |
1342 ui::DomKey::OS, | |
1343 0}, | |
1344 {ui::VKEY_ESCAPE, | |
1345 ui::DomCode::ESCAPE, | |
1346 ui::EF_NONE, | |
1347 ui::DomKey::ESCAPE, | |
1348 0}}, | |
1349 }; | 823 }; |
1350 | 824 |
1351 for (size_t i = 0; i < arraysize(tests); ++i) { | 825 for (size_t i = 0; i < arraysize(tests); ++i) { |
1352 SCOPED_TRACE(i); | 826 SCOPED_TRACE(i); |
1353 CheckKeyTestCase(&rewriter, tests[i]); | 827 CheckKeyTestCase(&rewriter, tests[i]); |
1354 } | 828 } |
1355 } | 829 } |
1356 | 830 |
1357 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { | 831 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { |
1358 // Remap Search to Alt. | 832 // Remap Search to Alt. |
1359 TestingPrefServiceSyncable prefs; | 833 TestingPrefServiceSyncable prefs; |
1360 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 834 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1361 IntegerPrefMember search; | 835 IntegerPrefMember search; |
1362 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 836 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
1363 search.SetValue(chromeos::input_method::kAltKey); | 837 search.SetValue(chromeos::input_method::kAltKey); |
1364 | 838 |
1365 EventRewriter rewriter(NULL); | 839 EventRewriter rewriter(NULL); |
1366 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 840 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1367 rewriter.set_pref_service_for_testing(&prefs); | 841 rewriter.set_pref_service_for_testing(&prefs); |
1368 | 842 |
1369 KeyTestCase s2a_tests[] = { | 843 KeyTestCase s2a_tests[] = { |
1370 // Press Search. Confirm the event is now VKEY_MENU. | 844 // Press Search. Confirm the event is now VKEY_MENU. |
1371 {KeyTestCase::TEST_ALL, | 845 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1372 ui::ET_KEY_PRESSED, | 846 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}, |
1373 {ui::VKEY_LWIN, | 847 {ui::VKEY_MENU, ui::EF_ALT_DOWN}}, |
1374 ui::DomCode::OS_LEFT, | |
1375 ui::EF_COMMAND_DOWN, | |
1376 ui::DomKey::OS, | |
1377 0}, | |
1378 {ui::VKEY_MENU, | |
1379 ui::DomCode::ALT_LEFT, | |
1380 ui::EF_ALT_DOWN, | |
1381 ui::DomKey::ALT, | |
1382 0}}, | |
1383 }; | 848 }; |
1384 | 849 |
1385 for (size_t i = 0; i < arraysize(s2a_tests); ++i) { | 850 for (size_t i = 0; i < arraysize(s2a_tests); ++i) { |
1386 SCOPED_TRACE(i); | 851 SCOPED_TRACE(i); |
1387 CheckKeyTestCase(&rewriter, s2a_tests[i]); | 852 CheckKeyTestCase(&rewriter, s2a_tests[i]); |
1388 } | 853 } |
1389 | 854 |
1390 // Remap Alt to Control. | 855 // Remap Alt to Control. |
1391 IntegerPrefMember alt; | 856 IntegerPrefMember alt; |
1392 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 857 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); |
1393 alt.SetValue(chromeos::input_method::kControlKey); | 858 alt.SetValue(chromeos::input_method::kControlKey); |
1394 | 859 |
1395 KeyTestCase a2c_tests[] = { | 860 KeyTestCase a2c_tests[] = { |
1396 // Press left Alt. Confirm the event is now VKEY_CONTROL. | 861 // Press left Alt. Confirm the event is now VKEY_CONTROL. |
1397 {KeyTestCase::TEST_ALL, | 862 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1398 ui::ET_KEY_PRESSED, | 863 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, |
1399 {ui::VKEY_MENU, | 864 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, |
1400 ui::DomCode::ALT_LEFT, | |
1401 ui::EF_ALT_DOWN, | |
1402 ui::DomKey::ALT, | |
1403 0}, | |
1404 {ui::VKEY_CONTROL, | |
1405 ui::DomCode::CONTROL_LEFT, | |
1406 ui::EF_CONTROL_DOWN, | |
1407 ui::DomKey::CONTROL, | |
1408 0}}, | |
1409 // Press Shift+comma. Verify that only the flags are changed. | 865 // Press Shift+comma. Verify that only the flags are changed. |
1410 // The X11 portion of the test addresses crbug.com/390263 by verifying | 866 // The X11 portion of the test addresses crbug.com/390263 by verifying |
1411 // that the X keycode remains that for ',<' and not for 105-key '<>'. | 867 // that the X keycode remains that for ',<' and not for 105-key '<>'. |
1412 {KeyTestCase::TEST_ALL, | 868 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1413 ui::ET_KEY_PRESSED, | 869 {ui::VKEY_OEM_COMMA, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}, |
1414 {ui::VKEY_OEM_COMMA, | 870 {ui::VKEY_OEM_COMMA, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}, |
1415 ui::DomCode::COMMA, | |
1416 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | |
1417 ui::DomKey::UNIDENTIFIED, | |
1418 0}, | |
1419 {ui::VKEY_OEM_COMMA, | |
1420 ui::DomCode::COMMA, | |
1421 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
1422 ui::DomKey::UNIDENTIFIED, | |
1423 0}}, | |
1424 // Press Shift+9. Verify that only the flags are changed. | 871 // Press Shift+9. Verify that only the flags are changed. |
1425 {KeyTestCase::TEST_ALL, | 872 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1426 ui::ET_KEY_PRESSED, | 873 {ui::VKEY_9, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}, |
1427 {ui::VKEY_9, | 874 {ui::VKEY_9, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}, |
1428 ui::DomCode::DIGIT9, | |
1429 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, | |
1430 ui::DomKey::CHARACTER, | |
1431 '9'}, | |
1432 {ui::VKEY_9, | |
1433 ui::DomCode::DIGIT9, | |
1434 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, | |
1435 ui::DomKey::CHARACTER, | |
1436 '9'}}, | |
1437 }; | 875 }; |
1438 | 876 |
1439 for (size_t i = 0; i < arraysize(a2c_tests); ++i) { | 877 for (size_t i = 0; i < arraysize(a2c_tests); ++i) { |
1440 SCOPED_TRACE(i); | 878 SCOPED_TRACE(i); |
1441 CheckKeyTestCase(&rewriter, a2c_tests[i]); | 879 CheckKeyTestCase(&rewriter, a2c_tests[i]); |
1442 } | 880 } |
1443 | 881 |
1444 // Remap Control to Search. | 882 // Remap Control to Search. |
1445 IntegerPrefMember control; | 883 IntegerPrefMember control; |
1446 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 884 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
1447 control.SetValue(chromeos::input_method::kSearchKey); | 885 control.SetValue(chromeos::input_method::kSearchKey); |
1448 | 886 |
1449 KeyTestCase c2s_tests[] = { | 887 KeyTestCase c2s_tests[] = { |
1450 // Press left Control. Confirm the event is now VKEY_LWIN. | 888 // Press left Control. Confirm the event is now VKEY_LWIN. |
1451 {KeyTestCase::TEST_ALL, | 889 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1452 ui::ET_KEY_PRESSED, | 890 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, |
1453 {ui::VKEY_CONTROL, | 891 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}}, |
1454 ui::DomCode::CONTROL_LEFT, | |
1455 ui::EF_CONTROL_DOWN, | |
1456 ui::DomKey::CONTROL, | |
1457 0}, | |
1458 {ui::VKEY_LWIN, | |
1459 ui::DomCode::OS_LEFT, | |
1460 ui::EF_COMMAND_DOWN, | |
1461 ui::DomKey::OS, | |
1462 0}}, | |
1463 | 892 |
1464 // Then, press all of the three, Control+Alt+Search. | 893 // Then, press all of the three, Control+Alt+Search. |
1465 {KeyTestCase::TEST_ALL, | 894 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1466 ui::ET_KEY_PRESSED, | |
1467 {ui::VKEY_LWIN, | 895 {ui::VKEY_LWIN, |
1468 ui::DomCode::OS_LEFT, | 896 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, |
1469 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | |
1470 ui::DomKey::OS, | |
1471 0}, | |
1472 {ui::VKEY_MENU, | 897 {ui::VKEY_MENU, |
1473 ui::DomCode::ALT_LEFT, | 898 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, |
1474 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | |
1475 ui::DomKey::ALT, | |
1476 0}}, | |
1477 | 899 |
1478 // Press Shift+Control+Alt+Search. | 900 // Press Shift+Control+Alt+Search. |
1479 {KeyTestCase::TEST_ALL, | 901 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1480 ui::ET_KEY_PRESSED, | 902 {ui::VKEY_LWIN, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
1481 {ui::VKEY_LWIN, | 903 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, |
1482 ui::DomCode::OS_LEFT, | 904 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
1483 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 905 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, |
1484 ui::EF_COMMAND_DOWN, | |
1485 ui::DomKey::OS, | |
1486 0}, | |
1487 {ui::VKEY_MENU, | |
1488 ui::DomCode::ALT_LEFT, | |
1489 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | |
1490 ui::EF_COMMAND_DOWN, | |
1491 ui::DomKey::ALT, | |
1492 0}}, | |
1493 | 906 |
1494 // Press Shift+Control+Alt+Search+B | 907 // Press Shift+Control+Alt+Search+B |
1495 {KeyTestCase::TEST_ALL, | 908 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1496 ui::ET_KEY_PRESSED, | 909 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
1497 {ui::VKEY_B, | 910 ui::EF_COMMAND_DOWN}, |
1498 ui::DomCode::KEY_B, | 911 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | |
1499 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 912 ui::EF_COMMAND_DOWN}}, |
1500 ui::EF_COMMAND_DOWN, | |
1501 ui::DomKey::CHARACTER, | |
1502 'B'}, | |
1503 {ui::VKEY_B, | |
1504 ui::DomCode::KEY_B, | |
1505 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | |
1506 ui::EF_COMMAND_DOWN, | |
1507 ui::DomKey::CHARACTER, | |
1508 'B'}}, | |
1509 }; | 913 }; |
1510 | 914 |
1511 for (size_t i = 0; i < arraysize(c2s_tests); ++i) { | 915 for (size_t i = 0; i < arraysize(c2s_tests); ++i) { |
1512 SCOPED_TRACE(i); | 916 SCOPED_TRACE(i); |
1513 CheckKeyTestCase(&rewriter, c2s_tests[i]); | 917 CheckKeyTestCase(&rewriter, c2s_tests[i]); |
1514 } | 918 } |
1515 } | 919 } |
1516 | 920 |
1517 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { | 921 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { |
1518 // Remap Search to Caps Lock. | 922 // Remap Search to Caps Lock. |
1519 TestingPrefServiceSyncable prefs; | 923 TestingPrefServiceSyncable prefs; |
1520 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 924 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1521 IntegerPrefMember search; | 925 IntegerPrefMember search; |
1522 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 926 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
1523 search.SetValue(chromeos::input_method::kCapsLockKey); | 927 search.SetValue(chromeos::input_method::kCapsLockKey); |
1524 | 928 |
1525 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 929 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
1526 EventRewriter rewriter(NULL); | 930 EventRewriter rewriter(NULL); |
1527 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 931 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1528 rewriter.set_pref_service_for_testing(&prefs); | 932 rewriter.set_pref_service_for_testing(&prefs); |
1529 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 933 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
1530 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 934 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1531 | 935 |
1532 // Press Search. | 936 // Press Search. |
1533 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, | 937 EXPECT_EQ( |
1534 ui::DomCode::CAPS_LOCK, | 938 GetExpectedResultAsString(ui::VKEY_CAPITAL, |
1535 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 939 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
1536 ui::DomKey::CAPS_LOCK, 0), | 940 ui::ET_KEY_PRESSED), |
1537 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 941 GetRewrittenEventAsString( |
1538 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 942 &rewriter, ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED)); |
1539 ui::EF_COMMAND_DOWN, ui::DomKey::OS, 0)); | |
1540 // Confirm that the Caps Lock status is changed. | 943 // Confirm that the Caps Lock status is changed. |
1541 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 944 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
1542 | 945 |
1543 // Release Search. | 946 // Release Search. |
1544 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 947 EXPECT_EQ(GetExpectedResultAsString( |
1545 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 948 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), |
1546 ui::DomKey::CAPS_LOCK, 0), | 949 GetRewrittenEventAsString( |
1547 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 950 &rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
1548 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | |
1549 ui::EF_NONE, ui::DomKey::OS, 0)); | |
1550 // Confirm that the Caps Lock status is not changed. | 951 // Confirm that the Caps Lock status is not changed. |
1551 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 952 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
1552 | 953 |
1553 // Press Search. | 954 // Press Search. |
1554 EXPECT_EQ( | 955 EXPECT_EQ( |
1555 GetExpectedResultAsString( | 956 GetExpectedResultAsString(ui::VKEY_CAPITAL, |
1556 ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | 957 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
1557 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, ui::DomKey::CAPS_LOCK, 0), | 958 ui::ET_KEY_PRESSED), |
1558 GetRewrittenEventAsString( | 959 GetRewrittenEventAsString(&rewriter, |
1559 &rewriter, ui::ET_KEY_PRESSED, ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | 960 ui::VKEY_LWIN, |
1560 ui::EF_COMMAND_DOWN | ui::EF_CAPS_LOCK_DOWN, ui::DomKey::OS, 0)); | 961 ui::EF_COMMAND_DOWN | ui::EF_CAPS_LOCK_DOWN, |
| 962 ui::ET_KEY_PRESSED)); |
1561 // Confirm that the Caps Lock status is changed. | 963 // Confirm that the Caps Lock status is changed. |
1562 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 964 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1563 | 965 |
1564 // Release Search. | 966 // Release Search. |
1565 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 967 EXPECT_EQ(GetExpectedResultAsString( |
1566 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 968 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), |
1567 ui::DomKey::CAPS_LOCK, 0), | 969 GetRewrittenEventAsString( |
1568 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 970 &rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
1569 ui::VKEY_LWIN, ui::DomCode::OS_LEFT, | |
1570 ui::EF_NONE, ui::DomKey::OS, 0)); | |
1571 // Confirm that the Caps Lock status is not changed. | 971 // Confirm that the Caps Lock status is not changed. |
1572 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 972 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1573 | 973 |
1574 // Press Caps Lock (on an external keyboard). | 974 // Press Caps Lock (on an external keyboard). |
1575 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, | 975 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, |
1576 ui::DomCode::CAPS_LOCK, | |
1577 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 976 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
1578 ui::DomKey::CAPS_LOCK, 0), | 977 ui::ET_KEY_PRESSED), |
1579 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 978 GetRewrittenEventAsString(&rewriter, |
1580 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | 979 ui::VKEY_CAPITAL, |
1581 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 980 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
1582 ui::DomKey::CAPS_LOCK, 0)); | 981 ui::ET_KEY_PRESSED)); |
1583 | 982 |
1584 // Confirm that calling RewriteForTesting() does not change the state of | 983 // Confirm that calling RewriteForTesting() does not change the state of |
1585 // |ime_keyboard|. In this case, X Window system itself should change the | 984 // |ime_keyboard|. In this case, X Window system itself should change the |
1586 // Caps Lock state, not ash::EventRewriter. | 985 // Caps Lock state, not ash::EventRewriter. |
1587 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 986 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1588 | 987 |
1589 // Release Caps Lock (on an external keyboard). | 988 // Release Caps Lock (on an external keyboard). |
1590 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 989 EXPECT_EQ(GetExpectedResultAsString( |
1591 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 990 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), |
1592 ui::DomKey::CAPS_LOCK, 0), | 991 GetRewrittenEventAsString( |
1593 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 992 &rewriter, ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
1594 ui::VKEY_CAPITAL, ui::DomCode::CAPS_LOCK, | |
1595 ui::EF_NONE, ui::DomKey::CAPS_LOCK, 0)); | |
1596 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 993 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1597 } | 994 } |
1598 | 995 |
1599 TEST_F(EventRewriterTest, TestRewriteCapsLock) { | 996 TEST_F(EventRewriterTest, TestRewriteCapsLock) { |
1600 TestingPrefServiceSyncable prefs; | 997 TestingPrefServiceSyncable prefs; |
1601 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 998 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1602 | 999 |
1603 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1000 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
1604 EventRewriter rewriter(NULL); | 1001 EventRewriter rewriter(NULL); |
1605 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1002 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1606 rewriter.set_pref_service_for_testing(&prefs); | 1003 rewriter.set_pref_service_for_testing(&prefs); |
1607 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1004 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
1608 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); | 1005 EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_); |
1609 | 1006 |
1610 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. | 1007 // On Chrome OS, CapsLock is mapped to F16 with Mod3Mask. |
1611 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, | 1008 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, |
1612 ui::DomCode::CAPS_LOCK, | |
1613 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1009 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
1614 ui::DomKey::CAPS_LOCK, 0), | 1010 ui::ET_KEY_PRESSED), |
1615 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1011 GetRewrittenEventAsString( |
1616 ui::VKEY_F16, ui::DomCode::F16, | 1012 &rewriter, ui::VKEY_F16, ui::EF_MOD3_DOWN, ui::ET_KEY_PRESSED)); |
1617 ui::EF_MOD3_DOWN, ui::DomKey::F16, 0)); | |
1618 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); | 1013 EXPECT_TRUE(ime_keyboard.caps_lock_is_enabled_); |
1619 } | 1014 } |
1620 | 1015 |
1621 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { | 1016 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { |
1622 TestingPrefServiceSyncable prefs; | 1017 TestingPrefServiceSyncable prefs; |
1623 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1018 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1624 | 1019 |
1625 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1020 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
1626 EventRewriter rewriter(NULL); | 1021 EventRewriter rewriter(NULL); |
1627 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1022 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1628 rewriter.set_pref_service_for_testing(&prefs); | 1023 rewriter.set_pref_service_for_testing(&prefs); |
1629 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1024 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
1630 | 1025 |
1631 KeyTestCase tests[] = { | 1026 KeyTestCase tests[] = { |
1632 // F15 should work as Ctrl when --has-chromeos-diamond-key is not | 1027 // F15 should work as Ctrl when --has-chromeos-diamond-key is not |
1633 // specified. | 1028 // specified. |
1634 {KeyTestCase::TEST_VKEY, | 1029 {KeyTestCase::TEST_VKEY, |
1635 ui::ET_KEY_PRESSED, | 1030 ui::ET_KEY_PRESSED, |
1636 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15, 0}, | 1031 {ui::VKEY_F15, ui::EF_NONE}, |
1637 {ui::VKEY_CONTROL, | 1032 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, |
1638 ui::DomCode::CONTROL_LEFT, | |
1639 ui::EF_CONTROL_DOWN, | |
1640 ui::DomKey::CONTROL, | |
1641 0}}, | |
1642 | 1033 |
1643 {KeyTestCase::TEST_VKEY, | 1034 {KeyTestCase::TEST_VKEY, |
1644 ui::ET_KEY_RELEASED, | 1035 ui::ET_KEY_RELEASED, |
1645 {ui::VKEY_F15, ui::DomCode::F15, ui::EF_NONE, ui::DomKey::F15, 0}, | 1036 {ui::VKEY_F15, ui::EF_NONE}, |
1646 {ui::VKEY_CONTROL, | 1037 {ui::VKEY_CONTROL, ui::EF_NONE}}, |
1647 ui::DomCode::CONTROL_LEFT, | |
1648 ui::EF_NONE, | |
1649 ui::DomKey::CONTROL, | |
1650 0}}, | |
1651 | 1038 |
1652 // However, Mod2Mask should not be rewritten to CtrlMask when | 1039 // However, Mod2Mask should not be rewritten to CtrlMask when |
1653 // --has-chromeos-diamond-key is not specified. | 1040 // --has-chromeos-diamond-key is not specified. |
1654 {KeyTestCase::TEST_VKEY, | 1041 {KeyTestCase::TEST_VKEY, |
1655 ui::ET_KEY_PRESSED, | 1042 ui::ET_KEY_PRESSED, |
1656 {ui::VKEY_A, | 1043 {ui::VKEY_A, ui::EF_NONE}, |
1657 ui::DomCode::KEY_A, | 1044 {ui::VKEY_A, ui::EF_NONE}}, |
1658 ui::EF_NONE, | |
1659 ui::DomKey::CHARACTER, | |
1660 'a'}, | |
1661 {ui::VKEY_A, | |
1662 ui::DomCode::KEY_A, | |
1663 ui::EF_NONE, | |
1664 ui::DomKey::CHARACTER, | |
1665 'a'}}, | |
1666 }; | 1045 }; |
1667 | 1046 |
1668 for (size_t i = 0; i < arraysize(tests); ++i) { | 1047 for (size_t i = 0; i < arraysize(tests); ++i) { |
1669 SCOPED_TRACE(i); | 1048 SCOPED_TRACE(i); |
1670 CheckKeyTestCase(&rewriter, tests[i]); | 1049 CheckKeyTestCase(&rewriter, tests[i]); |
1671 } | 1050 } |
1672 } | 1051 } |
1673 | 1052 |
1674 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { | 1053 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { |
1675 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); | 1054 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); |
1676 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 1055 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
1677 chromeos::switches::kHasChromeOSDiamondKey, ""); | 1056 chromeos::switches::kHasChromeOSDiamondKey, ""); |
1678 | 1057 |
1679 TestingPrefServiceSyncable prefs; | 1058 TestingPrefServiceSyncable prefs; |
1680 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1059 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1681 | 1060 |
1682 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 1061 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
1683 EventRewriter rewriter(NULL); | 1062 EventRewriter rewriter(NULL); |
1684 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1063 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1685 rewriter.set_pref_service_for_testing(&prefs); | 1064 rewriter.set_pref_service_for_testing(&prefs); |
1686 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 1065 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
1687 | 1066 |
1688 // By default, F15 should work as Control. | 1067 // By default, F15 should work as Control. |
1689 EXPECT_EQ(GetExpectedResultAsString( | 1068 EXPECT_EQ(GetExpectedResultAsString( |
1690 ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 1069 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1691 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL, 0), | 1070 GetRewrittenEventAsString( |
1692 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1071 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1693 ui::VKEY_F15, ui::DomCode::F15, | |
1694 ui::EF_NONE, ui::DomKey::F15, 0)); | |
1695 // Check that Control is applied to a subsequent key press. | 1072 // Check that Control is applied to a subsequent key press. |
1696 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1073 EXPECT_EQ(GetExpectedResultAsString( |
1697 ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, | 1074 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1698 ui::DomKey::CHARACTER, 'a'), | 1075 GetRewrittenEventAsString( |
1699 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1076 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1700 ui::DomCode::KEY_A, ui::EF_NONE, | |
1701 ui::DomKey::CHARACTER, 'a')); | |
1702 // Release F15 | 1077 // Release F15 |
1703 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, | 1078 EXPECT_EQ(GetExpectedResultAsString( |
1704 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, | 1079 ui::VKEY_CONTROL, ui::EF_NONE, ui::ET_KEY_RELEASED), |
1705 ui::DomKey::CONTROL, 0), | 1080 GetRewrittenEventAsString( |
1706 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1081 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
1707 ui::VKEY_F15, ui::DomCode::F15, | |
1708 ui::EF_NONE, ui::DomKey::F15, 0)); | |
1709 // Check that Control is no longer applied to a subsequent key press. | 1082 // Check that Control is no longer applied to a subsequent key press. |
1710 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1083 EXPECT_EQ( |
1711 ui::DomCode::KEY_A, ui::EF_NONE, | 1084 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
1712 ui::DomKey::CHARACTER, 'a'), | 1085 GetRewrittenEventAsString( |
1713 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1086 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1714 ui::DomCode::KEY_A, ui::EF_NONE, | |
1715 ui::DomKey::CHARACTER, 'a')); | |
1716 | 1087 |
1717 IntegerPrefMember diamond; | 1088 IntegerPrefMember diamond; |
1718 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs); | 1089 diamond.Init(prefs::kLanguageRemapDiamondKeyTo, &prefs); |
1719 diamond.SetValue(chromeos::input_method::kVoidKey); | 1090 diamond.SetValue(chromeos::input_method::kVoidKey); |
1720 | 1091 |
1721 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_UNKNOWN, | 1092 EXPECT_EQ(GetExpectedResultAsString( |
1722 ui::DomCode::NONE, ui::EF_NONE, | 1093 ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED), |
1723 ui::DomKey::NONE, 0), | 1094 GetRewrittenEventAsString( |
1724 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1095 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1725 ui::VKEY_F15, ui::DomCode::F15, | |
1726 ui::EF_NONE, ui::DomKey::F15, 0)); | |
1727 // Check that no modifier is applied to another key. | 1096 // Check that no modifier is applied to another key. |
1728 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1097 EXPECT_EQ( |
1729 ui::DomCode::KEY_A, ui::EF_NONE, | 1098 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
1730 ui::DomKey::CHARACTER, 'a'), | 1099 GetRewrittenEventAsString( |
1731 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1100 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1732 ui::DomCode::KEY_A, ui::EF_NONE, | |
1733 ui::DomKey::CHARACTER, 'a')); | |
1734 | 1101 |
1735 diamond.SetValue(chromeos::input_method::kControlKey); | 1102 diamond.SetValue(chromeos::input_method::kControlKey); |
1736 | 1103 |
1737 EXPECT_EQ(GetExpectedResultAsString( | 1104 EXPECT_EQ(GetExpectedResultAsString( |
1738 ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 1105 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1739 ui::EF_CONTROL_DOWN, ui::DomKey::CONTROL, 0), | 1106 GetRewrittenEventAsString( |
1740 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1107 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1741 ui::VKEY_F15, ui::DomCode::F15, | |
1742 ui::EF_NONE, ui::DomKey::F15, 0)); | |
1743 // Check that Control is applied to a subsequent key press. | 1108 // Check that Control is applied to a subsequent key press. |
1744 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1109 EXPECT_EQ(GetExpectedResultAsString( |
1745 ui::DomCode::KEY_A, ui::EF_CONTROL_DOWN, | 1110 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1746 ui::DomKey::CHARACTER, 'a'), | 1111 GetRewrittenEventAsString( |
1747 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1112 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1748 ui::DomCode::KEY_A, ui::EF_NONE, | |
1749 ui::DomKey::CHARACTER, 'a')); | |
1750 // Release F15 | 1113 // Release F15 |
1751 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CONTROL, | 1114 EXPECT_EQ(GetExpectedResultAsString( |
1752 ui::DomCode::CONTROL_LEFT, ui::EF_NONE, | 1115 ui::VKEY_CONTROL, ui::EF_NONE, ui::ET_KEY_RELEASED), |
1753 ui::DomKey::CONTROL, 0), | 1116 GetRewrittenEventAsString( |
1754 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1117 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
1755 ui::VKEY_F15, ui::DomCode::F15, | |
1756 ui::EF_NONE, ui::DomKey::F15, 0)); | |
1757 // Check that Control is no longer applied to a subsequent key press. | 1118 // Check that Control is no longer applied to a subsequent key press. |
1758 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1119 EXPECT_EQ( |
1759 ui::DomCode::KEY_A, ui::EF_NONE, | 1120 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
1760 ui::DomKey::CHARACTER, 'a'), | 1121 GetRewrittenEventAsString( |
1761 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1122 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1762 ui::DomCode::KEY_A, ui::EF_NONE, | |
1763 ui::DomKey::CHARACTER, 'a')); | |
1764 | 1123 |
1765 diamond.SetValue(chromeos::input_method::kAltKey); | 1124 diamond.SetValue(chromeos::input_method::kAltKey); |
1766 | 1125 |
1767 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_MENU, | 1126 EXPECT_EQ(GetExpectedResultAsString( |
1768 ui::DomCode::ALT_LEFT, ui::EF_ALT_DOWN, | 1127 ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
1769 ui::DomKey::ALT, 0), | 1128 GetRewrittenEventAsString( |
1770 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1129 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1771 ui::VKEY_F15, ui::DomCode::F15, | |
1772 ui::EF_NONE, ui::DomKey::F15, 0)); | |
1773 // Check that Alt is applied to a subsequent key press. | 1130 // Check that Alt is applied to a subsequent key press. |
1774 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1131 EXPECT_EQ(GetExpectedResultAsString( |
1775 ui::DomCode::KEY_A, ui::EF_ALT_DOWN, | 1132 ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
1776 ui::DomKey::CHARACTER, 'a'), | 1133 GetRewrittenEventAsString( |
1777 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1134 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1778 ui::DomCode::KEY_A, ui::EF_NONE, | |
1779 ui::DomKey::CHARACTER, 'a')); | |
1780 // Release F15 | 1135 // Release F15 |
1781 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_MENU, | 1136 EXPECT_EQ(GetExpectedResultAsString( |
1782 ui::DomCode::ALT_LEFT, ui::EF_NONE, | 1137 ui::VKEY_MENU, ui::EF_NONE, ui::ET_KEY_RELEASED), |
1783 ui::DomKey::ALT, 0), | 1138 GetRewrittenEventAsString( |
1784 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1139 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
1785 ui::VKEY_F15, ui::DomCode::F15, | |
1786 ui::EF_NONE, ui::DomKey::F15, 0)); | |
1787 // Check that Alt is no longer applied to a subsequent key press. | 1140 // Check that Alt is no longer applied to a subsequent key press. |
1788 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1141 EXPECT_EQ( |
1789 ui::DomCode::KEY_A, ui::EF_NONE, | 1142 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
1790 ui::DomKey::CHARACTER, 'a'), | 1143 GetRewrittenEventAsString( |
1791 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1144 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1792 ui::DomCode::KEY_A, ui::EF_NONE, | |
1793 ui::DomKey::CHARACTER, 'a')); | |
1794 | 1145 |
1795 diamond.SetValue(chromeos::input_method::kCapsLockKey); | 1146 diamond.SetValue(chromeos::input_method::kCapsLockKey); |
1796 | 1147 |
1797 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_CAPITAL, | 1148 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CAPITAL, |
1798 ui::DomCode::CAPS_LOCK, | |
1799 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1149 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
1800 ui::DomKey::CAPS_LOCK, 0), | 1150 ui::ET_KEY_PRESSED), |
1801 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, | 1151 GetRewrittenEventAsString( |
1802 ui::VKEY_F15, ui::DomCode::F15, | 1152 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1803 ui::EF_NONE, ui::DomKey::F15, 0)); | |
1804 // Check that Caps is applied to a subsequent key press. | 1153 // Check that Caps is applied to a subsequent key press. |
1805 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1154 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, |
1806 ui::DomCode::KEY_A, | |
1807 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, | 1155 ui::EF_CAPS_LOCK_DOWN | ui::EF_MOD3_DOWN, |
1808 ui::DomKey::CHARACTER, 'a'), | 1156 ui::ET_KEY_PRESSED), |
1809 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1157 GetRewrittenEventAsString( |
1810 ui::DomCode::KEY_A, ui::EF_NONE, | 1158 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1811 ui::DomKey::CHARACTER, 'a')); | |
1812 // Release F15 | 1159 // Release F15 |
1813 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_RELEASED, ui::VKEY_CAPITAL, | 1160 EXPECT_EQ(GetExpectedResultAsString( |
1814 ui::DomCode::CAPS_LOCK, ui::EF_NONE, | 1161 ui::VKEY_CAPITAL, ui::EF_NONE, ui::ET_KEY_RELEASED), |
1815 ui::DomKey::CAPS_LOCK, 0), | 1162 GetRewrittenEventAsString( |
1816 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_RELEASED, | 1163 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
1817 ui::VKEY_F15, ui::DomCode::F15, | |
1818 ui::EF_NONE, ui::DomKey::F15, 0)); | |
1819 // Check that Control is no longer applied to a subsequent key press. | 1164 // Check that Control is no longer applied to a subsequent key press. |
1820 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1165 EXPECT_EQ( |
1821 ui::DomCode::KEY_A, ui::EF_NONE, | 1166 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
1822 ui::DomKey::CHARACTER, 'a'), | 1167 GetRewrittenEventAsString( |
1823 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1168 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1824 ui::DomCode::KEY_A, ui::EF_NONE, | |
1825 ui::DomKey::CHARACTER, 'a')); | |
1826 | 1169 |
1827 *base::CommandLine::ForCurrentProcess() = original_cl; | 1170 *base::CommandLine::ForCurrentProcess() = original_cl; |
1828 } | 1171 } |
1829 | 1172 |
1830 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { | 1173 TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { |
1831 // Remap CapsLock to Control. | 1174 // Remap CapsLock to Control. |
1832 TestingPrefServiceSyncable prefs; | 1175 TestingPrefServiceSyncable prefs; |
1833 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1176 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1834 IntegerPrefMember control; | 1177 IntegerPrefMember control; |
1835 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1178 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
1836 control.SetValue(chromeos::input_method::kControlKey); | 1179 control.SetValue(chromeos::input_method::kControlKey); |
1837 | 1180 |
1838 EventRewriter rewriter(NULL); | 1181 EventRewriter rewriter(NULL); |
1839 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1182 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1840 rewriter.set_pref_service_for_testing(&prefs); | 1183 rewriter.set_pref_service_for_testing(&prefs); |
1841 | 1184 |
1842 KeyTestCase tests[] = { | 1185 KeyTestCase tests[] = { |
1843 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. | 1186 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. |
1844 // On Chrome OS, CapsLock works as a Mod3 modifier. | 1187 // On Chrome OS, CapsLock works as a Mod3 modifier. |
1845 {KeyTestCase::TEST_ALL, | 1188 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1846 ui::ET_KEY_PRESSED, | 1189 {ui::VKEY_A, ui::EF_MOD3_DOWN}, |
1847 {ui::VKEY_A, | 1190 {ui::VKEY_A, ui::EF_CONTROL_DOWN}}, |
1848 ui::DomCode::KEY_A, | |
1849 ui::EF_MOD3_DOWN, | |
1850 ui::DomKey::CHARACTER, | |
1851 'a'}, | |
1852 {ui::VKEY_A, | |
1853 ui::DomCode::KEY_A, | |
1854 ui::EF_CONTROL_DOWN, | |
1855 ui::DomKey::CHARACTER, | |
1856 'a'}}, | |
1857 | 1191 |
1858 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to | 1192 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to |
1859 // ControlMask | 1193 // ControlMask |
1860 {KeyTestCase::TEST_ALL, | 1194 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1861 ui::ET_KEY_PRESSED, | 1195 {ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_MOD3_DOWN}, |
1862 {ui::VKEY_A, | 1196 {ui::VKEY_A, ui::EF_CONTROL_DOWN}}, |
1863 ui::DomCode::KEY_A, | |
1864 ui::EF_CONTROL_DOWN | ui::EF_MOD3_DOWN, | |
1865 ui::DomKey::CHARACTER, | |
1866 'a'}, | |
1867 {ui::VKEY_A, | |
1868 ui::DomCode::KEY_A, | |
1869 ui::EF_CONTROL_DOWN, | |
1870 ui::DomKey::CHARACTER, | |
1871 'a'}}, | |
1872 | 1197 |
1873 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to | 1198 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to |
1874 // ControlMask. | 1199 // ControlMask. |
1875 {KeyTestCase::TEST_ALL, | 1200 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1876 ui::ET_KEY_PRESSED, | 1201 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN}, |
1877 {ui::VKEY_A, | 1202 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, |
1878 ui::DomCode::KEY_A, | |
1879 ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN, | |
1880 ui::DomKey::CHARACTER, | |
1881 'a'}, | |
1882 {ui::VKEY_A, | |
1883 ui::DomCode::KEY_A, | |
1884 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
1885 ui::DomKey::CHARACTER, | |
1886 'a'}}, | |
1887 }; | 1203 }; |
1888 | 1204 |
1889 for (size_t i = 0; i < arraysize(tests); ++i) { | 1205 for (size_t i = 0; i < arraysize(tests); ++i) { |
1890 SCOPED_TRACE(i); | 1206 SCOPED_TRACE(i); |
1891 CheckKeyTestCase(&rewriter, tests[i]); | 1207 CheckKeyTestCase(&rewriter, tests[i]); |
1892 } | 1208 } |
1893 } | 1209 } |
1894 | 1210 |
1895 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { | 1211 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { |
1896 // Remap CapsLock to Control. | 1212 // Remap CapsLock to Control. |
1897 TestingPrefServiceSyncable prefs; | 1213 TestingPrefServiceSyncable prefs; |
1898 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1214 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1899 IntegerPrefMember control; | 1215 IntegerPrefMember control; |
1900 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1216 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
1901 control.SetValue(chromeos::input_method::kControlKey); | 1217 control.SetValue(chromeos::input_method::kControlKey); |
1902 | 1218 |
1903 EventRewriter rewriter(NULL); | 1219 EventRewriter rewriter(NULL); |
1904 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1220 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1905 rewriter.set_pref_service_for_testing(&prefs); | 1221 rewriter.set_pref_service_for_testing(&prefs); |
1906 input_method_manager_mock_->set_mod3_used(true); | 1222 input_method_manager_mock_->set_mod3_used(true); |
1907 | 1223 |
1908 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask | 1224 // Press CapsLock+a. Confirm that Mod3Mask is NOT rewritten to ControlMask |
1909 // when Mod3Mask is already in use by the current XKB layout. | 1225 // when Mod3Mask is already in use by the current XKB layout. |
1910 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_A, | 1226 EXPECT_EQ( |
1911 ui::DomCode::KEY_A, ui::EF_NONE, | 1227 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
1912 ui::DomKey::CHARACTER, 'a'), | 1228 GetRewrittenEventAsString( |
1913 GetRewrittenEventAsString(&rewriter, ui::ET_KEY_PRESSED, ui::VKEY_A, | 1229 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
1914 ui::DomCode::KEY_A, ui::EF_NONE, | |
1915 ui::DomKey::CHARACTER, 'a')); | |
1916 | 1230 |
1917 input_method_manager_mock_->set_mod3_used(false); | 1231 input_method_manager_mock_->set_mod3_used(false); |
1918 } | 1232 } |
1919 | 1233 |
1920 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { | 1234 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { |
1921 TestingPrefServiceSyncable prefs; | 1235 TestingPrefServiceSyncable prefs; |
1922 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1236 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1923 EventRewriter rewriter(NULL); | 1237 EventRewriter rewriter(NULL); |
1924 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1238 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
1925 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); | 1239 rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId); |
1926 rewriter.set_pref_service_for_testing(&prefs); | 1240 rewriter.set_pref_service_for_testing(&prefs); |
1927 | 1241 |
1928 KeyTestCase tests[] = { | 1242 KeyTestCase tests[] = { |
1929 // Alt+Backspace -> Delete | 1243 // Alt+Backspace -> Delete |
1930 {KeyTestCase::TEST_ALL, | 1244 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1931 ui::ET_KEY_PRESSED, | 1245 {ui::VKEY_BACK, ui::EF_ALT_DOWN}, |
| 1246 {ui::VKEY_DELETE, ui::EF_NONE}}, |
| 1247 // Control+Alt+Backspace -> Control+Delete |
| 1248 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
| 1249 {ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, |
| 1250 {ui::VKEY_DELETE, ui::EF_CONTROL_DOWN}}, |
| 1251 // Search+Alt+Backspace -> Alt+Backspace |
| 1252 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
| 1253 {ui::VKEY_BACK, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, |
| 1254 {ui::VKEY_BACK, ui::EF_ALT_DOWN}}, |
| 1255 // Search+Control+Alt+Backspace -> Control+Alt+Backspace |
| 1256 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1932 {ui::VKEY_BACK, | 1257 {ui::VKEY_BACK, |
1933 ui::DomCode::BACKSPACE, | 1258 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, |
1934 ui::EF_ALT_DOWN, | 1259 {ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, |
1935 ui::DomKey::BACKSPACE, | |
1936 0}, | |
1937 {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL, 0}}, | |
1938 // Control+Alt+Backspace -> Control+Delete | |
1939 {KeyTestCase::TEST_ALL, | |
1940 ui::ET_KEY_PRESSED, | |
1941 {ui::VKEY_BACK, | |
1942 ui::DomCode::BACKSPACE, | |
1943 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
1944 ui::DomKey::BACKSPACE, | |
1945 0}, | |
1946 {ui::VKEY_DELETE, | |
1947 ui::DomCode::DEL, | |
1948 ui::EF_CONTROL_DOWN, | |
1949 ui::DomKey::DEL, | |
1950 0}}, | |
1951 // Search+Alt+Backspace -> Alt+Backspace | |
1952 {KeyTestCase::TEST_ALL, | |
1953 ui::ET_KEY_PRESSED, | |
1954 {ui::VKEY_BACK, | |
1955 ui::DomCode::BACKSPACE, | |
1956 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | |
1957 ui::DomKey::BACKSPACE, | |
1958 0}, | |
1959 {ui::VKEY_BACK, | |
1960 ui::DomCode::BACKSPACE, | |
1961 ui::EF_ALT_DOWN, | |
1962 ui::DomKey::BACKSPACE, | |
1963 0}}, | |
1964 // Search+Control+Alt+Backspace -> Control+Alt+Backspace | |
1965 {KeyTestCase::TEST_ALL, | |
1966 ui::ET_KEY_PRESSED, | |
1967 {ui::VKEY_BACK, | |
1968 ui::DomCode::BACKSPACE, | |
1969 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
1970 ui::DomKey::BACKSPACE, | |
1971 0}, | |
1972 {ui::VKEY_BACK, | |
1973 ui::DomCode::BACKSPACE, | |
1974 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
1975 ui::DomKey::BACKSPACE, | |
1976 0}}, | |
1977 // Alt+Up -> Prior | 1260 // Alt+Up -> Prior |
1978 {KeyTestCase::TEST_ALL, | 1261 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1979 ui::ET_KEY_PRESSED, | 1262 {ui::VKEY_UP, ui::EF_ALT_DOWN}, |
1980 {ui::VKEY_UP, | 1263 {ui::VKEY_PRIOR, ui::EF_NONE}}, |
1981 ui::DomCode::ARROW_UP, | |
1982 ui::EF_ALT_DOWN, | |
1983 ui::DomKey::ARROW_UP, | |
1984 0}, | |
1985 {ui::VKEY_PRIOR, | |
1986 ui::DomCode::PAGE_UP, | |
1987 ui::EF_NONE, | |
1988 ui::DomKey::PAGE_UP, | |
1989 0}}, | |
1990 // Alt+Down -> Next | 1264 // Alt+Down -> Next |
1991 {KeyTestCase::TEST_ALL, | 1265 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
1992 ui::ET_KEY_PRESSED, | 1266 {ui::VKEY_DOWN, ui::EF_ALT_DOWN}, |
1993 {ui::VKEY_DOWN, | 1267 {ui::VKEY_NEXT, ui::EF_NONE}}, |
1994 ui::DomCode::ARROW_DOWN, | |
1995 ui::EF_ALT_DOWN, | |
1996 ui::DomKey::ARROW_DOWN, | |
1997 0}, | |
1998 {ui::VKEY_NEXT, | |
1999 ui::DomCode::PAGE_DOWN, | |
2000 ui::EF_NONE, | |
2001 ui::DomKey::PAGE_DOWN, | |
2002 0}}, | |
2003 // Ctrl+Alt+Up -> Home | 1268 // Ctrl+Alt+Up -> Home |
2004 {KeyTestCase::TEST_ALL, | 1269 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
2005 ui::ET_KEY_PRESSED, | 1270 {ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, |
2006 {ui::VKEY_UP, | 1271 {ui::VKEY_HOME, ui::EF_NONE}}, |
2007 ui::DomCode::ARROW_UP, | |
2008 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
2009 ui::DomKey::ARROW_UP, | |
2010 0}, | |
2011 {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_NONE, ui::DomKey::HOME, 0}}, | |
2012 // Ctrl+Alt+Down -> End | 1272 // Ctrl+Alt+Down -> End |
2013 {KeyTestCase::TEST_ALL, | 1273 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
2014 ui::ET_KEY_PRESSED, | 1274 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, |
2015 {ui::VKEY_DOWN, | 1275 {ui::VKEY_END, ui::EF_NONE}}, |
2016 ui::DomCode::ARROW_DOWN, | |
2017 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
2018 ui::DomKey::ARROW_DOWN, | |
2019 0}, | |
2020 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END, 0}}, | |
2021 | 1276 |
2022 // Search+Alt+Up -> Alt+Up | 1277 // Search+Alt+Up -> Alt+Up |
2023 {KeyTestCase::TEST_ALL, | 1278 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
2024 ui::ET_KEY_PRESSED, | 1279 {ui::VKEY_UP, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, |
| 1280 {ui::VKEY_UP, ui::EF_ALT_DOWN}}, |
| 1281 // Search+Alt+Down -> Alt+Down |
| 1282 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
| 1283 {ui::VKEY_DOWN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, |
| 1284 {ui::VKEY_DOWN, ui::EF_ALT_DOWN}}, |
| 1285 // Search+Ctrl+Alt+Up -> Search+Ctrl+Alt+Up |
| 1286 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
2025 {ui::VKEY_UP, | 1287 {ui::VKEY_UP, |
2026 ui::DomCode::ARROW_UP, | 1288 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, |
2027 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | 1289 {ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, |
2028 ui::DomKey::ARROW_UP, | 1290 // Search+Ctrl+Alt+Down -> Ctrl+Alt+Down |
2029 0}, | 1291 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
2030 {ui::VKEY_UP, | |
2031 ui::DomCode::ARROW_UP, | |
2032 ui::EF_ALT_DOWN, | |
2033 ui::DomKey::ARROW_UP, | |
2034 0}}, | |
2035 // Search+Alt+Down -> Alt+Down | |
2036 {KeyTestCase::TEST_ALL, | |
2037 ui::ET_KEY_PRESSED, | |
2038 {ui::VKEY_DOWN, | 1292 {ui::VKEY_DOWN, |
2039 ui::DomCode::ARROW_DOWN, | 1293 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, |
2040 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, | 1294 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, |
2041 ui::DomKey::ARROW_DOWN, | |
2042 0}, | |
2043 {ui::VKEY_DOWN, | |
2044 ui::DomCode::ARROW_DOWN, | |
2045 ui::EF_ALT_DOWN, | |
2046 ui::DomKey::ARROW_DOWN, | |
2047 0}}, | |
2048 // Search+Ctrl+Alt+Up -> Search+Ctrl+Alt+Up | |
2049 {KeyTestCase::TEST_ALL, | |
2050 ui::ET_KEY_PRESSED, | |
2051 {ui::VKEY_UP, | |
2052 ui::DomCode::ARROW_UP, | |
2053 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
2054 ui::DomKey::ARROW_UP, | |
2055 0}, | |
2056 {ui::VKEY_UP, | |
2057 ui::DomCode::ARROW_UP, | |
2058 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
2059 ui::DomKey::ARROW_UP, | |
2060 0}}, | |
2061 // Search+Ctrl+Alt+Down -> Ctrl+Alt+Down | |
2062 {KeyTestCase::TEST_ALL, | |
2063 ui::ET_KEY_PRESSED, | |
2064 {ui::VKEY_DOWN, | |
2065 ui::DomCode::ARROW_DOWN, | |
2066 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
2067 ui::DomKey::ARROW_DOWN, | |
2068 0}, | |
2069 {ui::VKEY_DOWN, | |
2070 ui::DomCode::ARROW_DOWN, | |
2071 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, | |
2072 ui::DomKey::ARROW_DOWN, | |
2073 0}}, | |
2074 | 1295 |
2075 // Period -> Period | 1296 // Period -> Period |
2076 {KeyTestCase::TEST_ALL, | 1297 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
2077 ui::ET_KEY_PRESSED, | 1298 {ui::VKEY_OEM_PERIOD, ui::EF_NONE}, |
2078 {ui::VKEY_OEM_PERIOD, | 1299 {ui::VKEY_OEM_PERIOD, ui::EF_NONE}}, |
2079 ui::DomCode::PERIOD, | |
2080 ui::EF_NONE, | |
2081 ui::DomKey::CHARACTER, | |
2082 '.'}, | |
2083 {ui::VKEY_OEM_PERIOD, | |
2084 ui::DomCode::PERIOD, | |
2085 ui::EF_NONE, | |
2086 ui::DomKey::CHARACTER, | |
2087 '.'}}, | |
2088 | 1300 |
2089 // Search+Backspace -> Delete | 1301 // Search+Backspace -> Delete |
2090 {KeyTestCase::TEST_ALL, | 1302 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
2091 ui::ET_KEY_PRESSED, | 1303 {ui::VKEY_BACK, ui::EF_COMMAND_DOWN}, |
2092 {ui::VKEY_BACK, | 1304 {ui::VKEY_DELETE, ui::EF_NONE}}, |
2093 ui::DomCode::BACKSPACE, | |
2094 ui::EF_COMMAND_DOWN, | |
2095 ui::DomKey::BACKSPACE, | |
2096 0}, | |
2097 {ui::VKEY_DELETE, ui::DomCode::DEL, ui::EF_NONE, ui::DomKey::DEL, 0}}, | |
2098 // Search+Up -> Prior | 1305 // Search+Up -> Prior |
2099 {KeyTestCase::TEST_ALL, | 1306 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
2100 ui::ET_KEY_PRESSED, | 1307 {ui::VKEY_UP, ui::EF_COMMAND_DOWN}, |
2101 {ui::VKEY_UP, | 1308 {ui::VKEY_PRIOR, ui::EF_NONE}}, |
2102 ui::DomCode::ARROW_UP, | |
2103 ui::EF_COMMAND_DOWN, | |
2104 ui::DomKey::ARROW_UP, | |
2105 0}, | |
2106 {ui::VKEY_PRIOR, | |
2107 ui::DomCode::PAGE_UP, | |
2108 ui::EF_NONE, | |
2109 ui::DomKey::PAGE_UP, | |
2110 0}}, | |
2111 // Search+Down -> Next | 1309 // Search+Down -> Next |
2112 {KeyTestCase::TEST_ALL, | 1310 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
2113 ui::ET_KEY_PRESSED, | 1311 {ui::VKEY_DOWN, ui::EF_COMMAND_DOWN}, |
2114 {ui::VKEY_DOWN, | 1312 {ui::VKEY_NEXT, ui::EF_NONE}}, |
2115 ui::DomCode::ARROW_DOWN, | |
2116 ui::EF_COMMAND_DOWN, | |
2117 ui::DomKey::ARROW_DOWN, | |
2118 0}, | |
2119 {ui::VKEY_NEXT, | |
2120 ui::DomCode::PAGE_DOWN, | |
2121 ui::EF_NONE, | |
2122 ui::DomKey::PAGE_DOWN, | |
2123 0}}, | |
2124 // Search+Left -> Home | 1313 // Search+Left -> Home |
2125 {KeyTestCase::TEST_ALL, | 1314 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
2126 ui::ET_KEY_PRESSED, | 1315 {ui::VKEY_LEFT, ui::EF_COMMAND_DOWN}, |
2127 {ui::VKEY_LEFT, | 1316 {ui::VKEY_HOME, ui::EF_NONE}}, |
2128 ui::DomCode::ARROW_LEFT, | |
2129 ui::EF_COMMAND_DOWN, | |
2130 ui::DomKey::ARROW_LEFT, | |
2131 0}, | |
2132 {ui::VKEY_HOME, ui::DomCode::HOME, ui::EF_NONE, ui::DomKey::HOME, 0}}, | |
2133 // Control+Search+Left -> Home | 1317 // Control+Search+Left -> Home |
2134 {KeyTestCase::TEST_ALL, | 1318 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
2135 ui::ET_KEY_PRESSED, | 1319 {ui::VKEY_LEFT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN}, |
2136 {ui::VKEY_LEFT, | 1320 {ui::VKEY_HOME, ui::EF_CONTROL_DOWN}}, |
2137 ui::DomCode::ARROW_LEFT, | |
2138 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, | |
2139 ui::DomKey::ARROW_LEFT, | |
2140 0}, | |
2141 {ui::VKEY_HOME, | |
2142 ui::DomCode::HOME, | |
2143 ui::EF_CONTROL_DOWN, | |
2144 ui::DomKey::HOME, | |
2145 0}}, | |
2146 // Search+Right -> End | 1321 // Search+Right -> End |
2147 {KeyTestCase::TEST_ALL, | 1322 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
2148 ui::ET_KEY_PRESSED, | 1323 {ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN}, |
2149 {ui::VKEY_RIGHT, | 1324 {ui::VKEY_END, ui::EF_NONE}}, |
2150 ui::DomCode::ARROW_RIGHT, | |
2151 ui::EF_COMMAND_DOWN, | |
2152 ui::DomKey::ARROW_RIGHT, | |
2153 0}, | |
2154 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END, 0}}, | |
2155 // Control+Search+Right -> End | 1325 // Control+Search+Right -> End |
2156 {KeyTestCase::TEST_ALL, | 1326 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
2157 ui::ET_KEY_PRESSED, | 1327 {ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN}, |
2158 {ui::VKEY_RIGHT, | 1328 {ui::VKEY_END, ui::EF_CONTROL_DOWN}}, |
2159 ui::DomCode::ARROW_RIGHT, | |
2160 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, | |
2161 ui::DomKey::ARROW_RIGHT, | |
2162 0}, | |
2163 {ui::VKEY_END, | |
2164 ui::DomCode::END, | |
2165 ui::EF_CONTROL_DOWN, | |
2166 ui::DomKey::END, | |
2167 0}}, | |
2168 // Search+Period -> Insert | 1329 // Search+Period -> Insert |
2169 {KeyTestCase::TEST_ALL, | 1330 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
2170 ui::ET_KEY_PRESSED, | 1331 {ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN}, |
2171 {ui::VKEY_OEM_PERIOD, | 1332 {ui::VKEY_INSERT, ui::EF_NONE}}, |
2172 ui::DomCode::PERIOD, | |
2173 ui::EF_COMMAND_DOWN, | |
2174 ui::DomKey::CHARACTER, | |
2175 '.'}, | |
2176 {ui::VKEY_INSERT, | |
2177 ui::DomCode::INSERT, | |
2178 ui::EF_NONE, | |
2179 ui::DomKey::INSERT, | |
2180 0}}, | |
2181 // Control+Search+Period -> Control+Insert | 1333 // Control+Search+Period -> Control+Insert |
2182 {KeyTestCase::TEST_ALL, | 1334 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
2183 ui::ET_KEY_PRESSED, | 1335 {ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN}, |
2184 {ui::VKEY_OEM_PERIOD, | 1336 {ui::VKEY_INSERT, ui::EF_CONTROL_DOWN}}}; |
2185 ui::DomCode::PERIOD, | |
2186 ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, | |
2187 ui::DomKey::CHARACTER, | |
2188 '.'}, | |
2189 {ui::VKEY_INSERT, | |
2190 ui::DomCode::INSERT, | |
2191 ui::EF_CONTROL_DOWN, | |
2192 ui::DomKey::INSERT, | |
2193 0}}}; | |
2194 | 1337 |
2195 for (size_t i = 0; i < arraysize(tests); ++i) { | 1338 for (size_t i = 0; i < arraysize(tests); ++i) { |
2196 SCOPED_TRACE(i); | 1339 SCOPED_TRACE(i); |
2197 CheckKeyTestCase(&rewriter, tests[i]); | 1340 CheckKeyTestCase(&rewriter, tests[i]); |
2198 } | 1341 } |
2199 } | 1342 } |
2200 | 1343 |
2201 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { | 1344 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { |
2202 TestingPrefServiceSyncable prefs; | 1345 TestingPrefServiceSyncable prefs; |
2203 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1346 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
2204 EventRewriter rewriter(NULL); | 1347 EventRewriter rewriter(NULL); |
2205 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1348 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
2206 rewriter.set_pref_service_for_testing(&prefs); | 1349 rewriter.set_pref_service_for_testing(&prefs); |
2207 | 1350 |
2208 KeyTestCase tests[] = { | 1351 FunctionKeyTestCase tests[] = { |
2209 // F1 -> Back | 1352 // F1 -> Back |
2210 {KeyTestCase::TEST_ALL, | 1353 {ui::ET_KEY_PRESSED, |
2211 ui::ET_KEY_PRESSED, | 1354 {ui::VKEY_F1, ui::EF_NONE}, |
2212 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1, 0}, | 1355 {ui::VKEY_BROWSER_BACK, ui::EF_NONE}, |
2213 {ui::VKEY_BROWSER_BACK, | 1356 {ui::VKEY_BROWSER_BACK, ui::EF_FUNCTION_KEY}}, |
2214 ui::DomCode::BROWSER_BACK, | 1357 {ui::ET_KEY_PRESSED, |
2215 ui::EF_NONE, | 1358 {ui::VKEY_F1, ui::EF_CONTROL_DOWN}, |
2216 ui::DomKey::BROWSER_BACK, | 1359 {ui::VKEY_BROWSER_BACK, ui::EF_CONTROL_DOWN}, |
2217 0}}, | 1360 {ui::VKEY_BROWSER_BACK, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, |
2218 {KeyTestCase::TEST_ALL, | 1361 {ui::ET_KEY_PRESSED, |
2219 ui::ET_KEY_PRESSED, | 1362 {ui::VKEY_F1, ui::EF_ALT_DOWN}, |
2220 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_CONTROL_DOWN, ui::DomKey::F1, 0}, | 1363 {ui::VKEY_BROWSER_BACK, ui::EF_ALT_DOWN}, |
2221 {ui::VKEY_BROWSER_BACK, | 1364 {ui::VKEY_BROWSER_BACK, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, |
2222 ui::DomCode::BROWSER_BACK, | |
2223 ui::EF_CONTROL_DOWN, | |
2224 ui::DomKey::BROWSER_BACK, | |
2225 0}}, | |
2226 {KeyTestCase::TEST_ALL, | |
2227 ui::ET_KEY_PRESSED, | |
2228 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_ALT_DOWN, ui::DomKey::F1, 0}, | |
2229 {ui::VKEY_BROWSER_BACK, | |
2230 ui::DomCode::BROWSER_BACK, | |
2231 ui::EF_ALT_DOWN, | |
2232 ui::DomKey::BROWSER_BACK, | |
2233 0}}, | |
2234 // F2 -> Forward | 1365 // F2 -> Forward |
2235 {KeyTestCase::TEST_ALL, | 1366 {ui::ET_KEY_PRESSED, |
2236 ui::ET_KEY_PRESSED, | 1367 {ui::VKEY_F2, ui::EF_NONE}, |
2237 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2, 0}, | 1368 {ui::VKEY_BROWSER_FORWARD, ui::EF_NONE}, |
2238 {ui::VKEY_BROWSER_FORWARD, | 1369 {ui::VKEY_BROWSER_FORWARD, ui::EF_FUNCTION_KEY}}, |
2239 ui::DomCode::BROWSER_FORWARD, | 1370 {ui::ET_KEY_PRESSED, |
2240 ui::EF_NONE, | 1371 {ui::VKEY_F2, ui::EF_CONTROL_DOWN}, |
2241 ui::DomKey::BROWSER_FORWARD, | 1372 {ui::VKEY_BROWSER_FORWARD, ui::EF_CONTROL_DOWN}, |
2242 0}}, | 1373 {ui::VKEY_BROWSER_FORWARD, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, |
2243 {KeyTestCase::TEST_ALL, | 1374 {ui::ET_KEY_PRESSED, |
2244 ui::ET_KEY_PRESSED, | 1375 {ui::VKEY_F2, ui::EF_ALT_DOWN}, |
2245 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_CONTROL_DOWN, ui::DomKey::F2, 0}, | 1376 {ui::VKEY_BROWSER_FORWARD, ui::EF_ALT_DOWN}, |
2246 {ui::VKEY_BROWSER_FORWARD, | 1377 {ui::VKEY_BROWSER_FORWARD, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, |
2247 ui::DomCode::BROWSER_FORWARD, | |
2248 ui::EF_CONTROL_DOWN, | |
2249 ui::DomKey::BROWSER_FORWARD, | |
2250 0}}, | |
2251 {KeyTestCase::TEST_ALL, | |
2252 ui::ET_KEY_PRESSED, | |
2253 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_ALT_DOWN, ui::DomKey::F2, 0}, | |
2254 {ui::VKEY_BROWSER_FORWARD, | |
2255 ui::DomCode::BROWSER_FORWARD, | |
2256 ui::EF_ALT_DOWN, | |
2257 ui::DomKey::BROWSER_FORWARD, | |
2258 0}}, | |
2259 // F3 -> Refresh | 1378 // F3 -> Refresh |
2260 {KeyTestCase::TEST_ALL, | 1379 {ui::ET_KEY_PRESSED, |
2261 ui::ET_KEY_PRESSED, | 1380 {ui::VKEY_F3, ui::EF_NONE}, |
2262 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3, 0}, | 1381 {ui::VKEY_BROWSER_REFRESH, ui::EF_NONE}, |
2263 {ui::VKEY_BROWSER_REFRESH, | 1382 {ui::VKEY_BROWSER_REFRESH, ui::EF_FUNCTION_KEY}}, |
2264 ui::DomCode::BROWSER_REFRESH, | 1383 {ui::ET_KEY_PRESSED, |
2265 ui::EF_NONE, | 1384 {ui::VKEY_F3, ui::EF_CONTROL_DOWN}, |
2266 ui::DomKey::BROWSER_REFRESH, | 1385 {ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN}, |
2267 0}}, | 1386 {ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, |
2268 {KeyTestCase::TEST_ALL, | 1387 {ui::ET_KEY_PRESSED, |
2269 ui::ET_KEY_PRESSED, | 1388 {ui::VKEY_F3, ui::EF_ALT_DOWN}, |
2270 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_CONTROL_DOWN, ui::DomKey::F3, 0}, | 1389 {ui::VKEY_BROWSER_REFRESH, ui::EF_ALT_DOWN}, |
2271 {ui::VKEY_BROWSER_REFRESH, | 1390 {ui::VKEY_BROWSER_REFRESH, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, |
2272 ui::DomCode::BROWSER_REFRESH, | |
2273 ui::EF_CONTROL_DOWN, | |
2274 ui::DomKey::BROWSER_REFRESH, | |
2275 0}}, | |
2276 {KeyTestCase::TEST_ALL, | |
2277 ui::ET_KEY_PRESSED, | |
2278 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_ALT_DOWN, ui::DomKey::F3, 0}, | |
2279 {ui::VKEY_BROWSER_REFRESH, | |
2280 ui::DomCode::BROWSER_REFRESH, | |
2281 ui::EF_ALT_DOWN, | |
2282 ui::DomKey::BROWSER_REFRESH, | |
2283 0}}, | |
2284 // F4 -> Launch App 2 | 1391 // F4 -> Launch App 2 |
2285 {KeyTestCase::TEST_ALL, | 1392 {ui::ET_KEY_PRESSED, |
2286 ui::ET_KEY_PRESSED, | 1393 {ui::VKEY_F4, ui::EF_NONE}, |
2287 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4, 0}, | 1394 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_NONE}, |
2288 {ui::VKEY_MEDIA_LAUNCH_APP2, | 1395 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_FUNCTION_KEY}}, |
2289 ui::DomCode::ZOOM_TOGGLE, | 1396 {ui::ET_KEY_PRESSED, |
2290 ui::EF_NONE, | 1397 {ui::VKEY_F4, ui::EF_CONTROL_DOWN}, |
2291 ui::DomKey::ZOOM_TOGGLE, | 1398 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_CONTROL_DOWN}, |
2292 0}}, | 1399 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, |
2293 {KeyTestCase::TEST_ALL, | 1400 {ui::ET_KEY_PRESSED, |
2294 ui::ET_KEY_PRESSED, | 1401 {ui::VKEY_F4, ui::EF_ALT_DOWN}, |
2295 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_CONTROL_DOWN, ui::DomKey::F4, 0}, | 1402 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_ALT_DOWN}, |
2296 {ui::VKEY_MEDIA_LAUNCH_APP2, | 1403 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, |
2297 ui::DomCode::ZOOM_TOGGLE, | |
2298 ui::EF_CONTROL_DOWN, | |
2299 ui::DomKey::ZOOM_TOGGLE, | |
2300 0}}, | |
2301 {KeyTestCase::TEST_ALL, | |
2302 ui::ET_KEY_PRESSED, | |
2303 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_ALT_DOWN, ui::DomKey::F4, 0}, | |
2304 {ui::VKEY_MEDIA_LAUNCH_APP2, | |
2305 ui::DomCode::ZOOM_TOGGLE, | |
2306 ui::EF_ALT_DOWN, | |
2307 ui::DomKey::ZOOM_TOGGLE, | |
2308 0}}, | |
2309 // F5 -> Launch App 1 | 1404 // F5 -> Launch App 1 |
2310 {KeyTestCase::TEST_ALL, | 1405 {ui::ET_KEY_PRESSED, |
2311 ui::ET_KEY_PRESSED, | 1406 {ui::VKEY_F5, ui::EF_NONE}, |
2312 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5, 0}, | 1407 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_NONE}, |
2313 {ui::VKEY_MEDIA_LAUNCH_APP1, | 1408 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_FUNCTION_KEY}}, |
2314 ui::DomCode::SELECT_TASK, | 1409 {ui::ET_KEY_PRESSED, |
2315 ui::EF_NONE, | 1410 {ui::VKEY_F5, ui::EF_CONTROL_DOWN}, |
2316 ui::DomKey::LAUNCH_MY_COMPUTER, | 1411 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN}, |
2317 0}}, | 1412 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, |
2318 {KeyTestCase::TEST_ALL, | 1413 {ui::ET_KEY_PRESSED, |
2319 ui::ET_KEY_PRESSED, | 1414 {ui::VKEY_F5, ui::EF_ALT_DOWN}, |
2320 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_CONTROL_DOWN, ui::DomKey::F5, 0}, | 1415 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_ALT_DOWN}, |
2321 {ui::VKEY_MEDIA_LAUNCH_APP1, | 1416 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, |
2322 ui::DomCode::SELECT_TASK, | |
2323 ui::EF_CONTROL_DOWN, | |
2324 ui::DomKey::LAUNCH_MY_COMPUTER, | |
2325 0}}, | |
2326 {KeyTestCase::TEST_ALL, | |
2327 ui::ET_KEY_PRESSED, | |
2328 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_ALT_DOWN, ui::DomKey::F5, 0}, | |
2329 {ui::VKEY_MEDIA_LAUNCH_APP1, | |
2330 ui::DomCode::SELECT_TASK, | |
2331 ui::EF_ALT_DOWN, | |
2332 ui::DomKey::LAUNCH_MY_COMPUTER, | |
2333 0}}, | |
2334 // F6 -> Brightness down | 1417 // F6 -> Brightness down |
2335 {KeyTestCase::TEST_ALL, | 1418 {ui::ET_KEY_PRESSED, |
2336 ui::ET_KEY_PRESSED, | 1419 {ui::VKEY_F6, ui::EF_NONE}, |
2337 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6, 0}, | 1420 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE}, |
2338 {ui::VKEY_BRIGHTNESS_DOWN, | 1421 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_FUNCTION_KEY}}, |
2339 ui::DomCode::BRIGHTNESS_DOWN, | 1422 {ui::ET_KEY_PRESSED, |
2340 ui::EF_NONE, | 1423 {ui::VKEY_F6, ui::EF_CONTROL_DOWN}, |
2341 ui::DomKey::BRIGHTNESS_DOWN, | 1424 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_CONTROL_DOWN}, |
2342 0}}, | 1425 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, |
2343 {KeyTestCase::TEST_ALL, | 1426 {ui::ET_KEY_PRESSED, |
2344 ui::ET_KEY_PRESSED, | 1427 {ui::VKEY_F6, ui::EF_ALT_DOWN}, |
2345 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_CONTROL_DOWN, ui::DomKey::F6, 0}, | 1428 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_ALT_DOWN}, |
2346 {ui::VKEY_BRIGHTNESS_DOWN, | 1429 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, |
2347 ui::DomCode::BRIGHTNESS_DOWN, | |
2348 ui::EF_CONTROL_DOWN, | |
2349 ui::DomKey::BRIGHTNESS_DOWN, | |
2350 0}}, | |
2351 {KeyTestCase::TEST_ALL, | |
2352 ui::ET_KEY_PRESSED, | |
2353 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_ALT_DOWN, ui::DomKey::F6, 0}, | |
2354 {ui::VKEY_BRIGHTNESS_DOWN, | |
2355 ui::DomCode::BRIGHTNESS_DOWN, | |
2356 ui::EF_ALT_DOWN, | |
2357 ui::DomKey::BRIGHTNESS_DOWN, | |
2358 0}}, | |
2359 // F7 -> Brightness up | 1430 // F7 -> Brightness up |
2360 {KeyTestCase::TEST_ALL, | 1431 {ui::ET_KEY_PRESSED, |
2361 ui::ET_KEY_PRESSED, | 1432 {ui::VKEY_F7, ui::EF_NONE}, |
2362 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7, 0}, | 1433 {ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE}, |
2363 {ui::VKEY_BRIGHTNESS_UP, | 1434 {ui::VKEY_BRIGHTNESS_UP, ui::EF_FUNCTION_KEY}}, |
2364 ui::DomCode::BRIGHTNESS_UP, | 1435 {ui::ET_KEY_PRESSED, |
2365 ui::EF_NONE, | 1436 {ui::VKEY_F7, ui::EF_CONTROL_DOWN}, |
2366 ui::DomKey::BRIGHTNESS_UP, | 1437 {ui::VKEY_BRIGHTNESS_UP, ui::EF_CONTROL_DOWN}, |
2367 0}}, | 1438 {ui::VKEY_BRIGHTNESS_UP, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, |
2368 {KeyTestCase::TEST_ALL, | 1439 {ui::ET_KEY_PRESSED, |
2369 ui::ET_KEY_PRESSED, | 1440 {ui::VKEY_F7, ui::EF_ALT_DOWN}, |
2370 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_CONTROL_DOWN, ui::DomKey::F7, 0}, | 1441 {ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN}, |
2371 {ui::VKEY_BRIGHTNESS_UP, | 1442 {ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, |
2372 ui::DomCode::BRIGHTNESS_UP, | |
2373 ui::EF_CONTROL_DOWN, | |
2374 ui::DomKey::BRIGHTNESS_UP, | |
2375 0}}, | |
2376 {KeyTestCase::TEST_ALL, | |
2377 ui::ET_KEY_PRESSED, | |
2378 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_ALT_DOWN, ui::DomKey::F7, 0}, | |
2379 {ui::VKEY_BRIGHTNESS_UP, | |
2380 ui::DomCode::BRIGHTNESS_UP, | |
2381 ui::EF_ALT_DOWN, | |
2382 ui::DomKey::BRIGHTNESS_UP, | |
2383 0}}, | |
2384 // F8 -> Volume Mute | 1443 // F8 -> Volume Mute |
2385 {KeyTestCase::TEST_ALL, | 1444 {ui::ET_KEY_PRESSED, |
2386 ui::ET_KEY_PRESSED, | 1445 {ui::VKEY_F8, ui::EF_NONE}, |
2387 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8, 0}, | 1446 {ui::VKEY_VOLUME_MUTE, ui::EF_NONE}, |
2388 {ui::VKEY_VOLUME_MUTE, | 1447 {ui::VKEY_VOLUME_MUTE, ui::EF_FUNCTION_KEY}}, |
2389 ui::DomCode::VOLUME_MUTE, | 1448 {ui::ET_KEY_PRESSED, |
2390 ui::EF_NONE, | 1449 {ui::VKEY_F8, ui::EF_CONTROL_DOWN}, |
2391 ui::DomKey::VOLUME_MUTE, | 1450 {ui::VKEY_VOLUME_MUTE, ui::EF_CONTROL_DOWN}, |
2392 0}}, | 1451 {ui::VKEY_VOLUME_MUTE, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, |
2393 {KeyTestCase::TEST_ALL, | 1452 {ui::ET_KEY_PRESSED, |
2394 ui::ET_KEY_PRESSED, | 1453 {ui::VKEY_F8, ui::EF_ALT_DOWN}, |
2395 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_CONTROL_DOWN, ui::DomKey::F8, 0}, | 1454 {ui::VKEY_VOLUME_MUTE, ui::EF_ALT_DOWN}, |
2396 {ui::VKEY_VOLUME_MUTE, | 1455 {ui::VKEY_VOLUME_MUTE, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, |
2397 ui::DomCode::VOLUME_MUTE, | |
2398 ui::EF_CONTROL_DOWN, | |
2399 ui::DomKey::VOLUME_MUTE, | |
2400 0}}, | |
2401 {KeyTestCase::TEST_ALL, | |
2402 ui::ET_KEY_PRESSED, | |
2403 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_ALT_DOWN, ui::DomKey::F8, 0}, | |
2404 {ui::VKEY_VOLUME_MUTE, | |
2405 ui::DomCode::VOLUME_MUTE, | |
2406 ui::EF_ALT_DOWN, | |
2407 ui::DomKey::VOLUME_MUTE, | |
2408 0}}, | |
2409 // F9 -> Volume Down | 1456 // F9 -> Volume Down |
2410 {KeyTestCase::TEST_ALL, | 1457 {ui::ET_KEY_PRESSED, |
2411 ui::ET_KEY_PRESSED, | 1458 {ui::VKEY_F9, ui::EF_NONE}, |
2412 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9, 0}, | 1459 {ui::VKEY_VOLUME_DOWN, ui::EF_NONE}, |
2413 {ui::VKEY_VOLUME_DOWN, | 1460 {ui::VKEY_VOLUME_DOWN, ui::EF_FUNCTION_KEY}}, |
2414 ui::DomCode::VOLUME_DOWN, | 1461 {ui::ET_KEY_PRESSED, |
2415 ui::EF_NONE, | 1462 {ui::VKEY_F9, ui::EF_CONTROL_DOWN}, |
2416 ui::DomKey::VOLUME_DOWN, | 1463 {ui::VKEY_VOLUME_DOWN, ui::EF_CONTROL_DOWN}, |
2417 0}}, | 1464 {ui::VKEY_VOLUME_DOWN, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, |
2418 {KeyTestCase::TEST_ALL, | 1465 {ui::ET_KEY_PRESSED, |
2419 ui::ET_KEY_PRESSED, | 1466 {ui::VKEY_F9, ui::EF_ALT_DOWN}, |
2420 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_CONTROL_DOWN, ui::DomKey::F9, 0}, | 1467 {ui::VKEY_VOLUME_DOWN, ui::EF_ALT_DOWN}, |
2421 {ui::VKEY_VOLUME_DOWN, | 1468 {ui::VKEY_VOLUME_DOWN, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, |
2422 ui::DomCode::VOLUME_DOWN, | |
2423 ui::EF_CONTROL_DOWN, | |
2424 ui::DomKey::VOLUME_DOWN, | |
2425 0}}, | |
2426 {KeyTestCase::TEST_ALL, | |
2427 ui::ET_KEY_PRESSED, | |
2428 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_ALT_DOWN, ui::DomKey::F9, 0}, | |
2429 {ui::VKEY_VOLUME_DOWN, | |
2430 ui::DomCode::VOLUME_DOWN, | |
2431 ui::EF_ALT_DOWN, | |
2432 ui::DomKey::VOLUME_DOWN, | |
2433 0}}, | |
2434 // F10 -> Volume Up | 1469 // F10 -> Volume Up |
2435 {KeyTestCase::TEST_ALL, | 1470 {ui::ET_KEY_PRESSED, |
2436 ui::ET_KEY_PRESSED, | 1471 {ui::VKEY_F10, ui::EF_NONE}, |
2437 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10, 0}, | 1472 {ui::VKEY_VOLUME_UP, ui::EF_NONE}, |
2438 {ui::VKEY_VOLUME_UP, | 1473 {ui::VKEY_VOLUME_UP, ui::EF_FUNCTION_KEY}}, |
2439 ui::DomCode::VOLUME_UP, | 1474 {ui::ET_KEY_PRESSED, |
2440 ui::EF_NONE, | 1475 {ui::VKEY_F10, ui::EF_CONTROL_DOWN}, |
2441 ui::DomKey::VOLUME_UP, | 1476 {ui::VKEY_VOLUME_UP, ui::EF_CONTROL_DOWN}, |
2442 0}}, | 1477 {ui::VKEY_VOLUME_UP, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, |
2443 {KeyTestCase::TEST_ALL, | 1478 {ui::ET_KEY_PRESSED, |
2444 ui::ET_KEY_PRESSED, | 1479 {ui::VKEY_F10, ui::EF_ALT_DOWN}, |
2445 {ui::VKEY_F10, | 1480 {ui::VKEY_VOLUME_UP, ui::EF_ALT_DOWN}, |
2446 ui::DomCode::F10, | 1481 {ui::VKEY_VOLUME_UP, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, |
2447 ui::EF_CONTROL_DOWN, | |
2448 ui::DomKey::F10, | |
2449 0}, | |
2450 {ui::VKEY_VOLUME_UP, | |
2451 ui::DomCode::VOLUME_UP, | |
2452 ui::EF_CONTROL_DOWN, | |
2453 ui::DomKey::VOLUME_UP, | |
2454 0}}, | |
2455 {KeyTestCase::TEST_ALL, | |
2456 ui::ET_KEY_PRESSED, | |
2457 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_ALT_DOWN, ui::DomKey::F10, 0}, | |
2458 {ui::VKEY_VOLUME_UP, | |
2459 ui::DomCode::VOLUME_UP, | |
2460 ui::EF_ALT_DOWN, | |
2461 ui::DomKey::VOLUME_UP, | |
2462 0}}, | |
2463 // F11 -> F11 | 1482 // F11 -> F11 |
2464 {KeyTestCase::TEST_ALL, | 1483 {ui::ET_KEY_PRESSED, |
2465 ui::ET_KEY_PRESSED, | 1484 {ui::VKEY_F11, ui::EF_NONE}, |
2466 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}, | 1485 {ui::VKEY_F11, ui::EF_NONE}, |
2467 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}}, | 1486 {ui::VKEY_F11, ui::EF_FUNCTION_KEY}}, |
2468 {KeyTestCase::TEST_ALL, | 1487 {ui::ET_KEY_PRESSED, |
2469 ui::ET_KEY_PRESSED, | 1488 {ui::VKEY_F11, ui::EF_CONTROL_DOWN}, |
2470 {ui::VKEY_F11, | 1489 {ui::VKEY_F11, ui::EF_CONTROL_DOWN}, |
2471 ui::DomCode::F11, | 1490 {ui::VKEY_F11, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, |
2472 ui::EF_CONTROL_DOWN, | 1491 {ui::ET_KEY_PRESSED, |
2473 ui::DomKey::F11, | 1492 {ui::VKEY_F11, ui::EF_ALT_DOWN}, |
2474 0}, | 1493 {ui::VKEY_F11, ui::EF_ALT_DOWN}, |
2475 {ui::VKEY_F11, | 1494 {ui::VKEY_F11, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, |
2476 ui::DomCode::F11, | |
2477 ui::EF_CONTROL_DOWN, | |
2478 ui::DomKey::F11, | |
2479 0}}, | |
2480 {KeyTestCase::TEST_ALL, | |
2481 ui::ET_KEY_PRESSED, | |
2482 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11, 0}, | |
2483 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_ALT_DOWN, ui::DomKey::F11, 0}}, | |
2484 // F12 -> F12 | 1495 // F12 -> F12 |
2485 {KeyTestCase::TEST_ALL, | 1496 {ui::ET_KEY_PRESSED, |
2486 ui::ET_KEY_PRESSED, | 1497 {ui::VKEY_F12, ui::EF_NONE}, |
2487 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}, | 1498 {ui::VKEY_F12, ui::EF_NONE}, |
2488 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}}, | 1499 {ui::VKEY_F12, ui::EF_FUNCTION_KEY}}, |
2489 {KeyTestCase::TEST_ALL, | 1500 {ui::ET_KEY_PRESSED, |
2490 ui::ET_KEY_PRESSED, | 1501 {ui::VKEY_F12, ui::EF_CONTROL_DOWN}, |
2491 {ui::VKEY_F12, | 1502 {ui::VKEY_F12, ui::EF_CONTROL_DOWN}, |
2492 ui::DomCode::F12, | 1503 {ui::VKEY_F12, ui::EF_CONTROL_DOWN | ui::EF_FUNCTION_KEY}}, |
2493 ui::EF_CONTROL_DOWN, | 1504 {ui::ET_KEY_PRESSED, |
2494 ui::DomKey::F12, | 1505 {ui::VKEY_F12, ui::EF_ALT_DOWN}, |
2495 0}, | 1506 {ui::VKEY_F12, ui::EF_ALT_DOWN}, |
2496 {ui::VKEY_F12, | 1507 {ui::VKEY_F12, ui::EF_ALT_DOWN | ui::EF_FUNCTION_KEY}}, |
2497 ui::DomCode::F12, | |
2498 ui::EF_CONTROL_DOWN, | |
2499 ui::DomKey::F12, | |
2500 0}}, | |
2501 {KeyTestCase::TEST_ALL, | |
2502 ui::ET_KEY_PRESSED, | |
2503 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12, 0}, | |
2504 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_ALT_DOWN, ui::DomKey::F12, 0}}, | |
2505 | 1508 |
2506 // The number row should not be rewritten without Search key. | 1509 // The number row should not be rewritten without Search key. |
2507 {KeyTestCase::TEST_ALL, | 1510 {ui::ET_KEY_PRESSED, |
2508 ui::ET_KEY_PRESSED, | 1511 {ui::VKEY_1, ui::EF_NONE}, |
2509 {ui::VKEY_1, | 1512 {ui::VKEY_1, ui::EF_NONE}, |
2510 ui::DomCode::DIGIT1, | 1513 {ui::VKEY_1, ui::EF_NONE}}, |
2511 ui::EF_NONE, | 1514 {ui::ET_KEY_PRESSED, |
2512 ui::DomKey::CHARACTER, | 1515 {ui::VKEY_2, ui::EF_NONE}, |
2513 '1'}, | 1516 {ui::VKEY_2, ui::EF_NONE}, |
2514 {ui::VKEY_1, | 1517 {ui::VKEY_2, ui::EF_NONE}}, |
2515 ui::DomCode::DIGIT1, | 1518 {ui::ET_KEY_PRESSED, |
2516 ui::EF_NONE, | 1519 {ui::VKEY_3, ui::EF_NONE}, |
2517 ui::DomKey::CHARACTER, | 1520 {ui::VKEY_3, ui::EF_NONE}, |
2518 '1'}}, | 1521 {ui::VKEY_3, ui::EF_NONE}}, |
2519 {KeyTestCase::TEST_ALL, | 1522 {ui::ET_KEY_PRESSED, |
2520 ui::ET_KEY_PRESSED, | 1523 {ui::VKEY_4, ui::EF_NONE}, |
2521 {ui::VKEY_2, | 1524 {ui::VKEY_4, ui::EF_NONE}, |
2522 ui::DomCode::DIGIT2, | 1525 {ui::VKEY_4, ui::EF_NONE}}, |
2523 ui::EF_NONE, | 1526 {ui::ET_KEY_PRESSED, |
2524 ui::DomKey::CHARACTER, | 1527 {ui::VKEY_5, ui::EF_NONE}, |
2525 '2'}, | 1528 {ui::VKEY_5, ui::EF_NONE}, |
2526 {ui::VKEY_2, | 1529 {ui::VKEY_5, ui::EF_NONE}}, |
2527 ui::DomCode::DIGIT2, | 1530 {ui::ET_KEY_PRESSED, |
2528 ui::EF_NONE, | 1531 {ui::VKEY_6, ui::EF_NONE}, |
2529 ui::DomKey::CHARACTER, | 1532 {ui::VKEY_6, ui::EF_NONE}, |
2530 '2'}}, | 1533 {ui::VKEY_6, ui::EF_NONE}}, |
2531 {KeyTestCase::TEST_ALL, | 1534 {ui::ET_KEY_PRESSED, |
2532 ui::ET_KEY_PRESSED, | 1535 {ui::VKEY_7, ui::EF_NONE}, |
2533 {ui::VKEY_3, | 1536 {ui::VKEY_7, ui::EF_NONE}, |
2534 ui::DomCode::DIGIT3, | 1537 {ui::VKEY_7, ui::EF_NONE}}, |
2535 ui::EF_NONE, | 1538 {ui::ET_KEY_PRESSED, |
2536 ui::DomKey::CHARACTER, | 1539 {ui::VKEY_8, ui::EF_NONE}, |
2537 '3'}, | 1540 {ui::VKEY_8, ui::EF_NONE}, |
2538 {ui::VKEY_3, | 1541 {ui::VKEY_8, ui::EF_NONE}}, |
2539 ui::DomCode::DIGIT3, | 1542 {ui::ET_KEY_PRESSED, |
2540 ui::EF_NONE, | 1543 {ui::VKEY_9, ui::EF_NONE}, |
2541 ui::DomKey::CHARACTER, | 1544 {ui::VKEY_9, ui::EF_NONE}, |
2542 '3'}}, | 1545 {ui::VKEY_9, ui::EF_NONE}}, |
2543 {KeyTestCase::TEST_ALL, | 1546 {ui::ET_KEY_PRESSED, |
2544 ui::ET_KEY_PRESSED, | 1547 {ui::VKEY_0, ui::EF_NONE}, |
2545 {ui::VKEY_4, | 1548 {ui::VKEY_0, ui::EF_NONE}, |
2546 ui::DomCode::DIGIT4, | 1549 {ui::VKEY_0, ui::EF_NONE}}, |
2547 ui::EF_NONE, | 1550 {ui::ET_KEY_PRESSED, |
2548 ui::DomKey::CHARACTER, | 1551 {ui::VKEY_OEM_MINUS, ui::EF_NONE}, |
2549 '4'}, | 1552 {ui::VKEY_OEM_MINUS, ui::EF_NONE}, |
2550 {ui::VKEY_4, | 1553 {ui::VKEY_OEM_MINUS, ui::EF_NONE}}, |
2551 ui::DomCode::DIGIT4, | 1554 {ui::ET_KEY_PRESSED, |
2552 ui::EF_NONE, | 1555 {ui::VKEY_OEM_PLUS, ui::EF_NONE}, |
2553 ui::DomKey::CHARACTER, | 1556 {ui::VKEY_OEM_PLUS, ui::EF_NONE}, |
2554 '4'}}, | 1557 {ui::VKEY_OEM_PLUS, ui::EF_NONE}}, |
2555 {KeyTestCase::TEST_ALL, | |
2556 ui::ET_KEY_PRESSED, | |
2557 {ui::VKEY_5, | |
2558 ui::DomCode::DIGIT5, | |
2559 ui::EF_NONE, | |
2560 ui::DomKey::CHARACTER, | |
2561 '5'}, | |
2562 {ui::VKEY_5, | |
2563 ui::DomCode::DIGIT5, | |
2564 ui::EF_NONE, | |
2565 ui::DomKey::CHARACTER, | |
2566 '5'}}, | |
2567 {KeyTestCase::TEST_ALL, | |
2568 ui::ET_KEY_PRESSED, | |
2569 {ui::VKEY_6, | |
2570 ui::DomCode::DIGIT6, | |
2571 ui::EF_NONE, | |
2572 ui::DomKey::CHARACTER, | |
2573 '6'}, | |
2574 {ui::VKEY_6, | |
2575 ui::DomCode::DIGIT6, | |
2576 ui::EF_NONE, | |
2577 ui::DomKey::CHARACTER, | |
2578 '6'}}, | |
2579 {KeyTestCase::TEST_ALL, | |
2580 ui::ET_KEY_PRESSED, | |
2581 {ui::VKEY_7, | |
2582 ui::DomCode::DIGIT7, | |
2583 ui::EF_NONE, | |
2584 ui::DomKey::CHARACTER, | |
2585 '7'}, | |
2586 {ui::VKEY_7, | |
2587 ui::DomCode::DIGIT7, | |
2588 ui::EF_NONE, | |
2589 ui::DomKey::CHARACTER, | |
2590 '7'}}, | |
2591 {KeyTestCase::TEST_ALL, | |
2592 ui::ET_KEY_PRESSED, | |
2593 {ui::VKEY_8, | |
2594 ui::DomCode::DIGIT8, | |
2595 ui::EF_NONE, | |
2596 ui::DomKey::CHARACTER, | |
2597 '8'}, | |
2598 {ui::VKEY_8, | |
2599 ui::DomCode::DIGIT8, | |
2600 ui::EF_NONE, | |
2601 ui::DomKey::CHARACTER, | |
2602 '8'}}, | |
2603 {KeyTestCase::TEST_ALL, | |
2604 ui::ET_KEY_PRESSED, | |
2605 {ui::VKEY_9, | |
2606 ui::DomCode::DIGIT9, | |
2607 ui::EF_NONE, | |
2608 ui::DomKey::CHARACTER, | |
2609 '9'}, | |
2610 {ui::VKEY_9, | |
2611 ui::DomCode::DIGIT9, | |
2612 ui::EF_NONE, | |
2613 ui::DomKey::CHARACTER, | |
2614 '9'}}, | |
2615 {KeyTestCase::TEST_ALL, | |
2616 ui::ET_KEY_PRESSED, | |
2617 {ui::VKEY_0, | |
2618 ui::DomCode::DIGIT0, | |
2619 ui::EF_NONE, | |
2620 ui::DomKey::CHARACTER, | |
2621 '0'}, | |
2622 {ui::VKEY_0, | |
2623 ui::DomCode::DIGIT0, | |
2624 ui::EF_NONE, | |
2625 ui::DomKey::CHARACTER, | |
2626 '0'}}, | |
2627 {KeyTestCase::TEST_ALL, | |
2628 ui::ET_KEY_PRESSED, | |
2629 {ui::VKEY_OEM_MINUS, | |
2630 ui::DomCode::MINUS, | |
2631 ui::EF_NONE, | |
2632 ui::DomKey::CHARACTER, | |
2633 '-'}, | |
2634 {ui::VKEY_OEM_MINUS, | |
2635 ui::DomCode::MINUS, | |
2636 ui::EF_NONE, | |
2637 ui::DomKey::CHARACTER, | |
2638 '-'}}, | |
2639 {KeyTestCase::TEST_ALL, | |
2640 ui::ET_KEY_PRESSED, | |
2641 {ui::VKEY_OEM_PLUS, | |
2642 ui::DomCode::EQUAL, | |
2643 ui::EF_NONE, | |
2644 ui::DomKey::CHARACTER, | |
2645 '='}, | |
2646 {ui::VKEY_OEM_PLUS, | |
2647 ui::DomCode::EQUAL, | |
2648 ui::EF_NONE, | |
2649 ui::DomKey::CHARACTER, | |
2650 '='}}, | |
2651 | 1558 |
2652 // The number row should be rewritten as the F<number> row with Search | 1559 // The number row should be rewritten as the F<number> row with Search |
2653 // key. | 1560 // key. |
2654 {KeyTestCase::TEST_ALL, | 1561 {ui::ET_KEY_PRESSED, |
2655 ui::ET_KEY_PRESSED, | 1562 {ui::VKEY_1, ui::EF_COMMAND_DOWN}, |
2656 {ui::VKEY_1, | 1563 {ui::VKEY_F1, ui::EF_NONE}, |
2657 ui::DomCode::DIGIT1, | 1564 {ui::VKEY_F1, ui::EF_NONE}}, |
2658 ui::EF_COMMAND_DOWN, | 1565 {ui::ET_KEY_PRESSED, |
2659 ui::DomKey::CHARACTER, | 1566 {ui::VKEY_2, ui::EF_COMMAND_DOWN}, |
2660 '1'}, | 1567 {ui::VKEY_F2, ui::EF_NONE}, |
2661 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1, 0}}, | 1568 {ui::VKEY_F2, ui::EF_NONE}}, |
2662 {KeyTestCase::TEST_ALL, | 1569 {ui::ET_KEY_PRESSED, |
2663 ui::ET_KEY_PRESSED, | 1570 {ui::VKEY_3, ui::EF_COMMAND_DOWN}, |
2664 {ui::VKEY_2, | 1571 {ui::VKEY_F3, ui::EF_NONE}, |
2665 ui::DomCode::DIGIT2, | 1572 {ui::VKEY_F3, ui::EF_NONE}}, |
2666 ui::EF_COMMAND_DOWN, | 1573 {ui::ET_KEY_PRESSED, |
2667 ui::DomKey::CHARACTER, | 1574 {ui::VKEY_4, ui::EF_COMMAND_DOWN}, |
2668 '2'}, | 1575 {ui::VKEY_F4, ui::EF_NONE}, |
2669 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2, 0}}, | 1576 {ui::VKEY_F4, ui::EF_NONE}}, |
2670 {KeyTestCase::TEST_ALL, | 1577 {ui::ET_KEY_PRESSED, |
2671 ui::ET_KEY_PRESSED, | 1578 {ui::VKEY_5, ui::EF_COMMAND_DOWN}, |
2672 {ui::VKEY_3, | 1579 {ui::VKEY_F5, ui::EF_NONE}, |
2673 ui::DomCode::DIGIT3, | 1580 {ui::VKEY_F5, ui::EF_NONE}}, |
2674 ui::EF_COMMAND_DOWN, | 1581 {ui::ET_KEY_PRESSED, |
2675 ui::DomKey::CHARACTER, | 1582 {ui::VKEY_6, ui::EF_COMMAND_DOWN}, |
2676 '3'}, | 1583 {ui::VKEY_F6, ui::EF_NONE}, |
2677 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3, 0}}, | 1584 {ui::VKEY_F6, ui::EF_NONE}}, |
2678 {KeyTestCase::TEST_ALL, | 1585 {ui::ET_KEY_PRESSED, |
2679 ui::ET_KEY_PRESSED, | 1586 {ui::VKEY_7, ui::EF_COMMAND_DOWN}, |
2680 {ui::VKEY_4, | 1587 {ui::VKEY_F7, ui::EF_NONE}, |
2681 ui::DomCode::DIGIT4, | 1588 {ui::VKEY_F7, ui::EF_NONE}}, |
2682 ui::EF_COMMAND_DOWN, | 1589 {ui::ET_KEY_PRESSED, |
2683 ui::DomKey::CHARACTER, | 1590 {ui::VKEY_8, ui::EF_COMMAND_DOWN}, |
2684 '4'}, | 1591 {ui::VKEY_F8, ui::EF_NONE}, |
2685 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4, 0}}, | 1592 {ui::VKEY_F8, ui::EF_NONE}}, |
2686 {KeyTestCase::TEST_ALL, | 1593 {ui::ET_KEY_PRESSED, |
2687 ui::ET_KEY_PRESSED, | 1594 {ui::VKEY_9, ui::EF_COMMAND_DOWN}, |
2688 {ui::VKEY_5, | 1595 {ui::VKEY_F9, ui::EF_NONE}, |
2689 ui::DomCode::DIGIT5, | 1596 {ui::VKEY_F9, ui::EF_NONE}}, |
2690 ui::EF_COMMAND_DOWN, | 1597 {ui::ET_KEY_PRESSED, |
2691 ui::DomKey::CHARACTER, | 1598 {ui::VKEY_0, ui::EF_COMMAND_DOWN}, |
2692 '5'}, | 1599 {ui::VKEY_F10, ui::EF_NONE}, |
2693 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5, 0}}, | 1600 {ui::VKEY_F10, ui::EF_NONE}}, |
2694 {KeyTestCase::TEST_ALL, | 1601 {ui::ET_KEY_PRESSED, |
2695 ui::ET_KEY_PRESSED, | 1602 {ui::VKEY_OEM_MINUS, ui::EF_COMMAND_DOWN}, |
2696 {ui::VKEY_6, | 1603 {ui::VKEY_F11, ui::EF_NONE}, |
2697 ui::DomCode::DIGIT6, | 1604 {ui::VKEY_F11, ui::EF_NONE}}, |
2698 ui::EF_COMMAND_DOWN, | 1605 {ui::ET_KEY_PRESSED, |
2699 ui::DomKey::CHARACTER, | 1606 {ui::VKEY_OEM_PLUS, ui::EF_COMMAND_DOWN}, |
2700 '6'}, | 1607 {ui::VKEY_F12, ui::EF_NONE}, |
2701 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6, 0}}, | 1608 {ui::VKEY_F12, ui::EF_NONE}}, |
2702 {KeyTestCase::TEST_ALL, | |
2703 ui::ET_KEY_PRESSED, | |
2704 {ui::VKEY_7, | |
2705 ui::DomCode::DIGIT7, | |
2706 ui::EF_COMMAND_DOWN, | |
2707 ui::DomKey::CHARACTER, | |
2708 '7'}, | |
2709 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7, 0}}, | |
2710 {KeyTestCase::TEST_ALL, | |
2711 ui::ET_KEY_PRESSED, | |
2712 {ui::VKEY_8, | |
2713 ui::DomCode::DIGIT8, | |
2714 ui::EF_COMMAND_DOWN, | |
2715 ui::DomKey::CHARACTER, | |
2716 '8'}, | |
2717 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8, 0}}, | |
2718 {KeyTestCase::TEST_ALL, | |
2719 ui::ET_KEY_PRESSED, | |
2720 {ui::VKEY_9, | |
2721 ui::DomCode::DIGIT9, | |
2722 ui::EF_COMMAND_DOWN, | |
2723 ui::DomKey::CHARACTER, | |
2724 '9'}, | |
2725 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9, 0}}, | |
2726 {KeyTestCase::TEST_ALL, | |
2727 ui::ET_KEY_PRESSED, | |
2728 {ui::VKEY_0, | |
2729 ui::DomCode::DIGIT0, | |
2730 ui::EF_COMMAND_DOWN, | |
2731 ui::DomKey::CHARACTER, | |
2732 '0'}, | |
2733 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10, 0}}, | |
2734 {KeyTestCase::TEST_ALL, | |
2735 ui::ET_KEY_PRESSED, | |
2736 {ui::VKEY_OEM_MINUS, | |
2737 ui::DomCode::MINUS, | |
2738 ui::EF_COMMAND_DOWN, | |
2739 ui::DomKey::CHARACTER, | |
2740 '-'}, | |
2741 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}}, | |
2742 {KeyTestCase::TEST_ALL, | |
2743 ui::ET_KEY_PRESSED, | |
2744 {ui::VKEY_OEM_PLUS, | |
2745 ui::DomCode::EQUAL, | |
2746 ui::EF_COMMAND_DOWN, | |
2747 ui::DomKey::CHARACTER, | |
2748 '='}, | |
2749 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}}, | |
2750 | 1609 |
2751 // The function keys should not be rewritten with Search key pressed. | 1610 // The function keys should not be rewritten with Search key pressed. |
2752 {KeyTestCase::TEST_ALL, | 1611 {ui::ET_KEY_PRESSED, |
2753 ui::ET_KEY_PRESSED, | 1612 {ui::VKEY_F1, ui::EF_COMMAND_DOWN}, |
2754 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_COMMAND_DOWN, ui::DomKey::F1, 0}, | 1613 {ui::VKEY_F1, ui::EF_NONE}, |
2755 {ui::VKEY_F1, ui::DomCode::F1, ui::EF_NONE, ui::DomKey::F1, 0}}, | 1614 {ui::VKEY_F1, ui::EF_FUNCTION_KEY}}, |
2756 {KeyTestCase::TEST_ALL, | 1615 {ui::ET_KEY_PRESSED, |
2757 ui::ET_KEY_PRESSED, | 1616 {ui::VKEY_F2, ui::EF_COMMAND_DOWN}, |
2758 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_COMMAND_DOWN, ui::DomKey::F2, 0}, | 1617 {ui::VKEY_F2, ui::EF_NONE}, |
2759 {ui::VKEY_F2, ui::DomCode::F2, ui::EF_NONE, ui::DomKey::F2, 0}}, | 1618 {ui::VKEY_F2, ui::EF_FUNCTION_KEY}}, |
2760 {KeyTestCase::TEST_ALL, | 1619 {ui::ET_KEY_PRESSED, |
2761 ui::ET_KEY_PRESSED, | 1620 {ui::VKEY_F3, ui::EF_COMMAND_DOWN}, |
2762 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_COMMAND_DOWN, ui::DomKey::F3, 0}, | 1621 {ui::VKEY_F3, ui::EF_NONE}, |
2763 {ui::VKEY_F3, ui::DomCode::F3, ui::EF_NONE, ui::DomKey::F3, 0}}, | 1622 {ui::VKEY_F3, ui::EF_FUNCTION_KEY}}, |
2764 {KeyTestCase::TEST_ALL, | 1623 {ui::ET_KEY_PRESSED, |
2765 ui::ET_KEY_PRESSED, | 1624 {ui::VKEY_F4, ui::EF_COMMAND_DOWN}, |
2766 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_COMMAND_DOWN, ui::DomKey::F4, 0}, | 1625 {ui::VKEY_F4, ui::EF_NONE}, |
2767 {ui::VKEY_F4, ui::DomCode::F4, ui::EF_NONE, ui::DomKey::F4, 0}}, | 1626 {ui::VKEY_F4, ui::EF_FUNCTION_KEY}}, |
2768 {KeyTestCase::TEST_ALL, | 1627 {ui::ET_KEY_PRESSED, |
2769 ui::ET_KEY_PRESSED, | 1628 {ui::VKEY_F5, ui::EF_COMMAND_DOWN}, |
2770 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_COMMAND_DOWN, ui::DomKey::F5, 0}, | 1629 {ui::VKEY_F5, ui::EF_NONE}, |
2771 {ui::VKEY_F5, ui::DomCode::F5, ui::EF_NONE, ui::DomKey::F5, 0}}, | 1630 {ui::VKEY_F5, ui::EF_FUNCTION_KEY}}, |
2772 {KeyTestCase::TEST_ALL, | 1631 {ui::ET_KEY_PRESSED, |
2773 ui::ET_KEY_PRESSED, | 1632 {ui::VKEY_F6, ui::EF_COMMAND_DOWN}, |
2774 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_COMMAND_DOWN, ui::DomKey::F6, 0}, | 1633 {ui::VKEY_F6, ui::EF_NONE}, |
2775 {ui::VKEY_F6, ui::DomCode::F6, ui::EF_NONE, ui::DomKey::F6, 0}}, | 1634 {ui::VKEY_F6, ui::EF_FUNCTION_KEY}}, |
2776 {KeyTestCase::TEST_ALL, | 1635 {ui::ET_KEY_PRESSED, |
2777 ui::ET_KEY_PRESSED, | 1636 {ui::VKEY_F7, ui::EF_COMMAND_DOWN}, |
2778 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_COMMAND_DOWN, ui::DomKey::F7, 0}, | 1637 {ui::VKEY_F7, ui::EF_NONE}, |
2779 {ui::VKEY_F7, ui::DomCode::F7, ui::EF_NONE, ui::DomKey::F7, 0}}, | 1638 {ui::VKEY_F7, ui::EF_FUNCTION_KEY}}, |
2780 {KeyTestCase::TEST_ALL, | 1639 {ui::ET_KEY_PRESSED, |
2781 ui::ET_KEY_PRESSED, | 1640 {ui::VKEY_F8, ui::EF_COMMAND_DOWN}, |
2782 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_COMMAND_DOWN, ui::DomKey::F8, 0}, | 1641 {ui::VKEY_F8, ui::EF_NONE}, |
2783 {ui::VKEY_F8, ui::DomCode::F8, ui::EF_NONE, ui::DomKey::F8, 0}}, | 1642 {ui::VKEY_F8, ui::EF_FUNCTION_KEY}}, |
2784 {KeyTestCase::TEST_ALL, | 1643 {ui::ET_KEY_PRESSED, |
2785 ui::ET_KEY_PRESSED, | 1644 {ui::VKEY_F9, ui::EF_COMMAND_DOWN}, |
2786 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_COMMAND_DOWN, ui::DomKey::F9, 0}, | 1645 {ui::VKEY_F9, ui::EF_NONE}, |
2787 {ui::VKEY_F9, ui::DomCode::F9, ui::EF_NONE, ui::DomKey::F9, 0}}, | 1646 {ui::VKEY_F9, ui::EF_FUNCTION_KEY}}, |
2788 {KeyTestCase::TEST_ALL, | 1647 {ui::ET_KEY_PRESSED, |
2789 ui::ET_KEY_PRESSED, | 1648 {ui::VKEY_F10, ui::EF_COMMAND_DOWN}, |
2790 {ui::VKEY_F10, | 1649 {ui::VKEY_F10, ui::EF_NONE}, |
2791 ui::DomCode::F10, | 1650 {ui::VKEY_F10, ui::EF_FUNCTION_KEY}}, |
2792 ui::EF_COMMAND_DOWN, | 1651 {ui::ET_KEY_PRESSED, |
2793 ui::DomKey::F10, | 1652 {ui::VKEY_F11, ui::EF_COMMAND_DOWN}, |
2794 0}, | 1653 {ui::VKEY_F11, ui::EF_NONE}, |
2795 {ui::VKEY_F10, ui::DomCode::F10, ui::EF_NONE, ui::DomKey::F10, 0}}, | 1654 {ui::VKEY_F11, ui::EF_FUNCTION_KEY}}, |
2796 {KeyTestCase::TEST_ALL, | 1655 {ui::ET_KEY_PRESSED, |
2797 ui::ET_KEY_PRESSED, | 1656 {ui::VKEY_F12, ui::EF_COMMAND_DOWN}, |
2798 {ui::VKEY_F11, | 1657 {ui::VKEY_F12, ui::EF_NONE}, |
2799 ui::DomCode::F11, | 1658 {ui::VKEY_F12, ui::EF_FUNCTION_KEY}}, |
2800 ui::EF_COMMAND_DOWN, | 1659 }; |
2801 ui::DomKey::F11, | |
2802 0}, | |
2803 {ui::VKEY_F11, ui::DomCode::F11, ui::EF_NONE, ui::DomKey::F11, 0}}, | |
2804 {KeyTestCase::TEST_ALL, | |
2805 ui::ET_KEY_PRESSED, | |
2806 {ui::VKEY_F12, | |
2807 ui::DomCode::F12, | |
2808 ui::EF_COMMAND_DOWN, | |
2809 ui::DomKey::F12, | |
2810 0}, | |
2811 {ui::VKEY_F12, ui::DomCode::F12, ui::EF_NONE, ui::DomKey::F12, 0}}}; | |
2812 | 1660 |
2813 for (size_t i = 0; i < arraysize(tests); ++i) { | 1661 for (size_t i = 0; i < arraysize(tests); ++i) { |
2814 SCOPED_TRACE(i); | 1662 SCOPED_TRACE(i); |
2815 CheckKeyTestCase(&rewriter, tests[i]); | 1663 CheckFunctionKeyTestCase(&rewriter, tests[i]); |
2816 } | 1664 } |
2817 } | 1665 } |
2818 | 1666 |
2819 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { | 1667 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { |
2820 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); | 1668 const base::CommandLine original_cl(*base::CommandLine::ForCurrentProcess()); |
2821 | 1669 |
2822 // Remap Search to Control. | 1670 // Remap Search to Control. |
2823 TestingPrefServiceSyncable prefs; | 1671 TestingPrefServiceSyncable prefs; |
2824 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1672 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
2825 IntegerPrefMember search; | 1673 IntegerPrefMember search; |
2826 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 1674 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
2827 search.SetValue(chromeos::input_method::kControlKey); | 1675 search.SetValue(chromeos::input_method::kControlKey); |
2828 | 1676 |
2829 EventRewriter rewriter(NULL); | 1677 EventRewriter rewriter(NULL); |
2830 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1678 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
2831 rewriter.set_pref_service_for_testing(&prefs); | 1679 rewriter.set_pref_service_for_testing(&prefs); |
2832 | 1680 |
2833 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 1681 base::CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
2834 chromeos::switches::kHasChromeOSKeyboard, ""); | 1682 chromeos::switches::kHasChromeOSKeyboard, ""); |
2835 | 1683 |
2836 KeyTestCase tests[] = { | 1684 KeyTestCase tests[] = { |
2837 // Alt+Search+Down -> End | 1685 // Alt+Search+Down -> End |
2838 {KeyTestCase::TEST_ALL, | 1686 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
2839 ui::ET_KEY_PRESSED, | 1687 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, |
2840 {ui::VKEY_DOWN, | 1688 {ui::VKEY_END, ui::EF_NONE}}, |
2841 ui::DomCode::ARROW_DOWN, | |
2842 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | |
2843 ui::DomKey::ARROW_DOWN, | |
2844 0}, | |
2845 {ui::VKEY_END, ui::DomCode::END, ui::EF_NONE, ui::DomKey::END, 0}}, | |
2846 | 1689 |
2847 // Shift+Alt+Search+Down -> Shift+End | 1690 // Shift+Alt+Search+Down -> Shift+End |
2848 {KeyTestCase::TEST_ALL, | 1691 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, |
2849 ui::ET_KEY_PRESSED, | |
2850 {ui::VKEY_DOWN, | 1692 {ui::VKEY_DOWN, |
2851 ui::DomCode::ARROW_DOWN, | 1693 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, |
2852 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, | 1694 {ui::VKEY_END, ui::EF_SHIFT_DOWN}}, |
2853 ui::DomKey::ARROW_DOWN, | |
2854 0}, | |
2855 {ui::VKEY_END, ui::DomCode::END, ui::EF_SHIFT_DOWN, ui::DomKey::END, 0}}, | |
2856 }; | 1695 }; |
2857 | 1696 |
2858 for (size_t i = 0; i < arraysize(tests); ++i) { | 1697 for (size_t i = 0; i < arraysize(tests); ++i) { |
2859 SCOPED_TRACE(i); | 1698 SCOPED_TRACE(i); |
2860 CheckKeyTestCase(&rewriter, tests[i]); | 1699 CheckKeyTestCase(&rewriter, tests[i]); |
2861 } | 1700 } |
2862 | 1701 |
2863 *base::CommandLine::ForCurrentProcess() = original_cl; | 1702 *base::CommandLine::ForCurrentProcess() = original_cl; |
2864 } | 1703 } |
2865 | 1704 |
2866 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) { | 1705 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) { |
2867 // Remap Control to Alt. | 1706 // Remap Control to Alt. |
2868 TestingPrefServiceSyncable prefs; | 1707 TestingPrefServiceSyncable prefs; |
2869 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1708 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
2870 IntegerPrefMember control; | 1709 IntegerPrefMember control; |
2871 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 1710 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
2872 control.SetValue(chromeos::input_method::kAltKey); | 1711 control.SetValue(chromeos::input_method::kAltKey); |
2873 | 1712 |
2874 EventRewriter rewriter(NULL); | 1713 EventRewriter rewriter(NULL); |
2875 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1714 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
2876 rewriter.set_pref_service_for_testing(&prefs); | 1715 rewriter.set_pref_service_for_testing(&prefs); |
2877 | 1716 |
2878 // Send left control press. | 1717 // Send left control press. |
2879 { | 1718 { |
2880 ui::KeyEvent keyevent(ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, | 1719 ui::KeyEvent keyevent( |
2881 ui::DomCode::CONTROL_LEFT, ui::EF_FINAL, | 1720 ui::ET_KEY_PRESSED, ui::VKEY_CONTROL, ui::EF_FINAL); |
2882 ui::DomKey::CONTROL, 0, ui::EventTimeForNow()); | |
2883 scoped_ptr<ui::Event> new_event; | 1721 scoped_ptr<ui::Event> new_event; |
2884 // Control should NOT be remapped to Alt if EF_FINAL is set. | 1722 // Control should NOT be remapped to Alt if EF_FINAL is set. |
2885 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, | 1723 EXPECT_EQ(ui::EVENT_REWRITE_CONTINUE, |
2886 rewriter.RewriteEvent(keyevent, &new_event)); | 1724 rewriter.RewriteEvent(keyevent, &new_event)); |
2887 EXPECT_FALSE(new_event); | 1725 EXPECT_FALSE(new_event); |
2888 } | 1726 } |
2889 #if defined(USE_X11) | 1727 #if defined(USE_X11) |
2890 // Send left control press, using XI2 native events. | 1728 // Send left control press, using XI2 native events. |
2891 { | 1729 { |
2892 ui::ScopedXI2Event xev; | 1730 ui::ScopedXI2Event xev; |
(...skipping 19 matching lines...) Expand all Loading... |
2912 IntegerPrefMember control; | 1750 IntegerPrefMember control; |
2913 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 1751 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
2914 control.SetValue(chromeos::input_method::kAltKey); | 1752 control.SetValue(chromeos::input_method::kAltKey); |
2915 | 1753 |
2916 EventRewriter rewriter(NULL); | 1754 EventRewriter rewriter(NULL); |
2917 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1755 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
2918 rewriter.set_pref_service_for_testing(&prefs); | 1756 rewriter.set_pref_service_for_testing(&prefs); |
2919 | 1757 |
2920 const int kTouchId = 2; | 1758 const int kTouchId = 2; |
2921 gfx::Point location(0, 0); | 1759 gfx::Point location(0, 0); |
2922 ui::TouchEvent press(ui::ET_TOUCH_PRESSED, location, kTouchId, | 1760 ui::TouchEvent press( |
2923 base::TimeDelta()); | 1761 ui::ET_TOUCH_PRESSED, location, kTouchId, base::TimeDelta()); |
2924 press.set_flags(ui::EF_CONTROL_DOWN); | 1762 press.set_flags(ui::EF_CONTROL_DOWN); |
2925 #if defined(USE_X11) | 1763 #if defined(USE_X11) |
2926 ui::UpdateX11EventForFlags(&press); | 1764 ui::UpdateX11EventForFlags(&press); |
2927 #endif | 1765 #endif |
2928 | 1766 |
2929 scoped_ptr<ui::Event> new_event; | 1767 scoped_ptr<ui::Event> new_event; |
2930 rewriter.RewriteEvent(press, &new_event); | 1768 rewriter.RewriteEvent(press, &new_event); |
2931 EXPECT_TRUE(new_event); | 1769 EXPECT_TRUE(new_event); |
2932 // Control should be remapped to Alt. | 1770 // Control should be remapped to Alt. |
2933 EXPECT_EQ(ui::EF_ALT_DOWN, | 1771 EXPECT_EQ(ui::EF_ALT_DOWN, |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2990 | 1828 |
2991 bool RewriteFunctionKeys(const ui::Event& event, | 1829 bool RewriteFunctionKeys(const ui::Event& event, |
2992 scoped_ptr<ui::Event>* rewritten_event) { | 1830 scoped_ptr<ui::Event>* rewritten_event) { |
2993 return rewriter_->RewriteEvent(event, rewritten_event); | 1831 return rewriter_->RewriteEvent(event, rewritten_event); |
2994 } | 1832 } |
2995 | 1833 |
2996 ui::EventDispatchDetails Send(ui::Event* event) { | 1834 ui::EventDispatchDetails Send(ui::Event* event) { |
2997 return source_.Send(event); | 1835 return source_.Send(event); |
2998 } | 1836 } |
2999 | 1837 |
3000 void SendKeyEvent(ui::EventType type, | 1838 void SendKeyEvent(ui::EventType type, ui::KeyboardCode key_code) { |
3001 ui::KeyboardCode key_code, | 1839 ui::KeyEvent press(type, key_code, ui::EF_NONE); |
3002 ui::DomCode code, | |
3003 ui::DomKey key, | |
3004 base::char16 character) { | |
3005 ui::KeyEvent press(type, key_code, code, ui::EF_NONE, key, character, | |
3006 ui::EventTimeForNow()); | |
3007 ui::EventDispatchDetails details = Send(&press); | 1840 ui::EventDispatchDetails details = Send(&press); |
3008 CHECK(!details.dispatcher_destroyed); | 1841 CHECK(!details.dispatcher_destroyed); |
3009 } | 1842 } |
3010 | 1843 |
3011 void SendActivateStickyKeyPattern(ui::KeyboardCode key_code, | 1844 void SendActivateStickyKeyPattern(ui::KeyboardCode key_code) { |
3012 ui::DomCode code, | 1845 SendKeyEvent(ui::ET_KEY_PRESSED, key_code); |
3013 ui::DomKey key, | 1846 SendKeyEvent(ui::ET_KEY_RELEASED, key_code); |
3014 base::char16 character) { | |
3015 SendKeyEvent(ui::ET_KEY_PRESSED, key_code, code, key, character); | |
3016 SendKeyEvent(ui::ET_KEY_RELEASED, key_code, code, key, character); | |
3017 } | 1847 } |
3018 | 1848 |
3019 protected: | 1849 protected: |
3020 TestingPrefServiceSyncable* prefs() { return &prefs_; } | 1850 TestingPrefServiceSyncable* prefs() { return &prefs_; } |
3021 | 1851 |
3022 void PopEvents(ScopedVector<ui::Event>* events) { buffer_.PopEvents(events); } | 1852 void PopEvents(ScopedVector<ui::Event>* events) { |
| 1853 buffer_.PopEvents(events); |
| 1854 } |
3023 | 1855 |
3024 void SetUp() override { | 1856 void SetUp() override { |
3025 AshTestBase::SetUp(); | 1857 AshTestBase::SetUp(); |
3026 sticky_keys_controller_ = | 1858 sticky_keys_controller_ = |
3027 ash::Shell::GetInstance()->sticky_keys_controller(); | 1859 ash::Shell::GetInstance()->sticky_keys_controller(); |
3028 rewriter_.reset(new EventRewriter(sticky_keys_controller_)); | 1860 rewriter_.reset(new EventRewriter(sticky_keys_controller_)); |
3029 chromeos::Preferences::RegisterProfilePrefs(prefs_.registry()); | 1861 chromeos::Preferences::RegisterProfilePrefs(prefs_.registry()); |
3030 rewriter_->set_pref_service_for_testing(&prefs_); | 1862 rewriter_->set_pref_service_for_testing(&prefs_); |
3031 #if defined(USE_X11) | 1863 #if defined(USE_X11) |
3032 ui::SetUpTouchPadForTest(kTouchPadDeviceId); | 1864 ui::SetUpTouchPadForTest(kTouchPadDeviceId); |
(...skipping 23 matching lines...) Expand all Loading... |
3056 DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest); | 1888 DISALLOW_COPY_AND_ASSIGN(EventRewriterAshTest); |
3057 }; | 1889 }; |
3058 | 1890 |
3059 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) { | 1891 TEST_F(EventRewriterAshTest, TopRowKeysAreFunctionKeys) { |
3060 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(1)); | 1892 scoped_ptr<aura::Window> window(CreateTestWindowInShellWithId(1)); |
3061 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get()); | 1893 ash::wm::WindowState* window_state = ash::wm::GetWindowState(window.get()); |
3062 window_state->Activate(); | 1894 window_state->Activate(); |
3063 ScopedVector<ui::Event> events; | 1895 ScopedVector<ui::Event> events; |
3064 | 1896 |
3065 // Create a simulated keypress of F1 targetted at the window. | 1897 // Create a simulated keypress of F1 targetted at the window. |
3066 ui::KeyEvent press_f1(ui::ET_KEY_PRESSED, ui::VKEY_F1, ui::DomCode::F1, | 1898 ui::KeyEvent press_f1(ui::ET_KEY_PRESSED, ui::VKEY_F1, ui::EF_NONE); |
3067 ui::EF_NONE, ui::DomKey::F1, 0, ui::EventTimeForNow()); | |
3068 | 1899 |
3069 // Simulate an apps v2 window that has requested top row keys as function | 1900 // Simulate an apps v2 window that has requested top row keys as function |
3070 // keys. The event should not be rewritten. | 1901 // keys. The event should not be rewritten. |
3071 window_state->set_top_row_keys_are_function_keys(true); | 1902 window_state->set_top_row_keys_are_function_keys(true); |
3072 ui::EventDispatchDetails details = Send(&press_f1); | 1903 ui::EventDispatchDetails details = Send(&press_f1); |
3073 ASSERT_FALSE(details.dispatcher_destroyed); | 1904 ASSERT_FALSE(details.dispatcher_destroyed); |
3074 PopEvents(&events); | 1905 PopEvents(&events); |
3075 EXPECT_EQ(1u, events.size()); | 1906 EXPECT_EQ(1u, events.size()); |
3076 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_F1, | 1907 EXPECT_EQ( |
3077 ui::DomCode::F1, ui::EF_NONE, | 1908 GetExpectedResultAsString(ui::VKEY_F1, ui::EF_NONE, ui::ET_KEY_PRESSED), |
3078 ui::DomKey::F1, 0), | 1909 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); |
3079 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); | |
3080 | 1910 |
3081 // The event should also not be rewritten if the send-function-keys pref is | 1911 // The event should also not be rewritten if the send-function-keys pref is |
3082 // additionally set, for both apps v2 and regular windows. | 1912 // additionally set, for both apps v2 and regular windows. |
3083 BooleanPrefMember send_function_keys_pref; | 1913 BooleanPrefMember send_function_keys_pref; |
3084 send_function_keys_pref.Init(prefs::kLanguageSendFunctionKeys, prefs()); | 1914 send_function_keys_pref.Init(prefs::kLanguageSendFunctionKeys, prefs()); |
3085 send_function_keys_pref.SetValue(true); | 1915 send_function_keys_pref.SetValue(true); |
3086 window_state->set_top_row_keys_are_function_keys(false); | 1916 window_state->set_top_row_keys_are_function_keys(false); |
3087 details = Send(&press_f1); | 1917 details = Send(&press_f1); |
3088 ASSERT_FALSE(details.dispatcher_destroyed); | 1918 ASSERT_FALSE(details.dispatcher_destroyed); |
3089 PopEvents(&events); | 1919 PopEvents(&events); |
3090 EXPECT_EQ(1u, events.size()); | 1920 EXPECT_EQ(1u, events.size()); |
3091 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_F1, | 1921 EXPECT_EQ( |
3092 ui::DomCode::F1, ui::EF_NONE, | 1922 GetExpectedResultAsString(ui::VKEY_F1, ui::EF_NONE, ui::ET_KEY_PRESSED), |
3093 ui::DomKey::F1, 0), | 1923 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); |
3094 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); | |
3095 | 1924 |
3096 // If the pref isn't set when an event is sent to a regular window, F1 is | 1925 // If the pref isn't set when an event is sent to a regular window, F1 is |
3097 // rewritten to the back key. | 1926 // rewritten to the back key. |
3098 send_function_keys_pref.SetValue(false); | 1927 send_function_keys_pref.SetValue(false); |
3099 details = Send(&press_f1); | 1928 details = Send(&press_f1); |
3100 ASSERT_FALSE(details.dispatcher_destroyed); | 1929 ASSERT_FALSE(details.dispatcher_destroyed); |
3101 PopEvents(&events); | 1930 PopEvents(&events); |
3102 EXPECT_EQ(1u, events.size()); | 1931 EXPECT_EQ(1u, events.size()); |
3103 EXPECT_EQ(GetExpectedResultAsString(ui::ET_KEY_PRESSED, ui::VKEY_BROWSER_BACK, | 1932 EXPECT_EQ(GetExpectedResultAsString( |
3104 ui::DomCode::BROWSER_BACK, ui::EF_NONE, | 1933 ui::VKEY_BROWSER_BACK, ui::EF_NONE, ui::ET_KEY_PRESSED), |
3105 ui::DomKey::BROWSER_BACK, 0), | |
3106 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); | 1934 GetKeyEventAsString(*static_cast<ui::KeyEvent*>(events[0]))); |
3107 } | 1935 } |
3108 | 1936 |
3109 TEST_F(EventRewriterTest, TestRewrittenModifierClick) { | 1937 TEST_F(EventRewriterTest, TestRewrittenModifierClick) { |
3110 #if defined(USE_X11) | |
3111 std::vector<int> device_list; | 1938 std::vector<int> device_list; |
3112 device_list.push_back(10); | 1939 device_list.push_back(10); |
3113 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); | 1940 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); |
3114 | 1941 |
3115 // Remap Control to Search. | 1942 // Remap Control to Search. |
3116 TestingPrefServiceSyncable prefs; | 1943 TestingPrefServiceSyncable prefs; |
3117 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1944 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
3118 IntegerPrefMember control; | 1945 IntegerPrefMember control; |
3119 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 1946 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
3120 control.SetValue(chromeos::input_method::kSearchKey); | 1947 control.SetValue(chromeos::input_method::kSearchKey); |
3121 | 1948 |
3122 EventRewriter rewriter(NULL); | 1949 EventRewriter rewriter(NULL); |
3123 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); | 1950 rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard"); |
3124 rewriter.set_pref_service_for_testing(&prefs); | 1951 rewriter.set_pref_service_for_testing(&prefs); |
3125 | 1952 |
3126 // Check that Control + Left Button is converted (via Search + Left Button) | 1953 // Check that Control + Left Button is converted (via Search + Left Button) |
3127 // to Right Button. | 1954 // to Right Button. |
3128 ui::ScopedXI2Event xev; | 1955 ui::ScopedXI2Event xev; |
3129 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_PRESSED, gfx::Point(), | 1956 xev.InitGenericButtonEvent(10, |
| 1957 ui::ET_MOUSE_PRESSED, |
| 1958 gfx::Point(), |
3130 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN); | 1959 ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN); |
3131 ui::MouseEvent press(xev); | 1960 ui::MouseEvent press(xev); |
3132 // Sanity check. | 1961 // Sanity check. |
3133 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); | 1962 EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type()); |
3134 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN, press.flags()); | 1963 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN, press.flags()); |
3135 scoped_ptr<ui::Event> new_event; | 1964 scoped_ptr<ui::Event> new_event; |
3136 const ui::MouseEvent* result = | 1965 const ui::MouseEvent* result = |
3137 RewriteMouseButtonEvent(&rewriter, press, &new_event); | 1966 RewriteMouseButtonEvent(&rewriter, press, &new_event); |
3138 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 1967 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
3139 EXPECT_FALSE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); | 1968 EXPECT_FALSE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); |
3140 EXPECT_FALSE(ui::EF_CONTROL_DOWN & result->flags()); | 1969 EXPECT_FALSE(ui::EF_CONTROL_DOWN & result->flags()); |
3141 EXPECT_FALSE(ui::EF_COMMAND_DOWN & result->flags()); | 1970 EXPECT_FALSE(ui::EF_COMMAND_DOWN & result->flags()); |
3142 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); | 1971 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags()); |
3143 #endif | |
3144 } | 1972 } |
3145 | 1973 |
3146 TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) { | 1974 TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) { |
3147 // TODO(kpschoedel): pending changes for crbug.com/360377 | 1975 // TODO(kpschoedel): pending changes for crbug.com/360377 |
3148 // to |chromeos::EventRewriter::RewriteLocatedEvent() | 1976 // to |chromeos::EventRewriter::RewriteLocatedEvent() |
3149 #if defined(USE_X11) | |
3150 std::vector<int> device_list; | 1977 std::vector<int> device_list; |
3151 device_list.push_back(10); | 1978 device_list.push_back(10); |
3152 device_list.push_back(11); | 1979 device_list.push_back(11); |
3153 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); | 1980 ui::TouchFactory::GetInstance()->SetPointerDeviceForTest(device_list); |
3154 #endif | |
3155 TestingPrefServiceSyncable prefs; | 1981 TestingPrefServiceSyncable prefs; |
3156 EventRewriter rewriter(NULL); | 1982 EventRewriter rewriter(NULL); |
3157 rewriter.set_pref_service_for_testing(&prefs); | 1983 rewriter.set_pref_service_for_testing(&prefs); |
3158 const int kLeftAndSearchFlag = ui::EF_LEFT_MOUSE_BUTTON | ui::EF_COMMAND_DOWN; | 1984 const int kLeftAndSearchFlag = ui::EF_LEFT_MOUSE_BUTTON | ui::EF_COMMAND_DOWN; |
3159 | 1985 |
3160 // Test Search + Left click. | 1986 // Test Search + Left click. |
3161 { | 1987 { |
3162 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), | 1988 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, gfx::Point(), gfx::Point(), |
3163 ui::EventTimeForNow(), kLeftAndSearchFlag, | 1989 ui::EventTimeForNow(), kLeftAndSearchFlag, |
3164 ui::EF_LEFT_MOUSE_BUTTON); | 1990 ui::EF_LEFT_MOUSE_BUTTON); |
(...skipping 75 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3240 scoped_ptr<ui::Event> new_event; | 2066 scoped_ptr<ui::Event> new_event; |
3241 const ui::MouseEvent* result = | 2067 const ui::MouseEvent* result = |
3242 RewriteMouseButtonEvent(&rewriter, release, &new_event); | 2068 RewriteMouseButtonEvent(&rewriter, release, &new_event); |
3243 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_COMMAND_DOWN, result->flags()); | 2069 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_COMMAND_DOWN, result->flags()); |
3244 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); | 2070 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); |
3245 } | 2071 } |
3246 #if defined(USE_X11) | 2072 #if defined(USE_X11) |
3247 // No SEARCH in first click, using XI2 native events. | 2073 // No SEARCH in first click, using XI2 native events. |
3248 { | 2074 { |
3249 ui::ScopedXI2Event xev; | 2075 ui::ScopedXI2Event xev; |
3250 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_PRESSED, gfx::Point(), | 2076 xev.InitGenericButtonEvent( |
3251 ui::EF_LEFT_MOUSE_BUTTON); | 2077 10, ui::ET_MOUSE_PRESSED, gfx::Point(), ui::EF_LEFT_MOUSE_BUTTON); |
3252 ui::MouseEvent press(xev); | 2078 ui::MouseEvent press(xev); |
3253 scoped_ptr<ui::Event> new_event; | 2079 scoped_ptr<ui::Event> new_event; |
3254 const ui::MouseEvent* result = | 2080 const ui::MouseEvent* result = |
3255 RewriteMouseButtonEvent(&rewriter, press, &new_event); | 2081 RewriteMouseButtonEvent(&rewriter, press, &new_event); |
3256 EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); | 2082 EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & result->flags()); |
3257 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); | 2083 EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags()); |
3258 } | 2084 } |
3259 { | 2085 { |
3260 ui::ScopedXI2Event xev; | 2086 ui::ScopedXI2Event xev; |
3261 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_RELEASED, gfx::Point(), | 2087 xev.InitGenericButtonEvent(10, ui::ET_MOUSE_RELEASED, gfx::Point(), |
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3345 EXPECT_FALSE(kLeftAndSearchFlag & result->flags()); | 2171 EXPECT_FALSE(kLeftAndSearchFlag & result->flags()); |
3346 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); | 2172 EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags()); |
3347 } | 2173 } |
3348 #endif | 2174 #endif |
3349 } | 2175 } |
3350 | 2176 |
3351 TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) { | 2177 TEST_F(EventRewriterAshTest, StickyKeyEventDispatchImpl) { |
3352 // Test the actual key event dispatch implementation. | 2178 // Test the actual key event dispatch implementation. |
3353 ScopedVector<ui::Event> events; | 2179 ScopedVector<ui::Event> events; |
3354 | 2180 |
3355 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2181 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); |
3356 ui::DomKey::CONTROL, 0); | |
3357 PopEvents(&events); | 2182 PopEvents(&events); |
3358 EXPECT_EQ(1u, events.size()); | 2183 EXPECT_EQ(1u, events.size()); |
3359 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); | 2184 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); |
3360 EXPECT_EQ(ui::VKEY_CONTROL, | 2185 EXPECT_EQ(ui::VKEY_CONTROL, |
3361 static_cast<ui::KeyEvent*>(events[0])->key_code()); | 2186 static_cast<ui::KeyEvent*>(events[0])->key_code()); |
3362 | 2187 |
3363 // Test key press event is correctly modified and modifier release | 2188 // Test key press event is correctly modified and modifier release |
3364 // event is sent. | 2189 // event is sent. |
3365 ui::KeyEvent press(ui::ET_KEY_PRESSED, ui::VKEY_C, ui::DomCode::KEY_C, | 2190 ui::KeyEvent press(ui::ET_KEY_PRESSED, ui::VKEY_C, ui::EF_NONE); |
3366 ui::EF_NONE, ui::DomKey::CHARACTER, 'c', | |
3367 ui::EventTimeForNow()); | |
3368 ui::EventDispatchDetails details = Send(&press); | 2191 ui::EventDispatchDetails details = Send(&press); |
3369 PopEvents(&events); | 2192 PopEvents(&events); |
3370 EXPECT_EQ(2u, events.size()); | 2193 EXPECT_EQ(2u, events.size()); |
3371 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); | 2194 EXPECT_EQ(ui::ET_KEY_PRESSED, events[0]->type()); |
3372 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); | 2195 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); |
3373 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); | 2196 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); |
3374 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); | 2197 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); |
3375 EXPECT_EQ(ui::VKEY_CONTROL, | 2198 EXPECT_EQ(ui::VKEY_CONTROL, |
3376 static_cast<ui::KeyEvent*>(events[1])->key_code()); | 2199 static_cast<ui::KeyEvent*>(events[1])->key_code()); |
3377 | 2200 |
3378 // Test key release event is not modified. | 2201 // Test key release event is not modified. |
3379 ui::KeyEvent release(ui::ET_KEY_RELEASED, ui::VKEY_C, ui::DomCode::KEY_C, | 2202 ui::KeyEvent release(ui::ET_KEY_RELEASED, ui::VKEY_C, ui::EF_NONE); |
3380 ui::EF_NONE, ui::DomKey::CHARACTER, 'c', | |
3381 ui::EventTimeForNow()); | |
3382 details = Send(&release); | 2203 details = Send(&release); |
3383 ASSERT_FALSE(details.dispatcher_destroyed); | 2204 ASSERT_FALSE(details.dispatcher_destroyed); |
3384 PopEvents(&events); | 2205 PopEvents(&events); |
3385 EXPECT_EQ(1u, events.size()); | 2206 EXPECT_EQ(1u, events.size()); |
3386 EXPECT_EQ(ui::ET_KEY_RELEASED, events[0]->type()); | 2207 EXPECT_EQ(ui::ET_KEY_RELEASED, events[0]->type()); |
3387 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); | 2208 EXPECT_EQ(ui::VKEY_C, static_cast<ui::KeyEvent*>(events[0])->key_code()); |
3388 EXPECT_FALSE(events[0]->flags() & ui::EF_CONTROL_DOWN); | 2209 EXPECT_FALSE(events[0]->flags() & ui::EF_CONTROL_DOWN); |
3389 } | 2210 } |
3390 | 2211 |
3391 TEST_F(EventRewriterAshTest, MouseEventDispatchImpl) { | 2212 TEST_F(EventRewriterAshTest, MouseEventDispatchImpl) { |
3392 ScopedVector<ui::Event> events; | 2213 ScopedVector<ui::Event> events; |
3393 | 2214 |
3394 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2215 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); |
3395 ui::DomKey::CONTROL, 0); | |
3396 PopEvents(&events); | 2216 PopEvents(&events); |
3397 | 2217 |
3398 // Test mouse press event is correctly modified. | 2218 // Test mouse press event is correctly modified. |
3399 gfx::Point location(0, 0); | 2219 gfx::Point location(0, 0); |
3400 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, location, location, | 2220 ui::MouseEvent press(ui::ET_MOUSE_PRESSED, location, location, |
3401 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | 2221 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, |
3402 ui::EF_LEFT_MOUSE_BUTTON); | 2222 ui::EF_LEFT_MOUSE_BUTTON); |
3403 ui::EventDispatchDetails details = Send(&press); | 2223 ui::EventDispatchDetails details = Send(&press); |
3404 ASSERT_FALSE(details.dispatcher_destroyed); | 2224 ASSERT_FALSE(details.dispatcher_destroyed); |
3405 PopEvents(&events); | 2225 PopEvents(&events); |
(...skipping 15 matching lines...) Expand all Loading... |
3421 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); | 2241 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); |
3422 EXPECT_EQ(ui::VKEY_CONTROL, | 2242 EXPECT_EQ(ui::VKEY_CONTROL, |
3423 static_cast<ui::KeyEvent*>(events[1])->key_code()); | 2243 static_cast<ui::KeyEvent*>(events[1])->key_code()); |
3424 } | 2244 } |
3425 | 2245 |
3426 TEST_F(EventRewriterAshTest, MouseWheelEventDispatchImpl) { | 2246 TEST_F(EventRewriterAshTest, MouseWheelEventDispatchImpl) { |
3427 ScopedVector<ui::Event> events; | 2247 ScopedVector<ui::Event> events; |
3428 | 2248 |
3429 // Test positive mouse wheel event is correctly modified and modifier release | 2249 // Test positive mouse wheel event is correctly modified and modifier release |
3430 // event is sent. | 2250 // event is sent. |
3431 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2251 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); |
3432 ui::DomKey::CONTROL, 0); | |
3433 PopEvents(&events); | 2252 PopEvents(&events); |
3434 gfx::Point location(0, 0); | 2253 gfx::Point location(0, 0); |
3435 ui::MouseEvent mev(ui::ET_MOUSEWHEEL, location, location, | 2254 ui::MouseEvent mev(ui::ET_MOUSEWHEEL, location, location, |
3436 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, | 2255 ui::EventTimeForNow(), ui::EF_LEFT_MOUSE_BUTTON, |
3437 ui::EF_LEFT_MOUSE_BUTTON); | 2256 ui::EF_LEFT_MOUSE_BUTTON); |
3438 ui::MouseWheelEvent positive(mev, 0, ui::MouseWheelEvent::kWheelDelta); | 2257 ui::MouseWheelEvent positive(mev, 0, ui::MouseWheelEvent::kWheelDelta); |
3439 ui::EventDispatchDetails details = Send(&positive); | 2258 ui::EventDispatchDetails details = Send(&positive); |
3440 ASSERT_FALSE(details.dispatcher_destroyed); | 2259 ASSERT_FALSE(details.dispatcher_destroyed); |
3441 PopEvents(&events); | 2260 PopEvents(&events); |
3442 EXPECT_EQ(2u, events.size()); | 2261 EXPECT_EQ(2u, events.size()); |
3443 EXPECT_TRUE(events[0]->IsMouseWheelEvent()); | 2262 EXPECT_TRUE(events[0]->IsMouseWheelEvent()); |
3444 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); | 2263 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); |
3445 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); | 2264 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); |
3446 EXPECT_EQ(ui::VKEY_CONTROL, | 2265 EXPECT_EQ(ui::VKEY_CONTROL, |
3447 static_cast<ui::KeyEvent*>(events[1])->key_code()); | 2266 static_cast<ui::KeyEvent*>(events[1])->key_code()); |
3448 | 2267 |
3449 // Test negative mouse wheel event is correctly modified and modifier release | 2268 // Test negative mouse wheel event is correctly modified and modifier release |
3450 // event is sent. | 2269 // event is sent. |
3451 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2270 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); |
3452 ui::DomKey::CONTROL, 0); | |
3453 PopEvents(&events); | 2271 PopEvents(&events); |
3454 ui::MouseWheelEvent negative(mev, 0, -ui::MouseWheelEvent::kWheelDelta); | 2272 ui::MouseWheelEvent negative(mev, 0, -ui::MouseWheelEvent::kWheelDelta); |
3455 details = Send(&negative); | 2273 details = Send(&negative); |
3456 ASSERT_FALSE(details.dispatcher_destroyed); | 2274 ASSERT_FALSE(details.dispatcher_destroyed); |
3457 PopEvents(&events); | 2275 PopEvents(&events); |
3458 EXPECT_EQ(2u, events.size()); | 2276 EXPECT_EQ(2u, events.size()); |
3459 EXPECT_TRUE(events[0]->IsMouseWheelEvent()); | 2277 EXPECT_TRUE(events[0]->IsMouseWheelEvent()); |
3460 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); | 2278 EXPECT_TRUE(events[0]->flags() & ui::EF_CONTROL_DOWN); |
3461 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); | 2279 EXPECT_EQ(ui::ET_KEY_RELEASED, events[1]->type()); |
3462 EXPECT_EQ(ui::VKEY_CONTROL, | 2280 EXPECT_EQ(ui::VKEY_CONTROL, |
(...skipping 14 matching lines...) Expand all Loading... |
3477 | 2295 |
3478 ash::StickyKeysOverlay* overlay_; | 2296 ash::StickyKeysOverlay* overlay_; |
3479 }; | 2297 }; |
3480 | 2298 |
3481 TEST_F(StickyKeysOverlayTest, OneModifierEnabled) { | 2299 TEST_F(StickyKeysOverlayTest, OneModifierEnabled) { |
3482 EXPECT_FALSE(overlay_->is_visible()); | 2300 EXPECT_FALSE(overlay_->is_visible()); |
3483 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2301 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3484 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2302 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3485 | 2303 |
3486 // Pressing modifier key should show overlay. | 2304 // Pressing modifier key should show overlay. |
3487 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2305 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); |
3488 ui::DomKey::CONTROL, 0); | |
3489 EXPECT_TRUE(overlay_->is_visible()); | 2306 EXPECT_TRUE(overlay_->is_visible()); |
3490 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2307 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
3491 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2308 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3492 | 2309 |
3493 // Pressing a normal key should hide overlay. | 2310 // Pressing a normal key should hide overlay. |
3494 SendActivateStickyKeyPattern(ui::VKEY_T, ui::DomCode::KEY_T, | 2311 SendActivateStickyKeyPattern(ui::VKEY_T); |
3495 ui::DomKey::CHARACTER, 't'); | |
3496 EXPECT_FALSE(overlay_->is_visible()); | 2312 EXPECT_FALSE(overlay_->is_visible()); |
3497 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2313 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3498 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2314 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3499 } | 2315 } |
3500 | 2316 |
3501 TEST_F(StickyKeysOverlayTest, TwoModifiersEnabled) { | 2317 TEST_F(StickyKeysOverlayTest, TwoModifiersEnabled) { |
3502 EXPECT_FALSE(overlay_->is_visible()); | 2318 EXPECT_FALSE(overlay_->is_visible()); |
3503 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2319 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3504 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2320 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3505 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2321 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3506 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2322 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
3507 | 2323 |
3508 // Pressing two modifiers should show overlay. | 2324 // Pressing two modifiers should show overlay. |
3509 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, | 2325 SendActivateStickyKeyPattern(ui::VKEY_SHIFT); |
3510 ui::DomKey::SHIFT, 0); | 2326 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); |
3511 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | |
3512 ui::DomKey::CONTROL, 0); | |
3513 EXPECT_TRUE(overlay_->is_visible()); | 2327 EXPECT_TRUE(overlay_->is_visible()); |
3514 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2328 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
3515 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2329 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
3516 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2330 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
3517 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2331 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3518 | 2332 |
3519 // Pressing a normal key should hide overlay. | 2333 // Pressing a normal key should hide overlay. |
3520 SendActivateStickyKeyPattern(ui::VKEY_N, ui::DomCode::KEY_N, | 2334 SendActivateStickyKeyPattern(ui::VKEY_N); |
3521 ui::DomKey::CHARACTER, 'n'); | |
3522 EXPECT_FALSE(overlay_->is_visible()); | 2335 EXPECT_FALSE(overlay_->is_visible()); |
3523 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2336 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3524 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2337 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3525 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2338 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3526 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2339 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
3527 } | 2340 } |
3528 | 2341 |
3529 TEST_F(StickyKeysOverlayTest, LockedModifier) { | 2342 TEST_F(StickyKeysOverlayTest, LockedModifier) { |
3530 EXPECT_FALSE(overlay_->is_visible()); | 2343 EXPECT_FALSE(overlay_->is_visible()); |
3531 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2344 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3532 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2345 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
3533 | 2346 |
3534 // Pressing a modifier key twice should lock modifier and show overlay. | 2347 // Pressing a modifier key twice should lock modifier and show overlay. |
3535 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, | 2348 SendActivateStickyKeyPattern(ui::VKEY_LMENU); |
3536 ui::DomKey::ALT, 0); | 2349 SendActivateStickyKeyPattern(ui::VKEY_LMENU); |
3537 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, | |
3538 ui::DomKey::ALT, 0); | |
3539 EXPECT_TRUE(overlay_->is_visible()); | 2350 EXPECT_TRUE(overlay_->is_visible()); |
3540 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2351 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
3541 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2352 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
3542 | 2353 |
3543 // Pressing a normal key should not hide overlay. | 2354 // Pressing a normal key should not hide overlay. |
3544 SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::KEY_D, | 2355 SendActivateStickyKeyPattern(ui::VKEY_D); |
3545 ui::DomKey::CHARACTER, 'd'); | |
3546 EXPECT_TRUE(overlay_->is_visible()); | 2356 EXPECT_TRUE(overlay_->is_visible()); |
3547 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2357 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
3548 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2358 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
3549 } | 2359 } |
3550 | 2360 |
3551 TEST_F(StickyKeysOverlayTest, LockedAndNormalModifier) { | 2361 TEST_F(StickyKeysOverlayTest, LockedAndNormalModifier) { |
3552 EXPECT_FALSE(overlay_->is_visible()); | 2362 EXPECT_FALSE(overlay_->is_visible()); |
3553 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2363 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3554 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2364 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3555 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2365 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3556 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2366 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
3557 | 2367 |
3558 // Pressing a modifier key twice should lock modifier and show overlay. | 2368 // Pressing a modifier key twice should lock modifier and show overlay. |
3559 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2369 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); |
3560 ui::DomKey::CONTROL, 0); | 2370 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); |
3561 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | |
3562 ui::DomKey::CONTROL, 0); | |
3563 EXPECT_TRUE(overlay_->is_visible()); | 2371 EXPECT_TRUE(overlay_->is_visible()); |
3564 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2372 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
3565 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2373 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3566 | 2374 |
3567 // Pressing another modifier key should still show overlay. | 2375 // Pressing another modifier key should still show overlay. |
3568 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, | 2376 SendActivateStickyKeyPattern(ui::VKEY_SHIFT); |
3569 ui::DomKey::SHIFT, 0); | |
3570 EXPECT_TRUE(overlay_->is_visible()); | 2377 EXPECT_TRUE(overlay_->is_visible()); |
3571 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2378 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
3572 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2379 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3573 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2380 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
3574 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2381 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
3575 | 2382 |
3576 // Pressing a normal key should not hide overlay but disable normal modifier. | 2383 // Pressing a normal key should not hide overlay but disable normal modifier. |
3577 SendActivateStickyKeyPattern(ui::VKEY_D, ui::DomCode::KEY_D, | 2384 SendActivateStickyKeyPattern(ui::VKEY_D); |
3578 ui::DomKey::CHARACTER, 'd'); | |
3579 EXPECT_TRUE(overlay_->is_visible()); | 2385 EXPECT_TRUE(overlay_->is_visible()); |
3580 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2386 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
3581 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2387 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3582 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2388 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3583 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2389 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
3584 } | 2390 } |
3585 | 2391 |
3586 TEST_F(StickyKeysOverlayTest, ModifiersDisabled) { | 2392 TEST_F(StickyKeysOverlayTest, ModifiersDisabled) { |
3587 EXPECT_FALSE(overlay_->is_visible()); | 2393 EXPECT_FALSE(overlay_->is_visible()); |
3588 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2394 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3589 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2395 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3590 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2396 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3591 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2397 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
3592 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2398 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3593 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2399 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
3594 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2400 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3595 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); | 2401 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); |
3596 | 2402 |
3597 // Enable modifiers. | 2403 // Enable modifiers. |
3598 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2404 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); |
3599 ui::DomKey::CONTROL, 0); | 2405 SendActivateStickyKeyPattern(ui::VKEY_SHIFT); |
3600 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, | 2406 SendActivateStickyKeyPattern(ui::VKEY_SHIFT); |
3601 ui::DomKey::SHIFT, 0); | 2407 SendActivateStickyKeyPattern(ui::VKEY_LMENU); |
3602 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, | 2408 SendActivateStickyKeyPattern(ui::VKEY_COMMAND); |
3603 ui::DomKey::SHIFT, 0); | 2409 SendActivateStickyKeyPattern(ui::VKEY_COMMAND); |
3604 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, | |
3605 ui::DomKey::ALT, 0); | |
3606 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT, | |
3607 ui::DomKey::OS, 0); | |
3608 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT, | |
3609 ui::DomKey::OS, 0); | |
3610 | 2410 |
3611 EXPECT_TRUE(overlay_->is_visible()); | 2411 EXPECT_TRUE(overlay_->is_visible()); |
3612 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2412 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
3613 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2413 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3614 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2414 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
3615 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2415 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
3616 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, | 2416 EXPECT_EQ(ash::STICKY_KEY_STATE_ENABLED, |
3617 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2417 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
3618 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, | 2418 EXPECT_EQ(ash::STICKY_KEY_STATE_LOCKED, |
3619 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); | 2419 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); |
3620 | 2420 |
3621 // Disable modifiers and overlay should be hidden. | 2421 // Disable modifiers and overlay should be hidden. |
3622 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2422 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); |
3623 ui::DomKey::CONTROL, 0); | 2423 SendActivateStickyKeyPattern(ui::VKEY_CONTROL); |
3624 SendActivateStickyKeyPattern(ui::VKEY_CONTROL, ui::DomCode::CONTROL_LEFT, | 2424 SendActivateStickyKeyPattern(ui::VKEY_SHIFT); |
3625 ui::DomKey::CONTROL, 0); | 2425 SendActivateStickyKeyPattern(ui::VKEY_LMENU); |
3626 SendActivateStickyKeyPattern(ui::VKEY_SHIFT, ui::DomCode::SHIFT_LEFT, | 2426 SendActivateStickyKeyPattern(ui::VKEY_LMENU); |
3627 ui::DomKey::SHIFT, 0); | 2427 SendActivateStickyKeyPattern(ui::VKEY_COMMAND); |
3628 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, | |
3629 ui::DomKey::ALT, 0); | |
3630 SendActivateStickyKeyPattern(ui::VKEY_LMENU, ui::DomCode::ALT_LEFT, | |
3631 ui::DomKey::ALT, 0); | |
3632 SendActivateStickyKeyPattern(ui::VKEY_COMMAND, ui::DomCode::OS_LEFT, | |
3633 ui::DomKey::OS, 0); | |
3634 | 2428 |
3635 EXPECT_FALSE(overlay_->is_visible()); | 2429 EXPECT_FALSE(overlay_->is_visible()); |
3636 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2430 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3637 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); | 2431 overlay_->GetModifierKeyState(ui::EF_CONTROL_DOWN)); |
3638 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2432 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3639 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); | 2433 overlay_->GetModifierKeyState(ui::EF_SHIFT_DOWN)); |
3640 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2434 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3641 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); | 2435 overlay_->GetModifierKeyState(ui::EF_ALT_DOWN)); |
3642 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, | 2436 EXPECT_EQ(ash::STICKY_KEY_STATE_DISABLED, |
3643 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); | 2437 overlay_->GetModifierKeyState(ui::EF_COMMAND_DOWN)); |
(...skipping 27 matching lines...) Expand all Loading... |
3671 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2465 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
3672 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2466 EXPECT_TRUE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
3673 | 2467 |
3674 // Turn off AltGr and Mod3. | 2468 // Turn off AltGr and Mod3. |
3675 sticky_keys_controller_->SetModifiersEnabled(false, false); | 2469 sticky_keys_controller_->SetModifiersEnabled(false, false); |
3676 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); | 2470 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_ALTGR_DOWN)); |
3677 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); | 2471 EXPECT_FALSE(overlay_->GetModifierVisible(ui::EF_MOD3_DOWN)); |
3678 } | 2472 } |
3679 | 2473 |
3680 } // namespace chromeos | 2474 } // namespace chromeos |
OLD | NEW |