xref: /aosp_15_r20/external/libchrome-gestures/src/gestures_unittest.cc (revision aed3e5085e770be5b69ce25295ecf6ddf906af95)
1*aed3e508SAndroid Build Coastguard Worker // Copyright 2012 The ChromiumOS Authors
2*aed3e508SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
3*aed3e508SAndroid Build Coastguard Worker // found in the LICENSE file.
4*aed3e508SAndroid Build Coastguard Worker 
5*aed3e508SAndroid Build Coastguard Worker #include <gtest/gtest.h>
6*aed3e508SAndroid Build Coastguard Worker #include <memory>
7*aed3e508SAndroid Build Coastguard Worker #include <stdio.h>
8*aed3e508SAndroid Build Coastguard Worker 
9*aed3e508SAndroid Build Coastguard Worker #include "include/gestures.h"
10*aed3e508SAndroid Build Coastguard Worker #include "include/macros.h"
11*aed3e508SAndroid Build Coastguard Worker #include "include/unittest_util.h"
12*aed3e508SAndroid Build Coastguard Worker 
13*aed3e508SAndroid Build Coastguard Worker namespace gestures {
14*aed3e508SAndroid Build Coastguard Worker 
15*aed3e508SAndroid Build Coastguard Worker using std::string;
16*aed3e508SAndroid Build Coastguard Worker 
17*aed3e508SAndroid Build Coastguard Worker class GesturesTest : public ::testing::Test {};
18*aed3e508SAndroid Build Coastguard Worker 
TEST(GesturesTest,SameFingersAsTest)19*aed3e508SAndroid Build Coastguard Worker TEST(GesturesTest, SameFingersAsTest) {
20*aed3e508SAndroid Build Coastguard Worker   FingerState finger_states[] = {
21*aed3e508SAndroid Build Coastguard Worker     // TM, Tm, WM, Wm, Press, Orientation, X, Y, TrID
22*aed3e508SAndroid Build Coastguard Worker     {0, 0, 0, 0, 1, 0, 0, 0, 1, 0},
23*aed3e508SAndroid Build Coastguard Worker     {0, 0, 0, 0, 1, 0, 0, 0, 1, 0},
24*aed3e508SAndroid Build Coastguard Worker     {0, 0, 0, 0, 1, 0, 0, 0, 2, 0},
25*aed3e508SAndroid Build Coastguard Worker     {0, 0, 0, 0, 1, 0, 0, 0, 3, 0},
26*aed3e508SAndroid Build Coastguard Worker     {0, 0, 0, 0, 1, 0, 0, 0, 4, 0},
27*aed3e508SAndroid Build Coastguard Worker     {0, 0, 0, 0, 1, 0, 0, 0, 5, 0}
28*aed3e508SAndroid Build Coastguard Worker   };
29*aed3e508SAndroid Build Coastguard Worker   HardwareState hardware_state[] = {
30*aed3e508SAndroid Build Coastguard Worker     // time, buttons, finger count, finger states pointer
31*aed3e508SAndroid Build Coastguard Worker     make_hwstate(200000, 0, 1, 1, &finger_states[0]),
32*aed3e508SAndroid Build Coastguard Worker     make_hwstate(200001, 0, 1, 1, &finger_states[1]),
33*aed3e508SAndroid Build Coastguard Worker     make_hwstate(200001, 0, 2, 2, &finger_states[1]),
34*aed3e508SAndroid Build Coastguard Worker     make_hwstate(200001, 0, 2, 2, &finger_states[2]),
35*aed3e508SAndroid Build Coastguard Worker   };
36*aed3e508SAndroid Build Coastguard Worker 
37*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(hardware_state[0].SameFingersAs(hardware_state[1]));
38*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(hardware_state[0].SameFingersAs(hardware_state[2]));
39*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(hardware_state[2].SameFingersAs(hardware_state[2]));
40*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(hardware_state[2].SameFingersAs(hardware_state[3]));
41*aed3e508SAndroid Build Coastguard Worker }
42*aed3e508SAndroid Build Coastguard Worker 
TEST(GesturesTest,GestureStringTest)43*aed3e508SAndroid Build Coastguard Worker TEST(GesturesTest, GestureStringTest) {
44*aed3e508SAndroid Build Coastguard Worker   Gesture null;
45*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(null.String().c_str(), "null"));
46*aed3e508SAndroid Build Coastguard Worker 
47*aed3e508SAndroid Build Coastguard Worker   Gesture move(kGestureMove, 1.0, 2.0, 3.0, 4.0);
48*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(move.String().c_str(), "1"));
49*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(move.String().c_str(), "2"));
50*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(move.String().c_str(), "3"));
51*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(move.String().c_str(), "4"));
52*aed3e508SAndroid Build Coastguard Worker 
53*aed3e508SAndroid Build Coastguard Worker   Gesture scroll(kGestureScroll, 1.0, 2.0, 3.0, 4.0);
54*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(scroll.String().c_str(), "1"));
55*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(scroll.String().c_str(), "2"));
56*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(scroll.String().c_str(), "3"));
57*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(scroll.String().c_str(), "4"));
58*aed3e508SAndroid Build Coastguard Worker 
59*aed3e508SAndroid Build Coastguard Worker   Gesture buttons(kGestureButtonsChange, 1.0, 2.0, 3, 4, false);
60*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(buttons.String().c_str(), "1"));
61*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(buttons.String().c_str(), "2"));
62*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(buttons.String().c_str(), "3"));
63*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(buttons.String().c_str(), "4"));
64*aed3e508SAndroid Build Coastguard Worker 
65*aed3e508SAndroid Build Coastguard Worker   Gesture mousewheel(kGestureMouseWheel, 1.0, 2.0, 3.0, 4.0, 3, 4);
66*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(mousewheel.String().c_str(), "1"));
67*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(mousewheel.String().c_str(), "2"));
68*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(mousewheel.String().c_str(), "3"));
69*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(mousewheel.String().c_str(), "4"));
70*aed3e508SAndroid Build Coastguard Worker 
71*aed3e508SAndroid Build Coastguard Worker   Gesture pinch(kGesturePinch, 1.0, 2.0, 3.0, 4.0);
72*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(pinch.String().c_str(), "1"));
73*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(pinch.String().c_str(), "2"));
74*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(pinch.String().c_str(), "3"));
75*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(pinch.String().c_str(), "4"));
76*aed3e508SAndroid Build Coastguard Worker 
77*aed3e508SAndroid Build Coastguard Worker   Gesture swipe(kGestureSwipe, 1.0, 2.0, 3.0, 4.0);
78*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(swipe.String().c_str(), "1"));
79*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(swipe.String().c_str(), "2"));
80*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(swipe.String().c_str(), "3"));
81*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(swipe.String().c_str(), "4"));
82*aed3e508SAndroid Build Coastguard Worker 
83*aed3e508SAndroid Build Coastguard Worker   Gesture swipelift(kGestureSwipeLift, 1.0, 2.0);
84*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(swipelift.String().c_str(), "1"));
85*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(swipelift.String().c_str(), "2"));
86*aed3e508SAndroid Build Coastguard Worker 
87*aed3e508SAndroid Build Coastguard Worker   Gesture swipe4f(kGestureFourFingerSwipe, 1.0, 2.0, 3.0, 4.0);
88*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(swipe4f.String().c_str(), "1"));
89*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(swipe4f.String().c_str(), "2"));
90*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(swipe4f.String().c_str(), "3"));
91*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(swipe4f.String().c_str(), "4"));
92*aed3e508SAndroid Build Coastguard Worker 
93*aed3e508SAndroid Build Coastguard Worker   Gesture swipe4flift(kGestureFourFingerSwipeLift, 1.0, 2.0);
94*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(swipe4flift.String().c_str(), "1"));
95*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(swipe4flift.String().c_str(), "2"));
96*aed3e508SAndroid Build Coastguard Worker 
97*aed3e508SAndroid Build Coastguard Worker   Gesture metrics(kGestureMetrics, 1.0, 2.0,
98*aed3e508SAndroid Build Coastguard Worker                   kGestureMetricsTypeMouseMovement, 3.0, 4.0);
99*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(metrics.String().c_str(), "1"));
100*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(metrics.String().c_str(), "2"));
101*aed3e508SAndroid Build Coastguard Worker 
102*aed3e508SAndroid Build Coastguard Worker   Gesture contact_initiated;
103*aed3e508SAndroid Build Coastguard Worker   contact_initiated.type = kGestureTypeContactInitiated;
104*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(contact_initiated.String().c_str(), "nitiated"));
105*aed3e508SAndroid Build Coastguard Worker }
106*aed3e508SAndroid Build Coastguard Worker 
TEST(GesturesTest,GestureEqTest)107*aed3e508SAndroid Build Coastguard Worker TEST(GesturesTest, GestureEqTest) {
108*aed3e508SAndroid Build Coastguard Worker   Gesture null;
109*aed3e508SAndroid Build Coastguard Worker   Gesture null2;
110*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(null == null2);
111*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(null != null2);
112*aed3e508SAndroid Build Coastguard Worker 
113*aed3e508SAndroid Build Coastguard Worker   Gesture move(kGestureMove, 1.0, 2.0, 3.0, 4.0);
114*aed3e508SAndroid Build Coastguard Worker   Gesture move2(kGestureMove, 1.0, 2.0, 3.0, 4.0);
115*aed3e508SAndroid Build Coastguard Worker   Gesture move_ne0(kGestureMove, 9.0, 2.0, 3.0, 4.0);
116*aed3e508SAndroid Build Coastguard Worker   Gesture move_ne1(kGestureMove, 1.0, 9.0, 3.0, 4.0);
117*aed3e508SAndroid Build Coastguard Worker   Gesture move_ne2(kGestureMove, 1.0, 2.0, 9.0, 4.0);
118*aed3e508SAndroid Build Coastguard Worker   Gesture move_ne3(kGestureMove, 1.0, 2.0, 3.0, 9.0);
119*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(move == move2);
120*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(move == move_ne0);
121*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(move == move_ne1);
122*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(move == move_ne2);
123*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(move == move_ne3);
124*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(move != move2);
125*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(move != move_ne0);
126*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(move != move_ne1);
127*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(move != move_ne2);
128*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(move != move_ne3);
129*aed3e508SAndroid Build Coastguard Worker 
130*aed3e508SAndroid Build Coastguard Worker   Gesture scroll(kGestureScroll, 1.0, 2.0, 3.0, 4.0);
131*aed3e508SAndroid Build Coastguard Worker   Gesture scroll2(kGestureScroll, 1.0, 2.0, 3.0, 4.0);
132*aed3e508SAndroid Build Coastguard Worker   Gesture scroll_ne0(kGestureScroll, 9.0, 2.0, 3.0, 4.0);
133*aed3e508SAndroid Build Coastguard Worker   Gesture scroll_ne1(kGestureScroll, 1.0, 9.0, 3.0, 4.0);
134*aed3e508SAndroid Build Coastguard Worker   Gesture scroll_ne2(kGestureScroll, 1.0, 2.0, 9.0, 4.0);
135*aed3e508SAndroid Build Coastguard Worker   Gesture scroll_ne3(kGestureScroll, 1.0, 2.0, 3.0, 9.0);
136*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(scroll == scroll2);
137*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(scroll == scroll_ne0);
138*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(scroll == scroll_ne1);
139*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(scroll == scroll_ne2);
140*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(scroll == scroll_ne3);
141*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(scroll != scroll2);
142*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(scroll != scroll_ne0);
143*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(scroll != scroll_ne1);
144*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(scroll != scroll_ne2);
145*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(scroll != scroll_ne3);
146*aed3e508SAndroid Build Coastguard Worker 
147*aed3e508SAndroid Build Coastguard Worker   Gesture buttons(kGestureButtonsChange, 1.0, 2.0, 3, 4, false);
148*aed3e508SAndroid Build Coastguard Worker   Gesture buttons2(kGestureButtonsChange, 1.0, 2.0, 3, 4, false);
149*aed3e508SAndroid Build Coastguard Worker   Gesture buttons_ne0(kGestureButtonsChange, 9.0, 2.0, 3, 4, false);
150*aed3e508SAndroid Build Coastguard Worker   Gesture buttons_ne1(kGestureButtonsChange, 1.0, 9.0, 3, 4, false);
151*aed3e508SAndroid Build Coastguard Worker   Gesture buttons_ne2(kGestureButtonsChange, 1.0, 2.0, 9, 4, false);
152*aed3e508SAndroid Build Coastguard Worker   Gesture buttons_ne3(kGestureButtonsChange, 1.0, 2.0, 3, 9, false);
153*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(buttons == buttons2);
154*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(buttons == buttons_ne0);
155*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(buttons == buttons_ne1);
156*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(buttons == buttons_ne2);
157*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(buttons == buttons_ne3);
158*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(buttons != buttons2);
159*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(buttons != buttons_ne0);
160*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(buttons != buttons_ne1);
161*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(buttons != buttons_ne2);
162*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(buttons != buttons_ne3);
163*aed3e508SAndroid Build Coastguard Worker 
164*aed3e508SAndroid Build Coastguard Worker   Gesture fling(kGestureFling, 1.0, 2.0, 3.0, 4.0, GESTURES_FLING_START);
165*aed3e508SAndroid Build Coastguard Worker   Gesture fling2(kGestureFling, 1.0, 2.0, 3.0, 4.0, GESTURES_FLING_TAP_DOWN);
166*aed3e508SAndroid Build Coastguard Worker   Gesture fling_ne0(kGestureFling, 1.0, 2.0, 5.0, 4.0, GESTURES_FLING_START);
167*aed3e508SAndroid Build Coastguard Worker   Gesture fling_ne1(kGestureFling, 1.0, 2.0, 3.0, 5.0, GESTURES_FLING_START);
168*aed3e508SAndroid Build Coastguard Worker   Gesture fling_ne2(kGestureFling, 5.0, 2.0, 3.0, 4.0, GESTURES_FLING_START);
169*aed3e508SAndroid Build Coastguard Worker   Gesture fling_ne3(kGestureFling, 1.0, 5.0, 3.0, 4.0, GESTURES_FLING_START);
170*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(fling == fling2);
171*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(fling == fling_ne0);
172*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(fling == fling_ne1);
173*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(fling == fling_ne2);
174*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(fling == fling_ne3);
175*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(fling != fling2);
176*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(fling != fling_ne0);
177*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(fling != fling_ne1);
178*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(fling != fling_ne2);
179*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(fling != fling_ne3);
180*aed3e508SAndroid Build Coastguard Worker 
181*aed3e508SAndroid Build Coastguard Worker   Gesture contact_initiated;
182*aed3e508SAndroid Build Coastguard Worker   contact_initiated.type = kGestureTypeContactInitiated;
183*aed3e508SAndroid Build Coastguard Worker   Gesture contact_initiated2;
184*aed3e508SAndroid Build Coastguard Worker   contact_initiated2.type = kGestureTypeContactInitiated;
185*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(contact_initiated == contact_initiated2);
186*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(contact_initiated != contact_initiated2);
187*aed3e508SAndroid Build Coastguard Worker 
188*aed3e508SAndroid Build Coastguard Worker   Gesture wheelmouse(kGestureMouseWheel, 1.0, 2.0, 3.0, 4.0, 3, 4);
189*aed3e508SAndroid Build Coastguard Worker   Gesture wheelmouse2(kGestureMouseWheel, 1.0, 2.0, 3.0, 4.0, 3, 4);
190*aed3e508SAndroid Build Coastguard Worker   Gesture wheelmouse_ne0(kGestureMouseWheel, 9.0, 2.0, 3.0, 4.0, 3, 4);
191*aed3e508SAndroid Build Coastguard Worker   Gesture wheelmouse_ne1(kGestureMouseWheel, 1.0, 9.0, 3.0, 4.0, 3, 4);
192*aed3e508SAndroid Build Coastguard Worker   Gesture wheelmouse_ne2(kGestureMouseWheel, 1.0, 2.0, 9.0, 4.0, 3, 4);
193*aed3e508SAndroid Build Coastguard Worker   Gesture wheelmouse_ne3(kGestureMouseWheel, 1.0, 2.0, 3.0, 9.0, 3, 4);
194*aed3e508SAndroid Build Coastguard Worker   Gesture wheelmouse_ne4(kGestureMouseWheel, 1.0, 2.0, 3.0, 4.0, 9, 4);
195*aed3e508SAndroid Build Coastguard Worker   Gesture wheelmouse_ne5(kGestureMouseWheel, 1.0, 2.0, 3.0, 4.0, 3, 9);
196*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(wheelmouse == wheelmouse2);
197*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(wheelmouse == wheelmouse_ne0);
198*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(wheelmouse == wheelmouse_ne1);
199*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(wheelmouse == wheelmouse_ne2);
200*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(wheelmouse == wheelmouse_ne3);
201*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(wheelmouse == wheelmouse_ne4);
202*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(wheelmouse == wheelmouse_ne5);
203*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(wheelmouse != wheelmouse2);
204*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(wheelmouse != wheelmouse_ne0);
205*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(wheelmouse != wheelmouse_ne1);
206*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(wheelmouse != wheelmouse_ne2);
207*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(wheelmouse != wheelmouse_ne3);
208*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(wheelmouse != wheelmouse_ne4);
209*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(wheelmouse != wheelmouse_ne5);
210*aed3e508SAndroid Build Coastguard Worker 
211*aed3e508SAndroid Build Coastguard Worker   Gesture pinch(kGesturePinch, 1.0, 2.0, 3.0, 4.0);
212*aed3e508SAndroid Build Coastguard Worker   Gesture pinch2(kGesturePinch, 1.0, 2.0, 3.0, 4.0);
213*aed3e508SAndroid Build Coastguard Worker   Gesture pinch_ne0(kGesturePinch, 9.0, 2.0, 3.0, 4.0);
214*aed3e508SAndroid Build Coastguard Worker   Gesture pinch_ne1(kGesturePinch, 1.0, 9.0, 3.0, 4.0);
215*aed3e508SAndroid Build Coastguard Worker   Gesture pinch_ne2(kGesturePinch, 1.0, 2.0, 9.0, 4.0);
216*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(pinch == pinch2);
217*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(pinch == pinch_ne0);
218*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(pinch == pinch_ne1);
219*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(pinch == pinch_ne2);
220*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(pinch != pinch2);
221*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(pinch != pinch_ne0);
222*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(pinch != pinch_ne1);
223*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(pinch != pinch_ne2);
224*aed3e508SAndroid Build Coastguard Worker 
225*aed3e508SAndroid Build Coastguard Worker   Gesture swipe(kGestureSwipe, 1.0, 2.0, 3.0, 4.0);
226*aed3e508SAndroid Build Coastguard Worker   Gesture swipe2(kGestureSwipe, 1.0, 2.0, 3.0, 4.0);
227*aed3e508SAndroid Build Coastguard Worker   Gesture swipe_ne0(kGestureSwipe, 9.0, 2.0, 3.0, 4.0);
228*aed3e508SAndroid Build Coastguard Worker   Gesture swipe_ne1(kGestureSwipe, 1.0, 9.0, 3.0, 4.0);
229*aed3e508SAndroid Build Coastguard Worker   Gesture swipe_ne2(kGestureSwipe, 1.0, 2.0, 9.0, 4.0);
230*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(swipe == swipe2);
231*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(swipe == swipe_ne0);
232*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(swipe == swipe_ne1);
233*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(swipe == swipe_ne2);
234*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(swipe != swipe2);
235*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(swipe != swipe_ne0);
236*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(swipe != swipe_ne1);
237*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(swipe != swipe_ne2);
238*aed3e508SAndroid Build Coastguard Worker 
239*aed3e508SAndroid Build Coastguard Worker   Gesture swipelift(kGestureSwipeLift, 1.0, 2.0);
240*aed3e508SAndroid Build Coastguard Worker   Gesture swipelift2(kGestureSwipeLift, 1.0, 2.0);
241*aed3e508SAndroid Build Coastguard Worker   Gesture swipelift_ne0(kGestureSwipeLift, 9.0, 2.0);
242*aed3e508SAndroid Build Coastguard Worker   Gesture swipelift_ne1(kGestureSwipeLift, 1.0, 9.0);
243*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(swipelift == swipelift2);
244*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(swipelift == swipelift_ne0);
245*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(swipelift == swipelift_ne1);
246*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(swipelift != swipelift2);
247*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(swipelift != swipelift_ne0);
248*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(swipelift != swipelift_ne1);
249*aed3e508SAndroid Build Coastguard Worker 
250*aed3e508SAndroid Build Coastguard Worker   Gesture swipe4f(kGestureFourFingerSwipe, 1.0, 2.0, 3.0, 4.0);
251*aed3e508SAndroid Build Coastguard Worker   Gesture swipe4f2(kGestureFourFingerSwipe, 1.0, 2.0, 3.0, 4.0);
252*aed3e508SAndroid Build Coastguard Worker   Gesture swipe4f_ne0(kGestureFourFingerSwipe, 9.0, 2.0, 3.0, 4.0);
253*aed3e508SAndroid Build Coastguard Worker   Gesture swipe4f_ne1(kGestureFourFingerSwipe, 1.0, 9.0, 3.0, 4.0);
254*aed3e508SAndroid Build Coastguard Worker   Gesture swipe4f_ne2(kGestureFourFingerSwipe, 1.0, 2.0, 9.0, 4.0);
255*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(swipe4f == swipe4f2);
256*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(swipe4f == swipe4f_ne0);
257*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(swipe4f == swipe4f_ne1);
258*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(swipe4f == swipe4f_ne2);
259*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(swipe4f != swipe4f2);
260*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(swipe4f != swipe4f_ne0);
261*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(swipe4f != swipe4f_ne1);
262*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(swipe4f != swipe4f_ne2);
263*aed3e508SAndroid Build Coastguard Worker 
264*aed3e508SAndroid Build Coastguard Worker   Gesture swipe4flift(kGestureFourFingerSwipeLift, 1.0, 2.0);
265*aed3e508SAndroid Build Coastguard Worker   Gesture swipe4flift2(kGestureFourFingerSwipeLift, 1.0, 2.0);
266*aed3e508SAndroid Build Coastguard Worker   Gesture swipe4flift_ne0(kGestureFourFingerSwipeLift, 9.0, 2.0);
267*aed3e508SAndroid Build Coastguard Worker   Gesture swipe4flift_ne1(kGestureFourFingerSwipeLift, 1.0, 9.0);
268*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(swipe4flift == swipe4flift2);
269*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(swipe4flift == swipe4flift_ne0);
270*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(swipe4flift == swipe4flift_ne1);
271*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(swipe4flift != swipe4flift2);
272*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(swipe4flift != swipe4flift_ne0);
273*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(swipe4flift != swipe4flift_ne1);
274*aed3e508SAndroid Build Coastguard Worker 
275*aed3e508SAndroid Build Coastguard Worker   Gesture metrics(kGestureMetrics, 1.0, 2.0,
276*aed3e508SAndroid Build Coastguard Worker                   kGestureMetricsTypeMouseMovement, 3.0, 4.0);
277*aed3e508SAndroid Build Coastguard Worker   Gesture metrics2(kGestureMetrics, 1.0, 2.0,
278*aed3e508SAndroid Build Coastguard Worker                   kGestureMetricsTypeMouseMovement, 3.0, 4.0);
279*aed3e508SAndroid Build Coastguard Worker   Gesture metrics_ne0(kGestureMetrics, 9.0, 2.0,
280*aed3e508SAndroid Build Coastguard Worker                   kGestureMetricsTypeMouseMovement, 3.0, 4.0);
281*aed3e508SAndroid Build Coastguard Worker   Gesture metrics_ne1(kGestureMetrics, 1.0, 9.0,
282*aed3e508SAndroid Build Coastguard Worker                   kGestureMetricsTypeMouseMovement, 3.0, 4.0);
283*aed3e508SAndroid Build Coastguard Worker   Gesture metrics_ne2(kGestureMetrics, 1.0, 2.0,
284*aed3e508SAndroid Build Coastguard Worker                   kGestureMetricsTypeNoisyGround, 3.0, 4.0);
285*aed3e508SAndroid Build Coastguard Worker   Gesture metrics_ne3(kGestureMetrics, 1.0, 2.0,
286*aed3e508SAndroid Build Coastguard Worker                   kGestureMetricsTypeMouseMovement, 9.0, 4.0);
287*aed3e508SAndroid Build Coastguard Worker   Gesture metrics_ne4(kGestureMetrics, 1.0, 2.0,
288*aed3e508SAndroid Build Coastguard Worker                   kGestureMetricsTypeMouseMovement, 3.0, 9.0);
289*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(metrics == metrics2);
290*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(metrics == metrics_ne0);
291*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(metrics == metrics_ne1);
292*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(metrics == metrics_ne2);
293*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(metrics == metrics_ne3);
294*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(metrics == metrics_ne4);
295*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(metrics != metrics2);
296*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(metrics != metrics_ne0);
297*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(metrics != metrics_ne1);
298*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(metrics != metrics_ne2);
299*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(metrics != metrics_ne3);
300*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(metrics != metrics_ne4);
301*aed3e508SAndroid Build Coastguard Worker 
302*aed3e508SAndroid Build Coastguard Worker   // Compare different types, should all fail to equate
303*aed3e508SAndroid Build Coastguard Worker   Gesture* gs[] = { &null, &move, &scroll, &buttons, &contact_initiated };
304*aed3e508SAndroid Build Coastguard Worker   for (size_t i = 0; i < arraysize(gs); ++i) {
305*aed3e508SAndroid Build Coastguard Worker     for (size_t j = 0; j < arraysize(gs); ++j) {
306*aed3e508SAndroid Build Coastguard Worker       if (i == j)
307*aed3e508SAndroid Build Coastguard Worker         continue;
308*aed3e508SAndroid Build Coastguard Worker       EXPECT_FALSE(*gs[i] == *gs[j]) << "i=" << i << ", j=" << j;
309*aed3e508SAndroid Build Coastguard Worker       EXPECT_TRUE(*gs[i] != *gs[j]) << "i=" << i << ", j=" << j;
310*aed3e508SAndroid Build Coastguard Worker     }
311*aed3e508SAndroid Build Coastguard Worker   }
312*aed3e508SAndroid Build Coastguard Worker }
313*aed3e508SAndroid Build Coastguard Worker 
TEST(GesturesTest,SimpleTest)314*aed3e508SAndroid Build Coastguard Worker TEST(GesturesTest, SimpleTest) {
315*aed3e508SAndroid Build Coastguard Worker   // Simple allocate/free test
316*aed3e508SAndroid Build Coastguard Worker   std::unique_ptr<GestureInterpreter> gs(NewGestureInterpreter());
317*aed3e508SAndroid Build Coastguard Worker   EXPECT_NE(nullptr, gs.get());
318*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(nullptr, gs.get()->interpreter());
319*aed3e508SAndroid Build Coastguard Worker 
320*aed3e508SAndroid Build Coastguard Worker   GestureInterpreter* gs_version_under = NewGestureInterpreterImpl(0);
321*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(nullptr, gs_version_under);
322*aed3e508SAndroid Build Coastguard Worker   GestureInterpreter* gs_version_over = NewGestureInterpreterImpl(1000);
323*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(nullptr, gs_version_over);
324*aed3e508SAndroid Build Coastguard Worker 
325*aed3e508SAndroid Build Coastguard Worker   GestureInterpreter* gs_ptr = NewGestureInterpreter();
326*aed3e508SAndroid Build Coastguard Worker   EXPECT_NE(nullptr, gs_ptr);
327*aed3e508SAndroid Build Coastguard Worker   gs_ptr->Initialize(GESTURES_DEVCLASS_TOUCHPAD);
328*aed3e508SAndroid Build Coastguard Worker   DeleteGestureInterpreter(gs_ptr);
329*aed3e508SAndroid Build Coastguard Worker 
330*aed3e508SAndroid Build Coastguard Worker   gs_ptr = NewGestureInterpreter();
331*aed3e508SAndroid Build Coastguard Worker   EXPECT_NE(nullptr, gs_ptr);
332*aed3e508SAndroid Build Coastguard Worker   gs_ptr->Initialize(GESTURES_DEVCLASS_TOUCHSCREEN);
333*aed3e508SAndroid Build Coastguard Worker   DeleteGestureInterpreter(gs_ptr);
334*aed3e508SAndroid Build Coastguard Worker 
335*aed3e508SAndroid Build Coastguard Worker   gs_ptr = NewGestureInterpreter();
336*aed3e508SAndroid Build Coastguard Worker   EXPECT_NE(nullptr, gs_ptr);
337*aed3e508SAndroid Build Coastguard Worker   gs_ptr->Initialize(GESTURES_DEVCLASS_MOUSE);
338*aed3e508SAndroid Build Coastguard Worker   DeleteGestureInterpreter(gs_ptr);
339*aed3e508SAndroid Build Coastguard Worker 
340*aed3e508SAndroid Build Coastguard Worker   gs_ptr = NewGestureInterpreter();
341*aed3e508SAndroid Build Coastguard Worker   EXPECT_NE(nullptr, gs_ptr);
342*aed3e508SAndroid Build Coastguard Worker   gs_ptr->Initialize(GESTURES_DEVCLASS_POINTING_STICK);
343*aed3e508SAndroid Build Coastguard Worker   DeleteGestureInterpreter(gs_ptr);
344*aed3e508SAndroid Build Coastguard Worker 
345*aed3e508SAndroid Build Coastguard Worker   gs_ptr = NewGestureInterpreter();
346*aed3e508SAndroid Build Coastguard Worker   EXPECT_NE(nullptr, gs_ptr);
347*aed3e508SAndroid Build Coastguard Worker   gs_ptr->Initialize(GESTURES_DEVCLASS_MULTITOUCH_MOUSE);
348*aed3e508SAndroid Build Coastguard Worker   std::string activity = gs_ptr->EncodeActivityLog();
349*aed3e508SAndroid Build Coastguard Worker   EXPECT_NE(activity.size(), 0);
350*aed3e508SAndroid Build Coastguard Worker   DeleteGestureInterpreter(gs_ptr);
351*aed3e508SAndroid Build Coastguard Worker 
352*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ("1073741824", FingerState::FlagsString(1 << 30));
353*aed3e508SAndroid Build Coastguard Worker }
354*aed3e508SAndroid Build Coastguard Worker 
TEST(GesturesTest,CtorTest)355*aed3e508SAndroid Build Coastguard Worker TEST(GesturesTest, CtorTest) {
356*aed3e508SAndroid Build Coastguard Worker   Gesture move_gs(kGestureMove, 2, 3, 4.0, 5.0);
357*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(move_gs.type, kGestureTypeMove);
358*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(move_gs.start_time, 2);
359*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(move_gs.end_time, 3);
360*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(move_gs.details.move.dx, 4.0);
361*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(move_gs.details.move.dy, 5.0);
362*aed3e508SAndroid Build Coastguard Worker 
363*aed3e508SAndroid Build Coastguard Worker   Gesture scroll_gs(kGestureScroll, 2, 3, 4.0, 5.0);
364*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(scroll_gs.type, kGestureTypeScroll);
365*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(scroll_gs.start_time, 2);
366*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(scroll_gs.end_time, 3);
367*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(scroll_gs.details.scroll.dx, 4.0);
368*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(scroll_gs.details.scroll.dy, 5.0);
369*aed3e508SAndroid Build Coastguard Worker 
370*aed3e508SAndroid Build Coastguard Worker   Gesture bdown_gs(kGestureButtonsChange, 2, 3, GESTURES_BUTTON_LEFT, 0, false);
371*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(bdown_gs.type, kGestureTypeButtonsChange);
372*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(bdown_gs.start_time, 2);
373*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(bdown_gs.end_time, 3);
374*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(bdown_gs.details.buttons.down, GESTURES_BUTTON_LEFT);
375*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(bdown_gs.details.buttons.up, 0);
376*aed3e508SAndroid Build Coastguard Worker 
377*aed3e508SAndroid Build Coastguard Worker   Gesture bup_gs(kGestureButtonsChange, 2, 3, 0, GESTURES_BUTTON_LEFT, false);
378*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(bup_gs.type, kGestureTypeButtonsChange);
379*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(bup_gs.start_time, 2);
380*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(bup_gs.end_time, 3);
381*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(bup_gs.details.buttons.down, 0);
382*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(bup_gs.details.buttons.up, GESTURES_BUTTON_LEFT);
383*aed3e508SAndroid Build Coastguard Worker 
384*aed3e508SAndroid Build Coastguard Worker   Gesture bdownup_gs(
385*aed3e508SAndroid Build Coastguard Worker       kGestureButtonsChange, 2, 3,
386*aed3e508SAndroid Build Coastguard Worker       GESTURES_BUTTON_LEFT, GESTURES_BUTTON_LEFT, false);
387*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(bdownup_gs.type, kGestureTypeButtonsChange);
388*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(bdownup_gs.start_time, 2);
389*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(bdownup_gs.end_time, 3);
390*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(bdownup_gs.details.buttons.down, GESTURES_BUTTON_LEFT);
391*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(bdownup_gs.details.buttons.up, GESTURES_BUTTON_LEFT);
392*aed3e508SAndroid Build Coastguard Worker }
393*aed3e508SAndroid Build Coastguard Worker 
TEST(GesturesTest,StimeFromTimevalTest)394*aed3e508SAndroid Build Coastguard Worker TEST(GesturesTest, StimeFromTimevalTest) {
395*aed3e508SAndroid Build Coastguard Worker   struct timeval tv;
396*aed3e508SAndroid Build Coastguard Worker   tv.tv_sec = 3;
397*aed3e508SAndroid Build Coastguard Worker   tv.tv_usec = 88;
398*aed3e508SAndroid Build Coastguard Worker   EXPECT_DOUBLE_EQ(3.000088, StimeFromTimeval(&tv));
399*aed3e508SAndroid Build Coastguard Worker   tv.tv_sec = 2000000000;
400*aed3e508SAndroid Build Coastguard Worker   tv.tv_usec = 999999;
401*aed3e508SAndroid Build Coastguard Worker   EXPECT_DOUBLE_EQ(2000000000.999999, StimeFromTimeval(&tv));
402*aed3e508SAndroid Build Coastguard Worker }
403*aed3e508SAndroid Build Coastguard Worker 
TEST(GesturesTest,StimeFromTimespecTest)404*aed3e508SAndroid Build Coastguard Worker TEST(GesturesTest, StimeFromTimespecTest) {
405*aed3e508SAndroid Build Coastguard Worker   struct timespec tv;
406*aed3e508SAndroid Build Coastguard Worker   tv.tv_sec = 3;
407*aed3e508SAndroid Build Coastguard Worker   tv.tv_nsec = 88;
408*aed3e508SAndroid Build Coastguard Worker   EXPECT_DOUBLE_EQ(3.000000088, StimeFromTimespec(&tv));
409*aed3e508SAndroid Build Coastguard Worker   tv.tv_sec = 2000000000;
410*aed3e508SAndroid Build Coastguard Worker   tv.tv_nsec = 999999999;
411*aed3e508SAndroid Build Coastguard Worker   EXPECT_DOUBLE_EQ(2000000000.999999999, StimeFromTimespec(&tv));
412*aed3e508SAndroid Build Coastguard Worker }
413*aed3e508SAndroid Build Coastguard Worker 
TEST(GesturesTest,FingerStateFlagsStringTest)414*aed3e508SAndroid Build Coastguard Worker TEST(GesturesTest, FingerStateFlagsStringTest) {
415*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ("no flags", FingerState::FlagsString(0));
416*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ("PALM",
417*aed3e508SAndroid Build Coastguard Worker             FingerState::FlagsString(GESTURES_FINGER_PALM));
418*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ("PALM | WARP_X_MOVE",
419*aed3e508SAndroid Build Coastguard Worker             FingerState::FlagsString(
420*aed3e508SAndroid Build Coastguard Worker                 GESTURES_FINGER_PALM | GESTURES_FINGER_WARP_X_MOVE));
421*aed3e508SAndroid Build Coastguard Worker   // 1 << 31 probably won't be used as a finger flag value anytime soon, so use
422*aed3e508SAndroid Build Coastguard Worker   // it to test prepending the remaining number.
423*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ("2147483648 | PALM",
424*aed3e508SAndroid Build Coastguard Worker             FingerState::FlagsString(GESTURES_FINGER_PALM | (1 << 31)));
425*aed3e508SAndroid Build Coastguard Worker }
426*aed3e508SAndroid Build Coastguard Worker 
TEST(GesturesTest,HardwareStateGetFingerStateTest)427*aed3e508SAndroid Build Coastguard Worker TEST(GesturesTest, HardwareStateGetFingerStateTest) {
428*aed3e508SAndroid Build Coastguard Worker   FingerState fs[] = {
429*aed3e508SAndroid Build Coastguard Worker     { 0, 0, 0, 0, 1, 0, 150, 4000, 4, 0 },
430*aed3e508SAndroid Build Coastguard Worker     { 0, 0, 0, 0, 1, 0, 550, 2000, 2, 0 },
431*aed3e508SAndroid Build Coastguard Worker     { 0, 0, 0, 0, 1, 0, 250, 3000, 7, 0 }
432*aed3e508SAndroid Build Coastguard Worker   };
433*aed3e508SAndroid Build Coastguard Worker   HardwareState hs = make_hwstate(10000, 0, 3, 3, &fs[0]);
434*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(&fs[0], hs.GetFingerState(4));
435*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(&fs[1], hs.GetFingerState(2));
436*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(&fs[2], hs.GetFingerState(7));
437*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(nullptr, hs.GetFingerState(8));
438*aed3e508SAndroid Build Coastguard Worker 
439*aed3e508SAndroid Build Coastguard Worker   const HardwareState& const_hs = hs;
440*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(&fs[0], const_hs.GetFingerState(4));
441*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(&fs[1], const_hs.GetFingerState(2));
442*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(&fs[2], const_hs.GetFingerState(7));
443*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(nullptr, hs.GetFingerState(8));
444*aed3e508SAndroid Build Coastguard Worker }
445*aed3e508SAndroid Build Coastguard Worker 
TEST(GesturesTest,HardwarePropertiesToStringTest)446*aed3e508SAndroid Build Coastguard Worker TEST(GesturesTest, HardwarePropertiesToStringTest) {
447*aed3e508SAndroid Build Coastguard Worker   HardwareProperties hp = {
448*aed3e508SAndroid Build Coastguard Worker     .left = 1009.5, .top = 1002.4, .right = 1003.9, .bottom = 1004.5,
449*aed3e508SAndroid Build Coastguard Worker     .res_x = 1005.4, .res_y = 1006.9,
450*aed3e508SAndroid Build Coastguard Worker     .orientation_minimum = -1,
451*aed3e508SAndroid Build Coastguard Worker     .orientation_maximum = 2,
452*aed3e508SAndroid Build Coastguard Worker     .max_finger_cnt = 12,
453*aed3e508SAndroid Build Coastguard Worker     .max_touch_cnt = 11,
454*aed3e508SAndroid Build Coastguard Worker     .supports_t5r2 = 0, .support_semi_mt = 1, .is_button_pad = 1,
455*aed3e508SAndroid Build Coastguard Worker     .has_wheel = 0, .wheel_is_hi_res = 0,
456*aed3e508SAndroid Build Coastguard Worker     .is_haptic_pad = 0,
457*aed3e508SAndroid Build Coastguard Worker   };
458*aed3e508SAndroid Build Coastguard Worker   string str = hp.String();
459*aed3e508SAndroid Build Coastguard Worker   fprintf(stderr, "str: %s\n", str.c_str());
460*aed3e508SAndroid Build Coastguard Worker   // expect all these numbers in order
461*aed3e508SAndroid Build Coastguard Worker   const char* expected[] = {
462*aed3e508SAndroid Build Coastguard Worker     "1009.5",
463*aed3e508SAndroid Build Coastguard Worker     "1002.4",
464*aed3e508SAndroid Build Coastguard Worker     "1003.9",
465*aed3e508SAndroid Build Coastguard Worker     "1004.5",
466*aed3e508SAndroid Build Coastguard Worker     "1005.4",
467*aed3e508SAndroid Build Coastguard Worker     "1006.9",
468*aed3e508SAndroid Build Coastguard Worker     "12,",
469*aed3e508SAndroid Build Coastguard Worker     "11,",
470*aed3e508SAndroid Build Coastguard Worker     "0,",
471*aed3e508SAndroid Build Coastguard Worker     "1,",
472*aed3e508SAndroid Build Coastguard Worker     "1 "
473*aed3e508SAndroid Build Coastguard Worker   };
474*aed3e508SAndroid Build Coastguard Worker   const char* last_found = str.c_str();
475*aed3e508SAndroid Build Coastguard Worker   for (size_t i = 0; i < arraysize(expected); i++) {
476*aed3e508SAndroid Build Coastguard Worker     ASSERT_NE(nullptr, last_found);
477*aed3e508SAndroid Build Coastguard Worker     const char* found = strstr(last_found, expected[i]);
478*aed3e508SAndroid Build Coastguard Worker     EXPECT_GE(found, last_found) << "i=" << i;
479*aed3e508SAndroid Build Coastguard Worker     last_found = found;
480*aed3e508SAndroid Build Coastguard Worker   }
481*aed3e508SAndroid Build Coastguard Worker }
482*aed3e508SAndroid Build Coastguard Worker 
TEST(GesturesTest,HardwareStateToStringTest)483*aed3e508SAndroid Build Coastguard Worker TEST(GesturesTest, HardwareStateToStringTest) {
484*aed3e508SAndroid Build Coastguard Worker   FingerState fs[] = {
485*aed3e508SAndroid Build Coastguard Worker     { 1.0, 2.0, 3.0, 4.5, 30.0, 11.0, 20.0, 30.0, 14,
486*aed3e508SAndroid Build Coastguard Worker       GESTURES_FINGER_WARP_Y_NON_MOVE | GESTURES_FINGER_PALM },
487*aed3e508SAndroid Build Coastguard Worker     { 1.5, 2.5, 3.5, 5.0, 30.5, 11.5, 20.5, 30.5, 15,
488*aed3e508SAndroid Build Coastguard Worker       GESTURES_FINGER_WARP_X_NON_MOVE }
489*aed3e508SAndroid Build Coastguard Worker   };
490*aed3e508SAndroid Build Coastguard Worker 
491*aed3e508SAndroid Build Coastguard Worker   HardwareState hs[] = {
492*aed3e508SAndroid Build Coastguard Worker     make_hwstate(1.123, 1, 2, 2, fs),
493*aed3e508SAndroid Build Coastguard Worker     make_hwstate(2.123, 0, 0, 0, nullptr)
494*aed3e508SAndroid Build Coastguard Worker   };
495*aed3e508SAndroid Build Coastguard Worker 
496*aed3e508SAndroid Build Coastguard Worker   const char* expected[] = {
497*aed3e508SAndroid Build Coastguard Worker     "1.0",
498*aed3e508SAndroid Build Coastguard Worker     "2.0",
499*aed3e508SAndroid Build Coastguard Worker     "3.0",
500*aed3e508SAndroid Build Coastguard Worker     "4.5",
501*aed3e508SAndroid Build Coastguard Worker     "30.0",
502*aed3e508SAndroid Build Coastguard Worker     "11.0",
503*aed3e508SAndroid Build Coastguard Worker     "20.0",
504*aed3e508SAndroid Build Coastguard Worker     "30.0",
505*aed3e508SAndroid Build Coastguard Worker     "14",
506*aed3e508SAndroid Build Coastguard Worker     "WARP_Y_NON_MOVE",
507*aed3e508SAndroid Build Coastguard Worker     "PALM",
508*aed3e508SAndroid Build Coastguard Worker     "1.5",
509*aed3e508SAndroid Build Coastguard Worker     "2.5",
510*aed3e508SAndroid Build Coastguard Worker     "3.5",
511*aed3e508SAndroid Build Coastguard Worker     "5.0",
512*aed3e508SAndroid Build Coastguard Worker     "30.5",
513*aed3e508SAndroid Build Coastguard Worker     "11.5",
514*aed3e508SAndroid Build Coastguard Worker     "20.5",
515*aed3e508SAndroid Build Coastguard Worker     "30.5",
516*aed3e508SAndroid Build Coastguard Worker     "15",
517*aed3e508SAndroid Build Coastguard Worker     "WARP_X_NON_MOVE",
518*aed3e508SAndroid Build Coastguard Worker     "1.123",
519*aed3e508SAndroid Build Coastguard Worker     "buttons 0x1",
520*aed3e508SAndroid Build Coastguard Worker     "2 f",
521*aed3e508SAndroid Build Coastguard Worker     "2 t",
522*aed3e508SAndroid Build Coastguard Worker   };
523*aed3e508SAndroid Build Coastguard Worker   const char* short_expected[] = {
524*aed3e508SAndroid Build Coastguard Worker     "2.123",
525*aed3e508SAndroid Build Coastguard Worker     "buttons 0x0",
526*aed3e508SAndroid Build Coastguard Worker     "0 f",
527*aed3e508SAndroid Build Coastguard Worker     "0 t",
528*aed3e508SAndroid Build Coastguard Worker     "{}",
529*aed3e508SAndroid Build Coastguard Worker   };
530*aed3e508SAndroid Build Coastguard Worker   string long_str = hs[0].String();
531*aed3e508SAndroid Build Coastguard Worker   string short_str = hs[1].String();
532*aed3e508SAndroid Build Coastguard Worker 
533*aed3e508SAndroid Build Coastguard Worker   for (size_t i = 0; i < arraysize(expected); i++) {
534*aed3e508SAndroid Build Coastguard Worker     EXPECT_NE(nullptr, strstr(long_str.c_str(), expected[i]))
535*aed3e508SAndroid Build Coastguard Worker         << "\"" << long_str << "\" should contain \"" << expected[i] << "\"";
536*aed3e508SAndroid Build Coastguard Worker   }
537*aed3e508SAndroid Build Coastguard Worker   for (size_t i = 0; i < arraysize(short_expected); i++) {
538*aed3e508SAndroid Build Coastguard Worker     EXPECT_NE(nullptr, strstr(short_str.c_str(), short_expected[i]))
539*aed3e508SAndroid Build Coastguard Worker         << "\"" << short_str << "\" should contain \"" << short_expected[i]
540*aed3e508SAndroid Build Coastguard Worker         << "\"";
541*aed3e508SAndroid Build Coastguard Worker   }
542*aed3e508SAndroid Build Coastguard Worker 
543*aed3e508SAndroid Build Coastguard Worker   return;
544*aed3e508SAndroid Build Coastguard Worker }
545*aed3e508SAndroid Build Coastguard Worker 
TEST(GesturesTest,HardwareStateDeepCopyWithFingersTest)546*aed3e508SAndroid Build Coastguard Worker TEST(GesturesTest, HardwareStateDeepCopyWithFingersTest) {
547*aed3e508SAndroid Build Coastguard Worker   FingerState fingerStates[] = {
548*aed3e508SAndroid Build Coastguard Worker     { 1.0, 2.0, 3.0, 4.5, 30.0, 11.0, 20.0, 30.0, 14, 0 },
549*aed3e508SAndroid Build Coastguard Worker     { 1.5, 2.5, 3.5, 5.0, 30.5, 11.5, 20.5, 30.5, 15, 0 }
550*aed3e508SAndroid Build Coastguard Worker   };
551*aed3e508SAndroid Build Coastguard Worker   const HardwareState hardwareState = make_hwstate(1.123, 1, 2, 2, fingerStates);
552*aed3e508SAndroid Build Coastguard Worker 
553*aed3e508SAndroid Build Coastguard Worker   HardwareState hardwareStateCopy;
554*aed3e508SAndroid Build Coastguard Worker   hardwareStateCopy.fingers = new FingerState[hardwareState.finger_cnt];
555*aed3e508SAndroid Build Coastguard Worker   hardwareStateCopy.DeepCopy(hardwareState, hardwareState.finger_cnt);
556*aed3e508SAndroid Build Coastguard Worker 
557*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(hardwareStateCopy.String(), hardwareState.String());
558*aed3e508SAndroid Build Coastguard Worker   delete[] hardwareStateCopy.fingers;
559*aed3e508SAndroid Build Coastguard Worker }
560*aed3e508SAndroid Build Coastguard Worker 
TEST(GesturesTest,HardwareStateDeepCopyWithoutFingersTest)561*aed3e508SAndroid Build Coastguard Worker TEST(GesturesTest, HardwareStateDeepCopyWithoutFingersTest) {
562*aed3e508SAndroid Build Coastguard Worker   const HardwareState hardwareState = make_hwstate(1.123, 1, 0, 2, nullptr);
563*aed3e508SAndroid Build Coastguard Worker 
564*aed3e508SAndroid Build Coastguard Worker   HardwareState hardwareStateCopy;
565*aed3e508SAndroid Build Coastguard Worker   hardwareStateCopy.DeepCopy(hardwareState, hardwareState.finger_cnt);
566*aed3e508SAndroid Build Coastguard Worker 
567*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(hardwareStateCopy.String(), hardwareState.String());
568*aed3e508SAndroid Build Coastguard Worker }
569*aed3e508SAndroid Build Coastguard Worker 
TEST(GesturesTest,InvalidHardwareStateDeepCopyTest)570*aed3e508SAndroid Build Coastguard Worker TEST(GesturesTest, InvalidHardwareStateDeepCopyTest) {
571*aed3e508SAndroid Build Coastguard Worker   // 2 finger_cnt without any fingersState(s) specified
572*aed3e508SAndroid Build Coastguard Worker   const HardwareState invalidHardwareState = make_hwstate(1.123, 1, 2, 2, nullptr);
573*aed3e508SAndroid Build Coastguard Worker 
574*aed3e508SAndroid Build Coastguard Worker   HardwareState hardwareStateCopy;
575*aed3e508SAndroid Build Coastguard Worker   hardwareStateCopy.DeepCopy(invalidHardwareState, invalidHardwareState.finger_cnt);
576*aed3e508SAndroid Build Coastguard Worker 
577*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(invalidHardwareState.timestamp, hardwareStateCopy.timestamp);
578*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(invalidHardwareState.buttons_down, hardwareStateCopy.buttons_down);
579*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(invalidHardwareState.finger_cnt, hardwareStateCopy.finger_cnt);
580*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(invalidHardwareState.touch_cnt, hardwareStateCopy.touch_cnt);
581*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(invalidHardwareState.fingers, hardwareStateCopy.fingers);
582*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(invalidHardwareState.rel_x, hardwareStateCopy.rel_x);
583*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(invalidHardwareState.rel_y, hardwareStateCopy.rel_y);
584*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(invalidHardwareState.rel_wheel, hardwareStateCopy.rel_wheel);
585*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(invalidHardwareState.rel_wheel_hi_res, hardwareStateCopy.rel_wheel_hi_res);
586*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(invalidHardwareState.rel_hwheel, hardwareStateCopy.rel_wheel);
587*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(invalidHardwareState.msc_timestamp, hardwareStateCopy.msc_timestamp);
588*aed3e508SAndroid Build Coastguard Worker }
589*aed3e508SAndroid Build Coastguard Worker 
590*aed3e508SAndroid Build Coastguard Worker }  // namespace gestures
591