OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <cstring> | 5 #include <cstring> |
6 #include <set> | 6 #include <set> |
7 | 7 |
8 #include <X11/extensions/XInput2.h> | 8 #include <X11/extensions/XInput2.h> |
9 #include <X11/Xlib.h> | 9 #include <X11/Xlib.h> |
10 #include <X11/Xutil.h> | 10 #include <X11/Xutil.h> |
11 #include <X11/XKBlib.h> | 11 #include <X11/XKBlib.h> |
12 | 12 |
13 // Generically-named #defines from Xlib that conflict with symbols in GTest. | 13 // Generically-named #defines from Xlib that conflict with symbols in GTest. |
14 #undef Bool | 14 #undef Bool |
15 #undef None | 15 #undef None |
16 | 16 |
17 #include "base/memory/scoped_ptr.h" | 17 #include "base/memory/scoped_ptr.h" |
18 #include "testing/gtest/include/gtest/gtest.h" | 18 #include "testing/gtest/include/gtest/gtest.h" |
19 #include "ui/events/event.h" | 19 #include "ui/events/event.h" |
20 #include "ui/events/event_constants.h" | 20 #include "ui/events/event_constants.h" |
21 #include "ui/events/event_utils.h" | 21 #include "ui/events/event_utils.h" |
| 22 #include "ui/events/test/events_test_utils.h" |
22 #include "ui/events/test/events_test_utils_x11.h" | 23 #include "ui/events/test/events_test_utils_x11.h" |
23 #include "ui/events/x/device_data_manager_x11.h" | 24 #include "ui/events/x/device_data_manager_x11.h" |
24 #include "ui/events/x/touch_factory_x11.h" | 25 #include "ui/events/x/touch_factory_x11.h" |
25 #include "ui/gfx/point.h" | 26 #include "ui/gfx/point.h" |
26 | 27 |
27 namespace ui { | 28 namespace ui { |
28 | 29 |
29 namespace { | 30 namespace { |
30 | 31 |
31 // Initializes the passed-in Xlib event. | 32 // Initializes the passed-in Xlib event. |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
64 } | 65 } |
65 | 66 |
66 // Returns true if the keysym maps to a KeyEvent with the EF_FUNCTION_KEY | 67 // Returns true if the keysym maps to a KeyEvent with the EF_FUNCTION_KEY |
67 // flag set, or the keysym maps to a zero key code. | 68 // flag set, or the keysym maps to a zero key code. |
68 bool HasFunctionKeyFlagSetIfSupported(Display* display, int x_keysym) { | 69 bool HasFunctionKeyFlagSetIfSupported(Display* display, int x_keysym) { |
69 XEvent event; | 70 XEvent event; |
70 int x_keycode = XKeysymToKeycode(display, x_keysym); | 71 int x_keycode = XKeysymToKeycode(display, x_keysym); |
71 // Exclude keysyms for which the server has no corresponding keycode. | 72 // Exclude keysyms for which the server has no corresponding keycode. |
72 if (x_keycode) { | 73 if (x_keycode) { |
73 InitKeyEvent(display, &event, true, x_keycode, 0); | 74 InitKeyEvent(display, &event, true, x_keycode, 0); |
74 ui::KeyEvent ui_key_event(&event, false); | 75 ui::KeyEvent ui_key_event(&event); |
75 return (ui_key_event.flags() & ui::EF_FUNCTION_KEY); | 76 return (ui_key_event.flags() & ui::EF_FUNCTION_KEY); |
76 } | 77 } |
77 return true; | 78 return true; |
78 } | 79 } |
79 | 80 |
80 } // namespace | 81 } // namespace |
81 | 82 |
82 class EventsXTest : public testing::Test { | 83 class EventsXTest : public testing::Test { |
83 public: | 84 public: |
84 EventsXTest() {} | 85 EventsXTest() {} |
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
388 { false, XK_A }, | 389 { false, XK_A }, |
389 }; | 390 }; |
390 | 391 |
391 for (size_t k = 0; k < ARRAYSIZE_UNSAFE(keys); ++k) { | 392 for (size_t k = 0; k < ARRAYSIZE_UNSAFE(keys); ++k) { |
392 int x_keycode = XKeysymToKeycode(display, keys[k].x_keysym); | 393 int x_keycode = XKeysymToKeycode(display, keys[k].x_keysym); |
393 // Exclude keysyms for which the server has no corresponding keycode. | 394 // Exclude keysyms for which the server has no corresponding keycode. |
394 if (x_keycode) { | 395 if (x_keycode) { |
395 InitKeyEvent(display, &event, true, x_keycode, 0); | 396 InitKeyEvent(display, &event, true, x_keycode, 0); |
396 // int keysym = XLookupKeysym(&event.xkey, 0); | 397 // int keysym = XLookupKeysym(&event.xkey, 0); |
397 // if (keysym) { | 398 // if (keysym) { |
398 ui::KeyEvent ui_key_event(&event, false); | 399 ui::KeyEvent ui_key_event(&event); |
399 EXPECT_EQ(keys[k].is_numpad_key ? ui::EF_NUMPAD_KEY : 0, | 400 EXPECT_EQ(keys[k].is_numpad_key ? ui::EF_NUMPAD_KEY : 0, |
400 ui_key_event.flags() & ui::EF_NUMPAD_KEY); | 401 ui_key_event.flags() & ui::EF_NUMPAD_KEY); |
401 } | 402 } |
402 } | 403 } |
403 } | 404 } |
404 | 405 |
405 TEST_F(EventsXTest, FunctionKeyEvents) { | 406 TEST_F(EventsXTest, FunctionKeyEvents) { |
406 Display* display = gfx::GetXDisplay(); | 407 Display* display = gfx::GetXDisplay(); |
407 | 408 |
408 // Min function key code minus 1. | 409 // Min function key code minus 1. |
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
512 Display* display = gfx::GetXDisplay(); | 513 Display* display = gfx::GetXDisplay(); |
513 | 514 |
514 unsigned int state_to_be_fabricated[] = { | 515 unsigned int state_to_be_fabricated[] = { |
515 0, ShiftMask, LockMask, ShiftMask | LockMask, | 516 0, ShiftMask, LockMask, ShiftMask | LockMask, |
516 }; | 517 }; |
517 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(state_to_be_fabricated); ++i) { | 518 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(state_to_be_fabricated); ++i) { |
518 unsigned int state = state_to_be_fabricated[i]; | 519 unsigned int state = state_to_be_fabricated[i]; |
519 for (int is_char = 0; is_char < 2; ++is_char) { | 520 for (int is_char = 0; is_char < 2; ++is_char) { |
520 XEvent x_event; | 521 XEvent x_event; |
521 InitKeyEvent(display, &x_event, true, 0, state); | 522 InitKeyEvent(display, &x_event, true, 0, state); |
522 ui::KeyEvent key_event(&x_event, is_char); | 523 ui::KeyEvent key_event(&x_event); |
| 524 if (is_char) { |
| 525 KeyEventTestApi test_event(&key_event); |
| 526 test_event.set_is_char(true); |
| 527 } |
523 EXPECT_TRUE(key_event.flags() & ui::EF_IME_FABRICATED_KEY); | 528 EXPECT_TRUE(key_event.flags() & ui::EF_IME_FABRICATED_KEY); |
524 } | 529 } |
525 } | 530 } |
526 | 531 |
527 unsigned int state_to_be_not_fabricated[] = { | 532 unsigned int state_to_be_not_fabricated[] = { |
528 ControlMask, Mod1Mask, Mod2Mask, ShiftMask | ControlMask, | 533 ControlMask, Mod1Mask, Mod2Mask, ShiftMask | ControlMask, |
529 }; | 534 }; |
530 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(state_to_be_not_fabricated); ++i) { | 535 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(state_to_be_not_fabricated); ++i) { |
531 unsigned int state = state_to_be_not_fabricated[i]; | 536 unsigned int state = state_to_be_not_fabricated[i]; |
532 for (int is_char = 0; is_char < 2; ++is_char) { | 537 for (int is_char = 0; is_char < 2; ++is_char) { |
533 XEvent x_event; | 538 XEvent x_event; |
534 InitKeyEvent(display, &x_event, true, 0, state); | 539 InitKeyEvent(display, &x_event, true, 0, state); |
535 ui::KeyEvent key_event(&x_event, is_char); | 540 ui::KeyEvent key_event(&x_event); |
| 541 if (is_char) { |
| 542 KeyEventTestApi test_event(&key_event); |
| 543 test_event.set_is_char(true); |
| 544 } |
536 EXPECT_FALSE(key_event.flags() & ui::EF_IME_FABRICATED_KEY); | 545 EXPECT_FALSE(key_event.flags() & ui::EF_IME_FABRICATED_KEY); |
537 } | 546 } |
538 } | 547 } |
539 } | 548 } |
540 #endif | 549 #endif |
541 | 550 |
542 } // namespace ui | 551 } // namespace ui |
OLD | NEW |