gesture_event_data_packet_unittest.cc 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. // Copyright 2014 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include <stddef.h>
  5. #include "testing/gtest/include/gtest/gtest.h"
  6. #include "ui/events/gesture_detection/gesture_event_data_packet.h"
  7. #include "ui/events/test/motion_event_test_utils.h"
  8. using ui::test::MockMotionEvent;
  9. namespace ui {
  10. namespace {
  11. const float kTouchX = 13.7f;
  12. const float kTouchY = 14.2f;
  13. const uint32_t uniqueTouchEventId = 1234U;
  14. GestureEventData CreateGesture(EventType type) {
  15. return GestureEventData(GestureEventDetails(type), 0,
  16. MotionEvent::ToolType::FINGER, base::TimeTicks(),
  17. kTouchX, kTouchY, kTouchX + 5.f, kTouchY + 10.f, 1,
  18. gfx::RectF(kTouchX - 1.f, kTouchY - 1.f, 2.f, 2.f),
  19. EF_NONE, uniqueTouchEventId);
  20. }
  21. } // namespace
  22. bool GestureEqualsExceptForTouchId(const GestureEventData& lhs,
  23. const GestureEventData& rhs) {
  24. return lhs.type() == rhs.type() &&
  25. lhs.motion_event_id == rhs.motion_event_id &&
  26. lhs.primary_tool_type == rhs.primary_tool_type &&
  27. lhs.time == rhs.time && lhs.x == rhs.x && lhs.y == rhs.y &&
  28. lhs.raw_x == rhs.raw_x && lhs.raw_y == rhs.raw_y;
  29. }
  30. bool PacketEquals(const GestureEventDataPacket& lhs,
  31. const GestureEventDataPacket& rhs) {
  32. if (lhs.timestamp() != rhs.timestamp() ||
  33. lhs.gesture_count() != rhs.gesture_count() ||
  34. lhs.timestamp() != rhs.timestamp() ||
  35. lhs.gesture_source() != rhs.gesture_source() ||
  36. lhs.touch_location() != rhs.touch_location() ||
  37. lhs.raw_touch_location() != rhs.raw_touch_location() ||
  38. lhs.unique_touch_event_id() != rhs.unique_touch_event_id())
  39. return false;
  40. for (size_t i = 0; i < lhs.gesture_count(); ++i) {
  41. if (!GestureEqualsExceptForTouchId(lhs.gesture(i), rhs.gesture(i)))
  42. return false;
  43. if (lhs.gesture(i).unique_touch_event_id !=
  44. rhs.gesture(i).unique_touch_event_id)
  45. return false;
  46. }
  47. return true;
  48. }
  49. class GestureEventDataPacketTest : public testing::Test {};
  50. TEST_F(GestureEventDataPacketTest, Basic) {
  51. base::TimeTicks touch_time = base::TimeTicks::Now();
  52. GestureEventDataPacket packet;
  53. EXPECT_EQ(0U, packet.gesture_count());
  54. EXPECT_EQ(GestureEventDataPacket::UNDEFINED, packet.gesture_source());
  55. packet = GestureEventDataPacket::FromTouch(
  56. MockMotionEvent(MotionEvent::Action::DOWN, touch_time, kTouchX, kTouchY));
  57. EXPECT_TRUE(touch_time == packet.timestamp());
  58. EXPECT_EQ(0U, packet.gesture_count());
  59. EXPECT_EQ(gfx::PointF(kTouchX, kTouchY), packet.touch_location());
  60. for (size_t i = ET_GESTURE_TYPE_START; i < ET_GESTURE_TYPE_END; ++i) {
  61. const EventType type = static_cast<EventType>(i);
  62. GestureEventData gesture = CreateGesture(type);
  63. packet.Push(gesture);
  64. const size_t index = (i - ET_GESTURE_TYPE_START);
  65. ASSERT_EQ(index + 1U, packet.gesture_count());
  66. EXPECT_TRUE(GestureEqualsExceptForTouchId(gesture, packet.gesture(index)));
  67. EXPECT_EQ(packet.unique_touch_event_id(),
  68. packet.gesture(index).unique_touch_event_id);
  69. }
  70. }
  71. TEST_F(GestureEventDataPacketTest, Copy) {
  72. GestureEventDataPacket packet0 = GestureEventDataPacket::FromTouch(
  73. MockMotionEvent(MotionEvent::Action::UP));
  74. packet0.Push(CreateGesture(ET_GESTURE_TAP_DOWN));
  75. packet0.Push(CreateGesture(ET_GESTURE_SCROLL_BEGIN));
  76. GestureEventDataPacket packet1 = packet0;
  77. EXPECT_TRUE(PacketEquals(packet0, packet1));
  78. packet0 = packet1;
  79. EXPECT_TRUE(PacketEquals(packet1, packet0));
  80. }
  81. TEST_F(GestureEventDataPacketTest, GestureSource) {
  82. GestureEventDataPacket packet = GestureEventDataPacket::FromTouch(
  83. MockMotionEvent(MotionEvent::Action::DOWN));
  84. EXPECT_EQ(GestureEventDataPacket::TOUCH_SEQUENCE_START,
  85. packet.gesture_source());
  86. packet = GestureEventDataPacket::FromTouch(
  87. MockMotionEvent(MotionEvent::Action::UP));
  88. EXPECT_EQ(GestureEventDataPacket::TOUCH_SEQUENCE_END,
  89. packet.gesture_source());
  90. packet = GestureEventDataPacket::FromTouch(
  91. MockMotionEvent(MotionEvent::Action::CANCEL));
  92. EXPECT_EQ(GestureEventDataPacket::TOUCH_SEQUENCE_CANCEL,
  93. packet.gesture_source());
  94. packet = GestureEventDataPacket::FromTouch(
  95. MockMotionEvent(MotionEvent::Action::MOVE));
  96. EXPECT_EQ(GestureEventDataPacket::TOUCH_MOVE, packet.gesture_source());
  97. packet = GestureEventDataPacket::FromTouch(
  98. MockMotionEvent(MotionEvent::Action::POINTER_DOWN));
  99. EXPECT_EQ(GestureEventDataPacket::TOUCH_START, packet.gesture_source());
  100. packet = GestureEventDataPacket::FromTouch(
  101. MockMotionEvent(MotionEvent::Action::POINTER_UP));
  102. EXPECT_EQ(GestureEventDataPacket::TOUCH_END, packet.gesture_source());
  103. GestureEventData gesture = CreateGesture(ET_GESTURE_TAP);
  104. packet = GestureEventDataPacket::FromTouchTimeout(gesture);
  105. EXPECT_EQ(GestureEventDataPacket::TOUCH_TIMEOUT, packet.gesture_source());
  106. EXPECT_EQ(1U, packet.gesture_count());
  107. EXPECT_EQ(base::TimeTicks(), packet.timestamp());
  108. EXPECT_EQ(gfx::PointF(gesture.x, gesture.y), packet.touch_location());
  109. }
  110. } // namespace ui