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 "remoting/protocol/input_event_tracker.h" | 5 #include "remoting/protocol/input_event_tracker.h" |
6 | 6 |
| 7 #include <stdint.h> |
| 8 |
7 #include "remoting/proto/event.pb.h" | 9 #include "remoting/proto/event.pb.h" |
8 #include "remoting/protocol/protocol_mock_objects.h" | 10 #include "remoting/protocol/protocol_mock_objects.h" |
9 #include "remoting/protocol/test_event_matchers.h" | 11 #include "remoting/protocol/test_event_matchers.h" |
10 #include "testing/gmock/include/gmock/gmock.h" | 12 #include "testing/gmock/include/gmock/gmock.h" |
11 #include "testing/gtest/include/gtest/gtest.h" | 13 #include "testing/gtest/include/gtest/gtest.h" |
12 | 14 |
13 using ::testing::_; | 15 using ::testing::_; |
14 using ::testing::ExpectationSet; | 16 using ::testing::ExpectationSet; |
15 using ::testing::InSequence; | 17 using ::testing::InSequence; |
16 | 18 |
17 namespace remoting { | 19 namespace remoting { |
18 namespace protocol { | 20 namespace protocol { |
19 | 21 |
20 using test::EqualsKeyEventWithCapsLock; | 22 using test::EqualsKeyEventWithCapsLock; |
21 using test::EqualsMouseEvent; | 23 using test::EqualsMouseEvent; |
22 using test::EqualsKeyEventWithoutLockStates; | 24 using test::EqualsKeyEventWithoutLockStates; |
23 | 25 |
24 namespace { | 26 namespace { |
25 | 27 |
26 static const MouseEvent::MouseButton BUTTON_LEFT = MouseEvent::BUTTON_LEFT; | 28 static const MouseEvent::MouseButton BUTTON_LEFT = MouseEvent::BUTTON_LEFT; |
27 static const MouseEvent::MouseButton BUTTON_RIGHT = MouseEvent::BUTTON_RIGHT; | 29 static const MouseEvent::MouseButton BUTTON_RIGHT = MouseEvent::BUTTON_RIGHT; |
28 | 30 |
29 MATCHER_P2(TouchPointIdsAndTypeEqual, ids, type, "") { | 31 MATCHER_P2(TouchPointIdsAndTypeEqual, ids, type, "") { |
30 if (arg.event_type() != type) | 32 if (arg.event_type() != type) |
31 return false; | 33 return false; |
32 | 34 |
33 std::set<uint32> touch_ids; | 35 std::set<uint32_t> touch_ids; |
34 for (const TouchEventPoint& point : arg.touch_points()) { | 36 for (const TouchEventPoint& point : arg.touch_points()) { |
35 touch_ids.insert(point.id()); | 37 touch_ids.insert(point.id()); |
36 } | 38 } |
37 return touch_ids == ids; | 39 return touch_ids == ids; |
38 } | 40 } |
39 | 41 |
40 static KeyEvent NewUsbEvent(uint32 usb_keycode, bool pressed) { | 42 static KeyEvent NewUsbEvent(uint32_t usb_keycode, bool pressed) { |
41 KeyEvent event; | 43 KeyEvent event; |
42 event.set_usb_keycode(usb_keycode); | 44 event.set_usb_keycode(usb_keycode); |
43 event.set_pressed(pressed); | 45 event.set_pressed(pressed); |
44 // Create all key events with the hardcoded |lock_state| in this test. | 46 // Create all key events with the hardcoded |lock_state| in this test. |
45 event.set_lock_states(KeyEvent::LOCK_STATES_CAPSLOCK); | 47 event.set_lock_states(KeyEvent::LOCK_STATES_CAPSLOCK); |
46 return event; | 48 return event; |
47 } | 49 } |
48 | 50 |
49 static void PressAndReleaseUsb(InputStub* input_stub, uint32 usb_keycode) { | 51 static void PressAndReleaseUsb(InputStub* input_stub, uint32_t usb_keycode) { |
50 input_stub->InjectKeyEvent(NewUsbEvent(usb_keycode, true)); | 52 input_stub->InjectKeyEvent(NewUsbEvent(usb_keycode, true)); |
51 input_stub->InjectKeyEvent(NewUsbEvent(usb_keycode, false)); | 53 input_stub->InjectKeyEvent(NewUsbEvent(usb_keycode, false)); |
52 } | 54 } |
53 | 55 |
54 static MouseEvent NewMouseEvent(int x, | 56 static MouseEvent NewMouseEvent(int x, |
55 int y, | 57 int y, |
56 MouseEvent::MouseButton button, | 58 MouseEvent::MouseButton button, |
57 bool down) { | 59 bool down) { |
58 MouseEvent event; | 60 MouseEvent event; |
59 event.set_x(x); | 61 event.set_x(x); |
60 event.set_y(y); | 62 event.set_y(y); |
61 event.set_button(button); | 63 event.set_button(button); |
62 event.set_button_down(down); | 64 event.set_button_down(down); |
63 return event; | 65 return event; |
64 } | 66 } |
65 | 67 |
66 void AddTouchPoint(uint32 id, TouchEvent* event) { | 68 void AddTouchPoint(uint32_t id, TouchEvent* event) { |
67 TouchEventPoint* p = event->add_touch_points(); | 69 TouchEventPoint* p = event->add_touch_points(); |
68 p->set_id(id); | 70 p->set_id(id); |
69 } | 71 } |
70 | 72 |
71 } // namespace | 73 } // namespace |
72 | 74 |
73 // Verify that keys that were pressed and released aren't re-released. | 75 // Verify that keys that were pressed and released aren't re-released. |
74 TEST(InputEventTrackerTest, NothingToRelease) { | 76 TEST(InputEventTrackerTest, NothingToRelease) { |
75 MockInputStub mock_stub; | 77 MockInputStub mock_stub; |
76 InputEventTracker input_tracker(&mock_stub); | 78 InputEventTracker input_tracker(&mock_stub); |
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
253 | 255 |
254 input_tracker.ReleaseAll(); | 256 input_tracker.ReleaseAll(); |
255 } | 257 } |
256 | 258 |
257 // All touch points added with multiple touch events should be released as a | 259 // All touch points added with multiple touch events should be released as a |
258 // cancel event. | 260 // cancel event. |
259 TEST(InputEventTrackerTest, ReleaseAllTouchPoints) { | 261 TEST(InputEventTrackerTest, ReleaseAllTouchPoints) { |
260 MockInputStub mock_stub; | 262 MockInputStub mock_stub; |
261 InputEventTracker input_tracker(&mock_stub); | 263 InputEventTracker input_tracker(&mock_stub); |
262 | 264 |
263 std::set<uint32> expected_ids1; | 265 std::set<uint32_t> expected_ids1; |
264 expected_ids1.insert(1); | 266 expected_ids1.insert(1); |
265 expected_ids1.insert(2); | 267 expected_ids1.insert(2); |
266 std::set<uint32> expected_ids2; | 268 std::set<uint32_t> expected_ids2; |
267 expected_ids2.insert(3); | 269 expected_ids2.insert(3); |
268 expected_ids2.insert(5); | 270 expected_ids2.insert(5); |
269 expected_ids2.insert(8); | 271 expected_ids2.insert(8); |
270 | 272 |
271 std::set<uint32> all_touch_point_ids; | 273 std::set<uint32_t> all_touch_point_ids; |
272 all_touch_point_ids.insert(expected_ids1.begin(), expected_ids1.end()); | 274 all_touch_point_ids.insert(expected_ids1.begin(), expected_ids1.end()); |
273 all_touch_point_ids.insert(expected_ids2.begin(), expected_ids2.end()); | 275 all_touch_point_ids.insert(expected_ids2.begin(), expected_ids2.end()); |
274 | 276 |
275 InSequence s; | 277 InSequence s; |
276 EXPECT_CALL(mock_stub, InjectTouchEvent(TouchPointIdsAndTypeEqual( | 278 EXPECT_CALL(mock_stub, InjectTouchEvent(TouchPointIdsAndTypeEqual( |
277 expected_ids1, TouchEvent::TOUCH_POINT_START))); | 279 expected_ids1, TouchEvent::TOUCH_POINT_START))); |
278 EXPECT_CALL(mock_stub, InjectTouchEvent(TouchPointIdsAndTypeEqual( | 280 EXPECT_CALL(mock_stub, InjectTouchEvent(TouchPointIdsAndTypeEqual( |
279 expected_ids2, TouchEvent::TOUCH_POINT_START))); | 281 expected_ids2, TouchEvent::TOUCH_POINT_START))); |
280 | 282 |
281 EXPECT_CALL(mock_stub, | 283 EXPECT_CALL(mock_stub, |
(...skipping 15 matching lines...) Expand all Loading... |
297 | 299 |
298 input_tracker.ReleaseAll(); | 300 input_tracker.ReleaseAll(); |
299 } | 301 } |
300 | 302 |
301 // Add some touch points and remove only a subset of them. ReleaseAll() should | 303 // Add some touch points and remove only a subset of them. ReleaseAll() should |
302 // cancel all the remaining touch points. | 304 // cancel all the remaining touch points. |
303 TEST(InputEventTrackerTest, ReleaseAllRemainingTouchPoints) { | 305 TEST(InputEventTrackerTest, ReleaseAllRemainingTouchPoints) { |
304 MockInputStub mock_stub; | 306 MockInputStub mock_stub; |
305 InputEventTracker input_tracker(&mock_stub); | 307 InputEventTracker input_tracker(&mock_stub); |
306 | 308 |
307 std::set<uint32> start_expected_ids; | 309 std::set<uint32_t> start_expected_ids; |
308 start_expected_ids.insert(1); | 310 start_expected_ids.insert(1); |
309 start_expected_ids.insert(2); | 311 start_expected_ids.insert(2); |
310 start_expected_ids.insert(3); | 312 start_expected_ids.insert(3); |
311 | 313 |
312 std::set<uint32> end_expected_ids; | 314 std::set<uint32_t> end_expected_ids; |
313 end_expected_ids.insert(1); | 315 end_expected_ids.insert(1); |
314 std::set<uint32> cancel_expected_ids; | 316 std::set<uint32_t> cancel_expected_ids; |
315 cancel_expected_ids.insert(3); | 317 cancel_expected_ids.insert(3); |
316 | 318 |
317 std::set<uint32> all_remaining_touch_point_ids; | 319 std::set<uint32_t> all_remaining_touch_point_ids; |
318 all_remaining_touch_point_ids.insert(2); | 320 all_remaining_touch_point_ids.insert(2); |
319 | 321 |
320 InSequence s; | 322 InSequence s; |
321 EXPECT_CALL(mock_stub, | 323 EXPECT_CALL(mock_stub, |
322 InjectTouchEvent(TouchPointIdsAndTypeEqual( | 324 InjectTouchEvent(TouchPointIdsAndTypeEqual( |
323 start_expected_ids, TouchEvent::TOUCH_POINT_START))); | 325 start_expected_ids, TouchEvent::TOUCH_POINT_START))); |
324 EXPECT_CALL(mock_stub, InjectTouchEvent(TouchPointIdsAndTypeEqual( | 326 EXPECT_CALL(mock_stub, InjectTouchEvent(TouchPointIdsAndTypeEqual( |
325 end_expected_ids, TouchEvent::TOUCH_POINT_END))); | 327 end_expected_ids, TouchEvent::TOUCH_POINT_END))); |
326 EXPECT_CALL(mock_stub, | 328 EXPECT_CALL(mock_stub, |
327 InjectTouchEvent(TouchPointIdsAndTypeEqual( | 329 InjectTouchEvent(TouchPointIdsAndTypeEqual( |
(...skipping 18 matching lines...) Expand all Loading... |
346 TouchEvent cancel_event; | 348 TouchEvent cancel_event; |
347 cancel_event.set_event_type(TouchEvent::TOUCH_POINT_CANCEL); | 349 cancel_event.set_event_type(TouchEvent::TOUCH_POINT_CANCEL); |
348 AddTouchPoint(3, &cancel_event); | 350 AddTouchPoint(3, &cancel_event); |
349 input_tracker.InjectTouchEvent(cancel_event); | 351 input_tracker.InjectTouchEvent(cancel_event); |
350 | 352 |
351 input_tracker.ReleaseAll(); | 353 input_tracker.ReleaseAll(); |
352 } | 354 } |
353 | 355 |
354 } // namespace protocol | 356 } // namespace protocol |
355 } // namespace remoting | 357 } // namespace remoting |
OLD | NEW |