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

Side by Side Diff: chrome/browser/chromeos/events/keyboard_driven_event_rewriter_unittest.cc

Issue 240173007: Convert KeyboardDrivenEventRewriter to a ui::EventRewriter. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments on Patch Set 4 Created 6 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 unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <string>
6
5 #include "base/basictypes.h" 7 #include "base/basictypes.h"
6 #include "base/compiler_specific.h" 8 #include "base/compiler_specific.h"
7 #include "base/strings/stringprintf.h" 9 #include "base/strings/stringprintf.h"
8 #include "chrome/browser/chromeos/events/keyboard_driven_event_rewriter.h" 10 #include "chrome/browser/chromeos/events/keyboard_driven_event_rewriter.h"
9 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
10 #include "ui/events/event.h" 12 #include "ui/events/event.h"
11 #include "ui/events/test/events_test_utils_x11.h"
12
13 #include <X11/keysym.h>
14 #include <X11/XF86keysym.h>
15 #include <X11/Xlib.h>
16 13
17 namespace chromeos { 14 namespace chromeos {
18 15
19 class KeyboardDrivenEventRewriterTest : public testing::Test { 16 class KeyboardDrivenEventRewriterTest : public testing::Test {
20 public: 17 public:
21 KeyboardDrivenEventRewriterTest() 18 KeyboardDrivenEventRewriterTest() {}
22 : display_(gfx::GetXDisplay()),
23 keycode_a_(XKeysymToKeycode(display_, XK_a)),
24 keycode_up_(XKeysymToKeycode(display_, XK_Up)),
25 keycode_down_(XKeysymToKeycode(display_, XK_Down)),
26 keycode_left_(XKeysymToKeycode(display_, XK_Left)),
27 keycode_right_(XKeysymToKeycode(display_, XK_Right)),
28 keycode_return_(XKeysymToKeycode(display_, XK_Return)),
29 keycode_f6_(XKeysymToKeycode(display_, XK_F6)) {
30 }
31 19
32 virtual ~KeyboardDrivenEventRewriterTest() {} 20 virtual ~KeyboardDrivenEventRewriterTest() {}
33 21
34 protected: 22 protected:
35 std::string GetRewrittenEventAsString(ui::KeyboardCode ui_keycode, 23 std::string GetRewrittenEventAsString(ui::KeyboardCode ui_keycode,
36 int ui_flags, 24 int ui_flags,
37 ui::EventType ui_type, 25 ui::EventType ui_type) {
38 KeyCode x_keycode, 26 ui::KeyEvent keyevent(ui_type, ui_keycode, ui_flags, false);
39 unsigned int x_state) { 27 scoped_ptr<ui::Event> rewritten_event;
40 ui::ScopedXI2Event xev; 28 ui::EventRewriteStatus status =
41 xev.InitKeyEvent(ui_type, ui_keycode, ui_flags); 29 rewriter_.RewriteForTesting(keyevent, &rewritten_event);
42 XEvent* xevent = xev; 30 return base::StringPrintf(
43 xevent->xkey.keycode = x_keycode; 31 "ui_flags=%d status=%d",
44 xevent->xkey.state = x_state; 32 rewritten_event ? rewritten_event->flags() : keyevent.flags(),
45 bool changed = rewriter_.RewriteForTesting(xevent); 33 status);
46 ui::KeyEvent keyevent(xev, false /* is_char */);
47 return base::StringPrintf("ui_flags=%d x_state=%u changed=%d",
48 keyevent.flags(),
49 xevent->xkey.state,
50 changed);
51 } 34 }
52 35
53 std::string GetExpectedResultAsString(int ui_flags, 36 std::string GetExpectedResultAsString(int ui_flags,
54 unsigned int x_state, 37 ui::EventRewriteStatus status) {
55 bool changed) { 38 return base::StringPrintf("ui_flags=%d status=%u", ui_flags, status);
56 return base::StringPrintf(
57 "ui_flags=%d x_state=%u changed=%d", ui_flags, x_state, changed);
58 } 39 }
59 40
60 XDisplay* display_;
61 const KeyCode keycode_a_;
62 const KeyCode keycode_up_;
63 const KeyCode keycode_down_;
64 const KeyCode keycode_left_;
65 const KeyCode keycode_right_;
66 const KeyCode keycode_return_;
67 const KeyCode keycode_f6_;
68
69 KeyboardDrivenEventRewriter rewriter_; 41 KeyboardDrivenEventRewriter rewriter_;
70 42
71 private: 43 private:
72 DISALLOW_COPY_AND_ASSIGN(KeyboardDrivenEventRewriterTest); 44 DISALLOW_COPY_AND_ASSIGN(KeyboardDrivenEventRewriterTest);
73 }; 45 };
74 46
75 TEST_F(KeyboardDrivenEventRewriterTest, PassThrough) { 47 TEST_F(KeyboardDrivenEventRewriterTest, PassThrough) {
76 struct { 48 struct {
77 ui::KeyboardCode ui_keycode; 49 ui::KeyboardCode ui_keycode;
78 int ui_flags; 50 int ui_flags;
79 KeyCode x_keycode;
80 unsigned int x_state;
81 } kTests[] = { 51 } kTests[] = {
82 { ui::VKEY_A, ui::EF_NONE, keycode_a_, 0 }, 52 { ui::VKEY_A, ui::EF_NONE },
83 { ui::VKEY_A, ui::EF_CONTROL_DOWN, keycode_a_, ControlMask }, 53 { ui::VKEY_A, ui::EF_CONTROL_DOWN },
84 { ui::VKEY_A, ui::EF_ALT_DOWN, keycode_a_, Mod1Mask }, 54 { ui::VKEY_A, ui::EF_ALT_DOWN },
85 { ui::VKEY_A, ui::EF_SHIFT_DOWN, keycode_a_, ShiftMask }, 55 { ui::VKEY_A, ui::EF_SHIFT_DOWN },
86 { ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 56 { ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN },
87 keycode_a_, ControlMask | Mod1Mask }, 57 { ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN },
88 { ui::VKEY_A, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN | ui::EF_SHIFT_DOWN,
89 keycode_a_, ControlMask | Mod1Mask | ShiftMask },
90 58
91 { ui::VKEY_LEFT, ui::EF_NONE, keycode_left_, 0 }, 59 { ui::VKEY_LEFT, ui::EF_NONE },
92 { ui::VKEY_LEFT, ui::EF_CONTROL_DOWN, keycode_left_, ControlMask }, 60 { ui::VKEY_LEFT, ui::EF_CONTROL_DOWN },
93 { ui::VKEY_LEFT, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 61 { ui::VKEY_LEFT, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN },
94 keycode_left_, ControlMask | Mod1Mask },
95 62
96 { ui::VKEY_RIGHT, ui::EF_NONE, keycode_right_, 0 }, 63 { ui::VKEY_RIGHT, ui::EF_NONE },
97 { ui::VKEY_RIGHT, ui::EF_CONTROL_DOWN, keycode_right_, ControlMask }, 64 { ui::VKEY_RIGHT, ui::EF_CONTROL_DOWN },
98 { ui::VKEY_RIGHT, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 65 { ui::VKEY_RIGHT, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN },
99 keycode_right_, ControlMask | Mod1Mask },
100 66
101 { ui::VKEY_UP, ui::EF_NONE, keycode_up_, 0 }, 67 { ui::VKEY_UP, ui::EF_NONE },
102 { ui::VKEY_UP, ui::EF_CONTROL_DOWN, keycode_up_, ControlMask }, 68 { ui::VKEY_UP, ui::EF_CONTROL_DOWN },
103 { ui::VKEY_UP, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 69 { ui::VKEY_UP, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN },
104 keycode_up_, ControlMask | Mod1Mask },
105 70
106 { ui::VKEY_DOWN, ui::EF_NONE, keycode_down_, 0 }, 71 { ui::VKEY_DOWN, ui::EF_NONE },
107 { ui::VKEY_DOWN, ui::EF_CONTROL_DOWN, keycode_down_, ControlMask }, 72 { ui::VKEY_DOWN, ui::EF_CONTROL_DOWN },
108 { ui::VKEY_DOWN, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 73 { ui::VKEY_DOWN, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN },
109 keycode_down_, ControlMask | Mod1Mask },
110 74
111 { ui::VKEY_RETURN, ui::EF_NONE, keycode_return_, 0 }, 75 { ui::VKEY_RETURN, ui::EF_NONE },
112 { ui::VKEY_RETURN, ui::EF_CONTROL_DOWN, keycode_return_, ControlMask }, 76 { ui::VKEY_RETURN, ui::EF_CONTROL_DOWN },
113 { ui::VKEY_RETURN, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN, 77 { ui::VKEY_RETURN, ui::EF_CONTROL_DOWN | ui::EF_ALT_DOWN },
114 keycode_return_, ControlMask | Mod1Mask },
115 }; 78 };
116 79
117 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTests); ++i) { 80 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTests); ++i) {
118 EXPECT_EQ(GetExpectedResultAsString(kTests[i].ui_flags, 81 EXPECT_EQ(GetExpectedResultAsString(kTests[i].ui_flags,
119 kTests[i].x_state, 82 ui::EVENT_REWRITE_CONTINUE),
120 false),
121 GetRewrittenEventAsString(kTests[i].ui_keycode, 83 GetRewrittenEventAsString(kTests[i].ui_keycode,
122 kTests[i].ui_flags, 84 kTests[i].ui_flags,
123 ui::ET_KEY_PRESSED, 85 ui::ET_KEY_PRESSED))
124 kTests[i].x_keycode,
125 kTests[i].x_state))
126 << "Test case " << i; 86 << "Test case " << i;
127 } 87 }
128 } 88 }
129 89
130 TEST_F(KeyboardDrivenEventRewriterTest, Rewrite) { 90 TEST_F(KeyboardDrivenEventRewriterTest, Rewrite) {
131 const int kModifierMask = ui::EF_SHIFT_DOWN; 91 const int kModifierMask = ui::EF_SHIFT_DOWN;
132 const unsigned int kXState = ShiftMask;
133 92
134 struct { 93 struct {
135 ui::KeyboardCode ui_keycode; 94 ui::KeyboardCode ui_keycode;
136 int ui_flags; 95 int ui_flags;
137 KeyCode x_keycode;
138 unsigned int x_state;
139 } kTests[] = { 96 } kTests[] = {
140 { ui::VKEY_LEFT, kModifierMask, keycode_left_, kXState }, 97 { ui::VKEY_LEFT, kModifierMask },
141 { ui::VKEY_RIGHT, kModifierMask, keycode_right_, kXState }, 98 { ui::VKEY_RIGHT, kModifierMask },
142 { ui::VKEY_UP, kModifierMask, keycode_up_, kXState }, 99 { ui::VKEY_UP, kModifierMask },
143 { ui::VKEY_DOWN, kModifierMask, keycode_down_, kXState }, 100 { ui::VKEY_DOWN, kModifierMask },
144 { ui::VKEY_RETURN, kModifierMask, keycode_return_, kXState }, 101 { ui::VKEY_RETURN, kModifierMask },
145 { ui::VKEY_F6, kModifierMask, keycode_f6_, kXState }, 102 { ui::VKEY_F6, kModifierMask },
146 }; 103 };
147 104
148 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTests); ++i) { 105 for (size_t i = 0; i < ARRAYSIZE_UNSAFE(kTests); ++i) {
149 EXPECT_EQ(GetExpectedResultAsString(ui::EF_NONE, 0, true), 106 EXPECT_EQ(GetExpectedResultAsString(ui::EF_NONE,
107 ui::EVENT_REWRITE_REWRITTEN),
150 GetRewrittenEventAsString(kTests[i].ui_keycode, 108 GetRewrittenEventAsString(kTests[i].ui_keycode,
151 kTests[i].ui_flags, 109 kTests[i].ui_flags,
152 ui::ET_KEY_PRESSED, 110 ui::ET_KEY_PRESSED))
153 kTests[i].x_keycode,
154 kTests[i].x_state))
155 << "Test case " << i; 111 << "Test case " << i;
156 } 112 }
157 } 113 }
158 114
159 } // namespace chromeos 115 } // namespace chromeos
OLDNEW
« no previous file with comments | « chrome/browser/chromeos/events/keyboard_driven_event_rewriter.cc ('k') | chrome/chrome_browser_chromeos.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698