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