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

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

Powered by Google App Engine
This is Rietveld 408576698