Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(847)

Side by Side Diff: chrome/browser/chromeos/events/event_rewriter_unittest.cc

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

Powered by Google App Engine
This is Rietveld 408576698