motion_event_generic_unittest.cc revision 5f1c94371a64b3196d4be9466099bb892df9b88e
1ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Copyright 2014 The Chromium Authors. All rights reserved.
2ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// Use of this source code is governed by a BSD-style license that can be
3ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov// found in the LICENSE file.
4ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
5ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "testing/gtest/include/gtest/gtest.h"
6ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov#include "ui/events/gesture_detection/motion_event_generic.h"
7ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
8ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganovnamespace ui {
9ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
10ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovTEST(MotionEventGenericTest, Basic) {
11ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  base::TimeTicks event_time = base::TimeTicks::Now();
12ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  MotionEventGeneric event(
13ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov      MotionEvent::ACTION_DOWN, event_time, PointerProperties());
14ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(1U, event.GetPointerCount());
15ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(0U, event.GetHistorySize());
16ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(event_time, event.GetEventTime());
17ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
18ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  event.PushPointer(PointerProperties(8.3f, 4.7f));
19ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  ASSERT_EQ(2U, event.GetPointerCount());
20ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(8.3f, event.GetX(1));
21ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(4.7f, event.GetY(1));
22ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
23ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  event.PushPointer(PointerProperties(2.3f, -3.7f));
24ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  ASSERT_EQ(3U, event.GetPointerCount());
25ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(2.3f, event.GetX(2));
26ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(-3.7f, event.GetY(2));
27ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
28ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  event.set_id(1);
29ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(1, event.GetId());
30ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
31ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  event.set_action(MotionEvent::ACTION_POINTER_DOWN);
32ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(MotionEvent::ACTION_POINTER_DOWN, event.GetAction());
33ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
34ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  event_time += base::TimeDelta::FromMilliseconds(5);
35ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  event.set_event_time(event_time);
36ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(event_time, event.GetEventTime());
37ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
38ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  event.set_button_state(MotionEvent::BUTTON_PRIMARY);
39ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(MotionEvent::BUTTON_PRIMARY, event.GetButtonState());
40ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
41ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  event.set_action_index(1);
42ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(1, event.GetActionIndex());
43ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
44ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
45ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovTEST(MotionEventGenericTest, Clone) {
46ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  MotionEventGeneric event(MotionEvent::ACTION_DOWN,
47ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                           base::TimeTicks::Now(),
48ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                           PointerProperties(8.3f, 4.7f));
49ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  event.set_id(1);
50ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  event.set_button_state(MotionEvent::BUTTON_PRIMARY);
51ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
52ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  scoped_ptr<MotionEvent> clone = event.Clone();
53ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  ASSERT_TRUE(clone);
54ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(event, *clone);
55ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
56ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
57ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovTEST(MotionEventGenericTest, Cancel) {
58ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  MotionEventGeneric event(MotionEvent::ACTION_UP,
59ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                           base::TimeTicks::Now(),
60ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov                           PointerProperties(8.7f, 4.3f));
61ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  event.set_id(2);
62ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  event.set_button_state(MotionEvent::BUTTON_SECONDARY);
63ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
64ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  scoped_ptr<MotionEvent> cancel = event.Cancel();
65ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  event.set_action(MotionEvent::ACTION_CANCEL);
66ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  ASSERT_TRUE(cancel);
67ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(event, *cancel);
68ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov}
69ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
70ee451cb395940862dad63c85adfe8f2fd55e864cSvet GanovTEST(MotionEventGenericTest, FindPointerIndexOfId) {
71ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  base::TimeTicks event_time = base::TimeTicks::Now();
72ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  PointerProperties pointer;
73ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  pointer.id = 0;
74ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  MotionEventGeneric event0(MotionEvent::ACTION_DOWN, event_time, pointer);
75ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(0, event0.FindPointerIndexOfId(0));
76ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(-1, event0.FindPointerIndexOfId(1));
77ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(-1, event0.FindPointerIndexOfId(-1));
78ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
79ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  MotionEventGeneric event1(event0);
80ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  pointer.id = 7;
81ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  event1.PushPointer(pointer);
82ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(0, event1.FindPointerIndexOfId(0));
83ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(1, event1.FindPointerIndexOfId(7));
84ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(-1, event1.FindPointerIndexOfId(6));
85ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(-1, event1.FindPointerIndexOfId(1));
86ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov
87ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  MotionEventGeneric event2(event1);
88ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  pointer.id = 3;
89ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  event2.PushPointer(pointer);
90ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(0, event2.FindPointerIndexOfId(0));
91ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(1, event2.FindPointerIndexOfId(7));
92ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(2, event2.FindPointerIndexOfId(3));
93ee451cb395940862dad63c85adfe8f2fd55e864cSvet Ganov  EXPECT_EQ(-1, event2.FindPointerIndexOfId(1));
94  EXPECT_EQ(-1, event2.FindPointerIndexOfId(2));
95}
96
97}  // namespace ui
98