Add native event testing to chromeos::EventRewriter unit tests.

R=sadrul@chromium.org

Review URL: https://codereview.chromium.org/270633012

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@271762 0039d316-1c4b-4281-b951-d872f2087c98
parent e0696b48
...@@ -137,6 +137,7 @@ void UpdateX11EventMask(int ui_flags, unsigned int* x_flags) { ...@@ -137,6 +137,7 @@ void UpdateX11EventMask(int ui_flags, unsigned int* x_flags) {
{ui::EF_ALT_DOWN, Mod1Mask}, {ui::EF_ALT_DOWN, Mod1Mask},
{ui::EF_CAPS_LOCK_DOWN, LockMask}, {ui::EF_CAPS_LOCK_DOWN, LockMask},
{ui::EF_ALTGR_DOWN, Mod5Mask}, {ui::EF_ALTGR_DOWN, Mod5Mask},
{ui::EF_COMMAND_DOWN, Mod4Mask},
{ui::EF_MOD3_DOWN, Mod3Mask}, {ui::EF_MOD3_DOWN, Mod3Mask},
{ui::EF_NUMPAD_KEY, Mod2Mask}, {ui::EF_NUMPAD_KEY, Mod2Mask},
{ui::EF_LEFT_MOUSE_BUTTON, Button1Mask}, {ui::EF_LEFT_MOUSE_BUTTON, Button1Mask},
......
...@@ -38,11 +38,18 @@ ...@@ -38,11 +38,18 @@
namespace { namespace {
std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) { std::string GetExpectedResultAsString(ui::KeyboardCode ui_keycode,
int ui_flags,
ui::EventType ui_type) {
return base::StringPrintf("ui_keycode=0x%X ui_flags=0x%X ui_type=%d", return base::StringPrintf("ui_keycode=0x%X ui_flags=0x%X ui_type=%d",
keyevent.key_code(), ui_keycode,
keyevent.flags(), ui_flags,
keyevent.type()); ui_type);
}
std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) {
return GetExpectedResultAsString(
keyevent.key_code(), keyevent.flags(), keyevent.type());
} }
std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter,
...@@ -58,30 +65,70 @@ std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter, ...@@ -58,30 +65,70 @@ std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter,
return GetKeyEventAsString(event); return GetKeyEventAsString(event);
} }
std::string GetExpectedResultAsString(ui::KeyboardCode ui_keycode, // Table entry for simple single key event rewriting tests.
int ui_flags, struct KeyTestCase {
ui::EventType ui_type) { enum {
return base::StringPrintf("ui_keycode=0x%X ui_flags=0x%X ui_type=%d", // Test types:
ui_keycode, TEST_VKEY = 1 << 0, // Test ui::KeyEvent with no native event
ui_flags, TEST_X11 = 1 << 1, // Test ui::KeyEvent with native XKeyEvent
ui_type); TEST_ALL = TEST_VKEY|TEST_X11,
} // Special test flags:
NUMPAD = 1 << 8, // Set EF_NUMPAD_KEY on native-based event, because
// |XKeysymForWindowsKeyCode()| can not distinguish
// between pairs like XK_Insert and XK_KP_Insert.
};
int test;
ui::EventType type;
struct {
ui::KeyboardCode key_code;
int flags;
} input, expected;
};
std::string GetRewrittenEventNumbered(size_t i, // 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, chromeos::EventRewriter* rewriter,
ui::KeyboardCode ui_keycode, const KeyTestCase& test) {
int ui_flags, std::string id = base::StringPrintf("(%zu) ", i);
ui::EventType ui_type) { std::string expected =
return base::StringPrintf("(%zu) ", i) + id + GetExpectedResultAsString(
GetRewrittenEventAsString(rewriter, ui_keycode, ui_flags, ui_type); 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(
rewriter, test.input.key_code, test.input.flags, test.type));
}
std::string GetExpectedResultNumbered(size_t i, #if defined(USE_X11)
ui::KeyboardCode ui_keycode, if (test.test & KeyTestCase::TEST_X11) {
int ui_flags, ui::ScopedXI2Event xev;
ui::EventType ui_type) { xev.InitKeyEvent(test.type, test.input.key_code, test.input.flags);
return base::StringPrintf("(%zu) ", i) + XEvent* xevent = xev;
GetExpectedResultAsString(ui_keycode, ui_flags, ui_type); 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));
// 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));
}
}
#endif
} }
} // namespace } // namespace
...@@ -94,8 +141,7 @@ class EventRewriterTest : public ash::test::AshTestBase { ...@@ -94,8 +141,7 @@ class EventRewriterTest : public ash::test::AshTestBase {
: display_(gfx::GetXDisplay()), : display_(gfx::GetXDisplay()),
mock_user_manager_(new chromeos::MockUserManager), mock_user_manager_(new chromeos::MockUserManager),
user_manager_enabler_(mock_user_manager_), user_manager_enabler_(mock_user_manager_),
input_method_manager_mock_(NULL) { input_method_manager_mock_(NULL) {}
}
virtual ~EventRewriterTest() {} virtual ~EventRewriterTest() {}
virtual void SetUp() { virtual void SetUp() {
...@@ -141,89 +187,71 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControl) { ...@@ -141,89 +187,71 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControl) {
rewriter.set_last_device_id_for_testing(0); rewriter.set_last_device_id_for_testing(0);
rewriter.set_pref_service_for_testing(&prefs); rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase pc_keyboard_tests[] = {
// VKEY_A, Alt modifier. // VKEY_A, Alt modifier.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_A, ui::EF_ALT_DOWN},
GetRewrittenEventAsString( {ui::VKEY_A, ui::EF_ALT_DOWN}},
&rewriter, ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED));
// VKEY_A, Win modifier. // VKEY_A, Win modifier.
EXPECT_EQ( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
GetExpectedResultAsString( {ui::VKEY_A, ui::EF_COMMAND_DOWN},
ui::VKEY_A, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_A, ui::EF_COMMAND_DOWN}},
GetRewrittenEventAsString(
&rewriter, ui::VKEY_A, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED));
// VKEY_A, Alt+Win modifier. // VKEY_A, Alt+Win modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
ui::ET_KEY_PRESSED), {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}},
GetRewrittenEventAsString(&rewriter,
ui::VKEY_A,
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED));
// VKEY_LWIN (left Windows key), Alt modifier. // VKEY_LWIN (left Windows key), Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_LWIN, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, {ui::VKEY_LWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
ui::ET_KEY_PRESSED), {ui::VKEY_LWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}},
GetRewrittenEventAsString(&rewriter,
ui::VKEY_LWIN,
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED));
// VKEY_RWIN (right Windows key), Alt modifier. // VKEY_RWIN (right Windows key), Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_RWIN, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, {ui::VKEY_RWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
ui::ET_KEY_PRESSED), {ui::VKEY_RWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}},
GetRewrittenEventAsString(&rewriter, };
ui::VKEY_RWIN,
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) {
ui::ET_KEY_PRESSED)); CheckKeyTestCase(1000 + i, &rewriter, pc_keyboard_tests[i]);
}
// An Apple keyboard reusing the ID, zero. // An Apple keyboard reusing the ID, zero.
rewriter.DeviceAddedForTesting(0, "Apple Keyboard"); rewriter.DeviceAddedForTesting(0, "Apple Keyboard");
rewriter.set_last_device_id_for_testing(0); rewriter.set_last_device_id_for_testing(0);
KeyTestCase apple_keyboard_tests[] = {
// VKEY_A, Alt modifier. // VKEY_A, Alt modifier.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_A, ui::EF_ALT_DOWN},
GetRewrittenEventAsString( {ui::VKEY_A, ui::EF_ALT_DOWN}},
&rewriter, ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED));
// VKEY_A, Win modifier. // VKEY_A, Win modifier.
EXPECT_EQ( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
GetExpectedResultAsString( {ui::VKEY_A, ui::EF_COMMAND_DOWN},
ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_A, ui::EF_CONTROL_DOWN}},
GetRewrittenEventAsString(
&rewriter, ui::VKEY_A, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED));
// VKEY_A, Alt+Win modifier. // VKEY_A, Alt+Win modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
ui::ET_KEY_PRESSED), {ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}},
GetRewrittenEventAsString(&rewriter,
ui::VKEY_A,
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED));
// VKEY_LWIN (left Windows key), Alt modifier. // VKEY_LWIN (left Windows key), Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN},
ui::ET_KEY_PRESSED), {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}},
GetRewrittenEventAsString(&rewriter,
ui::VKEY_LWIN,
ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
ui::ET_KEY_PRESSED));
// VKEY_RWIN (right Windows key), Alt modifier. // VKEY_RWIN (right Windows key), Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, {ui::VKEY_RWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN},
ui::ET_KEY_PRESSED), {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}},
GetRewrittenEventAsString(&rewriter, };
ui::VKEY_RWIN,
ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) {
ui::ET_KEY_PRESSED)); CheckKeyTestCase(2000 + i, &rewriter, apple_keyboard_tests[i]);
}
} }
// For crbug.com/133896. // For crbug.com/133896.
...@@ -240,37 +268,37 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) { ...@@ -240,37 +268,37 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) {
rewriter.DeviceAddedForTesting(0, "PC Keyboard"); rewriter.DeviceAddedForTesting(0, "PC Keyboard");
rewriter.set_last_device_id_for_testing(0); rewriter.set_last_device_id_for_testing(0);
// Control should be remapped to Alt. KeyTestCase pc_keyboard_tests[] = {// Control should be remapped to Alt.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN},
GetRewrittenEventAsString(&rewriter, {ui::VKEY_MENU, ui::EF_ALT_DOWN}},
ui::VKEY_CONTROL, };
ui::EF_CONTROL_DOWN,
ui::ET_KEY_PRESSED)); for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, pc_keyboard_tests[i]);
}
// An Apple keyboard reusing the ID, zero. // An Apple keyboard reusing the ID, zero.
rewriter.DeviceAddedForTesting(0, "Apple Keyboard"); rewriter.DeviceAddedForTesting(0, "Apple Keyboard");
rewriter.set_last_device_id_for_testing(0); rewriter.set_last_device_id_for_testing(0);
// VKEY_LWIN (left Command key) with Alt modifier. The remapped Command key KeyTestCase apple_keyboard_tests[] = {
// should never be re-remapped to Alt. // VKEY_LWIN (left Command key) with Alt modifier. The remapped Command
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, // key should never be re-remapped to Alt.
ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::ET_KEY_PRESSED), {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN},
GetRewrittenEventAsString(&rewriter, {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}},
ui::VKEY_LWIN,
ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, // VKEY_RWIN (right Command key) with Alt modifier. The remapped Command
ui::ET_KEY_PRESSED)); // key should never be re-remapped to Alt.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_RWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN},
{ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}},
};
// VKEY_RWIN (right Command key) with Alt modifier. The remapped Command key for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) {
// should never be re-remapped to Alt. CheckKeyTestCase(2000 + i, &rewriter, apple_keyboard_tests[i]);
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, }
ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_RWIN,
ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
ui::ET_KEY_PRESSED));
} }
void EventRewriterTest::TestRewriteNumPadKeys() { void EventRewriterTest::TestRewriteNumPadKeys() {
...@@ -278,188 +306,126 @@ void EventRewriterTest::TestRewriteNumPadKeys() { ...@@ -278,188 +306,126 @@ void EventRewriterTest::TestRewriteNumPadKeys() {
EventRewriter rewriter; EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs); rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
// XK_KP_Insert (= NumPad 0 without Num Lock), no modifier. // XK_KP_Insert (= NumPad 0 without Num Lock), no modifier.
EXPECT_EQ( {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
GetExpectedResultAsString( {ui::VKEY_INSERT, ui::EF_NUMPAD_KEY},
ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(
&rewriter, ui::VKEY_INSERT, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier. // XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD0, {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, {ui::VKEY_INSERT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD0, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(&rewriter,
ui::VKEY_INSERT,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED));
// XK_KP_Delete (= NumPad . without Num Lock), Alt modifier. // XK_KP_Delete (= NumPad . without Num Lock), Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_DECIMAL, {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, {ui::VKEY_DELETE, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
ui::ET_KEY_PRESSED), {ui::VKEY_DECIMAL, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(&rewriter,
ui::VKEY_DELETE,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED));
// XK_KP_End (= NumPad 1 without Num Lock), Alt modifier. // XK_KP_End (= NumPad 1 without Num Lock), Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1, {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, {ui::VKEY_END, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD1, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(&rewriter,
ui::VKEY_END,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED));
// XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier. // XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD2, {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD2, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(&rewriter,
ui::VKEY_DOWN,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED));
// XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier. // XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD3, {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, {ui::VKEY_NEXT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD3, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(&rewriter,
ui::VKEY_NEXT,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED));
// XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier. // XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD4, {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, {ui::VKEY_LEFT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD4, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(&rewriter,
ui::VKEY_LEFT,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED));
// XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier. // XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD5, {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, {ui::VKEY_CLEAR, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD5, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(&rewriter,
ui::VKEY_CLEAR,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED));
// XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier. // XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD6, {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, {ui::VKEY_RIGHT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD6, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(&rewriter,
ui::VKEY_RIGHT,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED));
// XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier. // XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD7, {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, {ui::VKEY_HOME, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD7, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(&rewriter,
ui::VKEY_HOME,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED));
// XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier. // XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD8, {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, {ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD8, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(&rewriter,
ui::VKEY_UP,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED));
// XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier. // XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD9, {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY, {ui::VKEY_PRIOR, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD9, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(&rewriter,
ui::VKEY_PRIOR,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED));
// XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier. // XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier.
EXPECT_EQ( {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
GetExpectedResultAsString( {ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY},
ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(
&rewriter, ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier. // XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier.
EXPECT_EQ( {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
GetExpectedResultAsString( {ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY},
ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), {ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(
&rewriter, ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier. // XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier.
EXPECT_EQ( {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
GetExpectedResultAsString( {ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY},
ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(
&rewriter, ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier. // XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier.
EXPECT_EQ( {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
GetExpectedResultAsString( {ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY},
ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(
&rewriter, ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier. // XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier.
EXPECT_EQ( {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
GetExpectedResultAsString( {ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY},
ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(
&rewriter, ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier. // XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier.
EXPECT_EQ( {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
GetExpectedResultAsString( {ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY},
ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(
&rewriter, ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_5 (= NumPad 5 with Num Lock), Num Lock modifier. // XK_KP_5 (= NumPad 5 with Num Lock), Num Lock modifier.
EXPECT_EQ( {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
GetExpectedResultAsString( {ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY},
ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(
&rewriter, ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_6 (= NumPad 6 with Num Lock), Num Lock modifier. // XK_KP_6 (= NumPad 6 with Num Lock), Num Lock modifier.
EXPECT_EQ( {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
GetExpectedResultAsString( {ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY},
ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(
&rewriter, ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_7 (= NumPad 7 with Num Lock), Num Lock modifier. // XK_KP_7 (= NumPad 7 with Num Lock), Num Lock modifier.
EXPECT_EQ( {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
GetExpectedResultAsString( {ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY},
ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(
&rewriter, ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_8 (= NumPad 8 with Num Lock), Num Lock modifier. // XK_KP_8 (= NumPad 8 with Num Lock), Num Lock modifier.
EXPECT_EQ( {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
GetExpectedResultAsString( {ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY},
ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(
&rewriter, ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_9 (= NumPad 9 with Num Lock), Num Lock modifier. // XK_KP_9 (= NumPad 9 with Num Lock), Num Lock modifier.
EXPECT_EQ( {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
GetExpectedResultAsString( {ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY},
ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString( };
&rewriter, ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
for (size_t i = 0; i < arraysize(tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
}
} }
TEST_F(EventRewriterTest, TestRewriteNumPadKeys) { TEST_F(EventRewriterTest, TestRewriteNumPadKeys) {
...@@ -484,25 +450,24 @@ void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() { ...@@ -484,25 +450,24 @@ void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() {
rewriter.set_last_device_id_for_testing(0); rewriter.set_last_device_id_for_testing(0);
rewriter.set_pref_service_for_testing(&prefs); rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
// XK_KP_End (= NumPad 1 without Num Lock), Win modifier. // XK_KP_End (= NumPad 1 without Num Lock), Win modifier.
// The result should be "Num Pad 1 with Control + Num Lock modifiers". // The result should be "Num Pad 1 with Control + Num Lock modifiers".
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1, {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY, {ui::VKEY_END, ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY},
ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD1, ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY}},
GetRewrittenEventAsString(&rewriter,
ui::VKEY_END,
ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED));
// XK_KP_1 (= NumPad 1 with Num Lock), Win modifier. // XK_KP_1 (= NumPad 1 with Num Lock), Win modifier.
// The result should also be "Num Pad 1 with Control + Num Lock modifiers". // The result should also be "Num Pad 1 with Control + Num Lock
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1, // modifiers".
ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY, {KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
ui::ET_KEY_PRESSED), {ui::VKEY_NUMPAD1, ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY},
GetRewrittenEventAsString(&rewriter, {ui::VKEY_NUMPAD1, ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY}},
ui::VKEY_NUMPAD1, };
ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED)); for (size_t i = 0; i < arraysize(tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
}
} }
TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) { TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) {
...@@ -525,46 +490,42 @@ TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) { ...@@ -525,46 +490,42 @@ TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) {
EventRewriter rewriter; EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs); rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
// Press Search. Confirm the event is not rewritten. // Press Search. Confirm the event is not rewritten.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_LWIN, ui::EF_NONE},
GetRewrittenEventAsString( {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}},
&rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_PRESSED));
// Press left Control. Confirm the event is not rewritten. // Press left Control. Confirm the event is not rewritten.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN},
GetRewrittenEventAsString(&rewriter, {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}},
ui::VKEY_CONTROL,
ui::EF_CONTROL_DOWN,
ui::ET_KEY_PRESSED));
// Press right Control. Confirm the event is not rewritten. // Press right Control. Confirm the event is not rewritten.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN},
GetRewrittenEventAsString(&rewriter, {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}},
ui::VKEY_CONTROL,
ui::EF_CONTROL_DOWN,
ui::ET_KEY_PRESSED));
// Press left Alt. Confirm the event is not rewritten. // Press left Alt. Confirm the event is not rewritten.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_MENU, ui::EF_ALT_DOWN},
GetRewrittenEventAsString( {ui::VKEY_MENU, ui::EF_ALT_DOWN}},
&rewriter, ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED));
// Press right Alt. Confirm the event is not rewritten. // Press right Alt. Confirm the event is not rewritten.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_MENU, ui::EF_ALT_DOWN},
GetRewrittenEventAsString( {ui::VKEY_MENU, ui::EF_ALT_DOWN}},
&rewriter, ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED));
// Test KeyRelease event, just in case. // Test KeyRelease event, just in case.
// Release Search. Confirm the release event is not rewritten. // Release Search. Confirm the release event is not rewritten.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_RELEASED,
ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED), {ui::VKEY_LWIN, ui::EF_NONE},
GetRewrittenEventAsString( {ui::VKEY_LWIN, ui::EF_NONE}},
&rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED)); };
for (size_t i = 0; i < arraysize(tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
}
} }
TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) {
...@@ -572,43 +533,33 @@ TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) { ...@@ -572,43 +533,33 @@ TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) {
EventRewriter rewriter; EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs); rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
// Press Alt with Shift. Confirm the event is not rewritten. // Press Alt with Shift. Confirm the event is not rewritten.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN},
ui::ET_KEY_PRESSED), {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}},
GetRewrittenEventAsString(&rewriter,
ui::VKEY_MENU,
ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
ui::ET_KEY_PRESSED));
// Press Search with Caps Lock mask. Confirm the event is not rewritten. // Press Search with Caps Lock mask. Confirm the event is not rewritten.
EXPECT_EQ( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
GetExpectedResultAsString(ui::VKEY_LWIN, {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN},
ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN, {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN}},
ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_LWIN,
ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED));
// Release Search with Caps Lock mask. Confirm the event is not rewritten. // Release Search with Caps Lock mask. Confirm the event is not rewritten.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_RELEASED,
ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN, ui::ET_KEY_RELEASED), {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN},
GetRewrittenEventAsString(&rewriter, {ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN}},
ui::VKEY_LWIN,
ui::EF_CAPS_LOCK_DOWN,
ui::ET_KEY_RELEASED));
// Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten. // Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_B, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::EF_COMMAND_DOWN},
ui::ET_KEY_PRESSED), {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
GetRewrittenEventAsString(&rewriter, ui::EF_COMMAND_DOWN}},
ui::VKEY_B, };
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, for (size_t i = 0; i < arraysize(tests); ++i) {
ui::ET_KEY_PRESSED)); CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
}
} }
TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) {
...@@ -625,70 +576,68 @@ TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) { ...@@ -625,70 +576,68 @@ TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) {
EventRewriter rewriter; EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs); rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase disabled_modifier_tests[] = {
// Press Alt with Shift. This key press shouldn't be affected by the // Press Alt with Shift. This key press shouldn't be affected by the
// pref. Confirm the event is not rewritten. // pref. Confirm the event is not rewritten.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN, {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN},
ui::ET_KEY_PRESSED), {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}},
GetRewrittenEventAsString(&rewriter,
ui::VKEY_MENU,
ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
ui::ET_KEY_PRESSED));
// Press Search. Confirm the event is now VKEY_UNKNOWN. // Press Search. Confirm the event is now VKEY_UNKNOWN.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED), {ui::VKEY_LWIN, ui::EF_NONE},
GetRewrittenEventAsString( {ui::VKEY_UNKNOWN, ui::EF_NONE}},
&rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_PRESSED));
// Press Control. Confirm the event is now VKEY_UNKNOWN. // Press Control. Confirm the event is now VKEY_UNKNOWN.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED), {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN},
GetRewrittenEventAsString( {ui::VKEY_UNKNOWN, ui::EF_NONE}},
&rewriter, ui::VKEY_CONTROL, ui::EF_NONE, ui::ET_KEY_PRESSED));
// Press Control+Search. Confirm the event is now VKEY_UNKNOWN // Press Control+Search. Confirm the event is now VKEY_UNKNOWN
// without any modifiers. // without any modifiers.
EXPECT_EQ( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
GetExpectedResultAsString( {ui::VKEY_LWIN, ui::EF_CONTROL_DOWN},
ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED), {ui::VKEY_UNKNOWN, ui::EF_NONE}},
GetRewrittenEventAsString(
&rewriter, ui::VKEY_LWIN, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED));
// Press Control+Search+a. Confirm the event is now VKEY_A without any // Press Control+Search+a. Confirm the event is now VKEY_A without any
// modifiers. // modifiers.
EXPECT_EQ( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), {ui::VKEY_A, ui::EF_CONTROL_DOWN},
GetRewrittenEventAsString( {ui::VKEY_A, ui::EF_NONE}},
&rewriter, ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED));
// Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with // Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with
// the Alt modifier. // the Alt modifier.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN},
GetRewrittenEventAsString(&rewriter, {ui::VKEY_A, ui::EF_ALT_DOWN}},
ui::VKEY_A, };
ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
ui::ET_KEY_PRESSED)); for (size_t i = 0; i < arraysize(disabled_modifier_tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, disabled_modifier_tests[i]);
}
// Remap Alt to Control. // Remap Alt to Control.
IntegerPrefMember alt; IntegerPrefMember alt;
alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs);
alt.SetValue(chromeos::input_method::kControlKey); alt.SetValue(chromeos::input_method::kControlKey);
KeyTestCase tests[] = {
// Press left Alt. Confirm the event is now VKEY_CONTROL // Press left Alt. Confirm the event is now VKEY_CONTROL
// even though the Control key itself is disabled. // even though the Control key itself is disabled.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_MENU, ui::EF_ALT_DOWN},
GetRewrittenEventAsString( {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}},
&rewriter, ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED));
// Press Alt+a. Confirm the event is now Control+a even though the Control // Press Alt+a. Confirm the event is now Control+a even though the Control
// key itself is disabled. // key itself is disabled.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_A, ui::EF_ALT_DOWN},
GetRewrittenEventAsString( {ui::VKEY_A, ui::EF_CONTROL_DOWN}},
&rewriter, ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED)); };
for (size_t i = 0; i < arraysize(tests); ++i) {
CheckKeyTestCase(2000 + i, &rewriter, tests[i]);
}
} }
TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) {
...@@ -702,62 +651,57 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) { ...@@ -702,62 +651,57 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) {
EventRewriter rewriter; EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs); rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase s_tests[] = {
// Press Search. Confirm the event is now VKEY_CONTROL. // Press Search. Confirm the event is now VKEY_CONTROL.
EXPECT_EQ( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
GetExpectedResultAsString( {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN},
ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}},
GetRewrittenEventAsString( };
&rewriter, ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED));
for (size_t i = 0; i < arraysize(s_tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, s_tests[i]);
}
// Remap Alt to Control too. // Remap Alt to Control too.
IntegerPrefMember alt; IntegerPrefMember alt;
alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs);
alt.SetValue(chromeos::input_method::kControlKey); alt.SetValue(chromeos::input_method::kControlKey);
KeyTestCase sa_tests[] = {
// Press Alt. Confirm the event is now VKEY_CONTROL. // Press Alt. Confirm the event is now VKEY_CONTROL.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_MENU, ui::EF_ALT_DOWN},
GetRewrittenEventAsString( {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}},
&rewriter, ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED));
// Press Alt+Search. Confirm the event is now VKEY_CONTROL. // Press Alt+Search. Confirm the event is now VKEY_CONTROL.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_LWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
GetRewrittenEventAsString(&rewriter, {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}},
ui::VKEY_LWIN,
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED));
// Press Control+Alt+Search. Confirm the event is now VKEY_CONTROL. // Press Control+Alt+Search. Confirm the event is now VKEY_CONTROL.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_LWIN,
GetRewrittenEventAsString( ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
&rewriter, {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}},
ui::VKEY_LWIN,
ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED));
// Press Shift+Control+Alt+Search. Confirm the event is now Control with // Press Shift+Control+Alt+Search. Confirm the event is now Control with
// Shift and Control modifiers. // Shift and Control modifiers.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, {ui::VKEY_LWIN, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
ui::ET_KEY_PRESSED), ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
GetRewrittenEventAsString(&rewriter, {ui::VKEY_CONTROL, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}},
ui::VKEY_LWIN,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED));
// Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift // Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift
// and Control modifiers. // and Control modifiers.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_B, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN, {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
ui::ET_KEY_PRESSED), ui::EF_COMMAND_DOWN},
GetRewrittenEventAsString(&rewriter, {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}},
ui::VKEY_B, };
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, for (size_t i = 0; i < arraysize(sa_tests); ++i) {
ui::ET_KEY_PRESSED)); CheckKeyTestCase(2000 + i, &rewriter, sa_tests[i]);
}
} }
TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) {
...@@ -771,12 +715,15 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) { ...@@ -771,12 +715,15 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) {
EventRewriter rewriter; EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs); rewriter.set_pref_service_for_testing(&prefs);
// Press Search. Confirm the event is now VKEY_ESCAPE. KeyTestCase tests[] = {// Press Search. Confirm the event is now VKEY_ESCAPE.
EXPECT_EQ( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
GetExpectedResultAsString( {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN},
ui::VKEY_ESCAPE, ui::EF_NONE, ui::ET_KEY_PRESSED), {ui::VKEY_ESCAPE, ui::EF_NONE}},
GetRewrittenEventAsString( };
&rewriter, ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED));
for (size_t i = 0; i < arraysize(tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
}
} }
TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) {
...@@ -790,69 +737,69 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) { ...@@ -790,69 +737,69 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) {
EventRewriter rewriter; EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs); rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase s2a_tests[] = {
// Press Search. Confirm the event is now VKEY_MENU. // Press Search. Confirm the event is now VKEY_MENU.
EXPECT_EQ( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
GetExpectedResultAsString( {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN},
ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_MENU, ui::EF_ALT_DOWN}},
GetRewrittenEventAsString( };
&rewriter, ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED));
for (size_t i = 0; i < arraysize(s2a_tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, s2a_tests[i]);
}
// Remap Alt to Control. // Remap Alt to Control.
IntegerPrefMember alt; IntegerPrefMember alt;
alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs); alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs);
alt.SetValue(chromeos::input_method::kControlKey); alt.SetValue(chromeos::input_method::kControlKey);
KeyTestCase a2c_tests[] = {
// Press left Alt. Confirm the event is now VKEY_CONTROL. // Press left Alt. Confirm the event is now VKEY_CONTROL.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_MENU, ui::EF_ALT_DOWN},
GetRewrittenEventAsString( {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}},
&rewriter, ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED)); };
for (size_t i = 0; i < arraysize(a2c_tests); ++i) {
CheckKeyTestCase(2000 + i, &rewriter, a2c_tests[i]);
}
// Remap Control to Search. // Remap Control to Search.
IntegerPrefMember control; IntegerPrefMember control;
control.Init(prefs::kLanguageRemapControlKeyTo, &prefs); control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
control.SetValue(chromeos::input_method::kSearchKey); control.SetValue(chromeos::input_method::kSearchKey);
KeyTestCase c2s_tests[] = {
// Press left Control. Confirm the event is now VKEY_LWIN. // Press left Control. Confirm the event is now VKEY_LWIN.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN},
GetRewrittenEventAsString(&rewriter, {ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}},
ui::VKEY_CONTROL,
ui::EF_CONTROL_DOWN,
ui::ET_KEY_PRESSED));
// Then, press all of the three, Control+Alt+Search. // Then, press all of the three, Control+Alt+Search.
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_MENU, {ui::VKEY_LWIN,
ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
ui::ET_KEY_PRESSED), {ui::VKEY_MENU,
GetRewrittenEventAsString( ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}},
&rewriter,
ui::VKEY_LWIN,
ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED));
// Press Shift+Control+Alt+Search. // Press Shift+Control+Alt+Search.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | {ui::VKEY_LWIN, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
ui::ET_KEY_PRESSED), {ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
GetRewrittenEventAsString(&rewriter, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}},
ui::VKEY_LWIN,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED));
// Press Shift+Control+Alt+Search+B // Press Shift+Control+Alt+Search+B
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_B, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, ui::EF_COMMAND_DOWN},
ui::ET_KEY_PRESSED), {ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
GetRewrittenEventAsString(&rewriter, ui::EF_COMMAND_DOWN}},
ui::VKEY_B, };
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN, for (size_t i = 0; i < arraysize(c2s_tests); ++i) {
ui::ET_KEY_PRESSED)); CheckKeyTestCase(3000 + i, &rewriter, c2s_tests[i]);
}
} }
TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) { TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) {
...@@ -957,20 +904,26 @@ TEST_F(EventRewriterTest, TestRewriteDiamondKey) { ...@@ -957,20 +904,26 @@ TEST_F(EventRewriterTest, TestRewriteDiamondKey) {
rewriter.set_pref_service_for_testing(&prefs); rewriter.set_pref_service_for_testing(&prefs);
rewriter.set_ime_keyboard_for_testing(&ime_keyboard); rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
// F15 should work as Ctrl when --has-chromeos-diamond-key is not specified. KeyTestCase tests[] = {
EXPECT_EQ(GetExpectedResultAsString( // F15 should work as Ctrl when --has-chromeos-diamond-key is not
ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), // specified.
GetRewrittenEventAsString( {KeyTestCase::TEST_VKEY,
&rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED)); ui::ET_KEY_PRESSED,
{ui::VKEY_F15, ui::EF_NONE},
{ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}},
// However, Mod2Mask should not be rewritten to CtrlMask when // However, Mod2Mask should not be rewritten to CtrlMask when
// --has-chromeos-diamond-key is not specified. // --has-chromeos-diamond-key is not specified.
EXPECT_EQ( {KeyTestCase::TEST_VKEY,
GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED), ui::ET_KEY_PRESSED,
GetRewrittenEventAsString( {ui::VKEY_A, ui::EF_NONE},
&rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED)); {ui::VKEY_A, ui::EF_NONE}},
} };
for (size_t i = 0; i < arraysize(tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
}
}
TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) { TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) {
const CommandLine original_cl(*CommandLine::ForCurrentProcess()); const CommandLine original_cl(*CommandLine::ForCurrentProcess());
CommandLine::ForCurrentProcess()->AppendSwitchASCII( CommandLine::ForCurrentProcess()->AppendSwitchASCII(
...@@ -1035,29 +988,29 @@ TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) { ...@@ -1035,29 +988,29 @@ TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) {
EventRewriter rewriter; EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs); rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
// Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. // Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask.
// On Chrome OS, CapsLock works as a Mod3 modifier. // On Chrome OS, CapsLock works as a Mod3 modifier.
EXPECT_EQ( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
GetExpectedResultAsString( {ui::VKEY_A, ui::EF_MOD3_DOWN},
ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_A, ui::EF_CONTROL_DOWN}},
GetRewrittenEventAsString(
&rewriter, ui::VKEY_A, ui::EF_MOD3_DOWN, ui::ET_KEY_PRESSED)); // Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to
// ControlMask
// Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
EXPECT_EQ( {ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_MOD3_DOWN},
GetExpectedResultAsString( {ui::VKEY_A, ui::EF_CONTROL_DOWN}},
ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString( // Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to
&rewriter, ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED)); // ControlMask.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN},
{ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}},
};
// Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask. for (size_t i = 0; i < arraysize(tests); ++i) {
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A, CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, }
ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_A,
ui::EF_ALT_DOWN | ui::EF_MOD3_DOWN,
ui::ET_KEY_PRESSED));
} }
TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) { TEST_F(EventRewriterTest, TestRewriteCapsLockMod3InUse) {
...@@ -1090,86 +1043,104 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeys) { ...@@ -1090,86 +1043,104 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeys) {
rewriter.set_last_device_id_for_testing(0); rewriter.set_last_device_id_for_testing(0);
rewriter.set_pref_service_for_testing(&prefs); rewriter.set_pref_service_for_testing(&prefs);
struct { KeyTestCase tests[] = {
ui::KeyboardCode input;
unsigned int input_mods;
ui::KeyboardCode output;
unsigned int output_mods;
} chromeos_tests[] = {
// Alt+Backspace -> Delete // Alt+Backspace -> Delete
{ui::VKEY_BACK, ui::EF_ALT_DOWN, ui::VKEY_DELETE, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_BACK, ui::EF_ALT_DOWN},
{ui::VKEY_DELETE, ui::EF_NONE}},
// Control+Alt+Backspace -> Control+Delete // Control+Alt+Backspace -> Control+Delete
{ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::VKEY_DELETE, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_CONTROL_DOWN}, {ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN},
{ui::VKEY_DELETE, ui::EF_CONTROL_DOWN}},
// Search+Alt+Backspace -> Alt+Backspace // Search+Alt+Backspace -> Alt+Backspace
{ui::VKEY_BACK, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::VKEY_BACK, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN}, {ui::VKEY_BACK, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN},
{ui::VKEY_BACK, ui::EF_ALT_DOWN}},
// Search+Control+Alt+Backspace -> Control+Alt+Backspace // Search+Control+Alt+Backspace -> Control+Alt+Backspace
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_BACK, {ui::VKEY_BACK,
ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN},
ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, {ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}},
// Alt+Up -> Prior // Alt+Up -> Prior
{ui::VKEY_UP, ui::EF_ALT_DOWN, ui::VKEY_PRIOR, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_UP, ui::EF_ALT_DOWN},
{ui::VKEY_PRIOR, ui::EF_NONE}},
// Alt+Down -> Next // Alt+Down -> Next
{ui::VKEY_DOWN, ui::EF_ALT_DOWN, ui::VKEY_NEXT, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_DOWN, ui::EF_ALT_DOWN},
{ui::VKEY_NEXT, ui::EF_NONE}},
// Ctrl+Alt+Up -> Home // Ctrl+Alt+Up -> Home
{ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::VKEY_HOME, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_NONE}, {ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN},
{ui::VKEY_HOME, ui::EF_NONE}},
// Ctrl+Alt+Down -> End // Ctrl+Alt+Down -> End
{ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::VKEY_END, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_NONE}, {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN},
{ui::VKEY_END, ui::EF_NONE}},
// Search+Alt+Up -> Alt+Up // Search+Alt+Up -> Alt+Up
{ui::VKEY_UP, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::VKEY_UP, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN}, {ui::VKEY_UP, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN},
{ui::VKEY_UP, ui::EF_ALT_DOWN}},
// Search+Alt+Down -> Alt+Down // Search+Alt+Down -> Alt+Down
{ui::VKEY_DOWN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::VKEY_DOWN, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN}, {ui::VKEY_DOWN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN},
{ui::VKEY_DOWN, ui::EF_ALT_DOWN}},
// Search+Ctrl+Alt+Up -> Search+Ctrl+Alt+Up // Search+Ctrl+Alt+Up -> Search+Ctrl+Alt+Up
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_UP, {ui::VKEY_UP,
ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN},
ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, {ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}},
// Search+Ctrl+Alt+Down -> Ctrl+Alt+Down // Search+Ctrl+Alt+Down -> Ctrl+Alt+Down
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_DOWN, {ui::VKEY_DOWN,
ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN},
ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}, {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}},
// Period -> Period // Period -> Period
{ui::VKEY_OEM_PERIOD, ui::EF_NONE, ui::VKEY_OEM_PERIOD, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_OEM_PERIOD, ui::EF_NONE},
{ui::VKEY_OEM_PERIOD, ui::EF_NONE}},
// Search+Backspace -> Delete // Search+Backspace -> Delete
{ui::VKEY_BACK, ui::EF_COMMAND_DOWN, ui::VKEY_DELETE, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_BACK, ui::EF_COMMAND_DOWN},
{ui::VKEY_DELETE, ui::EF_NONE}},
// Search+Up -> Prior // Search+Up -> Prior
{ui::VKEY_UP, ui::EF_COMMAND_DOWN, ui::VKEY_PRIOR, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_UP, ui::EF_COMMAND_DOWN},
{ui::VKEY_PRIOR, ui::EF_NONE}},
// Search+Down -> Next // Search+Down -> Next
{ui::VKEY_DOWN, ui::EF_COMMAND_DOWN, ui::VKEY_NEXT, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_DOWN, ui::EF_COMMAND_DOWN},
{ui::VKEY_NEXT, ui::EF_NONE}},
// Search+Left -> Home // Search+Left -> Home
{ui::VKEY_LEFT, ui::EF_COMMAND_DOWN, ui::VKEY_HOME, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_LEFT, ui::EF_COMMAND_DOWN},
{ui::VKEY_HOME, ui::EF_NONE}},
// Control+Search+Left -> Home // Control+Search+Left -> Home
{ui::VKEY_LEFT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_HOME, ui::EF_CONTROL_DOWN}, {ui::VKEY_LEFT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN},
{ui::VKEY_HOME, ui::EF_CONTROL_DOWN}},
// Search+Right -> End // Search+Right -> End
{ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN, ui::VKEY_END, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN},
{ui::VKEY_END, ui::EF_NONE}},
// Control+Search+Right -> End // Control+Search+Right -> End
{ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_END, ui::EF_CONTROL_DOWN}, {ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN},
{ui::VKEY_END, ui::EF_CONTROL_DOWN}},
// Search+Period -> Insert // Search+Period -> Insert
{ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN, ui::VKEY_INSERT, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_NONE}, {ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN},
{ui::VKEY_INSERT, ui::EF_NONE}},
// Control+Search+Period -> Control+Insert // Control+Search+Period -> Control+Insert
{ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_INSERT, ui::EF_CONTROL_DOWN}}; {ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN},
{ui::VKEY_INSERT, ui::EF_CONTROL_DOWN}}};
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(chromeos_tests); ++i) { for (size_t i = 0; i < arraysize(tests); ++i) {
EXPECT_EQ(GetExpectedResultNumbered(i, CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
chromeos_tests[i].output,
chromeos_tests[i].output_mods,
ui::ET_KEY_PRESSED),
GetRewrittenEventNumbered(i,
&rewriter,
chromeos_tests[i].input,
chromeos_tests[i].input_mods,
ui::ET_KEY_PRESSED));
} }
} }
...@@ -1179,128 +1150,246 @@ TEST_F(EventRewriterTest, TestRewriteFunctionKeys) { ...@@ -1179,128 +1150,246 @@ TEST_F(EventRewriterTest, TestRewriteFunctionKeys) {
EventRewriter rewriter; EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs); rewriter.set_pref_service_for_testing(&prefs);
struct { KeyTestCase tests[] = {
ui::KeyboardCode input;
unsigned int input_mods;
ui::KeyboardCode output;
unsigned int output_mods;
} tests[] = {
// F1 -> Back // F1 -> Back
{ui::VKEY_F1, ui::EF_NONE, ui::VKEY_BROWSER_BACK, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F1, ui::EF_CONTROL_DOWN, ui::VKEY_BROWSER_BACK, {ui::VKEY_F1, ui::EF_NONE},
ui::EF_CONTROL_DOWN}, {ui::VKEY_BROWSER_BACK, ui::EF_NONE}},
{ui::VKEY_F1, ui::EF_ALT_DOWN, ui::VKEY_BROWSER_BACK, ui::EF_ALT_DOWN}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F1, ui::EF_CONTROL_DOWN},
{ui::VKEY_BROWSER_BACK, ui::EF_CONTROL_DOWN}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F1, ui::EF_ALT_DOWN},
{ui::VKEY_BROWSER_BACK, ui::EF_ALT_DOWN}},
// F2 -> Forward // F2 -> Forward
{ui::VKEY_F2, ui::EF_NONE, ui::VKEY_BROWSER_FORWARD, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F2, ui::EF_CONTROL_DOWN, ui::VKEY_BROWSER_FORWARD, {ui::VKEY_F2, ui::EF_NONE},
ui::EF_CONTROL_DOWN}, {ui::VKEY_BROWSER_FORWARD, ui::EF_NONE}},
{ui::VKEY_F2, ui::EF_ALT_DOWN, ui::VKEY_BROWSER_FORWARD, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN}, {ui::VKEY_F2, ui::EF_CONTROL_DOWN},
{ui::VKEY_BROWSER_FORWARD, ui::EF_CONTROL_DOWN}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F2, ui::EF_ALT_DOWN},
{ui::VKEY_BROWSER_FORWARD, ui::EF_ALT_DOWN}},
// F3 -> Refresh // F3 -> Refresh
{ui::VKEY_F3, ui::EF_NONE, ui::VKEY_BROWSER_REFRESH, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F3, ui::EF_CONTROL_DOWN, ui::VKEY_BROWSER_REFRESH, {ui::VKEY_F3, ui::EF_NONE},
ui::EF_CONTROL_DOWN}, {ui::VKEY_BROWSER_REFRESH, ui::EF_NONE}},
{ui::VKEY_F3, ui::EF_ALT_DOWN, ui::VKEY_BROWSER_REFRESH, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN}, {ui::VKEY_F3, ui::EF_CONTROL_DOWN},
{ui::VKEY_BROWSER_REFRESH, ui::EF_CONTROL_DOWN}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F3, ui::EF_ALT_DOWN},
{ui::VKEY_BROWSER_REFRESH, ui::EF_ALT_DOWN}},
// F4 -> Launch App 2 // F4 -> Launch App 2
{ui::VKEY_F4, ui::EF_NONE, ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F4, ui::EF_CONTROL_DOWN, ui::VKEY_MEDIA_LAUNCH_APP2, {ui::VKEY_F4, ui::EF_NONE},
ui::EF_CONTROL_DOWN}, {ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_NONE}},
{ui::VKEY_F4, ui::EF_ALT_DOWN, ui::VKEY_MEDIA_LAUNCH_APP2, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN}, {ui::VKEY_F4, ui::EF_CONTROL_DOWN},
{ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_CONTROL_DOWN}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F4, ui::EF_ALT_DOWN},
{ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_ALT_DOWN}},
// F5 -> Launch App 1 // F5 -> Launch App 1
{ui::VKEY_F5, ui::EF_NONE, ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F5, ui::EF_CONTROL_DOWN, ui::VKEY_MEDIA_LAUNCH_APP1, {ui::VKEY_F5, ui::EF_NONE},
ui::EF_CONTROL_DOWN}, {ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_NONE}},
{ui::VKEY_F5, ui::EF_ALT_DOWN, ui::VKEY_MEDIA_LAUNCH_APP1, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN}, {ui::VKEY_F5, ui::EF_CONTROL_DOWN},
{ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_CONTROL_DOWN}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F5, ui::EF_ALT_DOWN},
{ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_ALT_DOWN}},
// F6 -> Brightness down // F6 -> Brightness down
{ui::VKEY_F6, ui::EF_NONE, ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F6, ui::EF_CONTROL_DOWN, ui::VKEY_BRIGHTNESS_DOWN, {ui::VKEY_F6, ui::EF_NONE},
ui::EF_CONTROL_DOWN}, {ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE}},
{ui::VKEY_F6, ui::EF_ALT_DOWN, ui::VKEY_BRIGHTNESS_DOWN, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::EF_ALT_DOWN}, {ui::VKEY_F6, ui::EF_CONTROL_DOWN},
{ui::VKEY_BRIGHTNESS_DOWN, ui::EF_CONTROL_DOWN}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F6, ui::EF_ALT_DOWN},
{ui::VKEY_BRIGHTNESS_DOWN, ui::EF_ALT_DOWN}},
// F7 -> Brightness up // F7 -> Brightness up
{ui::VKEY_F7, ui::EF_NONE, ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F7, ui::EF_CONTROL_DOWN, ui::VKEY_BRIGHTNESS_UP, {ui::VKEY_F7, ui::EF_NONE},
ui::EF_CONTROL_DOWN}, {ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE}},
{ui::VKEY_F7, ui::EF_ALT_DOWN, ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F7, ui::EF_CONTROL_DOWN},
{ui::VKEY_BRIGHTNESS_UP, ui::EF_CONTROL_DOWN}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F7, ui::EF_ALT_DOWN},
{ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN}},
// F8 -> Volume Mute // F8 -> Volume Mute
{ui::VKEY_F8, ui::EF_NONE, ui::VKEY_VOLUME_MUTE, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F8, ui::EF_CONTROL_DOWN, ui::VKEY_VOLUME_MUTE, {ui::VKEY_F8, ui::EF_NONE},
ui::EF_CONTROL_DOWN}, {ui::VKEY_VOLUME_MUTE, ui::EF_NONE}},
{ui::VKEY_F8, ui::EF_ALT_DOWN, ui::VKEY_VOLUME_MUTE, ui::EF_ALT_DOWN}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F8, ui::EF_CONTROL_DOWN},
{ui::VKEY_VOLUME_MUTE, ui::EF_CONTROL_DOWN}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F8, ui::EF_ALT_DOWN},
{ui::VKEY_VOLUME_MUTE, ui::EF_ALT_DOWN}},
// F9 -> Volume Down // F9 -> Volume Down
{ui::VKEY_F9, ui::EF_NONE, ui::VKEY_VOLUME_DOWN, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F9, ui::EF_CONTROL_DOWN, ui::VKEY_VOLUME_DOWN, {ui::VKEY_F9, ui::EF_NONE},
ui::EF_CONTROL_DOWN}, {ui::VKEY_VOLUME_DOWN, ui::EF_NONE}},
{ui::VKEY_F9, ui::EF_ALT_DOWN, ui::VKEY_VOLUME_DOWN, ui::EF_ALT_DOWN}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F9, ui::EF_CONTROL_DOWN},
{ui::VKEY_VOLUME_DOWN, ui::EF_CONTROL_DOWN}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F9, ui::EF_ALT_DOWN},
{ui::VKEY_VOLUME_DOWN, ui::EF_ALT_DOWN}},
// F10 -> Volume Up // F10 -> Volume Up
{ui::VKEY_F10, ui::EF_NONE, ui::VKEY_VOLUME_UP, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F10, ui::EF_CONTROL_DOWN, ui::VKEY_VOLUME_UP, {ui::VKEY_F10, ui::EF_NONE},
ui::EF_CONTROL_DOWN}, {ui::VKEY_VOLUME_UP, ui::EF_NONE}},
{ui::VKEY_F10, ui::EF_ALT_DOWN, ui::VKEY_VOLUME_UP, ui::EF_ALT_DOWN}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F10, ui::EF_CONTROL_DOWN},
{ui::VKEY_VOLUME_UP, ui::EF_CONTROL_DOWN}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F10, ui::EF_ALT_DOWN},
{ui::VKEY_VOLUME_UP, ui::EF_ALT_DOWN}},
// F11 -> F11 // F11 -> F11
{ui::VKEY_F11, ui::EF_NONE, ui::VKEY_F11, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F11, ui::EF_CONTROL_DOWN, ui::VKEY_F11, ui::EF_CONTROL_DOWN}, {ui::VKEY_F11, ui::EF_NONE},
{ui::VKEY_F11, ui::EF_ALT_DOWN, ui::VKEY_F11, ui::EF_ALT_DOWN}, {ui::VKEY_F11, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F11, ui::EF_CONTROL_DOWN},
{ui::VKEY_F11, ui::EF_CONTROL_DOWN}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F11, ui::EF_ALT_DOWN},
{ui::VKEY_F11, ui::EF_ALT_DOWN}},
// F12 -> F12 // F12 -> F12
{ui::VKEY_F12, ui::EF_NONE, ui::VKEY_F12, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F12, ui::EF_CONTROL_DOWN, ui::VKEY_F12, ui::EF_CONTROL_DOWN}, {ui::VKEY_F12, ui::EF_NONE},
{ui::VKEY_F12, ui::EF_ALT_DOWN, ui::VKEY_F12, ui::EF_ALT_DOWN}, {ui::VKEY_F12, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F12, ui::EF_CONTROL_DOWN},
{ui::VKEY_F12, ui::EF_CONTROL_DOWN}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F12, ui::EF_ALT_DOWN},
{ui::VKEY_F12, ui::EF_ALT_DOWN}},
// The number row should not be rewritten without Search key. // The number row should not be rewritten without Search key.
{ui::VKEY_1, ui::EF_NONE, ui::VKEY_1, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_2, ui::EF_NONE, ui::VKEY_2, ui::EF_NONE}, {ui::VKEY_1, ui::EF_NONE},
{ui::VKEY_3, ui::EF_NONE, ui::VKEY_3, ui::EF_NONE}, {ui::VKEY_1, ui::EF_NONE}},
{ui::VKEY_4, ui::EF_NONE, ui::VKEY_4, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_5, ui::EF_NONE, ui::VKEY_5, ui::EF_NONE}, {ui::VKEY_2, ui::EF_NONE},
{ui::VKEY_6, ui::EF_NONE, ui::VKEY_6, ui::EF_NONE}, {ui::VKEY_2, ui::EF_NONE}},
{ui::VKEY_7, ui::EF_NONE, ui::VKEY_7, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_8, ui::EF_NONE, ui::VKEY_8, ui::EF_NONE}, {ui::VKEY_3, ui::EF_NONE},
{ui::VKEY_9, ui::EF_NONE, ui::VKEY_9, ui::EF_NONE}, {ui::VKEY_3, ui::EF_NONE}},
{ui::VKEY_0, ui::EF_NONE, ui::VKEY_0, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_OEM_MINUS, ui::EF_NONE, ui::VKEY_OEM_MINUS, ui::EF_NONE}, {ui::VKEY_4, ui::EF_NONE},
{ui::VKEY_OEM_PLUS, ui::EF_NONE, ui::VKEY_OEM_PLUS, ui::EF_NONE}, {ui::VKEY_4, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_5, ui::EF_NONE},
{ui::VKEY_5, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_6, ui::EF_NONE},
{ui::VKEY_6, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_7, ui::EF_NONE},
{ui::VKEY_7, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_8, ui::EF_NONE},
{ui::VKEY_8, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_9, ui::EF_NONE},
{ui::VKEY_9, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_0, ui::EF_NONE},
{ui::VKEY_0, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_OEM_MINUS, ui::EF_NONE},
{ui::VKEY_OEM_MINUS, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_OEM_PLUS, ui::EF_NONE},
{ui::VKEY_OEM_PLUS, ui::EF_NONE}},
// The number row should be rewritten as the F<number> row with Search // The number row should be rewritten as the F<number> row with Search
// key. // key.
{ui::VKEY_1, ui::EF_COMMAND_DOWN, ui::VKEY_F1, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_2, ui::EF_COMMAND_DOWN, ui::VKEY_F2, ui::EF_NONE}, {ui::VKEY_1, ui::EF_COMMAND_DOWN},
{ui::VKEY_3, ui::EF_COMMAND_DOWN, ui::VKEY_F3, ui::EF_NONE}, {ui::VKEY_F1, ui::EF_NONE}},
{ui::VKEY_4, ui::EF_COMMAND_DOWN, ui::VKEY_F4, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_5, ui::EF_COMMAND_DOWN, ui::VKEY_F5, ui::EF_NONE}, {ui::VKEY_2, ui::EF_COMMAND_DOWN},
{ui::VKEY_6, ui::EF_COMMAND_DOWN, ui::VKEY_F6, ui::EF_NONE}, {ui::VKEY_F2, ui::EF_NONE}},
{ui::VKEY_7, ui::EF_COMMAND_DOWN, ui::VKEY_F7, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_8, ui::EF_COMMAND_DOWN, ui::VKEY_F8, ui::EF_NONE}, {ui::VKEY_3, ui::EF_COMMAND_DOWN},
{ui::VKEY_9, ui::EF_COMMAND_DOWN, ui::VKEY_F9, ui::EF_NONE}, {ui::VKEY_F3, ui::EF_NONE}},
{ui::VKEY_0, ui::EF_COMMAND_DOWN, ui::VKEY_F10, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_OEM_MINUS, ui::EF_COMMAND_DOWN, ui::VKEY_F11, ui::EF_NONE}, {ui::VKEY_4, ui::EF_COMMAND_DOWN},
{ui::VKEY_OEM_PLUS, ui::EF_COMMAND_DOWN, ui::VKEY_F12, ui::EF_NONE}, {ui::VKEY_F4, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_5, ui::EF_COMMAND_DOWN},
{ui::VKEY_F5, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_6, ui::EF_COMMAND_DOWN},
{ui::VKEY_F6, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_7, ui::EF_COMMAND_DOWN},
{ui::VKEY_F7, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_8, ui::EF_COMMAND_DOWN},
{ui::VKEY_F8, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_9, ui::EF_COMMAND_DOWN},
{ui::VKEY_F9, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_0, ui::EF_COMMAND_DOWN},
{ui::VKEY_F10, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_OEM_MINUS, ui::EF_COMMAND_DOWN},
{ui::VKEY_F11, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_OEM_PLUS, ui::EF_COMMAND_DOWN},
{ui::VKEY_F12, ui::EF_NONE}},
// The function keys should not be rewritten with Search key pressed. // The function keys should not be rewritten with Search key pressed.
{ui::VKEY_F1, ui::EF_COMMAND_DOWN, ui::VKEY_F1, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F2, ui::EF_COMMAND_DOWN, ui::VKEY_F2, ui::EF_NONE}, {ui::VKEY_F1, ui::EF_COMMAND_DOWN},
{ui::VKEY_F3, ui::EF_COMMAND_DOWN, ui::VKEY_F3, ui::EF_NONE}, {ui::VKEY_F1, ui::EF_NONE}},
{ui::VKEY_F4, ui::EF_COMMAND_DOWN, ui::VKEY_F4, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F5, ui::EF_COMMAND_DOWN, ui::VKEY_F5, ui::EF_NONE}, {ui::VKEY_F2, ui::EF_COMMAND_DOWN},
{ui::VKEY_F6, ui::EF_COMMAND_DOWN, ui::VKEY_F6, ui::EF_NONE}, {ui::VKEY_F2, ui::EF_NONE}},
{ui::VKEY_F7, ui::EF_COMMAND_DOWN, ui::VKEY_F7, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F8, ui::EF_COMMAND_DOWN, ui::VKEY_F8, ui::EF_NONE}, {ui::VKEY_F3, ui::EF_COMMAND_DOWN},
{ui::VKEY_F9, ui::EF_COMMAND_DOWN, ui::VKEY_F9, ui::EF_NONE}, {ui::VKEY_F3, ui::EF_NONE}},
{ui::VKEY_F10, ui::EF_COMMAND_DOWN, ui::VKEY_F10, ui::EF_NONE}, {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F11, ui::EF_COMMAND_DOWN, ui::VKEY_F11, ui::EF_NONE}, {ui::VKEY_F4, ui::EF_COMMAND_DOWN},
{ui::VKEY_F12, ui::EF_COMMAND_DOWN, ui::VKEY_F12, ui::EF_NONE}, {ui::VKEY_F4, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F5, ui::EF_COMMAND_DOWN},
{ui::VKEY_F5, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F6, ui::EF_COMMAND_DOWN},
{ui::VKEY_F6, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F7, ui::EF_COMMAND_DOWN},
{ui::VKEY_F7, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F8, ui::EF_COMMAND_DOWN},
{ui::VKEY_F8, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F9, ui::EF_COMMAND_DOWN},
{ui::VKEY_F9, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F10, ui::EF_COMMAND_DOWN},
{ui::VKEY_F10, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F11, ui::EF_COMMAND_DOWN},
{ui::VKEY_F11, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F12, ui::EF_COMMAND_DOWN},
{ui::VKEY_F12, ui::EF_NONE}},
}; };
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) { for (size_t i = 0; i < arraysize(tests); ++i) {
EXPECT_EQ(GetExpectedResultNumbered( CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
i, tests[i].output, tests[i].output_mods, ui::ET_KEY_PRESSED),
GetRewrittenEventNumbered(i,
&rewriter,
tests[i].input,
tests[i].input_mods,
ui::ET_KEY_PRESSED));
} }
} }
...@@ -1320,22 +1409,22 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) { ...@@ -1320,22 +1409,22 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) {
CommandLine::ForCurrentProcess()->AppendSwitchASCII( CommandLine::ForCurrentProcess()->AppendSwitchASCII(
chromeos::switches::kHasChromeOSKeyboard, ""); chromeos::switches::kHasChromeOSKeyboard, "");
KeyTestCase tests[] = {
// Alt+Search+Down -> End // Alt+Search+Down -> End
EXPECT_EQ( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
GetExpectedResultAsString(ui::VKEY_END, ui::EF_NONE, ui::ET_KEY_PRESSED), {ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
GetRewrittenEventAsString(&rewriter, {ui::VKEY_END, ui::EF_NONE}},
ui::VKEY_DOWN,
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED));
// Shift+Alt+Search+Down -> Shift+End // Shift+Alt+Search+Down -> Shift+End
EXPECT_EQ(GetExpectedResultAsString( {KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
ui::VKEY_END, ui::EF_SHIFT_DOWN, ui::ET_KEY_PRESSED), {ui::VKEY_DOWN,
GetRewrittenEventAsString( ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
&rewriter, {ui::VKEY_END, ui::EF_SHIFT_DOWN}},
ui::VKEY_DOWN, };
ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED)); for (size_t i = 0; i < arraysize(tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
}
*CommandLine::ForCurrentProcess() = original_cl; *CommandLine::ForCurrentProcess() = original_cl;
} }
......
...@@ -23,6 +23,10 @@ unsigned int XEventState(int flags) { ...@@ -23,6 +23,10 @@ unsigned int XEventState(int flags) {
((flags & ui::EF_CONTROL_DOWN) ? ControlMask : 0) | ((flags & ui::EF_CONTROL_DOWN) ? ControlMask : 0) |
((flags & ui::EF_ALT_DOWN) ? Mod1Mask : 0) | ((flags & ui::EF_ALT_DOWN) ? Mod1Mask : 0) |
((flags & ui::EF_CAPS_LOCK_DOWN) ? LockMask : 0) | ((flags & ui::EF_CAPS_LOCK_DOWN) ? LockMask : 0) |
((flags & ui::EF_ALTGR_DOWN) ? Mod5Mask : 0) |
((flags & ui::EF_COMMAND_DOWN) ? Mod4Mask : 0) |
((flags & ui::EF_MOD3_DOWN) ? Mod3Mask : 0) |
((flags & ui::EF_NUMPAD_KEY) ? Mod2Mask : 0) |
((flags & ui::EF_LEFT_MOUSE_BUTTON) ? Button1Mask: 0) | ((flags & ui::EF_LEFT_MOUSE_BUTTON) ? Button1Mask: 0) |
((flags & ui::EF_MIDDLE_MOUSE_BUTTON) ? Button2Mask: 0) | ((flags & ui::EF_MIDDLE_MOUSE_BUTTON) ? Button2Mask: 0) |
((flags & ui::EF_RIGHT_MOUSE_BUTTON) ? Button3Mask: 0); ((flags & ui::EF_RIGHT_MOUSE_BUTTON) ? Button3Mask: 0);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment