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