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