Commit 440fd82e authored by fgorski@chromium.org's avatar fgorski@chromium.org

Revert 272428 "Add native event testing to chromeos::EventRewrit..."

The CL introduced unit test failures on Chromium OS ASan LSan Tests(3)
http://build.chromium.org/p/chromium.memory/builders/Linux%20Chromium%20OS%20ASan%20LSan%20Tests%20%283%29/builds/1499

Failing tests:
EventRewriterTest.TestRewriteFunctionKeys
EventRewriterTest.TestRewriteModifiersDisableSome

> Add native event testing to chromeos::EventRewriter unit tests.
> 
> Most tests (not having state) are converted to a table-driven form,
> so that multiple test operations can be done on the same test data.
> Additional tests based on X11 native events are done on these cases.
> 
> The fallback X11 keycode to keysym mapping is expanded, because the
> X server used by some automated tests does not support some of the
> keycodes used by ChromeOS top-row special keys.
> 
> 
> R=sadrul@chromium.org
> 
> Review URL: https://codereview.chromium.org/270633012

TBR=kpschoedel@chromium.org

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

git-svn-id: svn://svn.chromium.org/chrome/trunk/src@272553 0039d316-1c4b-4281-b951-d872f2087c98
parent 7cccdb4b
......@@ -137,7 +137,6 @@ void UpdateX11EventMask(int ui_flags, unsigned int* x_flags) {
{ui::EF_ALT_DOWN, Mod1Mask},
{ui::EF_CAPS_LOCK_DOWN, LockMask},
{ui::EF_ALTGR_DOWN, Mod5Mask},
{ui::EF_COMMAND_DOWN, Mod4Mask},
{ui::EF_MOD3_DOWN, Mod3Mask},
{ui::EF_NUMPAD_KEY, Mod2Mask},
{ui::EF_LEFT_MOUSE_BUTTON, Button1Mask},
......
......@@ -38,18 +38,11 @@
namespace {
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",
ui_keycode,
ui_flags,
ui_type);
}
std::string GetKeyEventAsString(const ui::KeyEvent& keyevent) {
return GetExpectedResultAsString(
keyevent.key_code(), keyevent.flags(), keyevent.type());
return base::StringPrintf("ui_keycode=0x%X ui_flags=0x%X ui_type=%d",
keyevent.key_code(),
keyevent.flags(),
keyevent.type());
}
std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter,
......@@ -65,70 +58,30 @@ std::string GetRewrittenEventAsString(chromeos::EventRewriter* rewriter,
return GetKeyEventAsString(event);
}
// Table entry for simple single key event rewriting tests.
struct KeyTestCase {
enum {
// Test types:
TEST_VKEY = 1 << 0, // Test ui::KeyEvent with no native event
TEST_X11 = 1 << 1, // Test ui::KeyEvent with native XKeyEvent
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 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",
ui_keycode,
ui_flags,
ui_type);
}
// 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,
const KeyTestCase& test) {
std::string id = base::StringPrintf("(%zu) ", i);
std::string expected =
id + 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(
rewriter, test.input.key_code, test.input.flags, test.type));
}
std::string GetRewrittenEventNumbered(size_t i,
chromeos::EventRewriter* rewriter,
ui::KeyboardCode ui_keycode,
int ui_flags,
ui::EventType ui_type) {
return base::StringPrintf("(%zu) ", i) +
GetRewrittenEventAsString(rewriter, ui_keycode, ui_flags, ui_type);
}
#if defined(USE_X11)
if (test.test & KeyTestCase::TEST_X11) {
ui::ScopedXI2Event xev;
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));
// 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
std::string GetExpectedResultNumbered(size_t i,
ui::KeyboardCode ui_keycode,
int ui_flags,
ui::EventType ui_type) {
return base::StringPrintf("(%zu) ", i) +
GetExpectedResultAsString(ui_keycode, ui_flags, ui_type);
}
} // namespace
......@@ -141,7 +94,8 @@ class EventRewriterTest : public ash::test::AshTestBase {
: display_(gfx::GetXDisplay()),
mock_user_manager_(new chromeos::MockUserManager),
user_manager_enabler_(mock_user_manager_),
input_method_manager_mock_(NULL) {}
input_method_manager_mock_(NULL) {
}
virtual ~EventRewriterTest() {}
virtual void SetUp() {
......@@ -187,71 +141,89 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControl) {
rewriter.set_last_device_id_for_testing(0);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase pc_keyboard_tests[] = {
// VKEY_A, Alt modifier.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_A, ui::EF_ALT_DOWN},
{ui::VKEY_A, ui::EF_ALT_DOWN}},
// VKEY_A, Win modifier.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_A, ui::EF_COMMAND_DOWN},
{ui::VKEY_A, ui::EF_COMMAND_DOWN}},
// VKEY_A, Alt+Win modifier.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
{ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}},
// VKEY_LWIN (left Windows key), Alt modifier.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_LWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
{ui::VKEY_LWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}},
// VKEY_RWIN (right Windows key), Alt modifier.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_RWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
{ui::VKEY_RWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}},
};
for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, pc_keyboard_tests[i]);
}
// VKEY_A, Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED));
// VKEY_A, Win modifier.
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_A, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_A, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED));
// VKEY_A, Alt+Win modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A,
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_A,
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED));
// VKEY_LWIN (left Windows key), Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_LWIN,
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_LWIN,
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED));
// VKEY_RWIN (right Windows key), Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_RWIN,
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_RWIN,
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED));
// An Apple keyboard reusing the ID, zero.
rewriter.DeviceAddedForTesting(0, "Apple Keyboard");
rewriter.set_last_device_id_for_testing(0);
KeyTestCase apple_keyboard_tests[] = {
// VKEY_A, Alt modifier.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_A, ui::EF_ALT_DOWN},
{ui::VKEY_A, ui::EF_ALT_DOWN}},
// VKEY_A, Win modifier.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_A, ui::EF_COMMAND_DOWN},
{ui::VKEY_A, ui::EF_CONTROL_DOWN}},
// VKEY_A, Alt+Win modifier.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
{ui::VKEY_A, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}},
// VKEY_LWIN (left Windows key), Alt modifier.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_LWIN, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN},
{ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN}},
// VKEY_RWIN (right Windows key), Alt modifier.
{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}},
};
for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) {
CheckKeyTestCase(2000 + i, &rewriter, apple_keyboard_tests[i]);
}
// VKEY_A, Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED));
// VKEY_A, Win modifier.
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_A, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED));
// VKEY_A, Alt+Win modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A,
ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_A,
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED));
// VKEY_LWIN (left Windows key), Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL,
ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_LWIN,
ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
ui::ET_KEY_PRESSED));
// VKEY_RWIN (right Windows key), Alt modifier.
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));
}
// For crbug.com/133896.
......@@ -268,37 +240,37 @@ TEST_F(EventRewriterTest, TestRewriteCommandToControlWithControlRemapped) {
rewriter.DeviceAddedForTesting(0, "PC Keyboard");
rewriter.set_last_device_id_for_testing(0);
KeyTestCase pc_keyboard_tests[] = {// Control should be remapped to Alt.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN},
{ui::VKEY_MENU, ui::EF_ALT_DOWN}},
};
for (size_t i = 0; i < arraysize(pc_keyboard_tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, pc_keyboard_tests[i]);
}
// Control should be remapped to Alt.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_CONTROL,
ui::EF_CONTROL_DOWN,
ui::ET_KEY_PRESSED));
// An Apple keyboard reusing the ID, zero.
rewriter.DeviceAddedForTesting(0, "Apple Keyboard");
rewriter.set_last_device_id_for_testing(0);
KeyTestCase apple_keyboard_tests[] = {
// VKEY_LWIN (left Command key) with Alt modifier. The remapped Command
// key should never be re-remapped to Alt.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_LWIN, 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 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}},
};
for (size_t i = 0; i < arraysize(apple_keyboard_tests); ++i) {
CheckKeyTestCase(2000 + i, &rewriter, apple_keyboard_tests[i]);
}
// VKEY_LWIN (left Command key) with Alt modifier. The remapped Command key
// should never be re-remapped to Alt.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL,
ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_LWIN,
ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN,
ui::ET_KEY_PRESSED));
// VKEY_RWIN (right Command key) with Alt modifier. The remapped Command key
// should never be re-remapped to Alt.
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() {
......@@ -306,126 +278,188 @@ void EventRewriterTest::TestRewriteNumPadKeys() {
EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
// XK_KP_Insert (= NumPad 0 without Num Lock), no modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_INSERT, ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY}},
// XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_INSERT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD0, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
// XK_KP_Delete (= NumPad . without Num Lock), Alt modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_DELETE, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
{ui::VKEY_DECIMAL, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
// XK_KP_End (= NumPad 1 without Num Lock), Alt modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_END, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD1, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
// XK_KP_Down (= NumPad 2 without Num Lock), Alt modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD2, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
// XK_KP_Next (= NumPad 3 without Num Lock), Alt modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_NEXT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD3, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
// XK_KP_Left (= NumPad 4 without Num Lock), Alt modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_LEFT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD4, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
// XK_KP_Begin (= NumPad 5 without Num Lock), Alt modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_CLEAR, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD5, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
// XK_KP_Right (= NumPad 6 without Num Lock), Alt modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_RIGHT, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD6, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
// XK_KP_Home (= NumPad 7 without Num Lock), Alt modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_HOME, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD7, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
// XK_KP_Up (= NumPad 8 without Num Lock), Alt modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD8, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
// XK_KP_Prior (= NumPad 9 without Num Lock), Alt modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_PRIOR, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD9, ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY}},
// XK_KP_0 (= NumPad 0 with Num Lock), Num Lock modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY}},
// XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY},
{ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY}},
// XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY}},
// XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY}},
// XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY}},
// XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY}},
// XK_KP_5 (= NumPad 5 with Num Lock), Num Lock modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY}},
// XK_KP_6 (= NumPad 6 with Num Lock), Num Lock modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY}},
// XK_KP_7 (= NumPad 7 with Num Lock), Num Lock modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY}},
// XK_KP_8 (= NumPad 8 with Num Lock), Num Lock modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY}},
// XK_KP_9 (= NumPad 9 with Num Lock), Num Lock modifier.
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY}},
};
for (size_t i = 0; i < arraysize(tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
}
// XK_KP_Insert (= NumPad 0 without Num Lock), no modifier.
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_INSERT, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_Insert (= NumPad 0 without Num Lock), Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD0,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED),
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.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_DECIMAL,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED),
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.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED),
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.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD2,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED),
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.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD3,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED),
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.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD4,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED),
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.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD5,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED),
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.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD6,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED),
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.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD7,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED),
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.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD8,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED),
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.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD9,
ui::EF_ALT_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED),
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.
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_NUMPAD0, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_DECIMAL (= NumPad . with Num Lock), Num Lock modifier.
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_DECIMAL, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_1 (= NumPad 1 with Num Lock), Num Lock modifier.
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_NUMPAD1, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_2 (= NumPad 2 with Num Lock), Num Lock modifier.
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_NUMPAD2, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_3 (= NumPad 3 with Num Lock), Num Lock modifier.
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_NUMPAD3, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_4 (= NumPad 4 with Num Lock), Num Lock modifier.
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_NUMPAD4, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_5 (= NumPad 5 with Num Lock), Num Lock modifier.
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_NUMPAD5, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_6 (= NumPad 6 with Num Lock), Num Lock modifier.
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_NUMPAD6, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_7 (= NumPad 7 with Num Lock), Num Lock modifier.
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_NUMPAD7, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_8 (= NumPad 8 with Num Lock), Num Lock modifier.
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_NUMPAD8, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
// XK_KP_9 (= NumPad 9 with Num Lock), Num Lock modifier.
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_NUMPAD9, ui::EF_NUMPAD_KEY, ui::ET_KEY_PRESSED));
}
TEST_F(EventRewriterTest, TestRewriteNumPadKeys) {
......@@ -450,24 +484,25 @@ void EventRewriterTest::TestRewriteNumPadKeysOnAppleKeyboard() {
rewriter.set_last_device_id_for_testing(0);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
// XK_KP_End (= NumPad 1 without Num Lock), Win modifier.
// The result should be "Num Pad 1 with Control + Num Lock modifiers".
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_END, ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD1, ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY}},
// XK_KP_1 (= NumPad 1 with Num Lock), Win modifier.
// The result should also be "Num Pad 1 with Control + Num Lock
// modifiers".
{KeyTestCase::TEST_ALL|KeyTestCase::NUMPAD, ui::ET_KEY_PRESSED,
{ui::VKEY_NUMPAD1, ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY},
{ui::VKEY_NUMPAD1, ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY}},
};
for (size_t i = 0; i < arraysize(tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
}
// XK_KP_End (= NumPad 1 without Num Lock), Win modifier.
// The result should be "Num Pad 1 with Control + Num Lock modifiers".
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1,
ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED),
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.
// The result should also be "Num Pad 1 with Control + Num Lock modifiers".
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_NUMPAD1,
ui::EF_CONTROL_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_NUMPAD1,
ui::EF_COMMAND_DOWN | ui::EF_NUMPAD_KEY,
ui::ET_KEY_PRESSED));
}
TEST_F(EventRewriterTest, TestRewriteNumPadKeysOnAppleKeyboard) {
......@@ -490,42 +525,46 @@ TEST_F(EventRewriterTest, TestRewriteModifiersNoRemap) {
EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
// Press Search. Confirm the event is not rewritten.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_LWIN, ui::EF_NONE},
{ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}},
// Press left Control. Confirm the event is not rewritten.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN},
{ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}},
// Press right Control. Confirm the event is not rewritten.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN},
{ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}},
// Press left Alt. Confirm the event is not rewritten.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_MENU, ui::EF_ALT_DOWN},
{ui::VKEY_MENU, ui::EF_ALT_DOWN}},
// Press right Alt. Confirm the event is not rewritten.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_MENU, ui::EF_ALT_DOWN},
{ui::VKEY_MENU, ui::EF_ALT_DOWN}},
// Test KeyRelease event, just in case.
// Release Search. Confirm the release event is not rewritten.
{KeyTestCase::TEST_ALL, ui::ET_KEY_RELEASED,
{ui::VKEY_LWIN, ui::EF_NONE},
{ui::VKEY_LWIN, ui::EF_NONE}},
};
for (size_t i = 0; i < arraysize(tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
}
// Press Search. Confirm the event is not rewritten.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_PRESSED));
// Press left Control. Confirm the event is not rewritten.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_CONTROL,
ui::EF_CONTROL_DOWN,
ui::ET_KEY_PRESSED));
// Press right Control. Confirm the event is not rewritten.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_CONTROL,
ui::EF_CONTROL_DOWN,
ui::ET_KEY_PRESSED));
// Press left Alt. Confirm the event is not rewritten.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED));
// Press right Alt. Confirm the event is not rewritten.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED));
// Test KeyRelease event, just in case.
// Release Search. Confirm the release event is not rewritten.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_RELEASED));
}
TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) {
......@@ -533,33 +572,43 @@ TEST_F(EventRewriterTest, TestRewriteModifiersNoRemapMultipleKeys) {
EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
// Press Alt with Shift. Confirm the event is not rewritten.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN},
{ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}},
// Press Search with Caps Lock mask. Confirm the event is not rewritten.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN},
{ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN | ui::EF_COMMAND_DOWN}},
// Release Search with Caps Lock mask. Confirm the event is not rewritten.
{KeyTestCase::TEST_ALL, ui::ET_KEY_RELEASED,
{ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN},
{ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN}},
// Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
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) {
CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
}
// Press Alt with Shift. Confirm the event is not rewritten.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU,
ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
ui::ET_KEY_PRESSED),
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.
EXPECT_EQ(
GetExpectedResultAsString(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.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_LWIN, ui::EF_CAPS_LOCK_DOWN, ui::ET_KEY_RELEASED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_LWIN,
ui::EF_CAPS_LOCK_DOWN,
ui::ET_KEY_RELEASED));
// Press Shift+Ctrl+Alt+Search+A. Confirm the event is not rewritten.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_B,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_B,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED));
}
TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) {
......@@ -576,68 +625,70 @@ TEST_F(EventRewriterTest, TestRewriteModifiersDisableSome) {
EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase disabled_modifier_tests[] = {
// Press Alt with Shift. This key press shouldn't be affected by the
// pref. Confirm the event is not rewritten.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN},
{ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN}},
// Press Search. Confirm the event is now VKEY_UNKNOWN.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_LWIN, ui::EF_NONE},
{ui::VKEY_UNKNOWN, ui::EF_NONE}},
// Press Control. Confirm the event is now VKEY_UNKNOWN.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN},
{ui::VKEY_UNKNOWN, ui::EF_NONE}},
// Press Control+Search. Confirm the event is now VKEY_UNKNOWN
// without any modifiers.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_LWIN, ui::EF_CONTROL_DOWN},
{ui::VKEY_UNKNOWN, ui::EF_NONE}},
// Press Control+Search+a. Confirm the event is now VKEY_A without any
// modifiers.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_A, ui::EF_CONTROL_DOWN},
{ui::VKEY_A, ui::EF_NONE}},
// Press Control+Search+Alt+a. Confirm the event is now VKEY_A only with
// the Alt modifier.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN},
{ui::VKEY_A, ui::EF_ALT_DOWN}},
};
for (size_t i = 0; i < arraysize(disabled_modifier_tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, disabled_modifier_tests[i]);
}
// Press Alt with Shift. This key press shouldn't be affected by the
// pref. Confirm the event is not rewritten.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU,
ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN,
ui::ET_KEY_PRESSED),
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.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_LWIN, ui::EF_NONE, ui::ET_KEY_PRESSED));
// Press Control. Confirm the event is now VKEY_UNKNOWN.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_CONTROL, ui::EF_NONE, ui::ET_KEY_PRESSED));
// Press Control+Search. Confirm the event is now VKEY_UNKNOWN
// without any modifiers.
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_UNKNOWN, ui::EF_NONE, ui::ET_KEY_PRESSED),
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
// modifiers.
EXPECT_EQ(
GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&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
// the Alt modifier.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_A,
ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN,
ui::ET_KEY_PRESSED));
// Remap Alt to Control.
IntegerPrefMember alt;
alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs);
alt.SetValue(chromeos::input_method::kControlKey);
KeyTestCase tests[] = {
// Press left Alt. Confirm the event is now VKEY_CONTROL
// even though the Control key itself is disabled.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_MENU, ui::EF_ALT_DOWN},
{ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}},
// Press Alt+a. Confirm the event is now Control+a even though the Control
// key itself is disabled.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_A, ui::EF_ALT_DOWN},
{ui::VKEY_A, ui::EF_CONTROL_DOWN}},
};
for (size_t i = 0; i < arraysize(tests); ++i) {
CheckKeyTestCase(2000 + i, &rewriter, tests[i]);
}
// Press left Alt. Confirm the event is now VKEY_CONTROL
// even though the Control key itself is disabled.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&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
// key itself is disabled.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_A, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED));
}
TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) {
......@@ -651,57 +702,62 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToControl) {
EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase s_tests[] = {
// Press Search. Confirm the event is now VKEY_CONTROL.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_LWIN, ui::EF_COMMAND_DOWN},
{ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}},
};
for (size_t i = 0; i < arraysize(s_tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, s_tests[i]);
}
// Press Search. Confirm the event is now VKEY_CONTROL.
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED));
// Remap Alt to Control too.
IntegerPrefMember alt;
alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs);
alt.SetValue(chromeos::input_method::kControlKey);
KeyTestCase sa_tests[] = {
// Press Alt. Confirm the event is now VKEY_CONTROL.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_MENU, ui::EF_ALT_DOWN},
{ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}},
// Press Alt+Search. Confirm the event is now VKEY_CONTROL.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_LWIN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
{ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}},
// Press Control+Alt+Search. Confirm the event is now VKEY_CONTROL.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_LWIN,
ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
{ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}},
// Press Shift+Control+Alt+Search. Confirm the event is now Control with
// Shift and Control modifiers.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_LWIN, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
{ui::VKEY_CONTROL, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}},
// Press Shift+Control+Alt+Search+B. Confirm the event is now B with Shift
// and Control modifiers.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
ui::EF_COMMAND_DOWN},
{ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN}},
};
for (size_t i = 0; i < arraysize(sa_tests); ++i) {
CheckKeyTestCase(2000 + i, &rewriter, sa_tests[i]);
}
// Press Alt. Confirm the event is now VKEY_CONTROL.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED));
// Press Alt+Search. Confirm the event is now VKEY_CONTROL.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
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.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&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. Confirm the event is now Control with
// Shift and Control modifiers.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_CONTROL,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN,
ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
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
// and Control modifiers.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_B,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN,
ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_B,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED));
}
TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) {
......@@ -715,15 +771,12 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapToEscape) {
EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {// Press Search. Confirm the event is now VKEY_ESCAPE.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_LWIN, ui::EF_COMMAND_DOWN},
{ui::VKEY_ESCAPE, ui::EF_NONE}},
};
for (size_t i = 0; i < arraysize(tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
}
// Press Search. Confirm the event is now VKEY_ESCAPE.
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_ESCAPE, ui::EF_NONE, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED));
}
TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) {
......@@ -737,69 +790,69 @@ TEST_F(EventRewriterTest, TestRewriteModifiersRemapMany) {
EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase s2a_tests[] = {
// Press Search. Confirm the event is now VKEY_MENU.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_LWIN, ui::EF_COMMAND_DOWN},
{ui::VKEY_MENU, ui::EF_ALT_DOWN}},
};
for (size_t i = 0; i < arraysize(s2a_tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, s2a_tests[i]);
}
// Press Search. Confirm the event is now VKEY_MENU.
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED));
// Remap Alt to Control.
IntegerPrefMember alt;
alt.Init(prefs::kLanguageRemapAltKeyTo, &prefs);
alt.SetValue(chromeos::input_method::kControlKey);
KeyTestCase a2c_tests[] = {
// Press left Alt. Confirm the event is now VKEY_CONTROL.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_MENU, ui::EF_ALT_DOWN},
{ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN}},
};
for (size_t i = 0; i < arraysize(a2c_tests); ++i) {
CheckKeyTestCase(2000 + i, &rewriter, a2c_tests[i]);
}
// Press left Alt. Confirm the event is now VKEY_CONTROL.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_MENU, ui::EF_ALT_DOWN, ui::ET_KEY_PRESSED));
// Remap Control to Search.
IntegerPrefMember control;
control.Init(prefs::kLanguageRemapControlKeyTo, &prefs);
control.SetValue(chromeos::input_method::kSearchKey);
KeyTestCase c2s_tests[] = {
// Press left Control. Confirm the event is now VKEY_LWIN.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN},
{ui::VKEY_LWIN, ui::EF_COMMAND_DOWN}},
// Then, press all of the three, Control+Alt+Search.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_LWIN,
ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
{ui::VKEY_MENU,
ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}},
// Press Shift+Control+Alt+Search.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_LWIN, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
{ui::VKEY_MENU, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN}},
// Press Shift+Control+Alt+Search+B
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_B, ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN |
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) {
CheckKeyTestCase(3000 + i, &rewriter, c2s_tests[i]);
}
// Press left Control. Confirm the event is now VKEY_LWIN.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_LWIN, ui::EF_COMMAND_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_CONTROL,
ui::EF_CONTROL_DOWN,
ui::ET_KEY_PRESSED));
// Then, press all of the three, Control+Alt+Search.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_MENU,
ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&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.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_MENU,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
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
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_B,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_B,
ui::EF_SHIFT_DOWN | ui::EF_CONTROL_DOWN |
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED));
}
TEST_F(EventRewriterTest, TestRewriteModifiersRemapToCapsLock) {
......@@ -904,26 +957,20 @@ TEST_F(EventRewriterTest, TestRewriteDiamondKey) {
rewriter.set_pref_service_for_testing(&prefs);
rewriter.set_ime_keyboard_for_testing(&ime_keyboard);
KeyTestCase tests[] = {
// F15 should work as Ctrl when --has-chromeos-diamond-key is not
// specified.
{KeyTestCase::TEST_VKEY,
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
// --has-chromeos-diamond-key is not specified.
{KeyTestCase::TEST_VKEY,
ui::ET_KEY_PRESSED,
{ui::VKEY_A, ui::EF_NONE},
{ui::VKEY_A, ui::EF_NONE}},
};
for (size_t i = 0; i < arraysize(tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
}
// F15 should work as Ctrl when --has-chromeos-diamond-key is not specified.
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_CONTROL, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_F15, ui::EF_NONE, ui::ET_KEY_PRESSED));
// However, Mod2Mask should not be rewritten to CtrlMask when
// --has-chromeos-diamond-key is not specified.
EXPECT_EQ(
GetExpectedResultAsString(ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_A, ui::EF_NONE, ui::ET_KEY_PRESSED));
}
TEST_F(EventRewriterTest, TestRewriteDiamondKeyWithFlag) {
const CommandLine original_cl(*CommandLine::ForCurrentProcess());
CommandLine::ForCurrentProcess()->AppendSwitchASCII(
......@@ -988,29 +1035,29 @@ TEST_F(EventRewriterTest, TestRewriteCapsLockToControl) {
EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
// Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask.
// On Chrome OS, CapsLock works as a Mod3 modifier.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_A, ui::EF_MOD3_DOWN},
{ui::VKEY_A, ui::EF_CONTROL_DOWN}},
// Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to
// ControlMask
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_MOD3_DOWN},
{ui::VKEY_A, ui::EF_CONTROL_DOWN}},
// Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to
// 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}},
};
for (size_t i = 0; i < arraysize(tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
}
// Press CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask.
// On Chrome OS, CapsLock works as a Mod3 modifier.
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_A, ui::EF_MOD3_DOWN, ui::ET_KEY_PRESSED));
// Press Control+CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask
EXPECT_EQ(
GetExpectedResultAsString(
ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter, ui::VKEY_A, ui::EF_CONTROL_DOWN, ui::ET_KEY_PRESSED));
// Press Alt+CapsLock+a. Confirm that Mod3Mask is rewritten to ControlMask.
EXPECT_EQ(GetExpectedResultAsString(ui::VKEY_A,
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) {
......@@ -1043,104 +1090,86 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeys) {
rewriter.set_last_device_id_for_testing(0);
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
// Alt+Backspace -> Delete
{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
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN},
{ui::VKEY_DELETE, ui::EF_CONTROL_DOWN}},
// Search+Alt+Backspace -> Alt+Backspace
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_BACK,
ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN},
{ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}},
// Alt+Up -> Prior
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_UP, ui::EF_ALT_DOWN},
{ui::VKEY_PRIOR, ui::EF_NONE}},
// Alt+Down -> Next
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_DOWN, ui::EF_ALT_DOWN},
{ui::VKEY_NEXT, ui::EF_NONE}},
// Ctrl+Alt+Up -> Home
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN},
{ui::VKEY_HOME, ui::EF_NONE}},
// Ctrl+Alt+Down -> End
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN},
{ui::VKEY_END, ui::EF_NONE}},
// Search+Alt+Up -> Alt+Up
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_UP, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN},
{ui::VKEY_UP, ui::EF_ALT_DOWN}},
// Search+Alt+Down -> Alt+Down
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_UP,
ui::EF_COMMAND_DOWN | 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
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_DOWN,
ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN},
{ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN}},
// Period -> Period
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_OEM_PERIOD, ui::EF_NONE},
{ui::VKEY_OEM_PERIOD, ui::EF_NONE}},
// Search+Backspace -> Delete
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_BACK, ui::EF_COMMAND_DOWN},
{ui::VKEY_DELETE, ui::EF_NONE}},
// Search+Up -> Prior
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_UP, ui::EF_COMMAND_DOWN},
{ui::VKEY_PRIOR, ui::EF_NONE}},
// Search+Down -> Next
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_DOWN, ui::EF_COMMAND_DOWN},
{ui::VKEY_NEXT, ui::EF_NONE}},
// Search+Left -> Home
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_LEFT, ui::EF_COMMAND_DOWN},
{ui::VKEY_HOME, ui::EF_NONE}},
// Control+Search+Left -> Home
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_LEFT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN},
{ui::VKEY_HOME, ui::EF_CONTROL_DOWN}},
// Search+Right -> End
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN},
{ui::VKEY_END, ui::EF_NONE}},
// Control+Search+Right -> End
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN},
{ui::VKEY_END, ui::EF_CONTROL_DOWN}},
// Search+Period -> Insert
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN},
{ui::VKEY_INSERT, ui::EF_NONE}},
// Control+Search+Period -> Control+Insert
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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(tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
struct {
ui::KeyboardCode input;
unsigned int input_mods;
ui::KeyboardCode output;
unsigned int output_mods;
} chromeos_tests[] = {
// Alt+Backspace -> Delete
{ui::VKEY_BACK, ui::EF_ALT_DOWN, ui::VKEY_DELETE, ui::EF_NONE},
// Control+Alt+Backspace -> Control+Delete
{ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::VKEY_DELETE,
ui::EF_CONTROL_DOWN},
// Search+Alt+Backspace -> Alt+Backspace
{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
{ui::VKEY_BACK,
ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
ui::VKEY_BACK, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN},
// Alt+Up -> Prior
{ui::VKEY_UP, ui::EF_ALT_DOWN, ui::VKEY_PRIOR, ui::EF_NONE},
// Alt+Down -> Next
{ui::VKEY_DOWN, ui::EF_ALT_DOWN, ui::VKEY_NEXT, ui::EF_NONE},
// Ctrl+Alt+Up -> Home
{ui::VKEY_UP, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::VKEY_HOME,
ui::EF_NONE},
// Ctrl+Alt+Down -> End
{ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN, ui::VKEY_END,
ui::EF_NONE},
// Search+Alt+Up -> Alt+Up
{ui::VKEY_UP, ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN, ui::VKEY_UP,
ui::EF_ALT_DOWN},
// Search+Alt+Down -> 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
{ui::VKEY_UP,
ui::EF_COMMAND_DOWN | 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
{ui::VKEY_DOWN,
ui::EF_COMMAND_DOWN | ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN,
ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_CONTROL_DOWN},
// Period -> Period
{ui::VKEY_OEM_PERIOD, ui::EF_NONE, ui::VKEY_OEM_PERIOD, ui::EF_NONE},
// Search+Backspace -> Delete
{ui::VKEY_BACK, ui::EF_COMMAND_DOWN, ui::VKEY_DELETE, ui::EF_NONE},
// Search+Up -> Prior
{ui::VKEY_UP, ui::EF_COMMAND_DOWN, ui::VKEY_PRIOR, ui::EF_NONE},
// Search+Down -> Next
{ui::VKEY_DOWN, ui::EF_COMMAND_DOWN, ui::VKEY_NEXT, ui::EF_NONE},
// Search+Left -> Home
{ui::VKEY_LEFT, ui::EF_COMMAND_DOWN, ui::VKEY_HOME, ui::EF_NONE},
// Control+Search+Left -> Home
{ui::VKEY_LEFT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN,
ui::VKEY_HOME, ui::EF_CONTROL_DOWN},
// Search+Right -> End
{ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN, ui::VKEY_END, ui::EF_NONE},
// Control+Search+Right -> End
{ui::VKEY_RIGHT, ui::EF_COMMAND_DOWN | ui::EF_CONTROL_DOWN,
ui::VKEY_END, ui::EF_CONTROL_DOWN},
// Search+Period -> Insert
{ui::VKEY_OEM_PERIOD, ui::EF_COMMAND_DOWN, ui::VKEY_INSERT,
ui::EF_NONE},
// Control+Search+Period -> Control+Insert
{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) {
EXPECT_EQ(GetExpectedResultNumbered(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));
}
}
......@@ -1150,246 +1179,128 @@ TEST_F(EventRewriterTest, TestRewriteFunctionKeys) {
EventRewriter rewriter;
rewriter.set_pref_service_for_testing(&prefs);
KeyTestCase tests[] = {
// F1 -> Back
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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::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
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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::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
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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::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
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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::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
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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::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
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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::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
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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::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
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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::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
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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::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
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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::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
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F11, ui::EF_ALT_DOWN},
{ui::VKEY_F11, ui::EF_ALT_DOWN}},
// F12 -> F12
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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}},
{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.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_3, ui::EF_NONE},
{ui::VKEY_3, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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}},
{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
// key.
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_3, ui::EF_COMMAND_DOWN},
{ui::VKEY_F3, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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}},
{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.
{KeyTestCase::TEST_ALL, ui::ET_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}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_F3, ui::EF_COMMAND_DOWN},
{ui::VKEY_F3, ui::EF_NONE}},
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{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}},
{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(tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
struct {
ui::KeyboardCode input;
unsigned int input_mods;
ui::KeyboardCode output;
unsigned int output_mods;
} tests[] = {
// F1 -> Back
{ui::VKEY_F1, ui::EF_NONE, ui::VKEY_BROWSER_BACK, ui::EF_NONE},
{ui::VKEY_F1, ui::EF_CONTROL_DOWN, ui::VKEY_BROWSER_BACK,
ui::EF_CONTROL_DOWN},
{ui::VKEY_F1, ui::EF_ALT_DOWN, ui::VKEY_BROWSER_BACK, ui::EF_ALT_DOWN},
// F2 -> Forward
{ui::VKEY_F2, ui::EF_NONE, ui::VKEY_BROWSER_FORWARD, ui::EF_NONE},
{ui::VKEY_F2, ui::EF_CONTROL_DOWN, ui::VKEY_BROWSER_FORWARD,
ui::EF_CONTROL_DOWN},
{ui::VKEY_F2, ui::EF_ALT_DOWN, ui::VKEY_BROWSER_FORWARD,
ui::EF_ALT_DOWN},
// F3 -> Refresh
{ui::VKEY_F3, ui::EF_NONE, ui::VKEY_BROWSER_REFRESH, ui::EF_NONE},
{ui::VKEY_F3, ui::EF_CONTROL_DOWN, ui::VKEY_BROWSER_REFRESH,
ui::EF_CONTROL_DOWN},
{ui::VKEY_F3, ui::EF_ALT_DOWN, ui::VKEY_BROWSER_REFRESH,
ui::EF_ALT_DOWN},
// F4 -> Launch App 2
{ui::VKEY_F4, ui::EF_NONE, ui::VKEY_MEDIA_LAUNCH_APP2, ui::EF_NONE},
{ui::VKEY_F4, ui::EF_CONTROL_DOWN, ui::VKEY_MEDIA_LAUNCH_APP2,
ui::EF_CONTROL_DOWN},
{ui::VKEY_F4, ui::EF_ALT_DOWN, ui::VKEY_MEDIA_LAUNCH_APP2,
ui::EF_ALT_DOWN},
// F5 -> Launch App 1
{ui::VKEY_F5, ui::EF_NONE, ui::VKEY_MEDIA_LAUNCH_APP1, ui::EF_NONE},
{ui::VKEY_F5, ui::EF_CONTROL_DOWN, ui::VKEY_MEDIA_LAUNCH_APP1,
ui::EF_CONTROL_DOWN},
{ui::VKEY_F5, ui::EF_ALT_DOWN, ui::VKEY_MEDIA_LAUNCH_APP1,
ui::EF_ALT_DOWN},
// F6 -> Brightness down
{ui::VKEY_F6, ui::EF_NONE, ui::VKEY_BRIGHTNESS_DOWN, ui::EF_NONE},
{ui::VKEY_F6, ui::EF_CONTROL_DOWN, ui::VKEY_BRIGHTNESS_DOWN,
ui::EF_CONTROL_DOWN},
{ui::VKEY_F6, ui::EF_ALT_DOWN, ui::VKEY_BRIGHTNESS_DOWN,
ui::EF_ALT_DOWN},
// F7 -> Brightness up
{ui::VKEY_F7, ui::EF_NONE, ui::VKEY_BRIGHTNESS_UP, ui::EF_NONE},
{ui::VKEY_F7, ui::EF_CONTROL_DOWN, ui::VKEY_BRIGHTNESS_UP,
ui::EF_CONTROL_DOWN},
{ui::VKEY_F7, ui::EF_ALT_DOWN, ui::VKEY_BRIGHTNESS_UP, ui::EF_ALT_DOWN},
// F8 -> Volume Mute
{ui::VKEY_F8, ui::EF_NONE, ui::VKEY_VOLUME_MUTE, ui::EF_NONE},
{ui::VKEY_F8, ui::EF_CONTROL_DOWN, ui::VKEY_VOLUME_MUTE,
ui::EF_CONTROL_DOWN},
{ui::VKEY_F8, ui::EF_ALT_DOWN, ui::VKEY_VOLUME_MUTE, ui::EF_ALT_DOWN},
// F9 -> Volume Down
{ui::VKEY_F9, ui::EF_NONE, ui::VKEY_VOLUME_DOWN, ui::EF_NONE},
{ui::VKEY_F9, ui::EF_CONTROL_DOWN, ui::VKEY_VOLUME_DOWN,
ui::EF_CONTROL_DOWN},
{ui::VKEY_F9, ui::EF_ALT_DOWN, ui::VKEY_VOLUME_DOWN, ui::EF_ALT_DOWN},
// F10 -> Volume Up
{ui::VKEY_F10, ui::EF_NONE, ui::VKEY_VOLUME_UP, ui::EF_NONE},
{ui::VKEY_F10, ui::EF_CONTROL_DOWN, ui::VKEY_VOLUME_UP,
ui::EF_CONTROL_DOWN},
{ui::VKEY_F10, ui::EF_ALT_DOWN, ui::VKEY_VOLUME_UP, ui::EF_ALT_DOWN},
// F11 -> F11
{ui::VKEY_F11, ui::EF_NONE, ui::VKEY_F11, ui::EF_NONE},
{ui::VKEY_F11, ui::EF_CONTROL_DOWN, ui::VKEY_F11, ui::EF_CONTROL_DOWN},
{ui::VKEY_F11, ui::EF_ALT_DOWN, ui::VKEY_F11, ui::EF_ALT_DOWN},
// F12 -> F12
{ui::VKEY_F12, ui::EF_NONE, ui::VKEY_F12, ui::EF_NONE},
{ui::VKEY_F12, ui::EF_CONTROL_DOWN, ui::VKEY_F12, ui::EF_CONTROL_DOWN},
{ui::VKEY_F12, ui::EF_ALT_DOWN, ui::VKEY_F12, ui::EF_ALT_DOWN},
// The number row should not be rewritten without Search key.
{ui::VKEY_1, ui::EF_NONE, ui::VKEY_1, ui::EF_NONE},
{ui::VKEY_2, ui::EF_NONE, ui::VKEY_2, ui::EF_NONE},
{ui::VKEY_3, ui::EF_NONE, ui::VKEY_3, ui::EF_NONE},
{ui::VKEY_4, ui::EF_NONE, ui::VKEY_4, ui::EF_NONE},
{ui::VKEY_5, ui::EF_NONE, ui::VKEY_5, ui::EF_NONE},
{ui::VKEY_6, ui::EF_NONE, ui::VKEY_6, ui::EF_NONE},
{ui::VKEY_7, ui::EF_NONE, ui::VKEY_7, ui::EF_NONE},
{ui::VKEY_8, ui::EF_NONE, ui::VKEY_8, ui::EF_NONE},
{ui::VKEY_9, ui::EF_NONE, ui::VKEY_9, ui::EF_NONE},
{ui::VKEY_0, ui::EF_NONE, ui::VKEY_0, ui::EF_NONE},
{ui::VKEY_OEM_MINUS, ui::EF_NONE, ui::VKEY_OEM_MINUS, ui::EF_NONE},
{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
// key.
{ui::VKEY_1, ui::EF_COMMAND_DOWN, ui::VKEY_F1, ui::EF_NONE},
{ui::VKEY_2, ui::EF_COMMAND_DOWN, ui::VKEY_F2, ui::EF_NONE},
{ui::VKEY_3, ui::EF_COMMAND_DOWN, ui::VKEY_F3, ui::EF_NONE},
{ui::VKEY_4, ui::EF_COMMAND_DOWN, ui::VKEY_F4, ui::EF_NONE},
{ui::VKEY_5, ui::EF_COMMAND_DOWN, ui::VKEY_F5, ui::EF_NONE},
{ui::VKEY_6, ui::EF_COMMAND_DOWN, ui::VKEY_F6, ui::EF_NONE},
{ui::VKEY_7, ui::EF_COMMAND_DOWN, ui::VKEY_F7, ui::EF_NONE},
{ui::VKEY_8, ui::EF_COMMAND_DOWN, ui::VKEY_F8, ui::EF_NONE},
{ui::VKEY_9, ui::EF_COMMAND_DOWN, ui::VKEY_F9, ui::EF_NONE},
{ui::VKEY_0, ui::EF_COMMAND_DOWN, ui::VKEY_F10, ui::EF_NONE},
{ui::VKEY_OEM_MINUS, ui::EF_COMMAND_DOWN, ui::VKEY_F11, ui::EF_NONE},
{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.
{ui::VKEY_F1, ui::EF_COMMAND_DOWN, ui::VKEY_F1, ui::EF_NONE},
{ui::VKEY_F2, ui::EF_COMMAND_DOWN, ui::VKEY_F2, ui::EF_NONE},
{ui::VKEY_F3, ui::EF_COMMAND_DOWN, ui::VKEY_F3, ui::EF_NONE},
{ui::VKEY_F4, ui::EF_COMMAND_DOWN, ui::VKEY_F4, ui::EF_NONE},
{ui::VKEY_F5, ui::EF_COMMAND_DOWN, ui::VKEY_F5, ui::EF_NONE},
{ui::VKEY_F6, ui::EF_COMMAND_DOWN, ui::VKEY_F6, ui::EF_NONE},
{ui::VKEY_F7, ui::EF_COMMAND_DOWN, ui::VKEY_F7, ui::EF_NONE},
{ui::VKEY_F8, ui::EF_COMMAND_DOWN, ui::VKEY_F8, ui::EF_NONE},
{ui::VKEY_F9, ui::EF_COMMAND_DOWN, ui::VKEY_F9, ui::EF_NONE},
{ui::VKEY_F10, ui::EF_COMMAND_DOWN, ui::VKEY_F10, ui::EF_NONE},
{ui::VKEY_F11, ui::EF_COMMAND_DOWN, ui::VKEY_F11, ui::EF_NONE},
{ui::VKEY_F12, ui::EF_COMMAND_DOWN, ui::VKEY_F12, ui::EF_NONE},
};
for (size_t i = 0; i < ARRAYSIZE_UNSAFE(tests); ++i) {
EXPECT_EQ(GetExpectedResultNumbered(
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));
}
}
......@@ -1409,22 +1320,22 @@ TEST_F(EventRewriterTest, TestRewriteExtendedKeysWithSearchRemapped) {
CommandLine::ForCurrentProcess()->AppendSwitchASCII(
chromeos::switches::kHasChromeOSKeyboard, "");
KeyTestCase tests[] = {
// Alt+Search+Down -> End
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_DOWN, ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
{ui::VKEY_END, ui::EF_NONE}},
// Shift+Alt+Search+Down -> Shift+End
{KeyTestCase::TEST_ALL, ui::ET_KEY_PRESSED,
{ui::VKEY_DOWN,
ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN},
{ui::VKEY_END, ui::EF_SHIFT_DOWN}},
};
for (size_t i = 0; i < arraysize(tests); ++i) {
CheckKeyTestCase(1000 + i, &rewriter, tests[i]);
}
// Alt+Search+Down -> End
EXPECT_EQ(
GetExpectedResultAsString(ui::VKEY_END, ui::EF_NONE, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(&rewriter,
ui::VKEY_DOWN,
ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED));
// Shift+Alt+Search+Down -> Shift+End
EXPECT_EQ(GetExpectedResultAsString(
ui::VKEY_END, ui::EF_SHIFT_DOWN, ui::ET_KEY_PRESSED),
GetRewrittenEventAsString(
&rewriter,
ui::VKEY_DOWN,
ui::EF_SHIFT_DOWN | ui::EF_ALT_DOWN | ui::EF_COMMAND_DOWN,
ui::ET_KEY_PRESSED));
*CommandLine::ForCurrentProcess() = original_cl;
}
......
......@@ -442,162 +442,99 @@ uint16 GetCharacterFromXEvent(XEvent* xev) {
}
unsigned int DefaultXKeysymFromHardwareKeycode(unsigned int hardware_code) {
// This function assumes that X11 is using evdev-based keycodes.
static const unsigned int kHardwareKeycodeMap[] = {
// This table covers the core 105-key keyboard.
0, // 0x00:
0, // 0x01:
0, // 0x02:
0, // 0x03:
0, // 0x04:
0, // 0x05:
0, // 0x06:
0, // XKB evdev (XKB - 8) X KeySym
0, // === =============== ======
XK_Escape, // 0x09: KEY_ESC Escape
XK_1, // 0x0A: KEY_1 1
XK_2, // 0x0B: KEY_2 2
XK_3, // 0x0C: KEY_3 3
XK_4, // 0x0D: KEY_4 4
XK_5, // 0x0E: KEY_5 5
XK_6, // 0x0F: KEY_6 6
XK_7, // 0x10: KEY_7 7
XK_8, // 0x11: KEY_8 8
XK_9, // 0x12: KEY_9 9
XK_0, // 0x13: KEY_0 0
XK_minus, // 0x14: KEY_MINUS minus
XK_equal, // 0x15: KEY_EQUAL equal
XK_BackSpace, // 0x16: KEY_BACKSPACE BackSpace
XK_Tab, // 0x17: KEY_TAB Tab
XK_q, // 0x18: KEY_Q q
XK_w, // 0x19: KEY_W w
XK_e, // 0x1A: KEY_E e
XK_r, // 0x1B: KEY_R r
XK_t, // 0x1C: KEY_T t
XK_y, // 0x1D: KEY_Y y
XK_u, // 0x1E: KEY_U u
XK_i, // 0x1F: KEY_I i
XK_o, // 0x20: KEY_O o
XK_p, // 0x21: KEY_P p
XK_bracketleft, // 0x22: KEY_LEFTBRACE bracketleft
XK_bracketright, // 0x23: KEY_RIGHTBRACE bracketright
XK_Return, // 0x24: KEY_ENTER Return
XK_Control_L, // 0x25: KEY_LEFTCTRL Control_L
XK_a, // 0x26: KEY_A a
XK_s, // 0x27: KEY_S s
XK_d, // 0x28: KEY_D d
XK_f, // 0x29: KEY_F f
XK_g, // 0x2A: KEY_G g
XK_h, // 0x2B: KEY_H h
XK_j, // 0x2C: KEY_J j
XK_k, // 0x2D: KEY_K k
XK_l, // 0x2E: KEY_L l
XK_semicolon, // 0x2F: KEY_SEMICOLON semicolon
XK_apostrophe, // 0x30: KEY_APOSTROPHE apostrophe
XK_grave, // 0x31: KEY_GRAVE grave
XK_Shift_L, // 0x32: KEY_LEFTSHIFT Shift_L
XK_backslash, // 0x33: KEY_BACKSLASH backslash
XK_z, // 0x34: KEY_Z z
XK_x, // 0x35: KEY_X x
XK_c, // 0x36: KEY_C c
XK_v, // 0x37: KEY_V v
XK_b, // 0x38: KEY_B b
XK_n, // 0x39: KEY_N n
XK_m, // 0x3A: KEY_M m
XK_comma, // 0x3B: KEY_COMMA comma
XK_period, // 0x3C: KEY_DOT period
XK_slash, // 0x3D: KEY_SLASH slash
XK_Shift_R, // 0x3E: KEY_RIGHTSHIFT Shift_R
0, // 0x3F: KEY_KPASTERISK KP_Multiply
XK_Alt_L, // 0x40: KEY_LEFTALT Alt_L
XK_space, // 0x41: KEY_SPACE space
XK_Caps_Lock, // 0x42: KEY_CAPSLOCK Caps_Lock
XK_F1, // 0x43: KEY_F1 F1
XK_F2, // 0x44: KEY_F2 F2
XK_F3, // 0x45: KEY_F3 F3
XK_F4, // 0x46: KEY_F4 F4
XK_F5, // 0x47: KEY_F5 F5
XK_F6, // 0x48: KEY_F6 F6
XK_F7, // 0x49: KEY_F7 F7
XK_F8, // 0x4A: KEY_F8 F8
XK_F9, // 0x4B: KEY_F9 F9
XK_F10, // 0x4C: KEY_F10 F10
XK_Num_Lock, // 0x4D: KEY_NUMLOCK Num_Lock
XK_Scroll_Lock, // 0x4E: KEY_SCROLLLOCK Scroll_Lock
XK_KP_7, // 0x4F: KEY_KP7 KP_7
XK_KP_8, // 0x50: KEY_KP8 KP_8
XK_KP_9, // 0x51: KEY_KP9 KP_9
XK_KP_Subtract, // 0x52: KEY_KPMINUS KP_Subtract
XK_KP_4, // 0x53: KEY_KP4 KP_4
XK_KP_5, // 0x54: KEY_KP5 KP_5
XK_KP_6, // 0x55: KEY_KP6 KP_6
XK_KP_Add, // 0x56: KEY_KPPLUS KP_Add
XK_KP_1, // 0x57: KEY_KP1 KP_1
XK_KP_2, // 0x58: KEY_KP2 KP_2
XK_KP_3, // 0x59: KEY_KP3 KP_3
XK_KP_0, // 0x5A: KEY_KP0 KP_0
XK_KP_Decimal, // 0x5B: KEY_KPDOT KP_Decimal
0, // 0x5C:
XK_Zenkaku_Hankaku, // 0x5D: KEY_ZENKAKUHANKAKU Zenkaku_Hankaku
XK_backslash, // 0x5E: KEY_102ND backslash
XK_F11, // 0x5F: KEY_F11 F11
XK_F12, // 0x60: KEY_F12 F12
XK_Romaji, // 0x61: KEY_RO Romaji
XK_Katakana, // 0x62: KEY_KATAKANA Katakana
XK_Hiragana, // 0x63: KEY_HIRAGANA Hiragana
XK_Henkan, // 0x64: KEY_HENKAN Henkan
XK_Hiragana_Katakana, // 0x65: KEY_KATAKANAHIRAGANA Hiragana_Katakana
XK_Muhenkan, // 0x66: KEY_MUHENKAN Muhenkan
XK_KP_Separator, // 0x67: KEY_KPJPCOMMA KP_Separator
XK_KP_Enter, // 0x68: KEY_KPENTER KP_Enter
XK_Control_R, // 0x69: KEY_RIGHTCTRL Control_R
XK_KP_Divide, // 0x6A: KEY_KPSLASH KP_Divide
XK_Print, // 0x6B: KEY_SYSRQ Print
XK_Alt_R, // 0x6C: KEY_RIGHTALT Alt_R
XK_Linefeed, // 0x6D: KEY_LINEFEED Linefeed
XK_Home, // 0x6E: KEY_HOME Home
XK_Up, // 0x6F: KEY_UP Up
XK_Page_Up, // 0x70: KEY_PAGEUP Page_Up
XK_Left, // 0x71: KEY_LEFT Left
XK_Right, // 0x72: KEY_RIGHT Right
XK_End, // 0x73: KEY_END End
XK_Down, // 0x74: KEY_DOWN Down
XK_Page_Down, // 0x75: KEY_PAGEDOWN Page_Down
XK_Insert, // 0x76: KEY_INSERT Insert
XK_Delete, // 0x77: KEY_DELETE Delete
0, // 0x78: KEY_MACRO
XF86XK_AudioMute, // 0x79: KEY_MUTE XF86AudioMute
XF86XK_AudioLowerVolume, // 0x7A: KEY_VOLUMEDOWN XF86AudioLowerVolume
XF86XK_AudioRaiseVolume, // 0x7B: KEY_VOLUMEUP XF86AudioRaiseVolume
XF86XK_PowerOff, // 0x7C: KEY_POWER XF86PowerOff
XK_KP_Equal, // 0x7D: KEY_KPEQUAL KP_Equal
XK_plusminus, // 0x7E: KEY_KPPLUSMINUS plusminus
XK_Pause, // 0x7F: KEY_PAUSE Pause
XF86XK_LaunchA, // 0x80: KEY_SCALE XF86LaunchA
XK_KP_Decimal, // 0x81: KEY_KPCOMMA KP_Decimal
XK_Hangul, // 0x82: KEY_HANGUEL Hangul
XK_Hangul_Hanja, // 0x83: KEY_HANJA Hangul_Hanja
XK_yen, // 0x84: KEY_YEN yen
XK_Super_L, // 0x85: KEY_LEFTMETA Super_L
XK_Super_R, // 0x86: KEY_RIGHTMETA Super_R
XK_Menu, // 0x87: KEY_COMPOSE Menu
0, // 0x00:
0, // 0x01:
0, // 0x02:
0, // 0x03:
0, // 0x04:
0, // 0x05:
0, // 0x06:
0, // 0x07:
0, // 0x08:
XK_Escape, // 0x09: XK_Escape
XK_1, // 0x0A: XK_1
XK_2, // 0x0B: XK_2
XK_3, // 0x0C: XK_3
XK_4, // 0x0D: XK_4
XK_5, // 0x0E: XK_5
XK_6, // 0x0F: XK_6
XK_7, // 0x10: XK_7
XK_8, // 0x11: XK_8
XK_9, // 0x12: XK_9
XK_0, // 0x13: XK_0
XK_minus, // 0x14: XK_minus
XK_equal, // 0x15: XK_equal
XK_BackSpace, // 0x16: XK_BackSpace
XK_Tab, // 0x17: XK_Tab
XK_q, // 0x18: XK_q
XK_w, // 0x19: XK_w
XK_e, // 0x1A: XK_e
XK_r, // 0x1B: XK_r
XK_t, // 0x1C: XK_t
XK_y, // 0x1D: XK_y
XK_u, // 0x1E: XK_u
XK_i, // 0x1F: XK_i
XK_o, // 0x20: XK_o
XK_p, // 0x21: XK_p
XK_bracketleft, // 0x22: XK_bracketleft
XK_bracketright, // 0x23: XK_bracketright
XK_Return, // 0x24: XK_Return
XK_Control_L, // 0x25: XK_Control_L
XK_a, // 0x26: XK_a
XK_s, // 0x27: XK_s
XK_d, // 0x28: XK_d
XK_f, // 0x29: XK_f
XK_g, // 0x2A: XK_g
XK_h, // 0x2B: XK_h
XK_j, // 0x2C: XK_j
XK_k, // 0x2D: XK_k
XK_l, // 0x2E: XK_l
XK_semicolon, // 0x2F: XK_semicolon
XK_apostrophe, // 0x30: XK_apostrophe
XK_grave, // 0x31: XK_grave
XK_Shift_L, // 0x32: XK_Shift_L
XK_backslash, // 0x33: XK_backslash
XK_z, // 0x34: XK_z
XK_x, // 0x35: XK_x
XK_c, // 0x36: XK_c
XK_v, // 0x37: XK_v
XK_b, // 0x38: XK_b
XK_n, // 0x39: XK_n
XK_m, // 0x3A: XK_m
XK_comma, // 0x3B: XK_comma
XK_period, // 0x3C: XK_period
XK_slash, // 0x3D: XK_slash
XK_Shift_R, // 0x3E: XK_Shift_R
0, // 0x3F: XK_KP_Multiply
XK_Alt_L, // 0x40: XK_Alt_L
XK_space, // 0x41: XK_space
XK_Caps_Lock, // 0x42: XK_Caps_Lock
XK_F1, // 0x43: XK_F1
XK_F2, // 0x44: XK_F2
XK_F3, // 0x45: XK_F3
XK_F4, // 0x46: XK_F4
XK_F5, // 0x47: XK_F5
XK_F6, // 0x48: XK_F6
XK_F7, // 0x49: XK_F7
XK_F8, // 0x4A: XK_F8
XK_F9, // 0x4B: XK_F9
XK_F10, // 0x4C: XK_F10
XK_Num_Lock, // 0x4D: XK_Num_Lock
XK_Scroll_Lock, // 0x4E: XK_Scroll_Lock
};
if (hardware_code >= arraysize(kHardwareKeycodeMap)) {
// Additional keycodes used by the Chrome OS top row special function keys.
// Checks for arrow keys.
switch (hardware_code) {
case 0xA6: // KEY_BACK
return XF86XK_Back;
case 0xA7: // KEY_FORWARD
return XF86XK_Forward;
case 0xB5: // KEY_REFRESH
return XF86XK_Reload;
case 0xD4: // KEY_DASHBOARD
return XF86XK_LaunchB;
case 0xE8: // KEY_BRIGHTNESSDOWN
return XF86XK_MonBrightnessDown;
case 0xE9: // KEY_BRIGHTNESSUP
return XF86XK_MonBrightnessUp;
case 0x6f:
return XK_Up;
case 0x71:
return XK_Left;
case 0x72:
return XK_Right;
case 0x74:
return XK_Down;
}
return 0;
}
......
......@@ -23,10 +23,6 @@ unsigned int XEventState(int flags) {
((flags & ui::EF_CONTROL_DOWN) ? ControlMask : 0) |
((flags & ui::EF_ALT_DOWN) ? Mod1Mask : 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_MIDDLE_MOUSE_BUTTON) ? Button2Mask: 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