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

Side by Side Diff: remoting/protocol/input_event_tracker_unittest.cc

Issue 985863002: Move all protocol event matchers to test_event_matchers.h (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 9 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 (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 "remoting/protocol/input_event_tracker.h" 5 #include "remoting/protocol/input_event_tracker.h"
6 6
7 #include "remoting/proto/event.pb.h" 7 #include "remoting/proto/event.pb.h"
8 #include "remoting/protocol/protocol_mock_objects.h" 8 #include "remoting/protocol/protocol_mock_objects.h"
9 #include "remoting/protocol/test_event_matchers.h"
9 #include "testing/gmock/include/gmock/gmock.h" 10 #include "testing/gmock/include/gmock/gmock.h"
10 #include "testing/gtest/include/gtest/gtest.h" 11 #include "testing/gtest/include/gtest/gtest.h"
11 12
12 using ::testing::_; 13 using ::testing::_;
13 using ::testing::ExpectationSet; 14 using ::testing::ExpectationSet;
14 using ::testing::InSequence; 15 using ::testing::InSequence;
15 16
16 namespace remoting { 17 namespace remoting {
17 namespace protocol { 18 namespace protocol {
18 19
19 namespace { 20 namespace {
20 21
21 static const MouseEvent::MouseButton BUTTON_LEFT = MouseEvent::BUTTON_LEFT; 22 static const MouseEvent::MouseButton BUTTON_LEFT = MouseEvent::BUTTON_LEFT;
22 static const MouseEvent::MouseButton BUTTON_RIGHT = MouseEvent::BUTTON_RIGHT; 23 static const MouseEvent::MouseButton BUTTON_RIGHT = MouseEvent::BUTTON_RIGHT;
23 24
24 // A hardcoded value used to verify |lock_states| is preserved.
25 static const uint32 kTestLockStates = protocol::KeyEvent::LOCK_STATES_CAPSLOCK;
26
27 // Verify the usb key code and the "pressed" state.
28 // Also verify that the event doesn't have |lock_states| set.
29 MATCHER_P2(EqualsUsbEventWithoutLockStates, usb_keycode, pressed, "") {
30 return arg.usb_keycode() == static_cast<uint32>(usb_keycode) &&
31 arg.pressed() == pressed &&
32 !arg.has_lock_states();
33 }
34
35 // Verify the usb key code, the "pressed" state, and the lock states.
36 MATCHER_P2(EqualsUsbEvent, usb_keycode, pressed, "") {
37 return arg.usb_keycode() == static_cast<uint32>(usb_keycode) &&
38 arg.pressed() == pressed &&
39 arg.lock_states() == kTestLockStates;
40 }
41
42 MATCHER_P4(EqualsMouseEvent, x, y, button, down, "") {
43 return arg.x() == x && arg.y() == y && arg.button() == button &&
44 arg.button_down() == down;
45 }
46
47 MATCHER_P2(TouchPointIdsAndTypeEqual, ids, type, "") { 25 MATCHER_P2(TouchPointIdsAndTypeEqual, ids, type, "") {
48 if (arg.event_type() != type) 26 if (arg.event_type() != type)
49 return false; 27 return false;
50 28
51 std::set<uint32> touch_ids; 29 std::set<uint32> touch_ids;
52 for (const TouchEventPoint& point : arg.touch_points()) { 30 for (const TouchEventPoint& point : arg.touch_points()) {
53 touch_ids.insert(point.id()); 31 touch_ids.insert(point.id());
54 } 32 }
55 return touch_ids == ids; 33 return touch_ids == ids;
56 } 34 }
57 35
58 static KeyEvent NewUsbEvent(uint32 usb_keycode, 36 static KeyEvent NewUsbEvent(uint32 usb_keycode, bool pressed) {
59 bool pressed) {
60 KeyEvent event; 37 KeyEvent event;
61 event.set_usb_keycode(usb_keycode); 38 event.set_usb_keycode(usb_keycode);
62 event.set_pressed(pressed); 39 event.set_pressed(pressed);
63 // Create all key events with the hardcoded |lock_state| in this test. 40 // Create all key events with the hardcoded |lock_state| in this test.
64 event.set_lock_states(kTestLockStates); 41 event.set_lock_states(KeyEvent::LOCK_STATES_CAPSLOCK);
65 return event; 42 return event;
66 } 43 }
67 44
68 static void PressAndReleaseUsb(InputStub* input_stub, 45 static void PressAndReleaseUsb(InputStub* input_stub, uint32 usb_keycode) {
69 uint32 usb_keycode) {
70 input_stub->InjectKeyEvent(NewUsbEvent(usb_keycode, true)); 46 input_stub->InjectKeyEvent(NewUsbEvent(usb_keycode, true));
71 input_stub->InjectKeyEvent(NewUsbEvent(usb_keycode, false)); 47 input_stub->InjectKeyEvent(NewUsbEvent(usb_keycode, false));
72 } 48 }
73 49
74 static MouseEvent NewMouseEvent(int x, int y, 50 static MouseEvent NewMouseEvent(int x,
75 MouseEvent::MouseButton button, bool down) { 51 int y,
52 MouseEvent::MouseButton button,
53 bool down) {
76 MouseEvent event; 54 MouseEvent event;
77 event.set_x(x); 55 event.set_x(x);
78 event.set_y(y); 56 event.set_y(y);
79 event.set_button(button); 57 event.set_button(button);
80 event.set_button_down(down); 58 event.set_button_down(down);
81 return event; 59 return event;
82 } 60 }
83 61
84 void AddTouchPoint(uint32 id, TouchEvent* event) { 62 void AddTouchPoint(uint32 id, TouchEvent* event) {
85 TouchEventPoint* p = event->add_touch_points(); 63 TouchEventPoint* p = event->add_touch_points();
86 p->set_id(id); 64 p->set_id(id);
87 } 65 }
88 66
89 } // namespace 67 } // namespace
90 68
91 // Verify that keys that were pressed and released aren't re-released. 69 // Verify that keys that were pressed and released aren't re-released.
92 TEST(InputEventTrackerTest, NothingToRelease) { 70 TEST(InputEventTrackerTest, NothingToRelease) {
93 MockInputStub mock_stub; 71 MockInputStub mock_stub;
94 InputEventTracker input_tracker(&mock_stub); 72 InputEventTracker input_tracker(&mock_stub);
95 73
96 { 74 {
97 InSequence s; 75 InSequence s;
98 76
99 EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(1, true))); 77 EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEventWithCapsLock(1, true)));
100 EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(1, false))); 78 EXPECT_CALL(mock_stub,
101 EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(2, true))); 79 InjectKeyEvent(EqualsUsbEventWithCapsLock(1, false)));
102 EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(2, false))); 80 EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEventWithCapsLock(2, true)));
81 EXPECT_CALL(mock_stub,
82 InjectKeyEvent(EqualsUsbEventWithCapsLock(2, false)));
103 83
104 EXPECT_CALL(mock_stub, 84 EXPECT_CALL(mock_stub,
105 InjectMouseEvent(EqualsMouseEvent(0, 0, BUTTON_LEFT, true))); 85 InjectMouseEvent(EqualsMouseEvent(0, 0, BUTTON_LEFT, true)));
106 EXPECT_CALL(mock_stub, 86 EXPECT_CALL(mock_stub,
107 InjectMouseEvent(EqualsMouseEvent(0, 0, BUTTON_LEFT, false))); 87 InjectMouseEvent(EqualsMouseEvent(0, 0, BUTTON_LEFT, false)));
108 } 88 }
109 89
110 PressAndReleaseUsb(&input_tracker, 1); 90 PressAndReleaseUsb(&input_tracker, 1);
111 PressAndReleaseUsb(&input_tracker, 2); 91 PressAndReleaseUsb(&input_tracker, 2);
112 92
113 input_tracker.InjectMouseEvent(NewMouseEvent(0, 0, BUTTON_LEFT, true)); 93 input_tracker.InjectMouseEvent(NewMouseEvent(0, 0, BUTTON_LEFT, true));
114 input_tracker.InjectMouseEvent(NewMouseEvent(0, 0, BUTTON_LEFT, false)); 94 input_tracker.InjectMouseEvent(NewMouseEvent(0, 0, BUTTON_LEFT, false));
115 95
116 input_tracker.ReleaseAll(); 96 input_tracker.ReleaseAll();
117 } 97 }
118 98
119 // Verify that keys that were left pressed get released. 99 // Verify that keys that were left pressed get released.
120 TEST(InputEventTrackerTest, ReleaseAllKeys) { 100 TEST(InputEventTrackerTest, ReleaseAllKeys) {
121 MockInputStub mock_stub; 101 MockInputStub mock_stub;
122 InputEventTracker input_tracker(&mock_stub); 102 InputEventTracker input_tracker(&mock_stub);
123 ExpectationSet injects; 103 ExpectationSet injects;
124 104
125 { 105 {
126 InSequence s; 106 InSequence s;
127 107
128 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(3, true))); 108 injects += EXPECT_CALL(mock_stub,
129 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(1, true))); 109 InjectKeyEvent(EqualsUsbEventWithCapsLock(3, true)));
130 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(1, false))); 110 injects += EXPECT_CALL(mock_stub,
131 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(2, true))); 111 InjectKeyEvent(EqualsUsbEventWithCapsLock(1, true)));
132 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(2, false))); 112 injects += EXPECT_CALL(
113 mock_stub, InjectKeyEvent(EqualsUsbEventWithCapsLock(1, false)));
114 injects += EXPECT_CALL(mock_stub,
115 InjectKeyEvent(EqualsUsbEventWithCapsLock(2, true)));
116 injects += EXPECT_CALL(
117 mock_stub, InjectKeyEvent(EqualsUsbEventWithCapsLock(2, false)));
133 118
134 injects += EXPECT_CALL(mock_stub, 119 injects += EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseEvent(
135 InjectMouseEvent(EqualsMouseEvent(0, 0, BUTTON_RIGHT, true))); 120 0, 0, BUTTON_RIGHT, true)));
136 injects += EXPECT_CALL(mock_stub, 121 injects += EXPECT_CALL(
137 InjectMouseEvent(EqualsMouseEvent(0, 0, BUTTON_LEFT, true))); 122 mock_stub, InjectMouseEvent(EqualsMouseEvent(0, 0, BUTTON_LEFT, true)));
138 injects += EXPECT_CALL(mock_stub, 123 injects += EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseEvent(
139 InjectMouseEvent(EqualsMouseEvent(1, 1, BUTTON_LEFT, false))); 124 1, 1, BUTTON_LEFT, false)));
140 } 125 }
141 126
142 // The key should be released but |lock_states| should not be set. 127 // The key should be released but |lock_states| should not be set.
143 EXPECT_CALL(mock_stub, 128 EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEventWithoutLockStates(
144 InjectKeyEvent(EqualsUsbEventWithoutLockStates(3, false))) 129 3, false))).After(injects);
145 .After(injects); 130 EXPECT_CALL(mock_stub, InjectMouseEvent(EqualsMouseEvent(
146 EXPECT_CALL(mock_stub, 131 1, 1, BUTTON_RIGHT, false))).After(injects);
147 InjectMouseEvent(EqualsMouseEvent(1, 1, BUTTON_RIGHT, false)))
148 .After(injects);
149 132
150 input_tracker.InjectKeyEvent(NewUsbEvent(3, true)); 133 input_tracker.InjectKeyEvent(NewUsbEvent(3, true));
151 PressAndReleaseUsb(&input_tracker, 1); 134 PressAndReleaseUsb(&input_tracker, 1);
152 PressAndReleaseUsb(&input_tracker, 2); 135 PressAndReleaseUsb(&input_tracker, 2);
153 136
154 input_tracker.InjectMouseEvent(NewMouseEvent(0, 0, BUTTON_RIGHT, true)); 137 input_tracker.InjectMouseEvent(NewMouseEvent(0, 0, BUTTON_RIGHT, true));
155 input_tracker.InjectMouseEvent(NewMouseEvent(0, 0, BUTTON_LEFT, true)); 138 input_tracker.InjectMouseEvent(NewMouseEvent(0, 0, BUTTON_LEFT, true));
156 input_tracker.InjectMouseEvent(NewMouseEvent(1, 1, BUTTON_LEFT, false)); 139 input_tracker.InjectMouseEvent(NewMouseEvent(1, 1, BUTTON_LEFT, false));
157 140
158 EXPECT_FALSE(input_tracker.IsKeyPressed(1)); 141 EXPECT_FALSE(input_tracker.IsKeyPressed(1));
159 EXPECT_FALSE(input_tracker.IsKeyPressed(2)); 142 EXPECT_FALSE(input_tracker.IsKeyPressed(2));
160 EXPECT_TRUE(input_tracker.IsKeyPressed(3)); 143 EXPECT_TRUE(input_tracker.IsKeyPressed(3));
161 EXPECT_EQ(1, input_tracker.PressedKeyCount()); 144 EXPECT_EQ(1, input_tracker.PressedKeyCount());
162 145
163 input_tracker.ReleaseAll(); 146 input_tracker.ReleaseAll();
164 } 147 }
165 148
166 // Verify that we track both USB-based key events correctly. 149 // Verify that we track both USB-based key events correctly.
167 TEST(InputEventTrackerTest, TrackUsbKeyEvents) { 150 TEST(InputEventTrackerTest, TrackUsbKeyEvents) {
168 MockInputStub mock_stub; 151 MockInputStub mock_stub;
169 InputEventTracker input_tracker(&mock_stub); 152 InputEventTracker input_tracker(&mock_stub);
170 ExpectationSet injects; 153 ExpectationSet injects;
171 154
172 { 155 {
173 InSequence s; 156 InSequence s;
174 157
175 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(3, true))); 158 injects += EXPECT_CALL(mock_stub,
176 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(6, true))); 159 InjectKeyEvent(EqualsUsbEventWithCapsLock(3, true)));
177 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(7, true))); 160 injects += EXPECT_CALL(mock_stub,
178 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(5, true))); 161 InjectKeyEvent(EqualsUsbEventWithCapsLock(6, true)));
179 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(5, true))); 162 injects += EXPECT_CALL(mock_stub,
180 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(2, true))); 163 InjectKeyEvent(EqualsUsbEventWithCapsLock(7, true)));
181 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(2, false))); 164 injects += EXPECT_CALL(mock_stub,
165 InjectKeyEvent(EqualsUsbEventWithCapsLock(5, true)));
166 injects += EXPECT_CALL(mock_stub,
167 InjectKeyEvent(EqualsUsbEventWithCapsLock(5, true)));
168 injects += EXPECT_CALL(mock_stub,
169 InjectKeyEvent(EqualsUsbEventWithCapsLock(2, true)));
170 injects += EXPECT_CALL(
171 mock_stub, InjectKeyEvent(EqualsUsbEventWithCapsLock(2, false)));
182 } 172 }
183 173
184 // The key should be auto released with no |lock_states|. 174 // The key should be auto released with no |lock_states|.
185 EXPECT_CALL(mock_stub, 175 EXPECT_CALL(mock_stub,
186 InjectKeyEvent(EqualsUsbEventWithoutLockStates(3, false))) 176 InjectKeyEvent(EqualsUsbEventWithoutLockStates(3, false)))
187 .After(injects); 177 .After(injects);
188 EXPECT_CALL(mock_stub, 178 EXPECT_CALL(mock_stub,
189 InjectKeyEvent(EqualsUsbEventWithoutLockStates(6, false))) 179 InjectKeyEvent(EqualsUsbEventWithoutLockStates(6, false)))
190 .After(injects); 180 .After(injects);
191 EXPECT_CALL(mock_stub, 181 EXPECT_CALL(mock_stub,
(...skipping 23 matching lines...) Expand all
215 205
216 // Verify that invalid events get passed through but not tracked. 206 // Verify that invalid events get passed through but not tracked.
217 TEST(InputEventTrackerTest, InvalidEventsNotTracked) { 207 TEST(InputEventTrackerTest, InvalidEventsNotTracked) {
218 MockInputStub mock_stub; 208 MockInputStub mock_stub;
219 InputEventTracker input_tracker(&mock_stub); 209 InputEventTracker input_tracker(&mock_stub);
220 ExpectationSet injects; 210 ExpectationSet injects;
221 211
222 { 212 {
223 InSequence s; 213 InSequence s;
224 214
225 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(3, true))); 215 injects += EXPECT_CALL(mock_stub,
226 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(1, true))); 216 InjectKeyEvent(EqualsUsbEventWithCapsLock(3, true)));
227 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(1, false))); 217 injects += EXPECT_CALL(mock_stub,
218 InjectKeyEvent(EqualsUsbEventWithCapsLock(1, true)));
219 injects += EXPECT_CALL(
220 mock_stub, InjectKeyEvent(EqualsUsbEventWithCapsLock(1, false)));
228 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(_)).Times(2); 221 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(_)).Times(2);
229 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(2, true))); 222 injects += EXPECT_CALL(mock_stub,
230 injects += EXPECT_CALL(mock_stub, InjectKeyEvent(EqualsUsbEvent(2, false))); 223 InjectKeyEvent(EqualsUsbEventWithCapsLock(2, true)));
224 injects += EXPECT_CALL(
225 mock_stub, InjectKeyEvent(EqualsUsbEventWithCapsLock(2, false)));
231 } 226 }
232 227
233 EXPECT_CALL(mock_stub, 228 EXPECT_CALL(mock_stub,
234 InjectKeyEvent(EqualsUsbEventWithoutLockStates(3, false))) 229 InjectKeyEvent(EqualsUsbEventWithoutLockStates(3, false)))
235 .After(injects); 230 .After(injects);
236 231
237 input_tracker.InjectKeyEvent(NewUsbEvent(3, true)); 232 input_tracker.InjectKeyEvent(NewUsbEvent(3, true));
238 PressAndReleaseUsb(&input_tracker, 1); 233 PressAndReleaseUsb(&input_tracker, 1);
239 234
240 KeyEvent invalid_event1; 235 KeyEvent invalid_event1;
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after
347 TouchEvent cancel_event; 342 TouchEvent cancel_event;
348 cancel_event.set_event_type(TouchEvent::TOUCH_POINT_CANCEL); 343 cancel_event.set_event_type(TouchEvent::TOUCH_POINT_CANCEL);
349 AddTouchPoint(3, &cancel_event); 344 AddTouchPoint(3, &cancel_event);
350 input_tracker.InjectTouchEvent(cancel_event); 345 input_tracker.InjectTouchEvent(cancel_event);
351 346
352 input_tracker.ReleaseAll(); 347 input_tracker.ReleaseAll();
353 } 348 }
354 349
355 } // namespace protocol 350 } // namespace protocol
356 } // namespace remoting 351 } // namespace remoting
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698