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 <X11/keysym.h> | 7 #include <X11/keysym.h> |
8 #include <X11/XF86keysym.h> | 8 #include <X11/XF86keysym.h> |
9 #include <X11/Xlib.h> | 9 #include <X11/Xlib.h> |
10 #undef Bool | 10 #undef Bool |
(...skipping 20 matching lines...) Expand all Loading... |
31 #include "testing/gtest/include/gtest/gtest.h" | 31 #include "testing/gtest/include/gtest/gtest.h" |
32 #include "ui/aura/window.h" | 32 #include "ui/aura/window.h" |
33 #include "ui/events/event.h" | 33 #include "ui/events/event.h" |
34 #include "ui/events/event_rewriter.h" | 34 #include "ui/events/event_rewriter.h" |
35 #include "ui/events/test/events_test_utils_x11.h" | 35 #include "ui/events/test/events_test_utils_x11.h" |
36 #include "ui/events/x/touch_factory_x11.h" | 36 #include "ui/events/x/touch_factory_x11.h" |
37 #include "ui/gfx/x/x11_types.h" | 37 #include "ui/gfx/x/x11_types.h" |
38 | 38 |
39 namespace { | 39 namespace { |
40 | 40 |
41 std::string GetExpectedResultAsString(ui::KeyboardCode ui_keycode, | 41 std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) { |
42 int ui_flags, | |
43 ui::EventType ui_type) { | |
44 return base::StringPrintf("ui_keycode=0x%X ui_flags=0x%X ui_type=%d", | 42 return base::StringPrintf("ui_keycode=0x%X ui_flags=0x%X ui_type=%d", |
45 ui_keycode, | 43 keyevent.key_code(), |
46 ui_flags, | 44 keyevent.flags(), |
47 ui_type); | 45 keyevent.type()); |
48 } | |
49 | |
50 std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) { | |
51 return GetExpectedResultAsString( | |
52 keyevent.key_code(), keyevent.flags(), keyevent.type()); | |
53 } | 46 } |
54 | 47 |
55 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, | 48 std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, |
56 ui::KeyboardCode ui_keycode, | 49 ui::KeyboardCode ui_keycode, |
57 int ui_flags, | 50 int ui_flags, |
58 ui::EventType ui_type) { | 51 ui::EventType ui_type) { |
59 const ui::KeyEvent event(ui_type, ui_keycode, ui_flags, false); | 52 const ui::KeyEvent event(ui_type, ui_keycode, ui_flags, false); |
60 scoped_ptr<ui::Event> new_event; | 53 scoped_ptr<ui::Event> new_event; |
61 rewriter->RewriteEvent(event, &new_event); | 54 rewriter->RewriteEvent(event, &new_event); |
62 if (new_event) | 55 if (new_event) |
63 return GetKeyEventAsString( | 56 return GetKeyEventAsString( |
64 static_cast<const ui::KeyEvent&>(*new_event.get())); | 57 static_cast<const ui::KeyEvent&>(*new_event.get())); |
65 return GetKeyEventAsString(event); | 58 return GetKeyEventAsString(event); |
66 } | 59 } |
67 | 60 |
68 // Table entry for simple single key event rewriting tests. | 61 std::string GetExpectedResultAsString(ui::KeyboardCode ui_keycode, |
69 struct KeyTestCase { | 62 int ui_flags, |
70 enum { | 63 ui::EventType ui_type) { |
71 // Test types: | 64 return base::StringPrintf("ui_keycode=0x%X ui_flags=0x%X ui_type=%d", |
72 TEST_VKEY = 1 << 0, // Test ui::KeyEvent with no native event | 65 ui_keycode, |
73 TEST_X11 = 1 << 1, // Test ui::KeyEvent with native XKeyEvent | 66 ui_flags, |
74 TEST_ALL = TEST_VKEY|TEST_X11, | 67 ui_type); |
75 // Special test flags: | 68 } |
76 NUMPAD = 1 << 8, // Set EF_NUMPAD_KEY on native-based event, because | |
77 // |XKeysymForWindowsKeyCode()| can not distinguish | |
78 // between pairs like XK_Insert and XK_KP_Insert. | |
79 }; | |
80 int test; | |
81 ui::EventType type; | |
82 struct { | |
83 ui::KeyboardCode key_code; | |
84 int flags; | |
85 } input, expected; | |
86 }; | |
87 | 69 |
88 // Tests a single stateless key rewrite operation. | 70 std::string GetRewrittenEventNumbered(size_t i, |
89 // |i| is a an identifying number to locate failing tests in the tables. | 71 chromeos::EventRewriter* rewriter, |
90 void CheckKeyTestCase(size_t i, | 72 ui::KeyboardCode ui_keycode, |
91 chromeos::EventRewriter* rewriter, | 73 int ui_flags, |
92 const KeyTestCase& test) { | 74 ui::EventType ui_type) { |
93 std::string id = base::StringPrintf("(%zu) ", i); | 75 return base::StringPrintf("(%zu) ", i) + |
94 std::string expected = | 76 GetRewrittenEventAsString(rewriter, ui_keycode, ui_flags, ui_type); |
95 id + GetExpectedResultAsString( | 77 } |
96 test.expected.key_code, test.expected.flags, test.type); | |
97 | 78 |
98 if (test.test & KeyTestCase::TEST_VKEY) { | 79 std::string GetExpectedResultNumbered(size_t i, |
99 // Check rewriting of a non-native-based key event. | 80 ui::KeyboardCode ui_keycode, |
100 EXPECT_EQ( | 81 int ui_flags, |
101 expected, | 82 ui::EventType ui_type) { |
102 id + GetRewrittenEventAsString( | 83 return base::StringPrintf("(%zu) ", i) + |
103 rewriter, test.input.key_code, test.input.flags, test.type)); | 84 GetExpectedResultAsString(ui_keycode, ui_flags, ui_type); |
104 } | |
105 | |
106 #if defined(USE_X11) | |
107 if (test.test & KeyTestCase::TEST_X11) { | |
108 ui::ScopedXI2Event xev; | |
109 xev.InitKeyEvent(test.type, test.input.key_code, test.input.flags); | |
110 XEvent* xevent = xev; | |
111 if (xevent->xkey.keycode) { | |
112 ui::KeyEvent xkey_event(xevent, false); | |
113 if (test.test & KeyTestCase::NUMPAD) | |
114 xkey_event.set_flags(xkey_event.flags() | ui::EF_NUMPAD_KEY); | |
115 // Verify that the X11-based key event is as expected. | |
116 EXPECT_EQ(id + GetExpectedResultAsString( | |
117 test.input.key_code, test.input.flags, test.type), | |
118 id + GetKeyEventAsString(xkey_event)); | |
119 // Rewrite the event and check the result. | |
120 scoped_ptr<ui::Event> new_event; | |
121 rewriter->RewriteEvent(xkey_event, &new_event); | |
122 ui::KeyEvent& rewritten_key_event = | |
123 new_event ? *static_cast<ui::KeyEvent*>(new_event.get()) : xkey_event; | |
124 EXPECT_EQ(expected, id + GetKeyEventAsString(rewritten_key_event)); | |
125 // Build a new ui::KeyEvent from the rewritten native component, | |
126 // and check that it also matches the rewritten event. | |
127 ui::KeyEvent from_native_event(rewritten_key_event.native_event(), false); | |
128 EXPECT_EQ(expected, id + GetKeyEventAsString(from_native_event)); | |
129 } | |
130 } | |
131 #endif | |
132 } | 85 } |
133 | 86 |
134 } // namespace | 87 } // namespace |
135 | 88 |
136 namespace chromeos { | 89 namespace chromeos { |
137 | 90 |
138 class EventRewriterTest : public ash::test::AshTestBase { | 91 class EventRewriterTest : public ash::test::AshTestBase { |
139 public: | 92 public: |
140 EventRewriterTest() | 93 EventRewriterTest() |
141 : display_(gfx::GetXDisplay()), | 94 : display_(gfx::GetXDisplay()), |
142 mock_user_manager_(new chromeos::MockUserManager), | 95 mock_user_manager_(new chromeos::MockUserManager), |
143 user_manager_enabler_(mock_user_manager_), | 96 user_manager_enabler_(mock_user_manager_), |
144 input_method_manager_mock_(NULL) {} | 97 input_method_manager_mock_(NULL) { |
| 98 } |
145 virtual ~EventRewriterTest() {} | 99 virtual ~EventRewriterTest() {} |
146 | 100 |
147 virtual void SetUp() { | 101 virtual void SetUp() { |
148 // Mocking user manager because the real one needs to be called on UI thread | 102 // Mocking user manager because the real one needs to be called on UI thread |
149 EXPECT_CALL(*mock_user_manager_, IsLoggedInAsGuest()) | 103 EXPECT_CALL(*mock_user_manager_, IsLoggedInAsGuest()) |
150 .WillRepeatedly(testing::Return(false)); | 104 .WillRepeatedly(testing::Return(false)); |
151 input_method_manager_mock_ = | 105 input_method_manager_mock_ = |
152 new chromeos::input_method::MockInputMethodManager; | 106 new chromeos::input_method::MockInputMethodManager; |
153 chromeos::input_method::InitializeForTesting( | 107 chromeos::input_method::InitializeForTesting( |
154 input_method_manager_mock_); // pass ownership | 108 input_method_manager_mock_); // pass ownership |
(...skipping 25 matching lines...) Expand all Loading... |
180 }; | 134 }; |
181 | 135 |
182 TEST_F(EventRewriterTest, TestRewriteCommandToControl) { | 136 TEST_F(EventRewriterTest, TestRewriteCommandToControl) { |
183 // First, test with a PC keyboard. | 137 // First, test with a PC keyboard. |
184 TestingPrefServiceSyncable prefs; | 138 TestingPrefServiceSyncable prefs; |
185 EventRewriter rewriter; | 139 EventRewriter rewriter; |
186 rewriter.DeviceAddedForTesting(0, "PC Keyboard"); | 140 rewriter.DeviceAddedForTesting(0, "PC Keyboard"); |
187 rewriter.set_last_device_id_for_testing(0); | 141 rewriter.set_last_device_id_for_testing(0); |
188 rewriter.set_pref_service_for_testing(&prefs); | 142 rewriter.set_pref_service_for_testing(&prefs); |
189 | 143 |
190 KeyTestCase pc_keyboard_tests[] = { | 144 // VKEY_A, Alt modifier. |
191 // VKEY_A, Alt modifier. | 145 EXPECT_EQ(GetExpectedResultAsString( |
192 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 146 ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
193 {ui::VKEY_A, ui::EF_ALT_DOWN}, | 147 GetRewrittenEventAsString( |
194 {ui::VKEY_A, ui::EF_ALT_DOWN}}, | 148 &rewriter, ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED)); |
195 | 149 |
196 // VKEY_A, Win modifier. | 150 // VKEY_A, Win modifier. |
197 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 151 EXPECT_EQ( |
198 {ui::VKEY_A, ui::EF_COMMAND_DOWN}, | 152 GetExpectedResultAsString( |
199 {ui::VKEY_A, ui::EF_COMMAND_DOWN}}, | 153 ui::VKEY_A, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED), |
| 154 GetRewrittenEventAsString( |
| 155 &rewriter, ui::VKEY_A, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED)); |
200 | 156 |
201 // VKEY_A, Alt+Win modifier. | 157 // VKEY_A, Alt+Win modifier. |
202 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 158 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, |
203 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 159 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
204 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, | 160 ui::ET_KEY_PRESSED), |
| 161 GetRewrittenEventAsString(&rewriter, |
| 162 ui::VKEY_A, |
| 163 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 164 ui::ET_KEY_PRESSED)); |
205 | 165 |
206 // VKEY_LWIN (left Windows key), Alt modifier. | 166 // VKEY_LWIN (left Windows key), Alt modifier. |
207 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 167 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_LWIN, |
208 {ui::VKEY_LWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 168 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
209 {ui::VKEY_LWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, | 169 ui::ET_KEY_PRESSED), |
| 170 GetRewrittenEventAsString(&rewriter, |
| 171 ui::VKEY_LWIN, |
| 172 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 173 ui::ET_KEY_PRESSED)); |
210 | 174 |
211 // VKEY_RWIN (right Windows key), Alt modifier. | 175 // VKEY_RWIN (right Windows key), Alt modifier. |
212 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 176 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_RWIN, |
213 {ui::VKEY_RWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 177 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
214 {ui::VKEY_RWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, | 178 ui::ET_KEY_PRESSED), |
215 }; | 179 GetRewrittenEventAsString(&rewriter, |
216 | 180 ui::VKEY_RWIN, |
217 for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) { | 181 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
218 CheckKeyTestCase(1000 + i, &rewriter, pc_keyboard_tests[i]); | 182 ui::ET_KEY_PRESSED)); |
219 } | |
220 | 183 |
221 // An Apple keyboard reusing the ID, zero. | 184 // An Apple keyboard reusing the ID, zero. |
222 rewriter.DeviceAddedForTesting(0, "Apple Keyboard"); | 185 rewriter.DeviceAddedForTesting(0, "Apple Keyboard"); |
223 rewriter.set_last_device_id_for_testing(0); | 186 rewriter.set_last_device_id_for_testing(0); |
224 | 187 |
225 KeyTestCase apple_keyboard_tests[] = { | 188 // VKEY_A, Alt modifier. |
226 // VKEY_A, Alt modifier. | 189 EXPECT_EQ(GetExpectedResultAsString( |
227 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 190 ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
228 {ui::VKEY_A, ui::EF_ALT_DOWN}, | 191 GetRewrittenEventAsString( |
229 {ui::VKEY_A, ui::EF_ALT_DOWN}}, | 192 &rewriter, ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED)); |
230 | 193 |
231 // VKEY_A, Win modifier. | 194 // VKEY_A, Win modifier. |
232 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 195 EXPECT_EQ( |
233 {ui::VKEY_A, ui::EF_COMMAND_DOWN}, | 196 GetExpectedResultAsString( |
234 {ui::VKEY_A, ui::EF_CONTROL_DOWN}}, | 197 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
| 198 GetRewrittenEventAsString( |
| 199 &rewriter, ui::VKEY_A, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED)); |
235 | 200 |
236 // VKEY_A, Alt+Win modifier. | 201 // VKEY_A, Alt+Win modifier. |
237 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 202 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, |
238 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 203 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
239 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, | 204 ui::ET_KEY_PRESSED), |
| 205 GetRewrittenEventAsString(&rewriter, |
| 206 ui::VKEY_A, |
| 207 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 208 ui::ET_KEY_PRESSED)); |
240 | 209 |
241 // VKEY_LWIN (left Windows key), Alt modifier. | 210 // VKEY_LWIN (left Windows key), Alt modifier. |
242 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 211 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, |
243 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, | 212 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
244 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}, | 213 ui::ET_KEY_PRESSED), |
| 214 GetRewrittenEventAsString(&rewriter, |
| 215 ui::VKEY_LWIN, |
| 216 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, |
| 217 ui::ET_KEY_PRESSED)); |
245 | 218 |
246 // VKEY_RWIN (right Windows key), Alt modifier. | 219 // VKEY_RWIN (right Windows key), Alt modifier. |
247 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 220 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, |
248 {ui::VKEY_RWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, | 221 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
249 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}, | 222 ui::ET_KEY_PRESSED), |
250 }; | 223 GetRewrittenEventAsString(&rewriter, |
251 | 224 ui::VKEY_RWIN, |
252 for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) { | 225 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, |
253 CheckKeyTestCase(2000 + i, &rewriter, apple_keyboard_tests[i]); | 226 ui::ET_KEY_PRESSED)); |
254 } | |
255 } | 227 } |
256 | 228 |
257 // For crbug.com/133896. | 229 // For crbug.com/133896. |
258 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { | 230 TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { |
259 // Remap Control to Alt. | 231 // Remap Control to Alt. |
260 TestingPrefServiceSyncable prefs; | 232 TestingPrefServiceSyncable prefs; |
261 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 233 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
262 IntegerPrefMember control; | 234 IntegerPrefMember control; |
263 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 235 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
264 control.SetValue(chromeos::input_method::kAltKey); | 236 control.SetValue(chromeos::input_method::kAltKey); |
265 | 237 |
266 EventRewriter rewriter; | 238 EventRewriter rewriter; |
267 rewriter.set_pref_service_for_testing(&prefs); | 239 rewriter.set_pref_service_for_testing(&prefs); |
268 rewriter.DeviceAddedForTesting(0, "PC Keyboard"); | 240 rewriter.DeviceAddedForTesting(0, "PC Keyboard"); |
269 rewriter.set_last_device_id_for_testing(0); | 241 rewriter.set_last_device_id_for_testing(0); |
270 | 242 |
271 KeyTestCase pc_keyboard_tests[] = {// Control should be remapped to Alt. | 243 // Control should be remapped to Alt. |
272 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 244 EXPECT_EQ(GetExpectedResultAsString( |
273 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, | 245 ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
274 {ui::VKEY_MENU, ui::EF_ALT_DOWN}}, | 246 GetRewrittenEventAsString(&rewriter, |
275 }; | 247 ui::VKEY_CONTROL, |
276 | 248 ui::EF_CONTROL_DOWN, |
277 for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) { | 249 ui::ET_KEY_PRESSED)); |
278 CheckKeyTestCase(1000 + i, &rewriter, pc_keyboard_tests[i]); | |
279 } | |
280 | 250 |
281 // An Apple keyboard reusing the ID, zero. | 251 // An Apple keyboard reusing the ID, zero. |
282 rewriter.DeviceAddedForTesting(0, "Apple Keyboard"); | 252 rewriter.DeviceAddedForTesting(0, "Apple Keyboard"); |
283 rewriter.set_last_device_id_for_testing(0); | 253 rewriter.set_last_device_id_for_testing(0); |
284 | 254 |
285 KeyTestCase apple_keyboard_tests[] = { | 255 // VKEY_LWIN (left Command key) with Alt modifier. The remapped Command key |
286 // VKEY_LWIN (left Command key) with Alt modifier. The remapped Command | 256 // should never be re-remapped to Alt. |
287 // key should never be re-remapped to Alt. | 257 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, |
288 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 258 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
289 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, | 259 ui::ET_KEY_PRESSED), |
290 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}, | 260 GetRewrittenEventAsString(&rewriter, |
| 261 ui::VKEY_LWIN, |
| 262 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, |
| 263 ui::ET_KEY_PRESSED)); |
291 | 264 |
292 // VKEY_RWIN (right Command key) with Alt modifier. The remapped Command | 265 // VKEY_RWIN (right Command key) with Alt modifier. The remapped Command key |
293 // key should never be re-remapped to Alt. | 266 // should never be re-remapped to Alt. |
294 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 267 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, |
295 {ui::VKEY_RWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, | 268 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
296 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}}, | 269 ui::ET_KEY_PRESSED), |
297 }; | 270 GetRewrittenEventAsString(&rewriter, |
298 | 271 ui::VKEY_RWIN, |
299 for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) { | 272 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, |
300 CheckKeyTestCase(2000 + i, &rewriter, apple_keyboard_tests[i]); | 273 ui::ET_KEY_PRESSED)); |
301 } | |
302 } | 274 } |
303 | 275 |
304 void EventRewriterTest::TestRewriteNumPadKeys() { | 276 void EventRewriterTest::TestRewriteNumPadKeys() { |
305 TestingPrefServiceSyncable prefs; | 277 TestingPrefServiceSyncable prefs; |
306 EventRewriter rewriter; | 278 EventRewriter rewriter; |
307 rewriter.set_pref_service_for_testing(&prefs); | 279 rewriter.set_pref_service_for_testing(&prefs); |
308 | 280 |
309 KeyTestCase tests[] = { | 281 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. |
310 // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. | 282 EXPECT_EQ( |
311 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 283 GetExpectedResultAsString( |
312 {ui::VKEY_INSERT, ui::EF_NUMPAD_KEY}, | 284 ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
313 {ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY}}, | 285 GetRewrittenEventAsString( |
| 286 &rewriter, ui::VKEY_INSERT, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
314 | 287 |
315 // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier. | 288 // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier. |
316 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 289 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD0, |
317 {ui::VKEY_INSERT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 290 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
318 {ui::VKEY_NUMPAD0, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 291 ui::ET_KEY_PRESSED), |
| 292 GetRewrittenEventAsString(&rewriter, |
| 293 ui::VKEY_INSERT, |
| 294 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
| 295 ui::ET_KEY_PRESSED)); |
319 | 296 |
320 // XK_KP_Delete (= NumPad . without Num Lock), Alt modifier. | 297 // XK_KP_Delete (= NumPad . without Num Lock), Alt modifier. |
321 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 298 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_DECIMAL, |
322 {ui::VKEY_DELETE, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 299 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
323 {ui::VKEY_DECIMAL, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 300 ui::ET_KEY_PRESSED), |
| 301 GetRewrittenEventAsString(&rewriter, |
| 302 ui::VKEY_DELETE, |
| 303 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
| 304 ui::ET_KEY_PRESSED)); |
324 | 305 |
325 // XK_KP_End (= NumPad 1 without Num Lock), Alt modifier. | 306 // XK_KP_End (= NumPad 1 without Num Lock), Alt modifier. |
326 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 307 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1, |
327 {ui::VKEY_END, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 308 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
328 {ui::VKEY_NUMPAD1, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 309 ui::ET_KEY_PRESSED), |
| 310 GetRewrittenEventAsString(&rewriter, |
| 311 ui::VKEY_END, |
| 312 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
| 313 ui::ET_KEY_PRESSED)); |
329 | 314 |
330 // XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier. | 315 // XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier. |
331 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 316 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD2, |
332 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 317 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
333 {ui::VKEY_NUMPAD2, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 318 ui::ET_KEY_PRESSED), |
| 319 GetRewrittenEventAsString(&rewriter, |
| 320 ui::VKEY_DOWN, |
| 321 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
| 322 ui::ET_KEY_PRESSED)); |
334 | 323 |
335 // XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier. | 324 // XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier. |
336 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 325 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD3, |
337 {ui::VKEY_NEXT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 326 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
338 {ui::VKEY_NUMPAD3, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 327 ui::ET_KEY_PRESSED), |
| 328 GetRewrittenEventAsString(&rewriter, |
| 329 ui::VKEY_NEXT, |
| 330 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
| 331 ui::ET_KEY_PRESSED)); |
339 | 332 |
340 // XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier. | 333 // XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier. |
341 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 334 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD4, |
342 {ui::VKEY_LEFT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 335 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
343 {ui::VKEY_NUMPAD4, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 336 ui::ET_KEY_PRESSED), |
| 337 GetRewrittenEventAsString(&rewriter, |
| 338 ui::VKEY_LEFT, |
| 339 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
| 340 ui::ET_KEY_PRESSED)); |
344 | 341 |
345 // XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier. | 342 // XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier. |
346 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 343 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD5, |
347 {ui::VKEY_CLEAR, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 344 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
348 {ui::VKEY_NUMPAD5, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 345 ui::ET_KEY_PRESSED), |
| 346 GetRewrittenEventAsString(&rewriter, |
| 347 ui::VKEY_CLEAR, |
| 348 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
| 349 ui::ET_KEY_PRESSED)); |
349 | 350 |
350 // XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier. | 351 // XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier. |
351 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 352 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD6, |
352 {ui::VKEY_RIGHT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 353 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
353 {ui::VKEY_NUMPAD6, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 354 ui::ET_KEY_PRESSED), |
| 355 GetRewrittenEventAsString(&rewriter, |
| 356 ui::VKEY_RIGHT, |
| 357 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
| 358 ui::ET_KEY_PRESSED)); |
354 | 359 |
355 // XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier. | 360 // XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier. |
356 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 361 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD7, |
357 {ui::VKEY_HOME, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 362 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
358 {ui::VKEY_NUMPAD7, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 363 ui::ET_KEY_PRESSED), |
| 364 GetRewrittenEventAsString(&rewriter, |
| 365 ui::VKEY_HOME, |
| 366 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
| 367 ui::ET_KEY_PRESSED)); |
359 | 368 |
360 // XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier. | 369 // XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier. |
361 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 370 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD8, |
362 {ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 371 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
363 {ui::VKEY_NUMPAD8, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 372 ui::ET_KEY_PRESSED), |
| 373 GetRewrittenEventAsString(&rewriter, |
| 374 ui::VKEY_UP, |
| 375 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
| 376 ui::ET_KEY_PRESSED)); |
364 | 377 |
365 // XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier. | 378 // XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier. |
366 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 379 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD9, |
367 {ui::VKEY_PRIOR, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}, | 380 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
368 {ui::VKEY_NUMPAD9, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}}, | 381 ui::ET_KEY_PRESSED), |
| 382 GetRewrittenEventAsString(&rewriter, |
| 383 ui::VKEY_PRIOR, |
| 384 ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, |
| 385 ui::ET_KEY_PRESSED)); |
369 | 386 |
370 // XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier. | 387 // XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier. |
371 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 388 EXPECT_EQ( |
372 {ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY}, | 389 GetExpectedResultAsString( |
373 {ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY}}, | 390 ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
| 391 GetRewrittenEventAsString( |
| 392 &rewriter, ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
374 | 393 |
375 // XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier. | 394 // XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier. |
376 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 395 EXPECT_EQ( |
377 {ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY}, | 396 GetExpectedResultAsString( |
378 {ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY}}, | 397 ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
| 398 GetRewrittenEventAsString( |
| 399 &rewriter, ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
379 | 400 |
380 // XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier. | 401 // XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier. |
381 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 402 EXPECT_EQ( |
382 {ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY}, | 403 GetExpectedResultAsString( |
383 {ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY}}, | 404 ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
| 405 GetRewrittenEventAsString( |
| 406 &rewriter, ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
384 | 407 |
385 // XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier. | 408 // XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier. |
386 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 409 EXPECT_EQ( |
387 {ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY}, | 410 GetExpectedResultAsString( |
388 {ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY}}, | 411 ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
| 412 GetRewrittenEventAsString( |
| 413 &rewriter, ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
389 | 414 |
390 // XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier. | 415 // XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier. |
391 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 416 EXPECT_EQ( |
392 {ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY}, | 417 GetExpectedResultAsString( |
393 {ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY}}, | 418 ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
| 419 GetRewrittenEventAsString( |
| 420 &rewriter, ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
394 | 421 |
395 // XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier. | 422 // XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier. |
396 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 423 EXPECT_EQ( |
397 {ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY}, | 424 GetExpectedResultAsString( |
398 {ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY}}, | 425 ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
| 426 GetRewrittenEventAsString( |
| 427 &rewriter, ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
399 | 428 |
400 // XK_KP_5 (= NumPad 5 with Num Lock), Num Lock modifier. | 429 // XK_KP_5 (= NumPad 5 with Num Lock), Num Lock modifier. |
401 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 430 EXPECT_EQ( |
402 {ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY}, | 431 GetExpectedResultAsString( |
403 {ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY}}, | 432 ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
| 433 GetRewrittenEventAsString( |
| 434 &rewriter, ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
404 | 435 |
405 // XK_KP_6 (= NumPad 6 with Num Lock), Num Lock modifier. | 436 // XK_KP_6 (= NumPad 6 with Num Lock), Num Lock modifier. |
406 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 437 EXPECT_EQ( |
407 {ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY}, | 438 GetExpectedResultAsString( |
408 {ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY}}, | 439 ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
| 440 GetRewrittenEventAsString( |
| 441 &rewriter, ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
409 | 442 |
410 // XK_KP_7 (= NumPad 7 with Num Lock), Num Lock modifier. | 443 // XK_KP_7 (= NumPad 7 with Num Lock), Num Lock modifier. |
411 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 444 EXPECT_EQ( |
412 {ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY}, | 445 GetExpectedResultAsString( |
413 {ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY}}, | 446 ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
| 447 GetRewrittenEventAsString( |
| 448 &rewriter, ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
414 | 449 |
415 // XK_KP_8 (= NumPad 8 with Num Lock), Num Lock modifier. | 450 // XK_KP_8 (= NumPad 8 with Num Lock), Num Lock modifier. |
416 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 451 EXPECT_EQ( |
417 {ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY}, | 452 GetExpectedResultAsString( |
418 {ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY}}, | 453 ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
| 454 GetRewrittenEventAsString( |
| 455 &rewriter, ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
419 | 456 |
420 // XK_KP_9 (= NumPad 9 with Num Lock), Num Lock modifier. | 457 // XK_KP_9 (= NumPad 9 with Num Lock), Num Lock modifier. |
421 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 458 EXPECT_EQ( |
422 {ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY}, | 459 GetExpectedResultAsString( |
423 {ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY}}, | 460 ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), |
424 }; | 461 GetRewrittenEventAsString( |
425 | 462 &rewriter, ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED)); |
426 for (size_t i = 0; i < arraysize(tests); ++i) { | |
427 CheckKeyTestCase(1000 + i, &rewriter, tests[i]); | |
428 } | |
429 } | 463 } |
430 | 464 |
431 TEST_F(EventRewriterTest, TestRewriteNumPadKeys) { | 465 TEST_F(EventRewriterTest, TestRewriteNumPadKeys) { |
432 TestRewriteNumPadKeys(); | 466 TestRewriteNumPadKeys(); |
433 } | 467 } |
434 | 468 |
435 TEST_F(EventRewriterTest, TestRewriteNumPadKeysWithDiamondKeyFlag) { | 469 TEST_F(EventRewriterTest, TestRewriteNumPadKeysWithDiamondKeyFlag) { |
436 // Make sure the num lock works correctly even when Diamond key exists. | 470 // Make sure the num lock works correctly even when Diamond key exists. |
437 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); | 471 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); |
438 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 472 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
439 chromeos::switches::kHasChromeOSDiamondKey, ""); | 473 chromeos::switches::kHasChromeOSDiamondKey, ""); |
440 | 474 |
441 TestRewriteNumPadKeys(); | 475 TestRewriteNumPadKeys(); |
442 *CommandLine::ForCurrentProcess() = original_cl; | 476 *CommandLine::ForCurrentProcess() = original_cl; |
443 } | 477 } |
444 | 478 |
445 // Tests if the rewriter can handle a Command + Num Pad event. | 479 // Tests if the rewriter can handle a Command + Num Pad event. |
446 void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() { | 480 void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() { |
447 TestingPrefServiceSyncable prefs; | 481 TestingPrefServiceSyncable prefs; |
448 EventRewriter rewriter; | 482 EventRewriter rewriter; |
449 rewriter.DeviceAddedForTesting(0, "Apple Keyboard"); | 483 rewriter.DeviceAddedForTesting(0, "Apple Keyboard"); |
450 rewriter.set_last_device_id_for_testing(0); | 484 rewriter.set_last_device_id_for_testing(0); |
451 rewriter.set_pref_service_for_testing(&prefs); | 485 rewriter.set_pref_service_for_testing(&prefs); |
452 | 486 |
453 KeyTestCase tests[] = { | 487 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier. |
454 // XK_KP_End (= NumPad 1 without Num Lock), Win modifier. | 488 // The result should be "Num Pad 1 with Control + Num Lock modifiers". |
455 // The result should be "Num Pad 1 with Control + Num Lock modifiers". | 489 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1, |
456 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 490 ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY, |
457 {ui::VKEY_END, ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY}, | 491 ui::ET_KEY_PRESSED), |
458 {ui::VKEY_NUMPAD1, ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY}}, | 492 GetRewrittenEventAsString(&rewriter, |
| 493 ui::VKEY_END, |
| 494 ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY, |
| 495 ui::ET_KEY_PRESSED)); |
459 | 496 |
460 // XK_KP_1 (= NumPad 1 with Num Lock), Win modifier. | 497 // XK_KP_1 (= NumPad 1 with Num Lock), Win modifier. |
461 // The result should also be "Num Pad 1 with Control + Num Lock | 498 // The result should also be "Num Pad 1 with Control + Num Lock modifiers". |
462 // modifiers". | 499 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1, |
463 {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED, | 500 ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY, |
464 {ui::VKEY_NUMPAD1, ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY}, | 501 ui::ET_KEY_PRESSED), |
465 {ui::VKEY_NUMPAD1, ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY}}, | 502 GetRewrittenEventAsString(&rewriter, |
466 }; | 503 ui::VKEY_NUMPAD1, |
467 | 504 ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY, |
468 for (size_t i = 0; i < arraysize(tests); ++i) { | 505 ui::ET_KEY_PRESSED)); |
469 CheckKeyTestCase(1000 + i, &rewriter, tests[i]); | |
470 } | |
471 } | 506 } |
472 | 507 |
473 TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) { | 508 TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) { |
474 TestRewriteNumPadKeysOnAppleKeyboard(); | 509 TestRewriteNumPadKeysOnAppleKeyboard(); |
475 } | 510 } |
476 | 511 |
477 TEST_F(EventRewriterTest, | 512 TEST_F(EventRewriterTest, |
478 TestRewriteNumPadKeysOnAppleKeyboardWithDiamondKeyFlag) { | 513 TestRewriteNumPadKeysOnAppleKeyboardWithDiamondKeyFlag) { |
479 // Makes sure the num lock works correctly even when Diamond key exists. | 514 // Makes sure the num lock works correctly even when Diamond key exists. |
480 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); | 515 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); |
481 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 516 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
482 chromeos::switches::kHasChromeOSDiamondKey, ""); | 517 chromeos::switches::kHasChromeOSDiamondKey, ""); |
483 | 518 |
484 TestRewriteNumPadKeysOnAppleKeyboard(); | 519 TestRewriteNumPadKeysOnAppleKeyboard(); |
485 *CommandLine::ForCurrentProcess() = original_cl; | 520 *CommandLine::ForCurrentProcess() = original_cl; |
486 } | 521 } |
487 | 522 |
488 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { | 523 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { |
489 TestingPrefServiceSyncable prefs; | 524 TestingPrefServiceSyncable prefs; |
490 EventRewriter rewriter; | 525 EventRewriter rewriter; |
491 rewriter.set_pref_service_for_testing(&prefs); | 526 rewriter.set_pref_service_for_testing(&prefs); |
492 | 527 |
493 KeyTestCase tests[] = { | 528 // Press Search. Confirm the event is not rewritten. |
494 // Press Search. Confirm the event is not rewritten. | 529 EXPECT_EQ(GetExpectedResultAsString( |
495 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 530 ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED), |
496 {ui::VKEY_LWIN, ui::EF_NONE}, | 531 GetRewrittenEventAsString( |
497 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}}, | 532 &rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
498 | 533 |
499 // Press left Control. Confirm the event is not rewritten. | 534 // Press left Control. Confirm the event is not rewritten. |
500 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 535 EXPECT_EQ(GetExpectedResultAsString( |
501 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, | 536 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
502 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | 537 GetRewrittenEventAsString(&rewriter, |
| 538 ui::VKEY_CONTROL, |
| 539 ui::EF_CONTROL_DOWN, |
| 540 ui::ET_KEY_PRESSED)); |
503 | 541 |
504 // Press right Control. Confirm the event is not rewritten. | 542 // Press right Control. Confirm the event is not rewritten. |
505 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 543 EXPECT_EQ(GetExpectedResultAsString( |
506 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, | 544 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
507 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | 545 GetRewrittenEventAsString(&rewriter, |
| 546 ui::VKEY_CONTROL, |
| 547 ui::EF_CONTROL_DOWN, |
| 548 ui::ET_KEY_PRESSED)); |
508 | 549 |
509 // Press left Alt. Confirm the event is not rewritten. | 550 // Press left Alt. Confirm the event is not rewritten. |
510 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 551 EXPECT_EQ(GetExpectedResultAsString( |
511 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, | 552 ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
512 {ui::VKEY_MENU, ui::EF_ALT_DOWN}}, | 553 GetRewrittenEventAsString( |
| 554 &rewriter, ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED)); |
513 | 555 |
514 // Press right Alt. Confirm the event is not rewritten. | 556 // Press right Alt. Confirm the event is not rewritten. |
515 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 557 EXPECT_EQ(GetExpectedResultAsString( |
516 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, | 558 ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
517 {ui::VKEY_MENU, ui::EF_ALT_DOWN}}, | 559 GetRewrittenEventAsString( |
| 560 &rewriter, ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED)); |
518 | 561 |
519 // Test KeyRelease event, just in case. | 562 // Test KeyRelease event, just in case. |
520 // Release Search. Confirm the release event is not rewritten. | 563 // Release Search. Confirm the release event is not rewritten. |
521 {KeyTestCase::TEST_ALL, ui::ET_KEY_RELEASED, | 564 EXPECT_EQ(GetExpectedResultAsString( |
522 {ui::VKEY_LWIN, ui::EF_NONE}, | 565 ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED), |
523 {ui::VKEY_LWIN, ui::EF_NONE}}, | 566 GetRewrittenEventAsString( |
524 }; | 567 &rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED)); |
525 | |
526 for (size_t i = 0; i < arraysize(tests); ++i) { | |
527 CheckKeyTestCase(1000 + i, &rewriter, tests[i]); | |
528 } | |
529 } | 568 } |
530 | 569 |
531 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { | 570 TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { |
532 TestingPrefServiceSyncable prefs; | 571 TestingPrefServiceSyncable prefs; |
533 EventRewriter rewriter; | 572 EventRewriter rewriter; |
534 rewriter.set_pref_service_for_testing(&prefs); | 573 rewriter.set_pref_service_for_testing(&prefs); |
535 | 574 |
536 KeyTestCase tests[] = { | 575 // Press Alt with Shift. Confirm the event is not rewritten. |
537 // Press Alt with Shift. Confirm the event is not rewritten. | 576 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, |
538 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 577 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
539 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}, | 578 ui::ET_KEY_PRESSED), |
540 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}}, | 579 GetRewrittenEventAsString(&rewriter, |
| 580 ui::VKEY_MENU, |
| 581 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
| 582 ui::ET_KEY_PRESSED)); |
541 | 583 |
542 // Press Search with Caps Lock mask. Confirm the event is not rewritten. | 584 // Press Search with Caps Lock mask. Confirm the event is not rewritten. |
543 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 585 EXPECT_EQ( |
544 {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN}, | 586 GetExpectedResultAsString(ui::VKEY_LWIN, |
545 {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN}}, | 587 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, |
| 588 ui::ET_KEY_PRESSED), |
| 589 GetRewrittenEventAsString(&rewriter, |
| 590 ui::VKEY_LWIN, |
| 591 ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, |
| 592 ui::ET_KEY_PRESSED)); |
546 | 593 |
547 // Release Search with Caps Lock mask. Confirm the event is not rewritten. | 594 // Release Search with Caps Lock mask. Confirm the event is not rewritten. |
548 {KeyTestCase::TEST_ALL, ui::ET_KEY_RELEASED, | 595 EXPECT_EQ(GetExpectedResultAsString( |
549 {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN}, | 596 ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN, ui::ET_KEY_RELEASED), |
550 {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN}}, | 597 GetRewrittenEventAsString(&rewriter, |
| 598 ui::VKEY_LWIN, |
| 599 ui::EF_CAPS_LOCK_DOWN, |
| 600 ui::ET_KEY_RELEASED)); |
551 | 601 |
552 // Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten. | 602 // Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten. |
553 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 603 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_B, |
554 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 604 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
555 ui::EF_COMMAND_DOWN}, | 605 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
556 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 606 ui::ET_KEY_PRESSED), |
557 ui::EF_COMMAND_DOWN}}, | 607 GetRewrittenEventAsString(&rewriter, |
558 }; | 608 ui::VKEY_B, |
559 | 609 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
560 for (size_t i = 0; i < arraysize(tests); ++i) { | 610 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
561 CheckKeyTestCase(1000 + i, &rewriter, tests[i]); | 611 ui::ET_KEY_PRESSED)); |
562 } | |
563 } | 612 } |
564 | 613 |
565 TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { | 614 TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { |
566 // Disable Search and Control keys. | 615 // Disable Search and Control keys. |
567 TestingPrefServiceSyncable prefs; | 616 TestingPrefServiceSyncable prefs; |
568 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 617 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
569 IntegerPrefMember search; | 618 IntegerPrefMember search; |
570 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 619 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
571 search.SetValue(chromeos::input_method::kVoidKey); | 620 search.SetValue(chromeos::input_method::kVoidKey); |
572 IntegerPrefMember control; | 621 IntegerPrefMember control; |
573 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 622 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
574 control.SetValue(chromeos::input_method::kVoidKey); | 623 control.SetValue(chromeos::input_method::kVoidKey); |
575 | 624 |
576 EventRewriter rewriter; | 625 EventRewriter rewriter; |
577 rewriter.set_pref_service_for_testing(&prefs); | 626 rewriter.set_pref_service_for_testing(&prefs); |
578 | 627 |
579 KeyTestCase disabled_modifier_tests[] = { | 628 // Press Alt with Shift. This key press shouldn't be affected by the |
580 // Press Alt with Shift. This key press shouldn't be affected by the | 629 // pref. Confirm the event is not rewritten. |
581 // pref. Confirm the event is not rewritten. | 630 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, |
582 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 631 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
583 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}, | 632 ui::ET_KEY_PRESSED), |
584 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}}, | 633 GetRewrittenEventAsString(&rewriter, |
| 634 ui::VKEY_MENU, |
| 635 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, |
| 636 ui::ET_KEY_PRESSED)); |
585 | 637 |
586 // Press Search. Confirm the event is now VKEY_UNKNOWN. | 638 // Press Search. Confirm the event is now VKEY_UNKNOWN. |
587 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 639 EXPECT_EQ(GetExpectedResultAsString( |
588 {ui::VKEY_LWIN, ui::EF_NONE}, | 640 ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED), |
589 {ui::VKEY_UNKNOWN, ui::EF_NONE}}, | 641 GetRewrittenEventAsString( |
| 642 &rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
590 | 643 |
591 // Press Control. Confirm the event is now VKEY_UNKNOWN. | 644 // Press Control. Confirm the event is now VKEY_UNKNOWN. |
592 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 645 EXPECT_EQ(GetExpectedResultAsString( |
593 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, | 646 ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED), |
594 {ui::VKEY_UNKNOWN, ui::EF_NONE}}, | 647 GetRewrittenEventAsString( |
| 648 &rewriter, ui::VKEY_CONTROL, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
595 | 649 |
596 // Press Control+Search. Confirm the event is now VKEY_UNKNOWN | 650 // Press Control+Search. Confirm the event is now VKEY_UNKNOWN |
597 // without any modifiers. | 651 // without any modifiers. |
598 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 652 EXPECT_EQ( |
599 {ui::VKEY_LWIN, ui::EF_CONTROL_DOWN}, | 653 GetExpectedResultAsString( |
600 {ui::VKEY_UNKNOWN, ui::EF_NONE}}, | 654 ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED), |
| 655 GetRewrittenEventAsString( |
| 656 &rewriter, ui::VKEY_LWIN, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED)); |
601 | 657 |
602 // Press Control+Search+a. Confirm the event is now VKEY_A without any | 658 // Press Control+Search+a. Confirm the event is now VKEY_A without any |
603 // modifiers. | 659 // modifiers. |
604 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 660 EXPECT_EQ( |
605 {ui::VKEY_A, ui::EF_CONTROL_DOWN}, | 661 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
606 {ui::VKEY_A, ui::EF_NONE}}, | 662 GetRewrittenEventAsString( |
| 663 &rewriter, ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED)); |
607 | 664 |
608 // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with | 665 // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with |
609 // the Alt modifier. | 666 // the Alt modifier. |
610 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 667 EXPECT_EQ(GetExpectedResultAsString( |
611 {ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}, | 668 ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
612 {ui::VKEY_A, ui::EF_ALT_DOWN}}, | 669 GetRewrittenEventAsString(&rewriter, |
613 }; | 670 ui::VKEY_A, |
614 | 671 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, |
615 for (size_t i = 0; i < arraysize(disabled_modifier_tests); ++i) { | 672 ui::ET_KEY_PRESSED)); |
616 CheckKeyTestCase(1000 + i, &rewriter, disabled_modifier_tests[i]); | |
617 } | |
618 | 673 |
619 // Remap Alt to Control. | 674 // Remap Alt to Control. |
620 IntegerPrefMember alt; | 675 IntegerPrefMember alt; |
621 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 676 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); |
622 alt.SetValue(chromeos::input_method::kControlKey); | 677 alt.SetValue(chromeos::input_method::kControlKey); |
623 | 678 |
624 KeyTestCase tests[] = { | 679 // Press left Alt. Confirm the event is now VKEY_CONTROL |
625 // Press left Alt. Confirm the event is now VKEY_CONTROL | 680 // even though the Control key itself is disabled. |
626 // even though the Control key itself is disabled. | 681 EXPECT_EQ(GetExpectedResultAsString( |
627 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 682 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
628 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, | 683 GetRewrittenEventAsString( |
629 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | 684 &rewriter, ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED)); |
630 | 685 |
631 // Press Alt+a. Confirm the event is now Control+a even though the Control | 686 // Press Alt+a. Confirm the event is now Control+a even though the Control |
632 // key itself is disabled. | 687 // key itself is disabled. |
633 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 688 EXPECT_EQ(GetExpectedResultAsString( |
634 {ui::VKEY_A, ui::EF_ALT_DOWN}, | 689 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
635 {ui::VKEY_A, ui::EF_CONTROL_DOWN}}, | 690 GetRewrittenEventAsString( |
636 }; | 691 &rewriter, ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED)); |
637 | |
638 for (size_t i = 0; i < arraysize(tests); ++i) { | |
639 CheckKeyTestCase(2000 + i, &rewriter, tests[i]); | |
640 } | |
641 } | 692 } |
642 | 693 |
643 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { | 694 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { |
644 // Remap Search to Control. | 695 // Remap Search to Control. |
645 TestingPrefServiceSyncable prefs; | 696 TestingPrefServiceSyncable prefs; |
646 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 697 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
647 IntegerPrefMember search; | 698 IntegerPrefMember search; |
648 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 699 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
649 search.SetValue(chromeos::input_method::kControlKey); | 700 search.SetValue(chromeos::input_method::kControlKey); |
650 | 701 |
651 EventRewriter rewriter; | 702 EventRewriter rewriter; |
652 rewriter.set_pref_service_for_testing(&prefs); | 703 rewriter.set_pref_service_for_testing(&prefs); |
653 | 704 |
654 KeyTestCase s_tests[] = { | 705 // Press Search. Confirm the event is now VKEY_CONTROL. |
655 // Press Search. Confirm the event is now VKEY_CONTROL. | 706 EXPECT_EQ( |
656 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 707 GetExpectedResultAsString( |
657 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}, | 708 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
658 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | 709 GetRewrittenEventAsString( |
659 }; | 710 &rewriter, ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED)); |
660 | |
661 for (size_t i = 0; i < arraysize(s_tests); ++i) { | |
662 CheckKeyTestCase(1000 + i, &rewriter, s_tests[i]); | |
663 } | |
664 | 711 |
665 // Remap Alt to Control too. | 712 // Remap Alt to Control too. |
666 IntegerPrefMember alt; | 713 IntegerPrefMember alt; |
667 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 714 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); |
668 alt.SetValue(chromeos::input_method::kControlKey); | 715 alt.SetValue(chromeos::input_method::kControlKey); |
669 | 716 |
670 KeyTestCase sa_tests[] = { | 717 // Press Alt. Confirm the event is now VKEY_CONTROL. |
671 // Press Alt. Confirm the event is now VKEY_CONTROL. | 718 EXPECT_EQ(GetExpectedResultAsString( |
672 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 719 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
673 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, | 720 GetRewrittenEventAsString( |
674 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | 721 &rewriter, ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED)); |
675 | 722 |
676 // Press Alt+Search. Confirm the event is now VKEY_CONTROL. | 723 // Press Alt+Search. Confirm the event is now VKEY_CONTROL. |
677 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 724 EXPECT_EQ(GetExpectedResultAsString( |
678 {ui::VKEY_LWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 725 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
679 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | 726 GetRewrittenEventAsString(&rewriter, |
| 727 ui::VKEY_LWIN, |
| 728 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 729 ui::ET_KEY_PRESSED)); |
680 | 730 |
681 // Press Control+Alt+Search. Confirm the event is now VKEY_CONTROL. | 731 // Press Control+Alt+Search. Confirm the event is now VKEY_CONTROL. |
682 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 732 EXPECT_EQ(GetExpectedResultAsString( |
683 {ui::VKEY_LWIN, | 733 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
684 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 734 GetRewrittenEventAsString( |
685 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | 735 &rewriter, |
| 736 ui::VKEY_LWIN, |
| 737 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 738 ui::ET_KEY_PRESSED)); |
686 | 739 |
687 // Press Shift+Control+Alt+Search. Confirm the event is now Control with | 740 // Press Shift+Control+Alt+Search. Confirm the event is now Control with |
688 // Shift and Control modifiers. | 741 // Shift and Control modifiers. |
689 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 742 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, |
690 {ui::VKEY_LWIN, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | | 743 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
691 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 744 ui::ET_KEY_PRESSED), |
692 {ui::VKEY_CONTROL, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}, | 745 GetRewrittenEventAsString(&rewriter, |
| 746 ui::VKEY_LWIN, |
| 747 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
| 748 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 749 ui::ET_KEY_PRESSED)); |
693 | 750 |
694 // Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift | 751 // Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift |
695 // and Control modifiers. | 752 // and Control modifiers. |
696 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 753 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_B, |
697 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 754 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, |
698 ui::EF_COMMAND_DOWN}, | 755 ui::ET_KEY_PRESSED), |
699 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}}, | 756 GetRewrittenEventAsString(&rewriter, |
700 }; | 757 ui::VKEY_B, |
701 | 758 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
702 for (size_t i = 0; i < arraysize(sa_tests); ++i) { | 759 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
703 CheckKeyTestCase(2000 + i, &rewriter, sa_tests[i]); | 760 ui::ET_KEY_PRESSED)); |
704 } | |
705 } | 761 } |
706 | 762 |
707 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { | 763 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { |
708 // Remap Search to ESC. | 764 // Remap Search to ESC. |
709 TestingPrefServiceSyncable prefs; | 765 TestingPrefServiceSyncable prefs; |
710 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 766 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
711 IntegerPrefMember search; | 767 IntegerPrefMember search; |
712 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 768 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
713 search.SetValue(chromeos::input_method::kEscapeKey); | 769 search.SetValue(chromeos::input_method::kEscapeKey); |
714 | 770 |
715 EventRewriter rewriter; | 771 EventRewriter rewriter; |
716 rewriter.set_pref_service_for_testing(&prefs); | 772 rewriter.set_pref_service_for_testing(&prefs); |
717 | 773 |
718 KeyTestCase tests[] = {// Press Search. Confirm the event is now VKEY_ESCAPE. | 774 // Press Search. Confirm the event is now VKEY_ESCAPE. |
719 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 775 EXPECT_EQ( |
720 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}, | 776 GetExpectedResultAsString( |
721 {ui::VKEY_ESCAPE, ui::EF_NONE}}, | 777 ui::VKEY_ESCAPE, ui::EF_NONE, ui::ET_KEY_PRESSED), |
722 }; | 778 GetRewrittenEventAsString( |
723 | 779 &rewriter, ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED)); |
724 for (size_t i = 0; i < arraysize(tests); ++i) { | |
725 CheckKeyTestCase(1000 + i, &rewriter, tests[i]); | |
726 } | |
727 } | 780 } |
728 | 781 |
729 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { | 782 TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { |
730 // Remap Search to Alt. | 783 // Remap Search to Alt. |
731 TestingPrefServiceSyncable prefs; | 784 TestingPrefServiceSyncable prefs; |
732 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 785 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
733 IntegerPrefMember search; | 786 IntegerPrefMember search; |
734 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 787 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
735 search.SetValue(chromeos::input_method::kAltKey); | 788 search.SetValue(chromeos::input_method::kAltKey); |
736 | 789 |
737 EventRewriter rewriter; | 790 EventRewriter rewriter; |
738 rewriter.set_pref_service_for_testing(&prefs); | 791 rewriter.set_pref_service_for_testing(&prefs); |
739 | 792 |
740 KeyTestCase s2a_tests[] = { | 793 // Press Search. Confirm the event is now VKEY_MENU. |
741 // Press Search. Confirm the event is now VKEY_MENU. | 794 EXPECT_EQ( |
742 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 795 GetExpectedResultAsString( |
743 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}, | 796 ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), |
744 {ui::VKEY_MENU, ui::EF_ALT_DOWN}}, | 797 GetRewrittenEventAsString( |
745 }; | 798 &rewriter, ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED)); |
746 | |
747 for (size_t i = 0; i < arraysize(s2a_tests); ++i) { | |
748 CheckKeyTestCase(1000 + i, &rewriter, s2a_tests[i]); | |
749 } | |
750 | 799 |
751 // Remap Alt to Control. | 800 // Remap Alt to Control. |
752 IntegerPrefMember alt; | 801 IntegerPrefMember alt; |
753 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); | 802 alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); |
754 alt.SetValue(chromeos::input_method::kControlKey); | 803 alt.SetValue(chromeos::input_method::kControlKey); |
755 | 804 |
756 KeyTestCase a2c_tests[] = { | 805 // Press left Alt. Confirm the event is now VKEY_CONTROL. |
757 // Press left Alt. Confirm the event is now VKEY_CONTROL. | 806 EXPECT_EQ(GetExpectedResultAsString( |
758 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 807 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
759 {ui::VKEY_MENU, ui::EF_ALT_DOWN}, | 808 GetRewrittenEventAsString( |
760 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | 809 &rewriter, ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED)); |
761 }; | |
762 | |
763 for (size_t i = 0; i < arraysize(a2c_tests); ++i) { | |
764 CheckKeyTestCase(2000 + i, &rewriter, a2c_tests[i]); | |
765 } | |
766 | 810 |
767 // Remap Control to Search. | 811 // Remap Control to Search. |
768 IntegerPrefMember control; | 812 IntegerPrefMember control; |
769 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 813 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
770 control.SetValue(chromeos::input_method::kSearchKey); | 814 control.SetValue(chromeos::input_method::kSearchKey); |
771 | 815 |
772 KeyTestCase c2s_tests[] = { | 816 // Press left Control. Confirm the event is now VKEY_LWIN. |
773 // Press left Control. Confirm the event is now VKEY_LWIN. | 817 EXPECT_EQ(GetExpectedResultAsString( |
774 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 818 ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED), |
775 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}, | 819 GetRewrittenEventAsString(&rewriter, |
776 {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}}, | 820 ui::VKEY_CONTROL, |
| 821 ui::EF_CONTROL_DOWN, |
| 822 ui::ET_KEY_PRESSED)); |
777 | 823 |
778 // Then, press all of the three, Control+Alt+Search. | 824 // Then, press all of the three, Control+Alt+Search. |
779 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 825 EXPECT_EQ(GetExpectedResultAsString( |
780 {ui::VKEY_LWIN, | 826 ui::VKEY_MENU, |
781 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 827 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
782 {ui::VKEY_MENU, | 828 ui::ET_KEY_PRESSED), |
783 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, | 829 GetRewrittenEventAsString( |
| 830 &rewriter, |
| 831 ui::VKEY_LWIN, |
| 832 ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 833 ui::ET_KEY_PRESSED)); |
784 | 834 |
785 // Press Shift+Control+Alt+Search. | 835 // Press Shift+Control+Alt+Search. |
786 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 836 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, |
787 {ui::VKEY_LWIN, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | | 837 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
788 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 838 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
789 {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | | 839 ui::ET_KEY_PRESSED), |
790 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}}, | 840 GetRewrittenEventAsString(&rewriter, |
| 841 ui::VKEY_LWIN, |
| 842 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
| 843 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 844 ui::ET_KEY_PRESSED)); |
791 | 845 |
792 // Press Shift+Control+Alt+Search+B | 846 // Press Shift+Control+Alt+Search+B |
793 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 847 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_B, |
794 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 848 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
795 ui::EF_COMMAND_DOWN}, | 849 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
796 {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | | 850 ui::ET_KEY_PRESSED), |
797 ui::EF_COMMAND_DOWN}}, | 851 GetRewrittenEventAsString(&rewriter, |
798 }; | 852 ui::VKEY_B, |
799 | 853 ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | |
800 for (size_t i = 0; i < arraysize(c2s_tests); ++i) { | 854 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
801 CheckKeyTestCase(3000 + i, &rewriter, c2s_tests[i]); | 855 ui::ET_KEY_PRESSED)); |
802 } | |
803 } | 856 } |
804 | 857 |
805 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { | 858 TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { |
806 // Remap Search to Caps Lock. | 859 // Remap Search to Caps Lock. |
807 TestingPrefServiceSyncable prefs; | 860 TestingPrefServiceSyncable prefs; |
808 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 861 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
809 IntegerPrefMember search; | 862 IntegerPrefMember search; |
810 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 863 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
811 search.SetValue(chromeos::input_method::kCapsLockKey); | 864 search.SetValue(chromeos::input_method::kCapsLockKey); |
812 | 865 |
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
897 | 950 |
898 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { | 951 TEST_F(EventRewriterTest, TestRewriteDiamondKey) { |
899 TestingPrefServiceSyncable prefs; | 952 TestingPrefServiceSyncable prefs; |
900 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 953 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
901 | 954 |
902 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 955 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
903 EventRewriter rewriter; | 956 EventRewriter rewriter; |
904 rewriter.set_pref_service_for_testing(&prefs); | 957 rewriter.set_pref_service_for_testing(&prefs); |
905 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); | 958 rewriter.set_ime_keyboard_for_testing(&ime_keyboard); |
906 | 959 |
907 KeyTestCase tests[] = { | 960 // F15 should work as Ctrl when --has-chromeos-diamond-key is not specified. |
908 // F15 should work as Ctrl when --has-chromeos-diamond-key is not | 961 EXPECT_EQ(GetExpectedResultAsString( |
909 // specified. | 962 ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
910 {KeyTestCase::TEST_VKEY, | 963 GetRewrittenEventAsString( |
911 ui::ET_KEY_PRESSED, | 964 &rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
912 {ui::VKEY_F15, ui::EF_NONE}, | |
913 {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}}, | |
914 | 965 |
915 // However, Mod2Mask should not be rewritten to CtrlMask when | 966 // However, Mod2Mask should not be rewritten to CtrlMask when |
916 // --has-chromeos-diamond-key is not specified. | 967 // --has-chromeos-diamond-key is not specified. |
917 {KeyTestCase::TEST_VKEY, | 968 EXPECT_EQ( |
918 ui::ET_KEY_PRESSED, | 969 GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), |
919 {ui::VKEY_A, ui::EF_NONE}, | 970 GetRewrittenEventAsString( |
920 {ui::VKEY_A, ui::EF_NONE}}, | 971 &rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); |
921 }; | 972 } |
922 | 973 |
923 for (size_t i = 0; i < arraysize(tests); ++i) { | |
924 CheckKeyTestCase(1000 + i, &rewriter, tests[i]); | |
925 } | |
926 } | |
927 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { | 974 TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { |
928 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); | 975 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); |
929 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 976 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
930 chromeos::switches::kHasChromeOSDiamondKey, ""); | 977 chromeos::switches::kHasChromeOSDiamondKey, ""); |
931 | 978 |
932 TestingPrefServiceSyncable prefs; | 979 TestingPrefServiceSyncable prefs; |
933 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 980 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
934 | 981 |
935 chromeos::input_method::FakeImeKeyboard ime_keyboard; | 982 chromeos::input_method::FakeImeKeyboard ime_keyboard; |
936 EventRewriter rewriter; | 983 EventRewriter rewriter; |
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
981 // Remap CapsLock to Control. | 1028 // Remap CapsLock to Control. |
982 TestingPrefServiceSyncable prefs; | 1029 TestingPrefServiceSyncable prefs; |
983 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1030 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
984 IntegerPrefMember control; | 1031 IntegerPrefMember control; |
985 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1032 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
986 control.SetValue(chromeos::input_method::kControlKey); | 1033 control.SetValue(chromeos::input_method::kControlKey); |
987 | 1034 |
988 EventRewriter rewriter; | 1035 EventRewriter rewriter; |
989 rewriter.set_pref_service_for_testing(&prefs); | 1036 rewriter.set_pref_service_for_testing(&prefs); |
990 | 1037 |
991 KeyTestCase tests[] = { | 1038 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. |
992 // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. | 1039 // On Chrome OS, CapsLock works as a Mod3 modifier. |
993 // On Chrome OS, CapsLock works as a Mod3 modifier. | 1040 EXPECT_EQ( |
994 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1041 GetExpectedResultAsString( |
995 {ui::VKEY_A, ui::EF_MOD3_DOWN}, | 1042 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
996 {ui::VKEY_A, ui::EF_CONTROL_DOWN}}, | 1043 GetRewrittenEventAsString( |
| 1044 &rewriter, ui::VKEY_A, ui::EF_MOD3_DOWN, ui::ET_KEY_PRESSED)); |
997 | 1045 |
998 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to | 1046 // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask |
999 // ControlMask | 1047 EXPECT_EQ( |
1000 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1048 GetExpectedResultAsString( |
1001 {ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_MOD3_DOWN}, | 1049 ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), |
1002 {ui::VKEY_A, ui::EF_CONTROL_DOWN}}, | 1050 GetRewrittenEventAsString( |
| 1051 &rewriter, ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED)); |
1003 | 1052 |
1004 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to | 1053 // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. |
1005 // ControlMask. | 1054 EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, |
1006 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1055 ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
1007 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN}, | 1056 ui::ET_KEY_PRESSED), |
1008 {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, | 1057 GetRewrittenEventAsString(&rewriter, |
1009 }; | 1058 ui::VKEY_A, |
1010 | 1059 ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN, |
1011 for (size_t i = 0; i < arraysize(tests); ++i) { | 1060 ui::ET_KEY_PRESSED)); |
1012 CheckKeyTestCase(1000 + i, &rewriter, tests[i]); | |
1013 } | |
1014 } | 1061 } |
1015 | 1062 |
1016 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { | 1063 TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { |
1017 // Remap CapsLock to Control. | 1064 // Remap CapsLock to Control. |
1018 TestingPrefServiceSyncable prefs; | 1065 TestingPrefServiceSyncable prefs; |
1019 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1066 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1020 IntegerPrefMember control; | 1067 IntegerPrefMember control; |
1021 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); | 1068 control.Init(prefs::kLanguageRemapCapsLockKeyTo, &prefs); |
1022 control.SetValue(chromeos::input_method::kControlKey); | 1069 control.SetValue(chromeos::input_method::kControlKey); |
1023 | 1070 |
(...skipping 12 matching lines...) Expand all Loading... |
1036 } | 1083 } |
1037 | 1084 |
1038 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { | 1085 TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { |
1039 TestingPrefServiceSyncable prefs; | 1086 TestingPrefServiceSyncable prefs; |
1040 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1087 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1041 EventRewriter rewriter; | 1088 EventRewriter rewriter; |
1042 rewriter.DeviceAddedForTesting(0, "PC Keyboard"); | 1089 rewriter.DeviceAddedForTesting(0, "PC Keyboard"); |
1043 rewriter.set_last_device_id_for_testing(0); | 1090 rewriter.set_last_device_id_for_testing(0); |
1044 rewriter.set_pref_service_for_testing(&prefs); | 1091 rewriter.set_pref_service_for_testing(&prefs); |
1045 | 1092 |
1046 KeyTestCase tests[] = { | 1093 struct { |
1047 // Alt+Backspace -> Delete | 1094 ui::KeyboardCode input; |
1048 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1095 unsigned int input_mods; |
1049 {ui::VKEY_BACK, ui::EF_ALT_DOWN}, | 1096 ui::KeyboardCode output; |
1050 {ui::VKEY_DELETE, ui::EF_NONE}}, | 1097 unsigned int output_mods; |
1051 // Control+Alt+Backspace -> Control+Delete | 1098 } chromeos_tests[] = { |
1052 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1099 // Alt+Backspace -> Delete |
1053 {ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, | 1100 {ui::VKEY_BACK, ui::EF_ALT_DOWN, ui::VKEY_DELETE, ui::EF_NONE}, |
1054 {ui::VKEY_DELETE, ui::EF_CONTROL_DOWN}}, | 1101 // Control+Alt+Backspace -> Control+Delete |
1055 // Search+Alt+Backspace -> Alt+Backspace | 1102 {ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::VKEY_DELETE, |
1056 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1103 ui::EF_CONTROL_DOWN}, |
1057 {ui::VKEY_BACK, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, | 1104 // Search+Alt+Backspace -> Alt+Backspace |
1058 {ui::VKEY_BACK, ui::EF_ALT_DOWN}}, | 1105 {ui::VKEY_BACK, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::VKEY_BACK, |
1059 // Search+Control+Alt+Backspace -> Control+Alt+Backspace | 1106 ui::EF_ALT_DOWN}, |
1060 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1107 // Search+Control+Alt+Backspace -> Control+Alt+Backspace |
1061 {ui::VKEY_BACK, | 1108 {ui::VKEY_BACK, |
1062 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, | 1109 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
1063 {ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, | 1110 ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, |
1064 // Alt+Up -> Prior | 1111 // Alt+Up -> Prior |
1065 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1112 {ui::VKEY_UP, ui::EF_ALT_DOWN, ui::VKEY_PRIOR, ui::EF_NONE}, |
1066 {ui::VKEY_UP, ui::EF_ALT_DOWN}, | 1113 // Alt+Down -> Next |
1067 {ui::VKEY_PRIOR, ui::EF_NONE}}, | 1114 {ui::VKEY_DOWN, ui::EF_ALT_DOWN, ui::VKEY_NEXT, ui::EF_NONE}, |
1068 // Alt+Down -> Next | 1115 // Ctrl+Alt+Up -> Home |
1069 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1116 {ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::VKEY_HOME, |
1070 {ui::VKEY_DOWN, ui::EF_ALT_DOWN}, | 1117 ui::EF_NONE}, |
1071 {ui::VKEY_NEXT, ui::EF_NONE}}, | 1118 // Ctrl+Alt+Down -> End |
1072 // Ctrl+Alt+Up -> Home | 1119 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::VKEY_END, |
1073 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1120 ui::EF_NONE}, |
1074 {ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, | |
1075 {ui::VKEY_HOME, ui::EF_NONE}}, | |
1076 // Ctrl+Alt+Down -> End | |
1077 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1078 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, | |
1079 {ui::VKEY_END, ui::EF_NONE}}, | |
1080 | 1121 |
1081 // Search+Alt+Up -> Alt+Up | 1122 // Search+Alt+Up -> Alt+Up |
1082 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1123 {ui::VKEY_UP, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::VKEY_UP, |
1083 {ui::VKEY_UP, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, | 1124 ui::EF_ALT_DOWN}, |
1084 {ui::VKEY_UP, ui::EF_ALT_DOWN}}, | 1125 // Search+Alt+Down -> Alt+Down |
1085 // Search+Alt+Down -> Alt+Down | 1126 {ui::VKEY_DOWN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::VKEY_DOWN, |
1086 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1127 ui::EF_ALT_DOWN}, |
1087 {ui::VKEY_DOWN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN}, | 1128 // Search+Ctrl+Alt+Up -> Search+Ctrl+Alt+Up |
1088 {ui::VKEY_DOWN, ui::EF_ALT_DOWN}}, | 1129 {ui::VKEY_UP, |
1089 // Search+Ctrl+Alt+Up -> Search+Ctrl+Alt+Up | 1130 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
1090 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1131 ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, |
1091 {ui::VKEY_UP, | 1132 // Search+Ctrl+Alt+Down -> Ctrl+Alt+Down |
1092 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, | 1133 {ui::VKEY_DOWN, |
1093 {ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, | 1134 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, |
1094 // Search+Ctrl+Alt+Down -> Ctrl+Alt+Down | 1135 ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, |
1095 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1096 {ui::VKEY_DOWN, | |
1097 ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, | |
1098 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}}, | |
1099 | 1136 |
1100 // Period -> Period | 1137 // Period -> Period |
1101 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1138 {ui::VKEY_OEM_PERIOD, ui::EF_NONE, ui::VKEY_OEM_PERIOD, ui::EF_NONE}, |
1102 {ui::VKEY_OEM_PERIOD, ui::EF_NONE}, | |
1103 {ui::VKEY_OEM_PERIOD, ui::EF_NONE}}, | |
1104 | 1139 |
1105 // Search+Backspace -> Delete | 1140 // Search+Backspace -> Delete |
1106 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1141 {ui::VKEY_BACK, ui::EF_COMMAND_DOWN, ui::VKEY_DELETE, ui::EF_NONE}, |
1107 {ui::VKEY_BACK, ui::EF_COMMAND_DOWN}, | 1142 // Search+Up -> Prior |
1108 {ui::VKEY_DELETE, ui::EF_NONE}}, | 1143 {ui::VKEY_UP, ui::EF_COMMAND_DOWN, ui::VKEY_PRIOR, ui::EF_NONE}, |
1109 // Search+Up -> Prior | 1144 // Search+Down -> Next |
1110 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1145 {ui::VKEY_DOWN, ui::EF_COMMAND_DOWN, ui::VKEY_NEXT, ui::EF_NONE}, |
1111 {ui::VKEY_UP, ui::EF_COMMAND_DOWN}, | 1146 // Search+Left -> Home |
1112 {ui::VKEY_PRIOR, ui::EF_NONE}}, | 1147 {ui::VKEY_LEFT, ui::EF_COMMAND_DOWN, ui::VKEY_HOME, ui::EF_NONE}, |
1113 // Search+Down -> Next | 1148 // Control+Search+Left -> Home |
1114 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1149 {ui::VKEY_LEFT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, |
1115 {ui::VKEY_DOWN, ui::EF_COMMAND_DOWN}, | 1150 ui::VKEY_HOME, ui::EF_CONTROL_DOWN}, |
1116 {ui::VKEY_NEXT, ui::EF_NONE}}, | 1151 // Search+Right -> End |
1117 // Search+Left -> Home | 1152 {ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN, ui::VKEY_END, ui::EF_NONE}, |
1118 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1153 // Control+Search+Right -> End |
1119 {ui::VKEY_LEFT, ui::EF_COMMAND_DOWN}, | 1154 {ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, |
1120 {ui::VKEY_HOME, ui::EF_NONE}}, | 1155 ui::VKEY_END, ui::EF_CONTROL_DOWN}, |
1121 // Control+Search+Left -> Home | 1156 // Search+Period -> Insert |
1122 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1157 {ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN, ui::VKEY_INSERT, |
1123 {ui::VKEY_LEFT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN}, | 1158 ui::EF_NONE}, |
1124 {ui::VKEY_HOME, ui::EF_CONTROL_DOWN}}, | 1159 // Control+Search+Period -> Control+Insert |
1125 // Search+Right -> End | 1160 {ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, |
1126 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1161 ui::VKEY_INSERT, ui::EF_CONTROL_DOWN}}; |
1127 {ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN}, | |
1128 {ui::VKEY_END, ui::EF_NONE}}, | |
1129 // Control+Search+Right -> End | |
1130 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1131 {ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN}, | |
1132 {ui::VKEY_END, ui::EF_CONTROL_DOWN}}, | |
1133 // Search+Period -> Insert | |
1134 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1135 {ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN}, | |
1136 {ui::VKEY_INSERT, ui::EF_NONE}}, | |
1137 // Control+Search+Period -> Control+Insert | |
1138 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1139 {ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN}, | |
1140 {ui::VKEY_INSERT, ui::EF_CONTROL_DOWN}}}; | |
1141 | 1162 |
1142 for (size_t i = 0; i < arraysize(tests); ++i) { | 1163 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(chromeos_tests); ++i) { |
1143 CheckKeyTestCase(1000 + i, &rewriter, tests[i]); | 1164 EXPECT_EQ(GetExpectedResultNumbered(i, |
| 1165 chromeos_tests[i].output, |
| 1166 chromeos_tests[i].output_mods, |
| 1167 ui::ET_KEY_PRESSED), |
| 1168 GetRewrittenEventNumbered(i, |
| 1169 &rewriter, |
| 1170 chromeos_tests[i].input, |
| 1171 chromeos_tests[i].input_mods, |
| 1172 ui::ET_KEY_PRESSED)); |
1144 } | 1173 } |
1145 } | 1174 } |
1146 | 1175 |
1147 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { | 1176 TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { |
1148 TestingPrefServiceSyncable prefs; | 1177 TestingPrefServiceSyncable prefs; |
1149 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1178 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1150 EventRewriter rewriter; | 1179 EventRewriter rewriter; |
1151 rewriter.set_pref_service_for_testing(&prefs); | 1180 rewriter.set_pref_service_for_testing(&prefs); |
1152 | 1181 |
1153 KeyTestCase tests[] = { | 1182 struct { |
1154 // F1 -> Back | 1183 ui::KeyboardCode input; |
1155 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1184 unsigned int input_mods; |
1156 {ui::VKEY_F1, ui::EF_NONE}, | 1185 ui::KeyboardCode output; |
1157 {ui::VKEY_BROWSER_BACK, ui::EF_NONE}}, | 1186 unsigned int output_mods; |
1158 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1187 } tests[] = { |
1159 {ui::VKEY_F1, ui::EF_CONTROL_DOWN}, | 1188 // F1 -> Back |
1160 {ui::VKEY_BROWSER_BACK, ui::EF_CONTROL_DOWN}}, | 1189 {ui::VKEY_F1, ui::EF_NONE, ui::VKEY_BROWSER_BACK, ui::EF_NONE}, |
1161 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1190 {ui::VKEY_F1, ui::EF_CONTROL_DOWN, ui::VKEY_BROWSER_BACK, |
1162 {ui::VKEY_F1, ui::EF_ALT_DOWN}, | 1191 ui::EF_CONTROL_DOWN}, |
1163 {ui::VKEY_BROWSER_BACK, ui::EF_ALT_DOWN}}, | 1192 {ui::VKEY_F1, ui::EF_ALT_DOWN, ui::VKEY_BROWSER_BACK, ui::EF_ALT_DOWN}, |
1164 // F2 -> Forward | 1193 // F2 -> Forward |
1165 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1194 {ui::VKEY_F2, ui::EF_NONE, ui::VKEY_BROWSER_FORWARD, ui::EF_NONE}, |
1166 {ui::VKEY_F2, ui::EF_NONE}, | 1195 {ui::VKEY_F2, ui::EF_CONTROL_DOWN, ui::VKEY_BROWSER_FORWARD, |
1167 {ui::VKEY_BROWSER_FORWARD, ui::EF_NONE}}, | 1196 ui::EF_CONTROL_DOWN}, |
1168 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1197 {ui::VKEY_F2, ui::EF_ALT_DOWN, ui::VKEY_BROWSER_FORWARD, |
1169 {ui::VKEY_F2, ui::EF_CONTROL_DOWN}, | 1198 ui::EF_ALT_DOWN}, |
1170 {ui::VKEY_BROWSER_FORWARD, ui::EF_CONTROL_DOWN}}, | 1199 // F3 -> Refresh |
1171 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1200 {ui::VKEY_F3, ui::EF_NONE, ui::VKEY_BROWSER_REFRESH, ui::EF_NONE}, |
1172 {ui::VKEY_F2, ui::EF_ALT_DOWN}, | 1201 {ui::VKEY_F3, ui::EF_CONTROL_DOWN, ui::VKEY_BROWSER_REFRESH, |
1173 {ui::VKEY_BROWSER_FORWARD, ui::EF_ALT_DOWN}}, | 1202 ui::EF_CONTROL_DOWN}, |
1174 // F3 -> Refresh | 1203 {ui::VKEY_F3, ui::EF_ALT_DOWN, ui::VKEY_BROWSER_REFRESH, |
1175 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1204 ui::EF_ALT_DOWN}, |
1176 {ui::VKEY_F3, ui::EF_NONE}, | 1205 // F4 -> Launch App 2 |
1177 {ui::VKEY_BROWSER_REFRESH, ui::EF_NONE}}, | 1206 {ui::VKEY_F4, ui::EF_NONE, ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_NONE}, |
1178 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1207 {ui::VKEY_F4, ui::EF_CONTROL_DOWN, ui::VKEY_MEDIA_LAUNCH_APP2, |
1179 {ui::VKEY_F3, ui::EF_CONTROL_DOWN}, | 1208 ui::EF_CONTROL_DOWN}, |
1180 {ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN}}, | 1209 {ui::VKEY_F4, ui::EF_ALT_DOWN, ui::VKEY_MEDIA_LAUNCH_APP2, |
1181 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1210 ui::EF_ALT_DOWN}, |
1182 {ui::VKEY_F3, ui::EF_ALT_DOWN}, | 1211 // F5 -> Launch App 1 |
1183 {ui::VKEY_BROWSER_REFRESH, ui::EF_ALT_DOWN}}, | 1212 {ui::VKEY_F5, ui::EF_NONE, ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_NONE}, |
1184 // F4 -> Launch App 2 | 1213 {ui::VKEY_F5, ui::EF_CONTROL_DOWN, ui::VKEY_MEDIA_LAUNCH_APP1, |
1185 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1214 ui::EF_CONTROL_DOWN}, |
1186 {ui::VKEY_F4, ui::EF_NONE}, | 1215 {ui::VKEY_F5, ui::EF_ALT_DOWN, ui::VKEY_MEDIA_LAUNCH_APP1, |
1187 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_NONE}}, | 1216 ui::EF_ALT_DOWN}, |
1188 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1217 // F6 -> Brightness down |
1189 {ui::VKEY_F4, ui::EF_CONTROL_DOWN}, | 1218 {ui::VKEY_F6, ui::EF_NONE, ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE}, |
1190 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_CONTROL_DOWN}}, | 1219 {ui::VKEY_F6, ui::EF_CONTROL_DOWN, ui::VKEY_BRIGHTNESS_DOWN, |
1191 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1220 ui::EF_CONTROL_DOWN}, |
1192 {ui::VKEY_F4, ui::EF_ALT_DOWN}, | 1221 {ui::VKEY_F6, ui::EF_ALT_DOWN, ui::VKEY_BRIGHTNESS_DOWN, |
1193 {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_ALT_DOWN}}, | 1222 ui::EF_ALT_DOWN}, |
1194 // F5 -> Launch App 1 | 1223 // F7 -> Brightness up |
1195 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1224 {ui::VKEY_F7, ui::EF_NONE, ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE}, |
1196 {ui::VKEY_F5, ui::EF_NONE}, | 1225 {ui::VKEY_F7, ui::EF_CONTROL_DOWN, ui::VKEY_BRIGHTNESS_UP, |
1197 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_NONE}}, | 1226 ui::EF_CONTROL_DOWN}, |
1198 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1227 {ui::VKEY_F7, ui::EF_ALT_DOWN, ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN}, |
1199 {ui::VKEY_F5, ui::EF_CONTROL_DOWN}, | 1228 // F8 -> Volume Mute |
1200 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN}}, | 1229 {ui::VKEY_F8, ui::EF_NONE, ui::VKEY_VOLUME_MUTE, ui::EF_NONE}, |
1201 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1230 {ui::VKEY_F8, ui::EF_CONTROL_DOWN, ui::VKEY_VOLUME_MUTE, |
1202 {ui::VKEY_F5, ui::EF_ALT_DOWN}, | 1231 ui::EF_CONTROL_DOWN}, |
1203 {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_ALT_DOWN}}, | 1232 {ui::VKEY_F8, ui::EF_ALT_DOWN, ui::VKEY_VOLUME_MUTE, ui::EF_ALT_DOWN}, |
1204 // F6 -> Brightness down | 1233 // F9 -> Volume Down |
1205 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1234 {ui::VKEY_F9, ui::EF_NONE, ui::VKEY_VOLUME_DOWN, ui::EF_NONE}, |
1206 {ui::VKEY_F6, ui::EF_NONE}, | 1235 {ui::VKEY_F9, ui::EF_CONTROL_DOWN, ui::VKEY_VOLUME_DOWN, |
1207 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE}}, | 1236 ui::EF_CONTROL_DOWN}, |
1208 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1237 {ui::VKEY_F9, ui::EF_ALT_DOWN, ui::VKEY_VOLUME_DOWN, ui::EF_ALT_DOWN}, |
1209 {ui::VKEY_F6, ui::EF_CONTROL_DOWN}, | 1238 // F10 -> Volume Up |
1210 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_CONTROL_DOWN}}, | 1239 {ui::VKEY_F10, ui::EF_NONE, ui::VKEY_VOLUME_UP, ui::EF_NONE}, |
1211 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1240 {ui::VKEY_F10, ui::EF_CONTROL_DOWN, ui::VKEY_VOLUME_UP, |
1212 {ui::VKEY_F6, ui::EF_ALT_DOWN}, | 1241 ui::EF_CONTROL_DOWN}, |
1213 {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_ALT_DOWN}}, | 1242 {ui::VKEY_F10, ui::EF_ALT_DOWN, ui::VKEY_VOLUME_UP, ui::EF_ALT_DOWN}, |
1214 // F7 -> Brightness up | 1243 // F11 -> F11 |
1215 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1244 {ui::VKEY_F11, ui::EF_NONE, ui::VKEY_F11, ui::EF_NONE}, |
1216 {ui::VKEY_F7, ui::EF_NONE}, | 1245 {ui::VKEY_F11, ui::EF_CONTROL_DOWN, ui::VKEY_F11, ui::EF_CONTROL_DOWN}, |
1217 {ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE}}, | 1246 {ui::VKEY_F11, ui::EF_ALT_DOWN, ui::VKEY_F11, ui::EF_ALT_DOWN}, |
1218 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1247 // F12 -> F12 |
1219 {ui::VKEY_F7, ui::EF_CONTROL_DOWN}, | 1248 {ui::VKEY_F12, ui::EF_NONE, ui::VKEY_F12, ui::EF_NONE}, |
1220 {ui::VKEY_BRIGHTNESS_UP, ui::EF_CONTROL_DOWN}}, | 1249 {ui::VKEY_F12, ui::EF_CONTROL_DOWN, ui::VKEY_F12, ui::EF_CONTROL_DOWN}, |
1221 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1250 {ui::VKEY_F12, ui::EF_ALT_DOWN, ui::VKEY_F12, ui::EF_ALT_DOWN}, |
1222 {ui::VKEY_F7, ui::EF_ALT_DOWN}, | |
1223 {ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN}}, | |
1224 // F8 -> Volume Mute | |
1225 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1226 {ui::VKEY_F8, ui::EF_NONE}, | |
1227 {ui::VKEY_VOLUME_MUTE, ui::EF_NONE}}, | |
1228 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1229 {ui::VKEY_F8, ui::EF_CONTROL_DOWN}, | |
1230 {ui::VKEY_VOLUME_MUTE, ui::EF_CONTROL_DOWN}}, | |
1231 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1232 {ui::VKEY_F8, ui::EF_ALT_DOWN}, | |
1233 {ui::VKEY_VOLUME_MUTE, ui::EF_ALT_DOWN}}, | |
1234 // F9 -> Volume Down | |
1235 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1236 {ui::VKEY_F9, ui::EF_NONE}, | |
1237 {ui::VKEY_VOLUME_DOWN, ui::EF_NONE}}, | |
1238 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1239 {ui::VKEY_F9, ui::EF_CONTROL_DOWN}, | |
1240 {ui::VKEY_VOLUME_DOWN, ui::EF_CONTROL_DOWN}}, | |
1241 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1242 {ui::VKEY_F9, ui::EF_ALT_DOWN}, | |
1243 {ui::VKEY_VOLUME_DOWN, ui::EF_ALT_DOWN}}, | |
1244 // F10 -> Volume Up | |
1245 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1246 {ui::VKEY_F10, ui::EF_NONE}, | |
1247 {ui::VKEY_VOLUME_UP, ui::EF_NONE}}, | |
1248 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1249 {ui::VKEY_F10, ui::EF_CONTROL_DOWN}, | |
1250 {ui::VKEY_VOLUME_UP, ui::EF_CONTROL_DOWN}}, | |
1251 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1252 {ui::VKEY_F10, ui::EF_ALT_DOWN}, | |
1253 {ui::VKEY_VOLUME_UP, ui::EF_ALT_DOWN}}, | |
1254 // F11 -> F11 | |
1255 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1256 {ui::VKEY_F11, ui::EF_NONE}, | |
1257 {ui::VKEY_F11, ui::EF_NONE}}, | |
1258 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1259 {ui::VKEY_F11, ui::EF_CONTROL_DOWN}, | |
1260 {ui::VKEY_F11, ui::EF_CONTROL_DOWN}}, | |
1261 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1262 {ui::VKEY_F11, ui::EF_ALT_DOWN}, | |
1263 {ui::VKEY_F11, ui::EF_ALT_DOWN}}, | |
1264 // F12 -> F12 | |
1265 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1266 {ui::VKEY_F12, ui::EF_NONE}, | |
1267 {ui::VKEY_F12, ui::EF_NONE}}, | |
1268 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1269 {ui::VKEY_F12, ui::EF_CONTROL_DOWN}, | |
1270 {ui::VKEY_F12, ui::EF_CONTROL_DOWN}}, | |
1271 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1272 {ui::VKEY_F12, ui::EF_ALT_DOWN}, | |
1273 {ui::VKEY_F12, ui::EF_ALT_DOWN}}, | |
1274 | 1251 |
1275 // The number row should not be rewritten without Search key. | 1252 // The number row should not be rewritten without Search key. |
1276 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1253 {ui::VKEY_1, ui::EF_NONE, ui::VKEY_1, ui::EF_NONE}, |
1277 {ui::VKEY_1, ui::EF_NONE}, | 1254 {ui::VKEY_2, ui::EF_NONE, ui::VKEY_2, ui::EF_NONE}, |
1278 {ui::VKEY_1, ui::EF_NONE}}, | 1255 {ui::VKEY_3, ui::EF_NONE, ui::VKEY_3, ui::EF_NONE}, |
1279 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1256 {ui::VKEY_4, ui::EF_NONE, ui::VKEY_4, ui::EF_NONE}, |
1280 {ui::VKEY_2, ui::EF_NONE}, | 1257 {ui::VKEY_5, ui::EF_NONE, ui::VKEY_5, ui::EF_NONE}, |
1281 {ui::VKEY_2, ui::EF_NONE}}, | 1258 {ui::VKEY_6, ui::EF_NONE, ui::VKEY_6, ui::EF_NONE}, |
1282 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1259 {ui::VKEY_7, ui::EF_NONE, ui::VKEY_7, ui::EF_NONE}, |
1283 {ui::VKEY_3, ui::EF_NONE}, | 1260 {ui::VKEY_8, ui::EF_NONE, ui::VKEY_8, ui::EF_NONE}, |
1284 {ui::VKEY_3, ui::EF_NONE}}, | 1261 {ui::VKEY_9, ui::EF_NONE, ui::VKEY_9, ui::EF_NONE}, |
1285 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1262 {ui::VKEY_0, ui::EF_NONE, ui::VKEY_0, ui::EF_NONE}, |
1286 {ui::VKEY_4, ui::EF_NONE}, | 1263 {ui::VKEY_OEM_MINUS, ui::EF_NONE, ui::VKEY_OEM_MINUS, ui::EF_NONE}, |
1287 {ui::VKEY_4, ui::EF_NONE}}, | 1264 {ui::VKEY_OEM_PLUS, ui::EF_NONE, ui::VKEY_OEM_PLUS, ui::EF_NONE}, |
1288 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1289 {ui::VKEY_5, ui::EF_NONE}, | |
1290 {ui::VKEY_5, ui::EF_NONE}}, | |
1291 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1292 {ui::VKEY_6, ui::EF_NONE}, | |
1293 {ui::VKEY_6, ui::EF_NONE}}, | |
1294 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1295 {ui::VKEY_7, ui::EF_NONE}, | |
1296 {ui::VKEY_7, ui::EF_NONE}}, | |
1297 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1298 {ui::VKEY_8, ui::EF_NONE}, | |
1299 {ui::VKEY_8, ui::EF_NONE}}, | |
1300 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1301 {ui::VKEY_9, ui::EF_NONE}, | |
1302 {ui::VKEY_9, ui::EF_NONE}}, | |
1303 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1304 {ui::VKEY_0, ui::EF_NONE}, | |
1305 {ui::VKEY_0, ui::EF_NONE}}, | |
1306 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1307 {ui::VKEY_OEM_MINUS, ui::EF_NONE}, | |
1308 {ui::VKEY_OEM_MINUS, ui::EF_NONE}}, | |
1309 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1310 {ui::VKEY_OEM_PLUS, ui::EF_NONE}, | |
1311 {ui::VKEY_OEM_PLUS, ui::EF_NONE}}, | |
1312 | 1265 |
1313 // The number row should be rewritten as the F<number> row with Search | 1266 // The number row should be rewritten as the F<number> row with Search |
1314 // key. | 1267 // key. |
1315 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1268 {ui::VKEY_1, ui::EF_COMMAND_DOWN, ui::VKEY_F1, ui::EF_NONE}, |
1316 {ui::VKEY_1, ui::EF_COMMAND_DOWN}, | 1269 {ui::VKEY_2, ui::EF_COMMAND_DOWN, ui::VKEY_F2, ui::EF_NONE}, |
1317 {ui::VKEY_F1, ui::EF_NONE}}, | 1270 {ui::VKEY_3, ui::EF_COMMAND_DOWN, ui::VKEY_F3, ui::EF_NONE}, |
1318 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1271 {ui::VKEY_4, ui::EF_COMMAND_DOWN, ui::VKEY_F4, ui::EF_NONE}, |
1319 {ui::VKEY_2, ui::EF_COMMAND_DOWN}, | 1272 {ui::VKEY_5, ui::EF_COMMAND_DOWN, ui::VKEY_F5, ui::EF_NONE}, |
1320 {ui::VKEY_F2, ui::EF_NONE}}, | 1273 {ui::VKEY_6, ui::EF_COMMAND_DOWN, ui::VKEY_F6, ui::EF_NONE}, |
1321 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1274 {ui::VKEY_7, ui::EF_COMMAND_DOWN, ui::VKEY_F7, ui::EF_NONE}, |
1322 {ui::VKEY_3, ui::EF_COMMAND_DOWN}, | 1275 {ui::VKEY_8, ui::EF_COMMAND_DOWN, ui::VKEY_F8, ui::EF_NONE}, |
1323 {ui::VKEY_F3, ui::EF_NONE}}, | 1276 {ui::VKEY_9, ui::EF_COMMAND_DOWN, ui::VKEY_F9, ui::EF_NONE}, |
1324 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1277 {ui::VKEY_0, ui::EF_COMMAND_DOWN, ui::VKEY_F10, ui::EF_NONE}, |
1325 {ui::VKEY_4, ui::EF_COMMAND_DOWN}, | 1278 {ui::VKEY_OEM_MINUS, ui::EF_COMMAND_DOWN, ui::VKEY_F11, ui::EF_NONE}, |
1326 {ui::VKEY_F4, ui::EF_NONE}}, | 1279 {ui::VKEY_OEM_PLUS, ui::EF_COMMAND_DOWN, ui::VKEY_F12, ui::EF_NONE}, |
1327 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1328 {ui::VKEY_5, ui::EF_COMMAND_DOWN}, | |
1329 {ui::VKEY_F5, ui::EF_NONE}}, | |
1330 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1331 {ui::VKEY_6, ui::EF_COMMAND_DOWN}, | |
1332 {ui::VKEY_F6, ui::EF_NONE}}, | |
1333 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1334 {ui::VKEY_7, ui::EF_COMMAND_DOWN}, | |
1335 {ui::VKEY_F7, ui::EF_NONE}}, | |
1336 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1337 {ui::VKEY_8, ui::EF_COMMAND_DOWN}, | |
1338 {ui::VKEY_F8, ui::EF_NONE}}, | |
1339 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1340 {ui::VKEY_9, ui::EF_COMMAND_DOWN}, | |
1341 {ui::VKEY_F9, ui::EF_NONE}}, | |
1342 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1343 {ui::VKEY_0, ui::EF_COMMAND_DOWN}, | |
1344 {ui::VKEY_F10, ui::EF_NONE}}, | |
1345 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1346 {ui::VKEY_OEM_MINUS, ui::EF_COMMAND_DOWN}, | |
1347 {ui::VKEY_F11, ui::EF_NONE}}, | |
1348 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1349 {ui::VKEY_OEM_PLUS, ui::EF_COMMAND_DOWN}, | |
1350 {ui::VKEY_F12, ui::EF_NONE}}, | |
1351 | 1280 |
1352 // The function keys should not be rewritten with Search key pressed. | 1281 // The function keys should not be rewritten with Search key pressed. |
1353 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1282 {ui::VKEY_F1, ui::EF_COMMAND_DOWN, ui::VKEY_F1, ui::EF_NONE}, |
1354 {ui::VKEY_F1, ui::EF_COMMAND_DOWN}, | 1283 {ui::VKEY_F2, ui::EF_COMMAND_DOWN, ui::VKEY_F2, ui::EF_NONE}, |
1355 {ui::VKEY_F1, ui::EF_NONE}}, | 1284 {ui::VKEY_F3, ui::EF_COMMAND_DOWN, ui::VKEY_F3, ui::EF_NONE}, |
1356 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1285 {ui::VKEY_F4, ui::EF_COMMAND_DOWN, ui::VKEY_F4, ui::EF_NONE}, |
1357 {ui::VKEY_F2, ui::EF_COMMAND_DOWN}, | 1286 {ui::VKEY_F5, ui::EF_COMMAND_DOWN, ui::VKEY_F5, ui::EF_NONE}, |
1358 {ui::VKEY_F2, ui::EF_NONE}}, | 1287 {ui::VKEY_F6, ui::EF_COMMAND_DOWN, ui::VKEY_F6, ui::EF_NONE}, |
1359 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1288 {ui::VKEY_F7, ui::EF_COMMAND_DOWN, ui::VKEY_F7, ui::EF_NONE}, |
1360 {ui::VKEY_F3, ui::EF_COMMAND_DOWN}, | 1289 {ui::VKEY_F8, ui::EF_COMMAND_DOWN, ui::VKEY_F8, ui::EF_NONE}, |
1361 {ui::VKEY_F3, ui::EF_NONE}}, | 1290 {ui::VKEY_F9, ui::EF_COMMAND_DOWN, ui::VKEY_F9, ui::EF_NONE}, |
1362 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1291 {ui::VKEY_F10, ui::EF_COMMAND_DOWN, ui::VKEY_F10, ui::EF_NONE}, |
1363 {ui::VKEY_F4, ui::EF_COMMAND_DOWN}, | 1292 {ui::VKEY_F11, ui::EF_COMMAND_DOWN, ui::VKEY_F11, ui::EF_NONE}, |
1364 {ui::VKEY_F4, ui::EF_NONE}}, | 1293 {ui::VKEY_F12, ui::EF_COMMAND_DOWN, ui::VKEY_F12, ui::EF_NONE}, |
1365 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1294 }; |
1366 {ui::VKEY_F5, ui::EF_COMMAND_DOWN}, | |
1367 {ui::VKEY_F5, ui::EF_NONE}}, | |
1368 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1369 {ui::VKEY_F6, ui::EF_COMMAND_DOWN}, | |
1370 {ui::VKEY_F6, ui::EF_NONE}}, | |
1371 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1372 {ui::VKEY_F7, ui::EF_COMMAND_DOWN}, | |
1373 {ui::VKEY_F7, ui::EF_NONE}}, | |
1374 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1375 {ui::VKEY_F8, ui::EF_COMMAND_DOWN}, | |
1376 {ui::VKEY_F8, ui::EF_NONE}}, | |
1377 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1378 {ui::VKEY_F9, ui::EF_COMMAND_DOWN}, | |
1379 {ui::VKEY_F9, ui::EF_NONE}}, | |
1380 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1381 {ui::VKEY_F10, ui::EF_COMMAND_DOWN}, | |
1382 {ui::VKEY_F10, ui::EF_NONE}}, | |
1383 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1384 {ui::VKEY_F11, ui::EF_COMMAND_DOWN}, | |
1385 {ui::VKEY_F11, ui::EF_NONE}}, | |
1386 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | |
1387 {ui::VKEY_F12, ui::EF_COMMAND_DOWN}, | |
1388 {ui::VKEY_F12, ui::EF_NONE}}, | |
1389 }; | |
1390 | 1295 |
1391 for (size_t i = 0; i < arraysize(tests); ++i) { | 1296 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { |
1392 CheckKeyTestCase(1000 + i, &rewriter, tests[i]); | 1297 EXPECT_EQ(GetExpectedResultNumbered( |
| 1298 i, tests[i].output, tests[i].output_mods, ui::ET_KEY_PRESSED), |
| 1299 GetRewrittenEventNumbered(i, |
| 1300 &rewriter, |
| 1301 tests[i].input, |
| 1302 tests[i].input_mods, |
| 1303 ui::ET_KEY_PRESSED)); |
1393 } | 1304 } |
1394 } | 1305 } |
1395 | 1306 |
1396 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { | 1307 TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { |
1397 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); | 1308 const CommandLine original_cl(*CommandLine::ForCurrentProcess()); |
1398 | 1309 |
1399 // Remap Search to Control. | 1310 // Remap Search to Control. |
1400 TestingPrefServiceSyncable prefs; | 1311 TestingPrefServiceSyncable prefs; |
1401 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1312 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1402 IntegerPrefMember search; | 1313 IntegerPrefMember search; |
1403 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); | 1314 search.Init(prefs::kLanguageRemapSearchKeyTo, &prefs); |
1404 search.SetValue(chromeos::input_method::kControlKey); | 1315 search.SetValue(chromeos::input_method::kControlKey); |
1405 | 1316 |
1406 EventRewriter rewriter; | 1317 EventRewriter rewriter; |
1407 rewriter.set_pref_service_for_testing(&prefs); | 1318 rewriter.set_pref_service_for_testing(&prefs); |
1408 | 1319 |
1409 CommandLine::ForCurrentProcess()->AppendSwitchASCII( | 1320 CommandLine::ForCurrentProcess()->AppendSwitchASCII( |
1410 chromeos::switches::kHasChromeOSKeyboard, ""); | 1321 chromeos::switches::kHasChromeOSKeyboard, ""); |
1411 | 1322 |
1412 KeyTestCase tests[] = { | 1323 // Alt+Search+Down -> End |
1413 // Alt+Search+Down -> End | 1324 EXPECT_EQ( |
1414 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1325 GetExpectedResultAsString(ui::VKEY_END, ui::EF_NONE, ui::ET_KEY_PRESSED), |
1415 {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 1326 GetRewrittenEventAsString(&rewriter, |
1416 {ui::VKEY_END, ui::EF_NONE}}, | 1327 ui::VKEY_DOWN, |
| 1328 ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
| 1329 ui::ET_KEY_PRESSED)); |
1417 | 1330 |
1418 // Shift+Alt+Search+Down -> Shift+End | 1331 // Shift+Alt+Search+Down -> Shift+End |
1419 {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED, | 1332 EXPECT_EQ(GetExpectedResultAsString( |
1420 {ui::VKEY_DOWN, | 1333 ui::VKEY_END, ui::EF_SHIFT_DOWN, ui::ET_KEY_PRESSED), |
1421 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}, | 1334 GetRewrittenEventAsString( |
1422 {ui::VKEY_END, ui::EF_SHIFT_DOWN}}, | 1335 &rewriter, |
1423 }; | 1336 ui::VKEY_DOWN, |
1424 | 1337 ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, |
1425 for (size_t i = 0; i < arraysize(tests); ++i) { | 1338 ui::ET_KEY_PRESSED)); |
1426 CheckKeyTestCase(1000 + i, &rewriter, tests[i]); | |
1427 } | |
1428 | 1339 |
1429 *CommandLine::ForCurrentProcess() = original_cl; | 1340 *CommandLine::ForCurrentProcess() = original_cl; |
1430 } | 1341 } |
1431 | 1342 |
1432 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) { | 1343 TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) { |
1433 // Remap Control to Alt. | 1344 // Remap Control to Alt. |
1434 TestingPrefServiceSyncable prefs; | 1345 TestingPrefServiceSyncable prefs; |
1435 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); | 1346 chromeos::Preferences::RegisterProfilePrefs(prefs.registry()); |
1436 IntegerPrefMember control; | 1347 IntegerPrefMember control; |
1437 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); | 1348 control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); |
(...skipping 191 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1629 ui::ScopedXI2Event xev; | 1540 ui::ScopedXI2Event xev; |
1630 xev.InitGenericButtonEvent( | 1541 xev.InitGenericButtonEvent( |
1631 11, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag); | 1542 11, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag); |
1632 ui::MouseEvent release(xev); | 1543 ui::MouseEvent release(xev); |
1633 int flags = RewriteMouseEvent(&rewriter, release); | 1544 int flags = RewriteMouseEvent(&rewriter, release); |
1634 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags); | 1545 EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags); |
1635 } | 1546 } |
1636 } | 1547 } |
1637 | 1548 |
1638 } // namespace chromeos | 1549 } // namespace chromeos |
OLD | NEW |