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 368682cbb1bd5fec0bb896ada960ac5c5ea5aa92..3a1c08c26b06bda611824bf08c718dffd63def9e 100644 |
--- a/ui/events/x/events_x_unittest.cc |
+++ b/ui/events/x/events_x_unittest.cc |
@@ -59,6 +59,20 @@ void InitKeyEvent(Display* display, |
key_event->state = state; |
} |
+// 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, false); |
+ return (ui_key_event.flags() & ui::EF_FUNCTION_KEY); |
+ } |
+ return true; |
+} |
+ |
} // namespace |
TEST(EventsXTest, ButtonEvents) { |
@@ -370,4 +384,49 @@ TEST(EventsXTest, NumpadKeyEvents) { |
} |
} |
+TEST(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)); |
+} |
+ |
} // namespace ui |