Index: ui/events/gesture_detection/gesture_event_data_packet_unittest.cc |
diff --git a/ui/events/gesture_detection/gesture_event_data_packet_unittest.cc b/ui/events/gesture_detection/gesture_event_data_packet_unittest.cc |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2502219f27ebd0061e12c19be51d53ec637d262c |
--- /dev/null |
+++ b/ui/events/gesture_detection/gesture_event_data_packet_unittest.cc |
@@ -0,0 +1,131 @@ |
+// Copyright 2014 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+#include "base/basictypes.h" |
+#include "testing/gtest/include/gtest/gtest.h" |
+#include "ui/events/gesture_detection/gesture_event_data_packet.h" |
+#include "ui/events/test/mock_motion_event.h" |
+ |
+using ui::test::MockMotionEvent; |
+ |
+namespace ui { |
+namespace { |
+ |
+const float kTouchX = 13.7f; |
+const float kTouchY = 14.2f; |
+ |
+GestureEventData CreateGesture(EventType type) { |
+ return GestureEventData(GestureEventDetails(type, 0, 0), |
+ 0, |
+ base::TimeTicks(), |
+ kTouchX, |
+ kTouchY, |
+ kTouchX + 5.f, |
+ kTouchY + 10.f, |
+ 1, |
+ gfx::RectF(kTouchX - 1.f, kTouchY - 1.f, 2.f, 2.f)); |
+} |
+ |
+} // namespace |
+ |
+bool GestureEquals(const GestureEventData& lhs, const GestureEventData& rhs) { |
+ return lhs.type() == rhs.type() && |
+ lhs.motion_event_id == rhs.motion_event_id && lhs.time == rhs.time && |
+ lhs.x == rhs.x && lhs.y == rhs.y && lhs.raw_x == rhs.raw_x && |
+ lhs.raw_y == rhs.raw_y; |
+} |
+ |
+bool PacketEquals(const GestureEventDataPacket& lhs, |
+ const GestureEventDataPacket& rhs) { |
+ if (lhs.timestamp() != rhs.timestamp() || |
+ lhs.gesture_count() != rhs.gesture_count() || |
+ lhs.timestamp() != rhs.timestamp() || |
+ lhs.gesture_source() != rhs.gesture_source() || |
+ lhs.touch_location() != rhs.touch_location() || |
+ lhs.raw_touch_location() != rhs.raw_touch_location()) |
+ return false; |
+ |
+ for (size_t i = 0; i < lhs.gesture_count(); ++i) { |
+ if (!GestureEquals(lhs.gesture(i), rhs.gesture(i))) |
+ return false; |
+ } |
+ |
+ return true; |
+} |
+ |
+class GestureEventDataPacketTest : public testing::Test {}; |
+ |
+TEST_F(GestureEventDataPacketTest, Basic) { |
+ base::TimeTicks touch_time = base::TimeTicks::Now(); |
+ |
+ GestureEventDataPacket packet; |
+ EXPECT_EQ(0U, packet.gesture_count()); |
+ EXPECT_EQ(GestureEventDataPacket::UNDEFINED, packet.gesture_source()); |
+ |
+ packet = GestureEventDataPacket::FromTouch( |
+ MockMotionEvent(MotionEvent::ACTION_DOWN, touch_time, kTouchX, kTouchY)); |
+ EXPECT_TRUE(touch_time == packet.timestamp()); |
+ EXPECT_EQ(0U, packet.gesture_count()); |
+ EXPECT_EQ(gfx::PointF(kTouchX, kTouchY), packet.touch_location()); |
+ |
+ for (size_t i = ET_GESTURE_TYPE_START; i < ET_GESTURE_TYPE_END; ++i) { |
+ const EventType type = static_cast<EventType>(i); |
+ GestureEventData gesture = CreateGesture(type); |
+ packet.Push(gesture); |
+ const size_t index = (i - ET_GESTURE_TYPE_START); |
+ ASSERT_EQ(index + 1U, packet.gesture_count()); |
+ EXPECT_TRUE(GestureEquals(gesture, packet.gesture(index))); |
+ } |
+} |
+ |
+TEST_F(GestureEventDataPacketTest, Copy) { |
+ GestureEventDataPacket packet0 = GestureEventDataPacket::FromTouch( |
+ MockMotionEvent(MotionEvent::ACTION_UP)); |
+ packet0.Push(CreateGesture(ET_GESTURE_TAP_DOWN)); |
+ packet0.Push(CreateGesture(ET_GESTURE_SCROLL_BEGIN)); |
+ |
+ GestureEventDataPacket packet1 = packet0; |
+ EXPECT_TRUE(PacketEquals(packet0, packet1)); |
+ |
+ packet0 = packet1; |
+ EXPECT_TRUE(PacketEquals(packet1, packet0)); |
+} |
+ |
+TEST_F(GestureEventDataPacketTest, GestureSource) { |
+ GestureEventDataPacket packet = GestureEventDataPacket::FromTouch( |
+ MockMotionEvent(MotionEvent::ACTION_DOWN)); |
+ EXPECT_EQ(GestureEventDataPacket::TOUCH_SEQUENCE_START, |
+ packet.gesture_source()); |
+ |
+ packet = GestureEventDataPacket::FromTouch( |
+ MockMotionEvent(MotionEvent::ACTION_UP)); |
+ EXPECT_EQ(GestureEventDataPacket::TOUCH_SEQUENCE_END, |
+ packet.gesture_source()); |
+ |
+ packet = GestureEventDataPacket::FromTouch( |
+ MockMotionEvent(MotionEvent::ACTION_CANCEL)); |
+ EXPECT_EQ(GestureEventDataPacket::TOUCH_SEQUENCE_CANCEL, |
+ packet.gesture_source()); |
+ |
+ packet = GestureEventDataPacket::FromTouch( |
+ MockMotionEvent(MotionEvent::ACTION_MOVE)); |
+ EXPECT_EQ(GestureEventDataPacket::TOUCH_MOVE, packet.gesture_source()); |
+ |
+ packet = GestureEventDataPacket::FromTouch( |
+ MockMotionEvent(MotionEvent::ACTION_POINTER_DOWN)); |
+ EXPECT_EQ(GestureEventDataPacket::TOUCH_START, packet.gesture_source()); |
+ |
+ packet = GestureEventDataPacket::FromTouch( |
+ MockMotionEvent(MotionEvent::ACTION_POINTER_UP)); |
+ EXPECT_EQ(GestureEventDataPacket::TOUCH_END, packet.gesture_source()); |
+ |
+ GestureEventData gesture = CreateGesture(ET_GESTURE_TAP); |
+ packet = GestureEventDataPacket::FromTouchTimeout(gesture); |
+ EXPECT_EQ(GestureEventDataPacket::TOUCH_TIMEOUT, packet.gesture_source()); |
+ EXPECT_EQ(1U, packet.gesture_count()); |
+ EXPECT_EQ(base::TimeTicks(), packet.timestamp()); |
+ EXPECT_EQ(gfx::PointF(gesture.x, gesture.y), packet.touch_location()); |
+} |
+ |
+} // namespace ui |