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