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

Unified Diff: ui/events/x/events_x_unittest.cc

Issue 1135083004: Revert of Remove EF_FUNCTION_KEY and EF_NUMPAD_KEY. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/events/x/events_x.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/events/x/events_x_unittest.cc
diff --git a/ui/events/x/events_x_unittest.cc b/ui/events/x/events_x_unittest.cc
index 3631462265693687e4fb201c73e99802b950531f..db9cb2e89049741f941abe0ecb99b5904d517600 100644
--- a/ui/events/x/events_x_unittest.cc
+++ b/ui/events/x/events_x_unittest.cc
@@ -47,7 +47,6 @@
button_event->state = state;
}
-#if !defined(OS_CHROMEOS)
// Initializes the passed-in Xlib event.
void InitKeyEvent(Display* display,
XEvent* event,
@@ -64,7 +63,20 @@
key_event->keycode = keycode;
key_event->state = state;
}
-#endif
+
+// Returns true if the keysym maps to a KeyEvent with the EF_FUNCTION_KEY
+// flag set, or the keysym maps to a zero key code.
+bool HasFunctionKeyFlagSetIfSupported(Display* display, int x_keysym) {
+ XEvent event;
+ int x_keycode = XKeysymToKeycode(display, x_keysym);
+ // Exclude keysyms for which the server has no corresponding keycode.
+ if (x_keycode) {
+ InitKeyEvent(display, &event, true, x_keycode, 0);
+ ui::KeyEvent ui_key_event(&event);
+ return (ui_key_event.flags() & ui::EF_FUNCTION_KEY);
+ }
+ return true;
+}
} // namespace
@@ -363,6 +375,162 @@
// Exiting this scope should not cause a crash.
ui::TouchEvent copy = urelease0;
}
+}
+
+TEST_F(EventsXTest, NumpadKeyEvents) {
+ XEvent event;
+ Display* display = gfx::GetXDisplay();
+
+ struct {
+ bool is_numpad_key;
+ int x_keysym;
+ } keys[] = {
+ // XK_KP_Space and XK_KP_Equal are the extrema in the conventional
+ // keysymdef.h numbering.
+ { true, XK_KP_Space },
+ { true, XK_KP_Equal },
+ // Other numpad keysyms. (This is actually exhaustive in the current list.)
+ { true, XK_KP_Tab },
+ { true, XK_KP_Enter },
+ { true, XK_KP_F1 },
+ { true, XK_KP_F2 },
+ { true, XK_KP_F3 },
+ { true, XK_KP_F4 },
+ { true, XK_KP_Home },
+ { true, XK_KP_Left },
+ { true, XK_KP_Up },
+ { true, XK_KP_Right },
+ { true, XK_KP_Down },
+ { true, XK_KP_Prior },
+ { true, XK_KP_Page_Up },
+ { true, XK_KP_Next },
+ { true, XK_KP_Page_Down },
+ { true, XK_KP_End },
+ { true, XK_KP_Begin },
+ { true, XK_KP_Insert },
+ { true, XK_KP_Delete },
+ { true, XK_KP_Multiply },
+ { true, XK_KP_Add },
+ { true, XK_KP_Separator },
+ { true, XK_KP_Subtract },
+ { true, XK_KP_Decimal },
+ { true, XK_KP_Divide },
+ { true, XK_KP_0 },
+ { true, XK_KP_1 },
+ { true, XK_KP_2 },
+ { true, XK_KP_3 },
+ { true, XK_KP_4 },
+ { true, XK_KP_5 },
+ { true, XK_KP_6 },
+ { true, XK_KP_7 },
+ { true, XK_KP_8 },
+ { true, XK_KP_9 },
+ // Largest keysym preceding XK_KP_Space.
+ { false, XK_Num_Lock },
+ // Smallest keysym following XK_KP_Equal.
+ { false, XK_F1 },
+ // Non-numpad analogues of numpad keysyms.
+ { false, XK_Tab },
+ { false, XK_Return },
+ { false, XK_F1 },
+ { false, XK_F2 },
+ { false, XK_F3 },
+ { false, XK_F4 },
+ { false, XK_Home },
+ { false, XK_Left },
+ { false, XK_Up },
+ { false, XK_Right },
+ { false, XK_Down },
+ { false, XK_Prior },
+ { false, XK_Page_Up },
+ { false, XK_Next },
+ { false, XK_Page_Down },
+ { false, XK_End },
+ { false, XK_Insert },
+ { false, XK_Delete },
+ { false, XK_multiply },
+ { false, XK_plus },
+ { false, XK_minus },
+ { false, XK_period },
+ { false, XK_slash },
+ { false, XK_0 },
+ { false, XK_1 },
+ { false, XK_2 },
+ { false, XK_3 },
+ { false, XK_4 },
+ { false, XK_5 },
+ { false, XK_6 },
+ { false, XK_7 },
+ { false, XK_8 },
+ { false, XK_9 },
+ // Miscellaneous other keysyms.
+ { false, XK_BackSpace },
+ { false, XK_Scroll_Lock },
+ { false, XK_Multi_key },
+ { false, XK_Select },
+ { false, XK_Num_Lock },
+ { false, XK_Shift_L },
+ { false, XK_space },
+ { false, XK_A },
+ };
+
+ for (size_t k = 0; k < arraysize(keys); ++k) {
+ int x_keycode = XKeysymToKeycode(display, keys[k].x_keysym);
+ // Exclude keysyms for which the server has no corresponding keycode.
+ if (x_keycode) {
+ InitKeyEvent(display, &event, true, x_keycode, 0);
+ // int keysym = XLookupKeysym(&event.xkey, 0);
+ // if (keysym) {
+ ui::KeyEvent ui_key_event(&event);
+ EXPECT_EQ(keys[k].is_numpad_key ? ui::EF_NUMPAD_KEY : 0,
+ ui_key_event.flags() & ui::EF_NUMPAD_KEY);
+ }
+ }
+}
+
+TEST_F(EventsXTest, FunctionKeyEvents) {
+ Display* display = gfx::GetXDisplay();
+
+ // Min function key code minus 1.
+ EXPECT_FALSE(HasFunctionKeyFlagSetIfSupported(display, XK_F1 - 1));
+ // All function keys.
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F1));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F2));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F3));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F4));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F5));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F6));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F7));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F8));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F9));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F10));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F11));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F12));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F13));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F14));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F15));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F16));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F17));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F18));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F19));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F20));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F21));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F22));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F23));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F24));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F25));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F26));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F27));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F28));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F29));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F30));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F31));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F32));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F33));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F34));
+ EXPECT_TRUE(HasFunctionKeyFlagSetIfSupported(display, XK_F35));
+ // Max function key code plus 1.
+ EXPECT_FALSE(HasFunctionKeyFlagSetIfSupported(display, XK_F35 + 1));
}
// Verifies that the type of events from a disabled keyboard is ET_UNKNOWN, but
« no previous file with comments | « ui/events/x/events_x.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698