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

Unified Diff: chrome/browser/chromeos/events/event_rewriter_unittest.cc

Issue 336403005: Use XInput2 events for keyboard events. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address review comments (derat). Created 6 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/chromeos/events/event_rewriter_unittest.cc
diff --git a/chrome/browser/chromeos/events/event_rewriter_unittest.cc b/chrome/browser/chromeos/events/event_rewriter_unittest.cc
index 4b3a244cb2714a2ccc907012a794130ae695f667..f6dfd4538e40d9871117df3e7601ef5d7778fa70 100644
--- a/chrome/browser/chromeos/events/event_rewriter_unittest.cc
+++ b/chrome/browser/chromeos/events/event_rewriter_unittest.cc
@@ -43,6 +43,7 @@ namespace {
// The device id of the test touchpad device.
const unsigned int kTouchPadDeviceId = 1;
+const int kKeyboardDeviceId = 2;
std::string GetExpectedResultAsString(ui::KeyboardCode ui_keycode,
int ui_flags,
@@ -91,52 +92,71 @@ struct KeyTestCase {
} input, expected;
};
+#if defined(USE_X11)
+// Check rewriting of an X11-based key event.
+void CheckX11KeyTestCase(const std::string& expected,
+ chromeos::EventRewriter* rewriter,
+ const KeyTestCase& test,
+ XEvent* xevent) {
+ ui::KeyEvent xkey_event(xevent, false);
+ if (test.test & KeyTestCase::NUMPAD)
+ xkey_event.set_flags(xkey_event.flags() | ui::EF_NUMPAD_KEY);
+ // Verify that the X11-based key event is as expected.
+ EXPECT_EQ(GetExpectedResultAsString(
+ test.input.key_code, test.input.flags, test.type),
+ GetKeyEventAsString(xkey_event));
+ // Rewrite the event and check the result.
+ scoped_ptr<ui::Event> new_event;
+ rewriter->RewriteEvent(xkey_event, &new_event);
+ ui::KeyEvent& rewritten_key_event =
+ new_event ? *static_cast<ui::KeyEvent*>(new_event.get()) : xkey_event;
+ EXPECT_EQ(expected, GetKeyEventAsString(rewritten_key_event));
+ if ((rewritten_key_event.key_code() != ui::VKEY_UNKNOWN) &&
+ (rewritten_key_event.native_event()->xkey.keycode != 0)) {
+ // Build a new ui::KeyEvent from the rewritten native component,
+ // and check that it also matches the rewritten event.
+ EXPECT_TRUE(rewritten_key_event.native_event());
+ ui::KeyEvent from_native_event(rewritten_key_event.native_event(), false);
+ EXPECT_EQ(expected, GetKeyEventAsString(from_native_event));
+ }
+}
+#endif
+
// Tests a single stateless key rewrite operation.
// |i| is a an identifying number to locate failing tests in the tables.
-void CheckKeyTestCase(size_t i,
- chromeos::EventRewriter* rewriter,
+void CheckKeyTestCase(chromeos::EventRewriter* rewriter,
const KeyTestCase& test) {
- std::string id = base::StringPrintf("(%zu) ", i);
std::string expected =
- id + GetExpectedResultAsString(
+ GetExpectedResultAsString(
test.expected.key_code, test.expected.flags, test.type);
if (test.test & KeyTestCase::TEST_VKEY) {
// Check rewriting of a non-native-based key event.
EXPECT_EQ(
expected,
- id + GetRewrittenEventAsString(
+ GetRewrittenEventAsString(
rewriter, test.input.key_code, test.input.flags, test.type));
}
#if defined(USE_X11)
if (test.test & KeyTestCase::TEST_X11) {
ui::ScopedXI2Event xev;
+ // Test an XKeyEvent.
xev.InitKeyEvent(test.type, test.input.key_code, test.input.flags);
XEvent* xevent = xev;
- if (xevent->xkey.keycode) {
- ui::KeyEvent xkey_event(xevent, false);
- if (test.test & KeyTestCase::NUMPAD)
- xkey_event.set_flags(xkey_event.flags() | ui::EF_NUMPAD_KEY);
- // Verify that the X11-based key event is as expected.
- EXPECT_EQ(id + GetExpectedResultAsString(
- test.input.key_code, test.input.flags, test.type),
- id + GetKeyEventAsString(xkey_event));
- // Rewrite the event and check the result.
- scoped_ptr<ui::Event> new_event;
- rewriter->RewriteEvent(xkey_event, &new_event);
- ui::KeyEvent& rewritten_key_event =
- new_event ? *static_cast<ui::KeyEvent*>(new_event.get()) : xkey_event;
- EXPECT_EQ(expected, id + GetKeyEventAsString(rewritten_key_event));
- if ((rewritten_key_event.key_code() != ui::VKEY_UNKNOWN) &&
- (rewritten_key_event.native_event()->xkey.keycode != 0)) {
- // Build a new ui::KeyEvent from the rewritten native component,
- // and check that it also matches the rewritten event.
- ui::KeyEvent from_native_event(rewritten_key_event.native_event(),
- false);
- EXPECT_EQ(expected, id + GetKeyEventAsString(from_native_event));
- }
- }
+ DCHECK((xevent->type == KeyPress) || (xevent->type == KeyRelease));
+ if (xevent->xkey.keycode)
+ CheckX11KeyTestCase(expected, rewriter, test, xevent);
+ // Test an XI2 GenericEvent.
+ xev.InitGenericKeyEvent(
+ kKeyboardDeviceId, test.type, test.input.key_code, test.input.flags);
+ xevent = xev;
+ DCHECK(xevent->type == GenericEvent);
+ XIDeviceEvent* xievent = static_cast<XIDeviceEvent*>(xevent->xcookie.data);
+ DCHECK((xievent->evtype == XI_KeyPress) ||
+ (xievent->evtype == XI_KeyRelease));
+ if (xievent->detail)
+ CheckX11KeyTestCase(expected, rewriter, test, xevent);
}
#endif
}
@@ -155,19 +175,17 @@ struct FunctionKeyTestCase {
// Function key mapping differs from the other key mappings because the
// EF_FUNCTION_KEY flag is set during ui::KeyEvent construction when passing in
// a native X11 event and the flag is not set when using other constructors.
-void CheckFunctionKeyTestCase(size_t i,
- chromeos::EventRewriter* rewriter,
+void CheckFunctionKeyTestCase(chromeos::EventRewriter* rewriter,
const FunctionKeyTestCase& test) {
- std::string id = base::StringPrintf("(%zu) ", i);
std::string vkey_expected =
- id + GetExpectedResultAsString(
+ GetExpectedResultAsString(
test.vkey_expected.key_code,
test.vkey_expected.flags,
test.type);
// Check rewriting of a non-native-based key event.
EXPECT_EQ(
vkey_expected,
- id + GetRewrittenEventAsString(
+ GetRewrittenEventAsString(
rewriter, test.input.key_code, test.input.flags, test.type));
#if defined(USE_X11)
@@ -182,11 +200,11 @@ void CheckFunctionKeyTestCase(size_t i,
ui::KeyEvent& rewritten_key_event =
new_event ? *static_cast<ui::KeyEvent*>(new_event.get()) : xkey_event;
std::string native_expected =
- id + GetExpectedResultAsString(
+ GetExpectedResultAsString(
test.native_expected.key_code,
test.native_expected.flags,
test.type);
- EXPECT_EQ(native_expected, id + GetKeyEventAsString(rewritten_key_event));
+ EXPECT_EQ(native_expected, GetKeyEventAsString(rewritten_key_event));
}
#endif
}
@@ -225,11 +243,13 @@ class EventRewriterTest : public ash::test::AshTestBase {
void TestRewriteNumPadKeys();
void TestRewriteNumPadKeysOnAppleKeyboard();
- int RewriteMouseEvent(chromeos::EventRewriter* rewriter,
- const ui::MouseEvent& event) {
- int flags = event.flags();
- rewriter->RewriteLocatedEventForTesting(event, &flags);
- return flags;
+ const ui::MouseEvent* RewriteMouseButtonEvent(
+ chromeos::EventRewriter* rewriter,
+ const ui::MouseEvent& event,
+ scoped_ptr<ui::Event>* new_event) {
+ rewriter->RewriteMouseButtonEventForTesting(event, new_event);
+ return *new_event ? static_cast<const ui::MouseEvent*>(new_event->get())
+ : &event;
}
chromeos::MockUserManager* mock_user_manager_; // Not owned.
@@ -241,8 +261,8 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControl) {
// First, test with a PC keyboard.
TestingPrefServiceSyncable prefs;
EventRewriter rewriter(NULL);
- rewriter.DeviceAddedForTesting(0, "PC Keyboard");
- rewriter.set_last_device_id_for_testing(0);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
+ rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase pc_keyboard_tests[] = {
@@ -273,12 +293,13 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControl) {
};
for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) {
- CheckKeyTestCase(1000 + i, &rewriter, pc_keyboard_tests[i]);
+ SCOPED_TRACE(1000 + i);
Daniel Erat 2014/06/25 20:06:13 nit: probably don't need the "1000" now, right? i
kpschoedel 2014/06/25 21:10:40 Done.
+ CheckKeyTestCase(&rewriter, pc_keyboard_tests[i]);
}
// An Apple keyboard reusing the ID, zero.
- rewriter.DeviceAddedForTesting(0, "Apple Keyboard");
- rewriter.set_last_device_id_for_testing(0);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard");
+ rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
KeyTestCase apple_keyboard_tests[] = {
// VKEY_A, Alt modifier.
@@ -308,7 +329,8 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControl) {
};
for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) {
- CheckKeyTestCase(2000 + i, &rewriter, apple_keyboard_tests[i]);
+ SCOPED_TRACE(2000 + i);
+ CheckKeyTestCase(&rewriter, apple_keyboard_tests[i]);
}
}
@@ -323,8 +345,8 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) {
EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
- rewriter.DeviceAddedForTesting(0, "PC Keyboard");
- rewriter.set_last_device_id_for_testing(0);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
+ rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
KeyTestCase pc_keyboard_tests[] = {// Control should be remapped to Alt.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
@@ -333,12 +355,13 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) {
};
for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) {
- CheckKeyTestCase(1000 + i, &rewriter, pc_keyboard_tests[i]);
+ SCOPED_TRACE(1000 + i);
+ CheckKeyTestCase(&rewriter, pc_keyboard_tests[i]);
}
// An Apple keyboard reusing the ID, zero.
- rewriter.DeviceAddedForTesting(0, "Apple Keyboard");
- rewriter.set_last_device_id_for_testing(0);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard");
+ rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
KeyTestCase apple_keyboard_tests[] = {
// VKEY_LWIN (left Command key) with Alt modifier. The remapped Command
@@ -355,13 +378,15 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) {
};
for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) {
- CheckKeyTestCase(2000 + i, &rewriter, apple_keyboard_tests[i]);
+ SCOPED_TRACE(2000 + i);
+ CheckKeyTestCase(&rewriter, apple_keyboard_tests[i]);
}
}
void EventRewriterTest::TestRewriteNumPadKeys() {
TestingPrefServiceSyncable prefs;
EventRewriter rewriter(NULL);
+ rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
@@ -482,7 +507,8 @@ void EventRewriterTest::TestRewriteNumPadKeys() {
};
for (size_t i = 0; i < arraysize(tests); ++i) {
- CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
+ SCOPED_TRACE(1000 + i);
+ CheckKeyTestCase(&rewriter, tests[i]);
}
}
@@ -504,8 +530,8 @@ TEST_F(EventRewriterTest, TestRewriteNumPadKeysWithDiamondKeyFlag) {
void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() {
TestingPrefServiceSyncable prefs;
EventRewriter rewriter(NULL);
- rewriter.DeviceAddedForTesting(0, "Apple Keyboard");
- rewriter.set_last_device_id_for_testing(0);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "Apple Keyboard");
+ rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
@@ -524,7 +550,8 @@ void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() {
};
for (size_t i = 0; i < arraysize(tests); ++i) {
- CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
+ SCOPED_TRACE(1000 + i);
+ CheckKeyTestCase(&rewriter, tests[i]);
}
}
@@ -546,6 +573,7 @@ TEST_F(EventRewriterTest,
TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) {
TestingPrefServiceSyncable prefs;
EventRewriter rewriter(NULL);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
@@ -582,13 +610,15 @@ TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) {
};
for (size_t i = 0; i < arraysize(tests); ++i) {
- CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
+ SCOPED_TRACE(1000 + i);
+ CheckKeyTestCase(&rewriter, tests[i]);
}
}
TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) {
TestingPrefServiceSyncable prefs;
EventRewriter rewriter(NULL);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
@@ -616,7 +646,8 @@ TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) {
};
for (size_t i = 0; i < arraysize(tests); ++i) {
- CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
+ SCOPED_TRACE(1000 + i);
+ CheckKeyTestCase(&rewriter, tests[i]);
}
}
@@ -632,6 +663,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) {
control.SetValue(chromeos::input_method::kVoidKey);
EventRewriter rewriter(NULL);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase disabled_modifier_tests[] = {
@@ -671,7 +703,8 @@ TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) {
};
for (size_t i = 0; i < arraysize(disabled_modifier_tests); ++i) {
- CheckKeyTestCase(1000 + i, &rewriter, disabled_modifier_tests[i]);
+ SCOPED_TRACE(1000 + i);
+ CheckKeyTestCase(&rewriter, disabled_modifier_tests[i]);
}
// Remap Alt to Control.
@@ -694,7 +727,8 @@ TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) {
};
for (size_t i = 0; i < arraysize(tests); ++i) {
- CheckKeyTestCase(2000 + i, &rewriter, tests[i]);
+ SCOPED_TRACE(2000 + i);
+ CheckKeyTestCase(&rewriter, tests[i]);
}
}
@@ -707,6 +741,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) {
search.SetValue(chromeos::input_method::kControlKey);
EventRewriter rewriter(NULL);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase s_tests[] = {
@@ -717,7 +752,8 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) {
};
for (size_t i = 0; i < arraysize(s_tests); ++i) {
- CheckKeyTestCase(1000 + i, &rewriter, s_tests[i]);
+ SCOPED_TRACE(1000 + i);
+ CheckKeyTestCase(&rewriter, s_tests[i]);
}
// Remap Alt to Control too.
@@ -758,7 +794,8 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) {
};
for (size_t i = 0; i < arraysize(sa_tests); ++i) {
- CheckKeyTestCase(2000 + i, &rewriter, sa_tests[i]);
+ SCOPED_TRACE(2000 + i);
+ CheckKeyTestCase(&rewriter, sa_tests[i]);
}
}
@@ -771,6 +808,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) {
search.SetValue(chromeos::input_method::kEscapeKey);
EventRewriter rewriter(NULL);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {// Press Search. Confirm the event is now VKEY_ESCAPE.
@@ -780,7 +818,8 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) {
};
for (size_t i = 0; i < arraysize(tests); ++i) {
- CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
+ SCOPED_TRACE(1000 + i);
+ CheckKeyTestCase(&rewriter, tests[i]);
}
}
@@ -793,6 +832,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) {
search.SetValue(chromeos::input_method::kAltKey);
EventRewriter rewriter(NULL);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase s2a_tests[] = {
@@ -803,7 +843,8 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) {
};
for (size_t i = 0; i < arraysize(s2a_tests); ++i) {
- CheckKeyTestCase(1000 + i, &rewriter, s2a_tests[i]);
+ SCOPED_TRACE(1000 + i);
+ CheckKeyTestCase(&rewriter, s2a_tests[i]);
}
// Remap Alt to Control.
@@ -819,7 +860,8 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) {
};
for (size_t i = 0; i < arraysize(a2c_tests); ++i) {
- CheckKeyTestCase(2000 + i, &rewriter, a2c_tests[i]);
+ SCOPED_TRACE(2000 + i);
+ CheckKeyTestCase(&rewriter, a2c_tests[i]);
}
// Remap Control to Search.
@@ -856,7 +898,8 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) {
};
for (size_t i = 0; i < arraysize(c2s_tests); ++i) {
- CheckKeyTestCase(3000 + i, &rewriter, c2s_tests[i]);
+ SCOPED_TRACE(3000 + i);
+ CheckKeyTestCase(&rewriter, c2s_tests[i]);
}
}
@@ -870,6 +913,7 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) {
chromeos::input_method::FakeImeKeyboard ime_keyboard;
EventRewriter rewriter(NULL);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
rewriter.set_pref_service_for_testing(&prefs);
rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
@@ -940,6 +984,7 @@ TEST_F(EventRewriterTest, TestRewriteCapsLock) {
chromeos::input_method::FakeImeKeyboard ime_keyboard;
EventRewriter rewriter(NULL);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
rewriter.set_pref_service_for_testing(&prefs);
rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
EXPECT_FALSE(ime_keyboard.caps_lock_is_enabled_);
@@ -959,6 +1004,7 @@ TEST_F(EventRewriterTest, TestRewriteDiamondKey) {
chromeos::input_method::FakeImeKeyboard ime_keyboard;
EventRewriter rewriter(NULL);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
rewriter.set_pref_service_for_testing(&prefs);
rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
@@ -979,9 +1025,11 @@ TEST_F(EventRewriterTest, TestRewriteDiamondKey) {
};
for (size_t i = 0; i < arraysize(tests); ++i) {
- CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
+ SCOPED_TRACE(1000 + i);
+ CheckKeyTestCase(&rewriter, tests[i]);
}
}
+
TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) {
const CommandLine original_cl(*CommandLine::ForCurrentProcess());
CommandLine::ForCurrentProcess()->AppendSwitchASCII(
@@ -992,6 +1040,7 @@ TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) {
chromeos::input_method::FakeImeKeyboard ime_keyboard;
EventRewriter rewriter(NULL);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
rewriter.set_pref_service_for_testing(&prefs);
rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
@@ -1044,6 +1093,7 @@ TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) {
control.SetValue(chromeos::input_method::kControlKey);
EventRewriter rewriter(NULL);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
@@ -1067,7 +1117,8 @@ TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) {
};
for (size_t i = 0; i < arraysize(tests); ++i) {
- CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
+ SCOPED_TRACE(1000 + i);
+ CheckKeyTestCase(&rewriter, tests[i]);
}
}
@@ -1080,6 +1131,7 @@ TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) {
control.SetValue(chromeos::input_method::kControlKey);
EventRewriter rewriter(NULL);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
rewriter.set_pref_service_for_testing(&prefs);
input_method_manager_mock_->set_mod3_used(true);
@@ -1097,8 +1149,8 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeys) {
TestingPrefServiceSyncable prefs;
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
EventRewriter rewriter(NULL);
- rewriter.DeviceAddedForTesting(0, "PC Keyboard");
- rewriter.set_last_device_id_for_testing(0);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
+ rewriter.set_last_keyboard_device_id_for_testing(kKeyboardDeviceId);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
@@ -1198,7 +1250,8 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeys) {
{ui::VKEY_INSERT, ui::EF_CONTROL_DOWN}}};
for (size_t i = 0; i < arraysize(tests); ++i) {
- CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
+ SCOPED_TRACE(1000 + i);
+ CheckKeyTestCase(&rewriter, tests[i]);
}
}
@@ -1206,6 +1259,7 @@ TEST_F(EventRewriterTest, TestRewriteFunctionKeys) {
TestingPrefServiceSyncable prefs;
chromeos::Preferences::RegisterProfilePrefs(prefs.registry());
EventRewriter rewriter(NULL);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
rewriter.set_pref_service_for_testing(&prefs);
FunctionKeyTestCase tests[] = {
@@ -1519,7 +1573,8 @@ TEST_F(EventRewriterTest, TestRewriteFunctionKeys) {
};
for (size_t i = 0; i < arraysize(tests); ++i) {
- CheckFunctionKeyTestCase(1000 + i, &rewriter, tests[i]);
+ SCOPED_TRACE(1000 + i);
+ CheckFunctionKeyTestCase(&rewriter, tests[i]);
}
}
@@ -1534,6 +1589,7 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) {
search.SetValue(chromeos::input_method::kControlKey);
EventRewriter rewriter(NULL);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
rewriter.set_pref_service_for_testing(&prefs);
CommandLine::ForCurrentProcess()->AppendSwitchASCII(
@@ -1553,7 +1609,8 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) {
};
for (size_t i = 0; i < arraysize(tests); ++i) {
- CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
+ SCOPED_TRACE(1000 + i);
+ CheckKeyTestCase(&rewriter, tests[i]);
}
*CommandLine::ForCurrentProcess() = original_cl;
@@ -1570,6 +1627,7 @@ TEST_F(EventRewriterTest, TestRewriteKeyEventSentByXSendEvent) {
control.SetValue(chromeos::input_method::kAltKey);
EventRewriter rewriter(NULL);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
rewriter.set_pref_service_for_testing(&prefs);
// Send left control press.
@@ -1600,6 +1658,7 @@ TEST_F(EventRewriterTest, TestRewriteNonNativeEvent) {
control.SetValue(chromeos::input_method::kAltKey);
EventRewriter rewriter(NULL);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
rewriter.set_pref_service_for_testing(&prefs);
const int kTouchId = 2;
@@ -1794,6 +1853,7 @@ TEST_F(EventRewriterTest, TestRewrittenModifierClick) {
control.SetValue(chromeos::input_method::kAltKey);
EventRewriter rewriter(NULL);
+ rewriter.KeyboardDeviceAddedForTesting(kKeyboardDeviceId, "PC Keyboard");
rewriter.set_pref_service_for_testing(&prefs);
// Check that Control + Left Button is converted (via Alt + Left Button)
@@ -1807,15 +1867,17 @@ TEST_F(EventRewriterTest, TestRewrittenModifierClick) {
// Sanity check.
EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type());
EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON | ui::EF_CONTROL_DOWN, press.flags());
- int flags = RewriteMouseEvent(&rewriter, press);
- EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags);
- EXPECT_FALSE(ui::EF_CONTROL_DOWN & flags);
- EXPECT_FALSE(ui::EF_ALT_DOWN & flags);
+ scoped_ptr<ui::Event> new_event;
+ const ui::MouseEvent* result =
+ RewriteMouseButtonEvent(&rewriter, press, &new_event);
+ EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
+ EXPECT_FALSE(ui::EF_LEFT_MOUSE_BUTTON & result->flags());
+ EXPECT_FALSE(ui::EF_CONTROL_DOWN & result->flags());
+ EXPECT_FALSE(ui::EF_ALT_DOWN & result->flags());
+ EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
}
-
TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) {
-#if defined(USE_X11)
// TODO(kpschoedel): pending changes for crbug.com/360377
// to |chromeos::EventRewriter::RewriteLocatedEvent()
std::vector<unsigned int> device_list;
@@ -1826,6 +1888,41 @@ TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) {
EventRewriter rewriter(NULL);
rewriter.set_pref_service_for_testing(&prefs);
const int kLeftAndAltFlag = ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN;
+
+ // Test Alt + Left click.
+ {
+ ui::MouseEvent press(ui::ET_MOUSE_PRESSED,
+ gfx::Point(),
+ gfx::Point(),
+ kLeftAndAltFlag,
+ ui::EF_LEFT_MOUSE_BUTTON);
+ press.set_source_device_id(10);
+ // Sanity check.
+ EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type());
+ EXPECT_EQ(kLeftAndAltFlag, press.flags());
+ scoped_ptr<ui::Event> new_event;
+ const ui::MouseEvent* result =
+ RewriteMouseButtonEvent(&rewriter, press, &new_event);
+ EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
+ EXPECT_FALSE(kLeftAndAltFlag & result->flags());
+ EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags());
+ }
+ {
+ ui::MouseEvent release(ui::ET_MOUSE_RELEASED,
+ gfx::Point(),
+ gfx::Point(),
+ kLeftAndAltFlag,
+ ui::EF_LEFT_MOUSE_BUTTON);
+ release.set_source_device_id(10);
+ scoped_ptr<ui::Event> new_event;
+ const ui::MouseEvent* result =
+ RewriteMouseButtonEvent(&rewriter, release, &new_event);
+ EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
+ EXPECT_FALSE(kLeftAndAltFlag & result->flags());
+ EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags());
+ }
+#if defined(USE_X11)
+ // Test Alt + Left click, using XI2 native events.
{
ui::ScopedXI2Event xev;
xev.InitGenericButtonEvent(
@@ -1834,60 +1931,158 @@ TEST_F(EventRewriterTest, DontRewriteIfNotRewritten) {
// Sanity check.
EXPECT_EQ(ui::ET_MOUSE_PRESSED, press.type());
EXPECT_EQ(kLeftAndAltFlag, press.flags());
- int flags = RewriteMouseEvent(&rewriter, press);
- EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags);
+ scoped_ptr<ui::Event> new_event;
+ const ui::MouseEvent* result =
+ RewriteMouseButtonEvent(&rewriter, press, &new_event);
+ EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
+ EXPECT_FALSE(kLeftAndAltFlag & result->flags());
+ EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags());
}
{
ui::ScopedXI2Event xev;
xev.InitGenericButtonEvent(
10, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag);
ui::MouseEvent release(xev);
- int flags = RewriteMouseEvent(&rewriter, release);
- EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags);
+ scoped_ptr<ui::Event> new_event;
+ const ui::MouseEvent* result =
+ RewriteMouseButtonEvent(&rewriter, release, &new_event);
+ EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
+ EXPECT_FALSE(kLeftAndAltFlag & result->flags());
+ EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags());
}
+#endif
// No ALT in frst click.
{
+ ui::MouseEvent press(ui::ET_MOUSE_PRESSED,
+ gfx::Point(),
+ gfx::Point(),
+ ui::EF_LEFT_MOUSE_BUTTON,
+ ui::EF_LEFT_MOUSE_BUTTON);
+ press.set_source_device_id(10);
+ scoped_ptr<ui::Event> new_event;
+ const ui::MouseEvent* result =
+ RewriteMouseButtonEvent(&rewriter, press, &new_event);
+ EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & result->flags());
+ EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags());
+ }
+ {
+ ui::MouseEvent release(ui::ET_MOUSE_RELEASED,
+ gfx::Point(),
+ gfx::Point(),
+ kLeftAndAltFlag,
+ ui::EF_LEFT_MOUSE_BUTTON);
+ release.set_source_device_id(10);
+ scoped_ptr<ui::Event> new_event;
+ const ui::MouseEvent* result =
+ RewriteMouseButtonEvent(&rewriter, release, &new_event);
+ EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags());
+ EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags());
+ }
+#if defined(USE_X11)
+ // No ALT in frst click, using XI2 native events.
+ {
ui::ScopedXI2Event xev;
xev.InitGenericButtonEvent(
10, ui::ET_MOUSE_PRESSED, gfx::Point(), ui::EF_LEFT_MOUSE_BUTTON);
ui::MouseEvent press(xev);
- int flags = RewriteMouseEvent(&rewriter, press);
- EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & flags);
+ scoped_ptr<ui::Event> new_event;
+ const ui::MouseEvent* result =
+ RewriteMouseButtonEvent(&rewriter, press, &new_event);
+ EXPECT_TRUE(ui::EF_LEFT_MOUSE_BUTTON & result->flags());
+ EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags());
}
{
ui::ScopedXI2Event xev;
xev.InitGenericButtonEvent(
10, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag);
ui::MouseEvent release(xev);
- int flags = RewriteMouseEvent(&rewriter, release);
- EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & flags);
+ scoped_ptr<ui::Event> new_event;
+ const ui::MouseEvent* result =
+ RewriteMouseButtonEvent(&rewriter, release, &new_event);
+ EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags());
+ EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags());
}
+#endif
// ALT on different device.
{
+ ui::MouseEvent press(ui::ET_MOUSE_PRESSED,
+ gfx::Point(),
+ gfx::Point(),
+ kLeftAndAltFlag,
+ ui::EF_LEFT_MOUSE_BUTTON);
+ press.set_source_device_id(11);
+ scoped_ptr<ui::Event> new_event;
+ const ui::MouseEvent* result =
+ RewriteMouseButtonEvent(&rewriter, press, &new_event);
+ EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
+ EXPECT_FALSE(kLeftAndAltFlag & result->flags());
+ EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags());
+ }
+ {
+ ui::MouseEvent release(ui::ET_MOUSE_RELEASED,
+ gfx::Point(),
+ gfx::Point(),
+ kLeftAndAltFlag,
+ ui::EF_LEFT_MOUSE_BUTTON);
+ release.set_source_device_id(10);
+ scoped_ptr<ui::Event> new_event;
+ const ui::MouseEvent* result =
+ RewriteMouseButtonEvent(&rewriter, release, &new_event);
+ EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags());
+ EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags());
+ }
+ {
+ ui::MouseEvent release(ui::ET_MOUSE_RELEASED,
+ gfx::Point(),
+ gfx::Point(),
+ kLeftAndAltFlag,
+ ui::EF_LEFT_MOUSE_BUTTON);
+ release.set_source_device_id(11);
+ scoped_ptr<ui::Event> new_event;
+ const ui::MouseEvent* result =
+ RewriteMouseButtonEvent(&rewriter, release, &new_event);
+ EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
+ EXPECT_FALSE(kLeftAndAltFlag & result->flags());
+ EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags());
+ }
+#if defined(USE_X11)
+ // ALT on different device, using XI2 native events.
+ {
ui::ScopedXI2Event xev;
xev.InitGenericButtonEvent(
11, ui::ET_MOUSE_PRESSED, gfx::Point(), kLeftAndAltFlag);
ui::MouseEvent press(xev);
- int flags = RewriteMouseEvent(&rewriter, press);
- EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags);
+ scoped_ptr<ui::Event> new_event;
+ const ui::MouseEvent* result =
+ RewriteMouseButtonEvent(&rewriter, press, &new_event);
+ EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
+ EXPECT_FALSE(kLeftAndAltFlag & result->flags());
+ EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags());
}
{
ui::ScopedXI2Event xev;
xev.InitGenericButtonEvent(
10, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag);
ui::MouseEvent release(xev);
- int flags = RewriteMouseEvent(&rewriter, release);
- EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & flags);
+ scoped_ptr<ui::Event> new_event;
+ const ui::MouseEvent* result =
+ RewriteMouseButtonEvent(&rewriter, release, &new_event);
+ EXPECT_TRUE((ui::EF_LEFT_MOUSE_BUTTON | ui::EF_ALT_DOWN) & result->flags());
+ EXPECT_EQ(ui::EF_LEFT_MOUSE_BUTTON, result->changed_button_flags());
}
{
ui::ScopedXI2Event xev;
xev.InitGenericButtonEvent(
11, ui::ET_MOUSE_RELEASED, gfx::Point(), kLeftAndAltFlag);
ui::MouseEvent release(xev);
- int flags = RewriteMouseEvent(&rewriter, release);
- EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & flags);
+ scoped_ptr<ui::Event> new_event;
+ const ui::MouseEvent* result =
+ RewriteMouseButtonEvent(&rewriter, release, &new_event);
+ EXPECT_TRUE(ui::EF_RIGHT_MOUSE_BUTTON & result->flags());
+ EXPECT_FALSE(kLeftAndAltFlag & result->flags());
+ EXPECT_EQ(ui::EF_RIGHT_MOUSE_BUTTON, result->changed_button_flags());
}
#endif
}

Powered by Google App Engine
This is Rietveld 408576698