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