1*aed3e508SAndroid Build Coastguard Worker // Copyright 2011 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 <string>
6*aed3e508SAndroid Build Coastguard Worker
7*aed3e508SAndroid Build Coastguard Worker #include <gtest/gtest.h>
8*aed3e508SAndroid Build Coastguard Worker
9*aed3e508SAndroid Build Coastguard Worker #include "include/activity_log.h"
10*aed3e508SAndroid Build Coastguard Worker #include "include/macros.h"
11*aed3e508SAndroid Build Coastguard Worker #include "include/prop_registry.h"
12*aed3e508SAndroid Build Coastguard Worker #include "include/unittest_util.h"
13*aed3e508SAndroid Build Coastguard Worker
14*aed3e508SAndroid Build Coastguard Worker using std::string;
15*aed3e508SAndroid Build Coastguard Worker
16*aed3e508SAndroid Build Coastguard Worker namespace gestures {
17*aed3e508SAndroid Build Coastguard Worker
18*aed3e508SAndroid Build Coastguard Worker class ActivityLogTest : public ::testing::Test {};
19*aed3e508SAndroid Build Coastguard Worker
TEST(ActivityLogTest,SimpleTest)20*aed3e508SAndroid Build Coastguard Worker TEST(ActivityLogTest, SimpleTest) {
21*aed3e508SAndroid Build Coastguard Worker PropRegistry prop_reg;
22*aed3e508SAndroid Build Coastguard Worker BoolProperty true_prop(&prop_reg, "true prop", true);
23*aed3e508SAndroid Build Coastguard Worker BoolProperty false_prop(&prop_reg, "false prop", false);
24*aed3e508SAndroid Build Coastguard Worker DoubleProperty double_prop(&prop_reg, "double prop", 77.25);
25*aed3e508SAndroid Build Coastguard Worker IntProperty int_prop(&prop_reg, "int prop", -816);
26*aed3e508SAndroid Build Coastguard Worker StringProperty string_prop(&prop_reg, "string prop", "foobarstr");
27*aed3e508SAndroid Build Coastguard Worker
28*aed3e508SAndroid Build Coastguard Worker ActivityLog log(&prop_reg);
29*aed3e508SAndroid Build Coastguard Worker EXPECT_TRUE(strstr(log.Encode().c_str(), "true"));
30*aed3e508SAndroid Build Coastguard Worker EXPECT_TRUE(strstr(log.Encode().c_str(), "false"));
31*aed3e508SAndroid Build Coastguard Worker EXPECT_TRUE(strstr(log.Encode().c_str(), "77.25"));
32*aed3e508SAndroid Build Coastguard Worker EXPECT_TRUE(strstr(log.Encode().c_str(), "-816"));
33*aed3e508SAndroid Build Coastguard Worker EXPECT_TRUE(strstr(log.Encode().c_str(), "foobarstr"));
34*aed3e508SAndroid Build Coastguard Worker
35*aed3e508SAndroid Build Coastguard Worker HardwareProperties hwprops = {
36*aed3e508SAndroid Build Coastguard Worker .left = 6011,
37*aed3e508SAndroid Build Coastguard Worker .top = 6012,
38*aed3e508SAndroid Build Coastguard Worker .right = 6013,
39*aed3e508SAndroid Build Coastguard Worker .bottom = 6014,
40*aed3e508SAndroid Build Coastguard Worker .res_x = 6015,
41*aed3e508SAndroid Build Coastguard Worker .res_y = 6016,
42*aed3e508SAndroid Build Coastguard Worker .orientation_minimum = 6019,
43*aed3e508SAndroid Build Coastguard Worker .orientation_maximum = 6020,
44*aed3e508SAndroid Build Coastguard Worker .max_finger_cnt = 6021,
45*aed3e508SAndroid Build Coastguard Worker .max_touch_cnt = 6022,
46*aed3e508SAndroid Build Coastguard Worker .supports_t5r2 = 1,
47*aed3e508SAndroid Build Coastguard Worker .support_semi_mt = 0,
48*aed3e508SAndroid Build Coastguard Worker .is_button_pad = 1,
49*aed3e508SAndroid Build Coastguard Worker .has_wheel = 0,
50*aed3e508SAndroid Build Coastguard Worker .wheel_is_hi_res = 0,
51*aed3e508SAndroid Build Coastguard Worker .is_haptic_pad = 0,
52*aed3e508SAndroid Build Coastguard Worker };
53*aed3e508SAndroid Build Coastguard Worker
54*aed3e508SAndroid Build Coastguard Worker log.SetHardwareProperties(hwprops);
55*aed3e508SAndroid Build Coastguard Worker
56*aed3e508SAndroid Build Coastguard Worker const char* expected_strings[] = {
57*aed3e508SAndroid Build Coastguard Worker "6011", "6012", "6013", "6014", "6015",
58*aed3e508SAndroid Build Coastguard Worker "6016", "6019", "6020", "6021", "6022"
59*aed3e508SAndroid Build Coastguard Worker };
60*aed3e508SAndroid Build Coastguard Worker string hwprops_log = log.Encode();
61*aed3e508SAndroid Build Coastguard Worker for (size_t i = 0; i < arraysize(expected_strings); i++)
62*aed3e508SAndroid Build Coastguard Worker EXPECT_TRUE(strstr(hwprops_log.c_str(), expected_strings[i]));
63*aed3e508SAndroid Build Coastguard Worker
64*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(0, log.size());
65*aed3e508SAndroid Build Coastguard Worker EXPECT_GT(log.MaxSize(), 10);
66*aed3e508SAndroid Build Coastguard Worker
67*aed3e508SAndroid Build Coastguard Worker FingerState fs = { 0.0, 0.0, 0.0, 0.0, 9.0, 0.0, 3.0, 4.0, 22, 0 };
68*aed3e508SAndroid Build Coastguard Worker HardwareState hs = make_hwstate(1.0, 0, 1, 1, &fs);
69*aed3e508SAndroid Build Coastguard Worker log.LogHardwareState(hs);
70*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(1, log.size());
71*aed3e508SAndroid Build Coastguard Worker EXPECT_TRUE(strstr(log.Encode().c_str(), "22"));
72*aed3e508SAndroid Build Coastguard Worker ActivityLog::Entry* entry = log.GetEntry(0);
73*aed3e508SAndroid Build Coastguard Worker EXPECT_TRUE(std::holds_alternative<HardwareState>(entry->details));
74*aed3e508SAndroid Build Coastguard Worker
75*aed3e508SAndroid Build Coastguard Worker log.LogTimerCallback(234.5);
76*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(2, log.size());
77*aed3e508SAndroid Build Coastguard Worker EXPECT_TRUE(strstr(log.Encode().c_str(), "234.5"));
78*aed3e508SAndroid Build Coastguard Worker entry = log.GetEntry(1);
79*aed3e508SAndroid Build Coastguard Worker EXPECT_TRUE(std::holds_alternative<ActivityLog::TimerCallbackEntry>
80*aed3e508SAndroid Build Coastguard Worker (entry->details));
81*aed3e508SAndroid Build Coastguard Worker
82*aed3e508SAndroid Build Coastguard Worker log.LogCallbackRequest(90210);
83*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(3, log.size());
84*aed3e508SAndroid Build Coastguard Worker EXPECT_TRUE(strstr(log.Encode().c_str(), "90210"));
85*aed3e508SAndroid Build Coastguard Worker entry = log.GetEntry(2);
86*aed3e508SAndroid Build Coastguard Worker EXPECT_TRUE(std::holds_alternative<ActivityLog::CallbackRequestEntry>
87*aed3e508SAndroid Build Coastguard Worker (entry->details));
88*aed3e508SAndroid Build Coastguard Worker
89*aed3e508SAndroid Build Coastguard Worker Gesture null;
90*aed3e508SAndroid Build Coastguard Worker Gesture move(kGestureMove, 1.0, 2.0, 773, 4.0);
91*aed3e508SAndroid Build Coastguard Worker Gesture scroll(kGestureScroll, 1.0, 2.0, 312, 4.0);
92*aed3e508SAndroid Build Coastguard Worker Gesture buttons(kGestureButtonsChange, 1.0, 847, 3, 4, false);
93*aed3e508SAndroid Build Coastguard Worker Gesture contact_initiated;
94*aed3e508SAndroid Build Coastguard Worker contact_initiated.type = kGestureTypeContactInitiated;
95*aed3e508SAndroid Build Coastguard Worker Gesture mousewheel(kGestureMouseWheel, 1.0, 2.0, 30.0, 40.0, 3, 4);
96*aed3e508SAndroid Build Coastguard Worker Gesture pinch(kGesturePinch, 1.0, 2.0, 3.0, 4.0);
97*aed3e508SAndroid Build Coastguard Worker Gesture fling(kGestureFling, 1.0, 2.0, 42.0, 24.0, 1);
98*aed3e508SAndroid Build Coastguard Worker Gesture swipe(kGestureSwipe, 1.0, 2.0, 128.0, 4.0);
99*aed3e508SAndroid Build Coastguard Worker Gesture swipelift(kGestureSwipeLift, 1.0, 2.0);
100*aed3e508SAndroid Build Coastguard Worker Gesture swipe4f(kGestureFourFingerSwipe, 1.0, 2.0, 256.0, 4.0);
101*aed3e508SAndroid Build Coastguard Worker Gesture swipe4flift(kGestureFourFingerSwipeLift, 1.0, 2.0);
102*aed3e508SAndroid Build Coastguard Worker Gesture metrics(kGestureMetrics, 1.0, 2.0,
103*aed3e508SAndroid Build Coastguard Worker kGestureMetricsTypeMouseMovement, 3.0, 4.0);
104*aed3e508SAndroid Build Coastguard Worker
105*aed3e508SAndroid Build Coastguard Worker Gesture* gs[] = {
106*aed3e508SAndroid Build Coastguard Worker &null, &move, &scroll, &buttons, &contact_initiated,
107*aed3e508SAndroid Build Coastguard Worker &mousewheel, &pinch, &fling, &swipe, &swipelift,
108*aed3e508SAndroid Build Coastguard Worker &swipe4f, &swipe4flift, &metrics
109*aed3e508SAndroid Build Coastguard Worker };
110*aed3e508SAndroid Build Coastguard Worker const char* test_strs[] = {
111*aed3e508SAndroid Build Coastguard Worker "null", "773", "312", "847", "nitiated",
112*aed3e508SAndroid Build Coastguard Worker "30", "3", "42", "128", "null",
113*aed3e508SAndroid Build Coastguard Worker "256", "null", "1"
114*aed3e508SAndroid Build Coastguard Worker };
115*aed3e508SAndroid Build Coastguard Worker
116*aed3e508SAndroid Build Coastguard Worker ASSERT_EQ(arraysize(gs), arraysize(test_strs));
117*aed3e508SAndroid Build Coastguard Worker for (size_t i = 0; i < arraysize(gs); ++i) {
118*aed3e508SAndroid Build Coastguard Worker log.LogGesture(*gs[i]);
119*aed3e508SAndroid Build Coastguard Worker EXPECT_TRUE(strstr(log.Encode().c_str(), test_strs[i]))
120*aed3e508SAndroid Build Coastguard Worker << "i=" << i;
121*aed3e508SAndroid Build Coastguard Worker entry = log.GetEntry(log.size() - 1);
122*aed3e508SAndroid Build Coastguard Worker EXPECT_TRUE(std::holds_alternative<Gesture>(entry->details))
123*aed3e508SAndroid Build Coastguard Worker << "i=" << i;
124*aed3e508SAndroid Build Coastguard Worker }
125*aed3e508SAndroid Build Coastguard Worker
126*aed3e508SAndroid Build Coastguard Worker log.Clear();
127*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(0, log.size());
128*aed3e508SAndroid Build Coastguard Worker }
129*aed3e508SAndroid Build Coastguard Worker
TEST(ActivityLogTest,WrapAroundTest)130*aed3e508SAndroid Build Coastguard Worker TEST(ActivityLogTest, WrapAroundTest) {
131*aed3e508SAndroid Build Coastguard Worker ActivityLog log(nullptr);
132*aed3e508SAndroid Build Coastguard Worker // overfill the buffer
133*aed3e508SAndroid Build Coastguard Worker const size_t fill_size = (ActivityLog::kBufferSize * 3) / 2;
134*aed3e508SAndroid Build Coastguard Worker for (size_t i = 0; i < fill_size; i++)
135*aed3e508SAndroid Build Coastguard Worker log.LogCallbackRequest(static_cast<stime_t>(i));
136*aed3e508SAndroid Build Coastguard Worker const string::size_type prefix_length = 100;
137*aed3e508SAndroid Build Coastguard Worker string first_prefix = log.Encode().substr(0, prefix_length);
138*aed3e508SAndroid Build Coastguard Worker log.LogCallbackRequest(static_cast<stime_t>(fill_size));
139*aed3e508SAndroid Build Coastguard Worker string second_prefix = log.Encode().substr(0, prefix_length);
140*aed3e508SAndroid Build Coastguard Worker EXPECT_NE(first_prefix, second_prefix);
141*aed3e508SAndroid Build Coastguard Worker }
142*aed3e508SAndroid Build Coastguard Worker
TEST(ActivityLogTest,VersionTest)143*aed3e508SAndroid Build Coastguard Worker TEST(ActivityLogTest, VersionTest) {
144*aed3e508SAndroid Build Coastguard Worker ActivityLog log(nullptr);
145*aed3e508SAndroid Build Coastguard Worker string thelog = log.Encode();
146*aed3e508SAndroid Build Coastguard Worker EXPECT_TRUE(thelog.find(VCSID) != string::npos);
147*aed3e508SAndroid Build Coastguard Worker }
148*aed3e508SAndroid Build Coastguard Worker
TEST(ActivityLogTest,EncodePropChangeBoolTest)149*aed3e508SAndroid Build Coastguard Worker TEST(ActivityLogTest, EncodePropChangeBoolTest) {
150*aed3e508SAndroid Build Coastguard Worker ActivityLog log(nullptr);
151*aed3e508SAndroid Build Coastguard Worker Json::Value ret;
152*aed3e508SAndroid Build Coastguard Worker
153*aed3e508SAndroid Build Coastguard Worker ActivityLog::PropChangeEntry bool_prop;
154*aed3e508SAndroid Build Coastguard Worker bool_prop.name = "boolean";
155*aed3e508SAndroid Build Coastguard Worker bool_prop.value = static_cast<GesturesPropBool>(true);
156*aed3e508SAndroid Build Coastguard Worker ret = log.EncodePropChange(bool_prop);
157*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(ret[ActivityLog::kKeyType],
158*aed3e508SAndroid Build Coastguard Worker Json::Value(ActivityLog::kKeyPropChange));
159*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(ret[ActivityLog::kKeyPropChangeName],
160*aed3e508SAndroid Build Coastguard Worker Json::Value(bool_prop.name));
161*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(static_cast<GesturesPropBool>(
162*aed3e508SAndroid Build Coastguard Worker ret[ActivityLog::kKeyPropChangeValue].asBool()),
163*aed3e508SAndroid Build Coastguard Worker std::get<GesturesPropBool>(bool_prop.value));
164*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(ret[ActivityLog::kKeyPropChangeType],
165*aed3e508SAndroid Build Coastguard Worker ActivityLog::kValuePropChangeTypeBool);
166*aed3e508SAndroid Build Coastguard Worker }
167*aed3e508SAndroid Build Coastguard Worker
TEST(ActivityLogTest,EncodePropChangeDoubleTest)168*aed3e508SAndroid Build Coastguard Worker TEST(ActivityLogTest, EncodePropChangeDoubleTest) {
169*aed3e508SAndroid Build Coastguard Worker ActivityLog log(nullptr);
170*aed3e508SAndroid Build Coastguard Worker Json::Value ret;
171*aed3e508SAndroid Build Coastguard Worker
172*aed3e508SAndroid Build Coastguard Worker ActivityLog::PropChangeEntry double_prop;
173*aed3e508SAndroid Build Coastguard Worker double_prop.name = "double";
174*aed3e508SAndroid Build Coastguard Worker double_prop.value = 42.0;
175*aed3e508SAndroid Build Coastguard Worker ret = log.EncodePropChange(double_prop);
176*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(ret[ActivityLog::kKeyType],
177*aed3e508SAndroid Build Coastguard Worker Json::Value(ActivityLog::kKeyPropChange));
178*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(ret[ActivityLog::kKeyPropChangeName],
179*aed3e508SAndroid Build Coastguard Worker Json::Value(double_prop.name));
180*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(ret[ActivityLog::kKeyPropChangeValue].asDouble(),
181*aed3e508SAndroid Build Coastguard Worker std::get<double>(double_prop.value));
182*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(ret[ActivityLog::kKeyPropChangeType],
183*aed3e508SAndroid Build Coastguard Worker ActivityLog::kValuePropChangeTypeDouble);
184*aed3e508SAndroid Build Coastguard Worker }
185*aed3e508SAndroid Build Coastguard Worker
TEST(ActivityLogTest,EncodePropChangeIntTest)186*aed3e508SAndroid Build Coastguard Worker TEST(ActivityLogTest, EncodePropChangeIntTest) {
187*aed3e508SAndroid Build Coastguard Worker ActivityLog log(nullptr);
188*aed3e508SAndroid Build Coastguard Worker Json::Value ret;
189*aed3e508SAndroid Build Coastguard Worker
190*aed3e508SAndroid Build Coastguard Worker ActivityLog::PropChangeEntry int_prop;
191*aed3e508SAndroid Build Coastguard Worker int_prop.name = "int";
192*aed3e508SAndroid Build Coastguard Worker int_prop.value = 42;
193*aed3e508SAndroid Build Coastguard Worker ret = log.EncodePropChange(int_prop);
194*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(ret[ActivityLog::kKeyType],
195*aed3e508SAndroid Build Coastguard Worker Json::Value(ActivityLog::kKeyPropChange));
196*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(ret[ActivityLog::kKeyPropChangeName],
197*aed3e508SAndroid Build Coastguard Worker Json::Value(int_prop.name));
198*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(ret[ActivityLog::kKeyPropChangeValue].asInt(),
199*aed3e508SAndroid Build Coastguard Worker std::get<int>(int_prop.value));
200*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(ret[ActivityLog::kKeyPropChangeType],
201*aed3e508SAndroid Build Coastguard Worker ActivityLog::kValuePropChangeTypeInt);
202*aed3e508SAndroid Build Coastguard Worker }
203*aed3e508SAndroid Build Coastguard Worker
TEST(ActivityLogTest,EncodePropChangeShortTest)204*aed3e508SAndroid Build Coastguard Worker TEST(ActivityLogTest, EncodePropChangeShortTest) {
205*aed3e508SAndroid Build Coastguard Worker ActivityLog log(nullptr);
206*aed3e508SAndroid Build Coastguard Worker Json::Value ret;
207*aed3e508SAndroid Build Coastguard Worker
208*aed3e508SAndroid Build Coastguard Worker ActivityLog::PropChangeEntry short_prop;
209*aed3e508SAndroid Build Coastguard Worker short_prop.name = "short";
210*aed3e508SAndroid Build Coastguard Worker short_prop.value = static_cast<short>(42);
211*aed3e508SAndroid Build Coastguard Worker ret = log.EncodePropChange(short_prop);
212*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(ret[ActivityLog::kKeyType],
213*aed3e508SAndroid Build Coastguard Worker Json::Value(ActivityLog::kKeyPropChange));
214*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(ret[ActivityLog::kKeyPropChangeName],
215*aed3e508SAndroid Build Coastguard Worker Json::Value(short_prop.name));
216*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(static_cast<short>(
217*aed3e508SAndroid Build Coastguard Worker ret[ActivityLog::kKeyPropChangeValue].asInt()),
218*aed3e508SAndroid Build Coastguard Worker std::get<short>(short_prop.value));
219*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(ret[ActivityLog::kKeyPropChangeType],
220*aed3e508SAndroid Build Coastguard Worker ActivityLog::kValuePropChangeTypeShort);
221*aed3e508SAndroid Build Coastguard Worker }
222*aed3e508SAndroid Build Coastguard Worker
TEST(ActivityLogTest,HardwareStatePreTest)223*aed3e508SAndroid Build Coastguard Worker TEST(ActivityLogTest, HardwareStatePreTest) {
224*aed3e508SAndroid Build Coastguard Worker PropRegistry prop_reg;
225*aed3e508SAndroid Build Coastguard Worker ActivityLog log(&prop_reg);
226*aed3e508SAndroid Build Coastguard Worker
227*aed3e508SAndroid Build Coastguard Worker HardwareProperties hwprops = {
228*aed3e508SAndroid Build Coastguard Worker .left = 6011,
229*aed3e508SAndroid Build Coastguard Worker .top = 6012,
230*aed3e508SAndroid Build Coastguard Worker .right = 6013,
231*aed3e508SAndroid Build Coastguard Worker .bottom = 6014,
232*aed3e508SAndroid Build Coastguard Worker .res_x = 6015,
233*aed3e508SAndroid Build Coastguard Worker .res_y = 6016,
234*aed3e508SAndroid Build Coastguard Worker .orientation_minimum = 6019,
235*aed3e508SAndroid Build Coastguard Worker .orientation_maximum = 6020,
236*aed3e508SAndroid Build Coastguard Worker .max_finger_cnt = 6021,
237*aed3e508SAndroid Build Coastguard Worker .max_touch_cnt = 6022,
238*aed3e508SAndroid Build Coastguard Worker .supports_t5r2 = 1,
239*aed3e508SAndroid Build Coastguard Worker .support_semi_mt = 0,
240*aed3e508SAndroid Build Coastguard Worker .is_button_pad = 1,
241*aed3e508SAndroid Build Coastguard Worker .has_wheel = 0,
242*aed3e508SAndroid Build Coastguard Worker .wheel_is_hi_res = 0,
243*aed3e508SAndroid Build Coastguard Worker .is_haptic_pad = 0,
244*aed3e508SAndroid Build Coastguard Worker };
245*aed3e508SAndroid Build Coastguard Worker log.SetHardwareProperties(hwprops);
246*aed3e508SAndroid Build Coastguard Worker
247*aed3e508SAndroid Build Coastguard Worker FingerState fs = { 0.0, 0.0, 0.0, 0.0, 9.0, 0.0, 3.0, 4.0, 22, 0 };
248*aed3e508SAndroid Build Coastguard Worker HardwareState hs = make_hwstate(1.0, 0, 1, 1, &fs);
249*aed3e508SAndroid Build Coastguard Worker
250*aed3e508SAndroid Build Coastguard Worker ActivityLog::Entry* entry;
251*aed3e508SAndroid Build Coastguard Worker Json::Value result;
252*aed3e508SAndroid Build Coastguard Worker
253*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(0, log.size());
254*aed3e508SAndroid Build Coastguard Worker
255*aed3e508SAndroid Build Coastguard Worker // Build and log a HardwareStatePre structure
256*aed3e508SAndroid Build Coastguard Worker log.LogHardwareStatePre("ActivityLogTest_HwStateTest", hs);
257*aed3e508SAndroid Build Coastguard Worker ASSERT_EQ(1, log.size());
258*aed3e508SAndroid Build Coastguard Worker entry = log.GetEntry(0);
259*aed3e508SAndroid Build Coastguard Worker ASSERT_TRUE(std::holds_alternative<ActivityLog::HardwareStatePre>
260*aed3e508SAndroid Build Coastguard Worker (entry->details));
261*aed3e508SAndroid Build Coastguard Worker
262*aed3e508SAndroid Build Coastguard Worker // Encode the HardwareStatePre into Json
263*aed3e508SAndroid Build Coastguard Worker result = log.EncodeCommonInfo();
264*aed3e508SAndroid Build Coastguard Worker result = result[ActivityLog::kKeyRoot][0];
265*aed3e508SAndroid Build Coastguard Worker
266*aed3e508SAndroid Build Coastguard Worker // Verify the Json information
267*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyType],
268*aed3e508SAndroid Build Coastguard Worker Json::Value(ActivityLog::kKeyHardwareStatePre));
269*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyMethodName],
270*aed3e508SAndroid Build Coastguard Worker Json::Value("ActivityLogTest_HwStateTest"));
271*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyHardwareStateButtonsDown],
272*aed3e508SAndroid Build Coastguard Worker Json::Value(hs.buttons_down));
273*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyHardwareStateTouchCnt],
274*aed3e508SAndroid Build Coastguard Worker Json::Value(hs.touch_cnt));
275*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyHardwareStateTimestamp],
276*aed3e508SAndroid Build Coastguard Worker Json::Value(hs.timestamp));
277*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyHardwareStateRelX], Json::Value(hs.rel_x));
278*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyHardwareStateRelY], Json::Value(hs.rel_y));
279*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyHardwareStateRelWheel],
280*aed3e508SAndroid Build Coastguard Worker Json::Value(hs.rel_wheel));
281*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyHardwareStateRelHWheel],
282*aed3e508SAndroid Build Coastguard Worker Json::Value(hs.rel_hwheel));
283*aed3e508SAndroid Build Coastguard Worker log.Clear();
284*aed3e508SAndroid Build Coastguard Worker }
285*aed3e508SAndroid Build Coastguard Worker
TEST(ActivityLogTest,HardwareStatePostTest)286*aed3e508SAndroid Build Coastguard Worker TEST(ActivityLogTest, HardwareStatePostTest) {
287*aed3e508SAndroid Build Coastguard Worker PropRegistry prop_reg;
288*aed3e508SAndroid Build Coastguard Worker ActivityLog log(&prop_reg);
289*aed3e508SAndroid Build Coastguard Worker
290*aed3e508SAndroid Build Coastguard Worker HardwareProperties hwprops = {
291*aed3e508SAndroid Build Coastguard Worker .left = 6011,
292*aed3e508SAndroid Build Coastguard Worker .top = 6012,
293*aed3e508SAndroid Build Coastguard Worker .right = 6013,
294*aed3e508SAndroid Build Coastguard Worker .bottom = 6014,
295*aed3e508SAndroid Build Coastguard Worker .res_x = 6015,
296*aed3e508SAndroid Build Coastguard Worker .res_y = 6016,
297*aed3e508SAndroid Build Coastguard Worker .orientation_minimum = 6019,
298*aed3e508SAndroid Build Coastguard Worker .orientation_maximum = 6020,
299*aed3e508SAndroid Build Coastguard Worker .max_finger_cnt = 6021,
300*aed3e508SAndroid Build Coastguard Worker .max_touch_cnt = 6022,
301*aed3e508SAndroid Build Coastguard Worker .supports_t5r2 = 1,
302*aed3e508SAndroid Build Coastguard Worker .support_semi_mt = 0,
303*aed3e508SAndroid Build Coastguard Worker .is_button_pad = 1,
304*aed3e508SAndroid Build Coastguard Worker .has_wheel = 0,
305*aed3e508SAndroid Build Coastguard Worker .wheel_is_hi_res = 0,
306*aed3e508SAndroid Build Coastguard Worker .is_haptic_pad = 0,
307*aed3e508SAndroid Build Coastguard Worker };
308*aed3e508SAndroid Build Coastguard Worker log.SetHardwareProperties(hwprops);
309*aed3e508SAndroid Build Coastguard Worker
310*aed3e508SAndroid Build Coastguard Worker FingerState fs = { 0.0, 0.0, 0.0, 0.0, 9.0, 0.0, 3.0, 4.0, 22, 0 };
311*aed3e508SAndroid Build Coastguard Worker HardwareState hs = make_hwstate(1.0, 0, 1, 1, &fs);
312*aed3e508SAndroid Build Coastguard Worker
313*aed3e508SAndroid Build Coastguard Worker ActivityLog::Entry* entry;
314*aed3e508SAndroid Build Coastguard Worker Json::Value result;
315*aed3e508SAndroid Build Coastguard Worker
316*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(0, log.size());
317*aed3e508SAndroid Build Coastguard Worker
318*aed3e508SAndroid Build Coastguard Worker // Build and log a HardwareStatePost structure
319*aed3e508SAndroid Build Coastguard Worker log.LogHardwareStatePost("ActivityLogTest_HwStateTest", hs);
320*aed3e508SAndroid Build Coastguard Worker ASSERT_EQ(1, log.size());
321*aed3e508SAndroid Build Coastguard Worker entry = log.GetEntry(0);
322*aed3e508SAndroid Build Coastguard Worker ASSERT_TRUE(std::holds_alternative<ActivityLog::HardwareStatePost>
323*aed3e508SAndroid Build Coastguard Worker (entry->details));
324*aed3e508SAndroid Build Coastguard Worker
325*aed3e508SAndroid Build Coastguard Worker // Encode the HardwareStatePost into Json
326*aed3e508SAndroid Build Coastguard Worker result = log.EncodeCommonInfo();
327*aed3e508SAndroid Build Coastguard Worker result = result[ActivityLog::kKeyRoot][0];
328*aed3e508SAndroid Build Coastguard Worker
329*aed3e508SAndroid Build Coastguard Worker // Verify the Json information
330*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyType],
331*aed3e508SAndroid Build Coastguard Worker Json::Value(ActivityLog::kKeyHardwareStatePost));
332*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyMethodName],
333*aed3e508SAndroid Build Coastguard Worker Json::Value("ActivityLogTest_HwStateTest"));
334*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyHardwareStateButtonsDown],
335*aed3e508SAndroid Build Coastguard Worker Json::Value(hs.buttons_down));
336*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyHardwareStateTouchCnt],
337*aed3e508SAndroid Build Coastguard Worker Json::Value(hs.touch_cnt));
338*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyHardwareStateTimestamp],
339*aed3e508SAndroid Build Coastguard Worker Json::Value(hs.timestamp));
340*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyHardwareStateRelX], Json::Value(hs.rel_x));
341*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyHardwareStateRelY], Json::Value(hs.rel_y));
342*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyHardwareStateRelWheel],
343*aed3e508SAndroid Build Coastguard Worker Json::Value(hs.rel_wheel));
344*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyHardwareStateRelHWheel],
345*aed3e508SAndroid Build Coastguard Worker Json::Value(hs.rel_hwheel));
346*aed3e508SAndroid Build Coastguard Worker log.Clear();
347*aed3e508SAndroid Build Coastguard Worker }
348*aed3e508SAndroid Build Coastguard Worker
349*aed3e508SAndroid Build Coastguard Worker
TEST(ActivityLogTest,GestureConsumeTest)350*aed3e508SAndroid Build Coastguard Worker TEST(ActivityLogTest, GestureConsumeTest) {
351*aed3e508SAndroid Build Coastguard Worker PropRegistry prop_reg;
352*aed3e508SAndroid Build Coastguard Worker ActivityLog log(&prop_reg);
353*aed3e508SAndroid Build Coastguard Worker ActivityLog::Entry* entry;
354*aed3e508SAndroid Build Coastguard Worker Json::Value result;
355*aed3e508SAndroid Build Coastguard Worker
356*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(0, log.size());
357*aed3e508SAndroid Build Coastguard Worker
358*aed3e508SAndroid Build Coastguard Worker // Build and log a GestureConsume structure
359*aed3e508SAndroid Build Coastguard Worker Gesture move(kGestureMove, 1.0, 2.0, 773, 4.0);
360*aed3e508SAndroid Build Coastguard Worker log.LogGestureConsume("ActivityLogTest_GestureTest", move);
361*aed3e508SAndroid Build Coastguard Worker ASSERT_EQ(1, log.size());
362*aed3e508SAndroid Build Coastguard Worker entry = log.GetEntry(0);
363*aed3e508SAndroid Build Coastguard Worker ASSERT_TRUE(std::holds_alternative<ActivityLog::GestureConsume>
364*aed3e508SAndroid Build Coastguard Worker (entry->details));
365*aed3e508SAndroid Build Coastguard Worker
366*aed3e508SAndroid Build Coastguard Worker // Encode the GestureConsume into Json
367*aed3e508SAndroid Build Coastguard Worker result = log.EncodeCommonInfo();
368*aed3e508SAndroid Build Coastguard Worker result = result[ActivityLog::kKeyRoot][0];
369*aed3e508SAndroid Build Coastguard Worker
370*aed3e508SAndroid Build Coastguard Worker // Verify the Json information
371*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyType],
372*aed3e508SAndroid Build Coastguard Worker Json::Value(ActivityLog::kKeyGestureConsume));
373*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyMethodName],
374*aed3e508SAndroid Build Coastguard Worker Json::Value("ActivityLogTest_GestureTest"));
375*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyGestureType],
376*aed3e508SAndroid Build Coastguard Worker Json::Value(ActivityLog::kValueGestureTypeMove));
377*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyGestureDX],
378*aed3e508SAndroid Build Coastguard Worker Json::Value(move.details.move.dx));
379*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyGestureDY],
380*aed3e508SAndroid Build Coastguard Worker Json::Value(move.details.move.dy));
381*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyGestureOrdinalDX],
382*aed3e508SAndroid Build Coastguard Worker Json::Value(move.details.move.ordinal_dx));
383*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyGestureOrdinalDY],
384*aed3e508SAndroid Build Coastguard Worker Json::Value(move.details.move.ordinal_dy));
385*aed3e508SAndroid Build Coastguard Worker log.Clear();
386*aed3e508SAndroid Build Coastguard Worker }
387*aed3e508SAndroid Build Coastguard Worker
TEST(ActivityLogTest,GestureProduceTest)388*aed3e508SAndroid Build Coastguard Worker TEST(ActivityLogTest, GestureProduceTest) {
389*aed3e508SAndroid Build Coastguard Worker PropRegistry prop_reg;
390*aed3e508SAndroid Build Coastguard Worker ActivityLog log(&prop_reg);
391*aed3e508SAndroid Build Coastguard Worker ActivityLog::Entry* entry;
392*aed3e508SAndroid Build Coastguard Worker Json::Value result;
393*aed3e508SAndroid Build Coastguard Worker
394*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(0, log.size());
395*aed3e508SAndroid Build Coastguard Worker
396*aed3e508SAndroid Build Coastguard Worker // Build and log a GestureProduce structure
397*aed3e508SAndroid Build Coastguard Worker Gesture scroll(kGestureScroll, 1.0, 2.0, 312, 4.0);
398*aed3e508SAndroid Build Coastguard Worker log.LogGestureProduce("ActivityLogTest_GestureTest", scroll);
399*aed3e508SAndroid Build Coastguard Worker ASSERT_EQ(1, log.size());
400*aed3e508SAndroid Build Coastguard Worker entry = log.GetEntry(0);
401*aed3e508SAndroid Build Coastguard Worker ASSERT_TRUE(std::holds_alternative<ActivityLog::GestureProduce>
402*aed3e508SAndroid Build Coastguard Worker (entry->details));
403*aed3e508SAndroid Build Coastguard Worker
404*aed3e508SAndroid Build Coastguard Worker // Encode the GestureProduce into Json
405*aed3e508SAndroid Build Coastguard Worker result = log.EncodeCommonInfo();
406*aed3e508SAndroid Build Coastguard Worker result = result[ActivityLog::kKeyRoot][0];
407*aed3e508SAndroid Build Coastguard Worker
408*aed3e508SAndroid Build Coastguard Worker // Verify the Json information
409*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyType],
410*aed3e508SAndroid Build Coastguard Worker Json::Value(ActivityLog::kKeyGestureProduce));
411*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyMethodName],
412*aed3e508SAndroid Build Coastguard Worker Json::Value("ActivityLogTest_GestureTest"));
413*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyGestureType],
414*aed3e508SAndroid Build Coastguard Worker Json::Value(ActivityLog::kValueGestureTypeScroll));
415*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyGestureDX],
416*aed3e508SAndroid Build Coastguard Worker Json::Value(scroll.details.scroll.dx));
417*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyGestureDY],
418*aed3e508SAndroid Build Coastguard Worker Json::Value(scroll.details.scroll.dy));
419*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyGestureOrdinalDX],
420*aed3e508SAndroid Build Coastguard Worker Json::Value(scroll.details.scroll.ordinal_dx));
421*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyGestureOrdinalDY],
422*aed3e508SAndroid Build Coastguard Worker Json::Value(scroll.details.scroll.ordinal_dy));
423*aed3e508SAndroid Build Coastguard Worker log.Clear();
424*aed3e508SAndroid Build Coastguard Worker }
425*aed3e508SAndroid Build Coastguard Worker
TEST(ActivityLogTest,HandleTimerPreTest)426*aed3e508SAndroid Build Coastguard Worker TEST(ActivityLogTest, HandleTimerPreTest) {
427*aed3e508SAndroid Build Coastguard Worker PropRegistry prop_reg;
428*aed3e508SAndroid Build Coastguard Worker ActivityLog log(&prop_reg);
429*aed3e508SAndroid Build Coastguard Worker ActivityLog::Entry* entry;
430*aed3e508SAndroid Build Coastguard Worker Json::Value result;
431*aed3e508SAndroid Build Coastguard Worker stime_t timeout = 1;
432*aed3e508SAndroid Build Coastguard Worker
433*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(0, log.size());
434*aed3e508SAndroid Build Coastguard Worker
435*aed3e508SAndroid Build Coastguard Worker // Build and log a HandleTimerPre structure
436*aed3e508SAndroid Build Coastguard Worker log.LogHandleTimerPre("ActivityLogTest_HandleTimerTest", 0, &timeout);
437*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(1, log.size());
438*aed3e508SAndroid Build Coastguard Worker entry = log.GetEntry(0);
439*aed3e508SAndroid Build Coastguard Worker EXPECT_TRUE(std::holds_alternative<ActivityLog::HandleTimerPre>
440*aed3e508SAndroid Build Coastguard Worker (entry->details));
441*aed3e508SAndroid Build Coastguard Worker
442*aed3e508SAndroid Build Coastguard Worker // Encode the HandleTimerPre into Json
443*aed3e508SAndroid Build Coastguard Worker result = log.EncodeCommonInfo();
444*aed3e508SAndroid Build Coastguard Worker result = result[ActivityLog::kKeyRoot][0];
445*aed3e508SAndroid Build Coastguard Worker
446*aed3e508SAndroid Build Coastguard Worker // Verify the Json information
447*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyType],
448*aed3e508SAndroid Build Coastguard Worker Json::Value(ActivityLog::kKeyHandleTimerPre));
449*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyMethodName],
450*aed3e508SAndroid Build Coastguard Worker Json::Value("ActivityLogTest_HandleTimerTest"));
451*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyTimerNow],
452*aed3e508SAndroid Build Coastguard Worker Json::Value(static_cast<stime_t>(0)));
453*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyHandleTimerTimeout], Json::Value(timeout));
454*aed3e508SAndroid Build Coastguard Worker log.Clear();
455*aed3e508SAndroid Build Coastguard Worker }
456*aed3e508SAndroid Build Coastguard Worker
TEST(ActivityLogTest,HandleTimerPostTest)457*aed3e508SAndroid Build Coastguard Worker TEST(ActivityLogTest, HandleTimerPostTest) {
458*aed3e508SAndroid Build Coastguard Worker PropRegistry prop_reg;
459*aed3e508SAndroid Build Coastguard Worker ActivityLog log(&prop_reg);
460*aed3e508SAndroid Build Coastguard Worker ActivityLog::Entry* entry;
461*aed3e508SAndroid Build Coastguard Worker Json::Value result;
462*aed3e508SAndroid Build Coastguard Worker stime_t timeout = 1;
463*aed3e508SAndroid Build Coastguard Worker
464*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(0, log.size());
465*aed3e508SAndroid Build Coastguard Worker
466*aed3e508SAndroid Build Coastguard Worker // Build and log a HandleTimerPost structure
467*aed3e508SAndroid Build Coastguard Worker log.LogHandleTimerPost("ActivityLogTest_HandleTimerTest", 0, &timeout);
468*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(1, log.size());
469*aed3e508SAndroid Build Coastguard Worker entry = log.GetEntry(0);
470*aed3e508SAndroid Build Coastguard Worker EXPECT_TRUE(std::holds_alternative<ActivityLog::HandleTimerPost>
471*aed3e508SAndroid Build Coastguard Worker (entry->details));
472*aed3e508SAndroid Build Coastguard Worker
473*aed3e508SAndroid Build Coastguard Worker // Encode the HandleTimerPost into Json
474*aed3e508SAndroid Build Coastguard Worker result = log.EncodeCommonInfo();
475*aed3e508SAndroid Build Coastguard Worker result = result[ActivityLog::kKeyRoot][0];
476*aed3e508SAndroid Build Coastguard Worker
477*aed3e508SAndroid Build Coastguard Worker // Verify the Json information
478*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyType],
479*aed3e508SAndroid Build Coastguard Worker Json::Value(ActivityLog::kKeyHandleTimerPost));
480*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyMethodName],
481*aed3e508SAndroid Build Coastguard Worker Json::Value("ActivityLogTest_HandleTimerTest"));
482*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyTimerNow],
483*aed3e508SAndroid Build Coastguard Worker Json::Value(static_cast<stime_t>(0)));
484*aed3e508SAndroid Build Coastguard Worker EXPECT_EQ(result[ActivityLog::kKeyHandleTimerTimeout], Json::Value(timeout));
485*aed3e508SAndroid Build Coastguard Worker log.Clear();
486*aed3e508SAndroid Build Coastguard Worker }
487*aed3e508SAndroid Build Coastguard Worker
488*aed3e508SAndroid Build Coastguard Worker } // namespace gestures
489