xref: /aosp_15_r20/external/libchrome-gestures/src/prop_registry_unittest.cc (revision aed3e5085e770be5b69ce25295ecf6ddf906af95)
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/prop_registry.h"
11*aed3e508SAndroid Build Coastguard Worker 
12*aed3e508SAndroid Build Coastguard Worker using std::string;
13*aed3e508SAndroid Build Coastguard Worker 
14*aed3e508SAndroid Build Coastguard Worker // Mock struct GesturesProp implementation (outside of namespace gestures)
15*aed3e508SAndroid Build Coastguard Worker struct GesturesProp { };
16*aed3e508SAndroid Build Coastguard Worker 
17*aed3e508SAndroid Build Coastguard Worker namespace gestures {
18*aed3e508SAndroid Build Coastguard Worker 
19*aed3e508SAndroid Build Coastguard Worker class PropRegistryTest : public ::testing::Test {};
20*aed3e508SAndroid Build Coastguard Worker 
21*aed3e508SAndroid Build Coastguard Worker class PropRegistryTestDelegate : public PropertyDelegate {
22*aed3e508SAndroid Build Coastguard Worker  public:
PropRegistryTestDelegate()23*aed3e508SAndroid Build Coastguard Worker   PropRegistryTestDelegate() : call_cnt_(0) {}
BoolWasWritten(BoolProperty * prop)24*aed3e508SAndroid Build Coastguard Worker   virtual void BoolWasWritten(BoolProperty* prop) { call_cnt_++; };
BoolArrayWasWritten(BoolArrayProperty * prop)25*aed3e508SAndroid Build Coastguard Worker   virtual void BoolArrayWasWritten(BoolArrayProperty* prop) { call_cnt_++; };
DoubleWasWritten(DoubleProperty * prop)26*aed3e508SAndroid Build Coastguard Worker   virtual void DoubleWasWritten(DoubleProperty* prop) { call_cnt_++; };
DoubleArrayWasWritten(DoubleArrayProperty * prop)27*aed3e508SAndroid Build Coastguard Worker   virtual void DoubleArrayWasWritten(DoubleArrayProperty* prop) {
28*aed3e508SAndroid Build Coastguard Worker     call_cnt_++;
29*aed3e508SAndroid Build Coastguard Worker   };
IntWasWritten(IntProperty * prop)30*aed3e508SAndroid Build Coastguard Worker   virtual void IntWasWritten(IntProperty* prop) { call_cnt_++; };
IntArrayWasWritten(IntArrayProperty * prop)31*aed3e508SAndroid Build Coastguard Worker   virtual void IntArrayWasWritten(IntArrayProperty* prop) { call_cnt_++; };
StringWasWritten(StringProperty * prop)32*aed3e508SAndroid Build Coastguard Worker   virtual void StringWasWritten(StringProperty* prop) { call_cnt_++; };
33*aed3e508SAndroid Build Coastguard Worker 
34*aed3e508SAndroid Build Coastguard Worker   int call_cnt_;
35*aed3e508SAndroid Build Coastguard Worker };
36*aed3e508SAndroid Build Coastguard Worker 
37*aed3e508SAndroid Build Coastguard Worker namespace {
ValueForProperty(const Property & prop)38*aed3e508SAndroid Build Coastguard Worker string ValueForProperty(const Property& prop) {
39*aed3e508SAndroid Build Coastguard Worker   Json::Value temp(Json::objectValue);
40*aed3e508SAndroid Build Coastguard Worker   temp["tempkey"] = prop.NewValue();
41*aed3e508SAndroid Build Coastguard Worker   return temp.toStyledString();
42*aed3e508SAndroid Build Coastguard Worker }
43*aed3e508SAndroid Build Coastguard Worker 
44*aed3e508SAndroid Build Coastguard Worker }  // namespace {}
45*aed3e508SAndroid Build Coastguard Worker 
TEST(PropRegistryTest,SimpleTest)46*aed3e508SAndroid Build Coastguard Worker TEST(PropRegistryTest, SimpleTest) {
47*aed3e508SAndroid Build Coastguard Worker   PropRegistry reg;
48*aed3e508SAndroid Build Coastguard Worker   PropRegistryTestDelegate delegate;
49*aed3e508SAndroid Build Coastguard Worker 
50*aed3e508SAndroid Build Coastguard Worker   int expected_call_cnt = 0;
51*aed3e508SAndroid Build Coastguard Worker   BoolProperty bp1(&reg, "hi", false);
52*aed3e508SAndroid Build Coastguard Worker   bp1.SetDelegate(&delegate);
53*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(ValueForProperty(bp1).c_str(), "false"));
54*aed3e508SAndroid Build Coastguard Worker   bp1.HandleGesturesPropWritten();
55*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(++expected_call_cnt, delegate.call_cnt_);
56*aed3e508SAndroid Build Coastguard Worker 
57*aed3e508SAndroid Build Coastguard Worker   BoolProperty bp2(&reg, "hi", true);
58*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(ValueForProperty(bp2).c_str(), "true"));
59*aed3e508SAndroid Build Coastguard Worker   bp2.HandleGesturesPropWritten();
60*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(expected_call_cnt, delegate.call_cnt_);
61*aed3e508SAndroid Build Coastguard Worker 
62*aed3e508SAndroid Build Coastguard Worker   DoubleProperty dp1(&reg, "hi", 2721.0);
63*aed3e508SAndroid Build Coastguard Worker   dp1.SetDelegate(&delegate);
64*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(ValueForProperty(dp1).c_str(), "2721"));
65*aed3e508SAndroid Build Coastguard Worker   dp1.HandleGesturesPropWritten();
66*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(++expected_call_cnt, delegate.call_cnt_);
67*aed3e508SAndroid Build Coastguard Worker 
68*aed3e508SAndroid Build Coastguard Worker   DoubleProperty dp2(&reg, "hi", 3.1);
69*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(ValueForProperty(dp2).c_str(), "3.1"));
70*aed3e508SAndroid Build Coastguard Worker   dp2.HandleGesturesPropWritten();
71*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(expected_call_cnt, delegate.call_cnt_);
72*aed3e508SAndroid Build Coastguard Worker 
73*aed3e508SAndroid Build Coastguard Worker   IntProperty ip1(&reg, "hi", 567);
74*aed3e508SAndroid Build Coastguard Worker   ip1.SetDelegate(&delegate);
75*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(ValueForProperty(ip1).c_str(), "567"));
76*aed3e508SAndroid Build Coastguard Worker   ip1.HandleGesturesPropWritten();
77*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(++expected_call_cnt, delegate.call_cnt_);
78*aed3e508SAndroid Build Coastguard Worker 
79*aed3e508SAndroid Build Coastguard Worker   IntProperty ip2(&reg, "hi", 568);
80*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(ValueForProperty(ip2).c_str(), "568"));
81*aed3e508SAndroid Build Coastguard Worker   ip2.HandleGesturesPropWritten();
82*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(expected_call_cnt, delegate.call_cnt_);
83*aed3e508SAndroid Build Coastguard Worker 
84*aed3e508SAndroid Build Coastguard Worker   StringProperty stp1(&reg, "hi", "foo");
85*aed3e508SAndroid Build Coastguard Worker   stp1.SetDelegate(&delegate);
86*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(ValueForProperty(stp1).c_str(), "foo"));
87*aed3e508SAndroid Build Coastguard Worker   stp1.HandleGesturesPropWritten();
88*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(++expected_call_cnt, delegate.call_cnt_);
89*aed3e508SAndroid Build Coastguard Worker 
90*aed3e508SAndroid Build Coastguard Worker   StringProperty stp2(&reg, "hi", "bar");
91*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(ValueForProperty(stp2).c_str(), "bar"));
92*aed3e508SAndroid Build Coastguard Worker   stp2.HandleGesturesPropWritten();
93*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(expected_call_cnt, delegate.call_cnt_);
94*aed3e508SAndroid Build Coastguard Worker 
95*aed3e508SAndroid Build Coastguard Worker 
96*aed3e508SAndroid Build Coastguard Worker   Json::Value my_bool_val = bp1.NewValue();
97*aed3e508SAndroid Build Coastguard Worker   Json::Value my_int_val = ip1.NewValue();
98*aed3e508SAndroid Build Coastguard Worker   Json::Value my_double_val = dp1.NewValue();
99*aed3e508SAndroid Build Coastguard Worker   Json::Value my_str_val = stp1.NewValue();
100*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(bp1.SetValue(my_bool_val));
101*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(bp1.SetValue(my_int_val));
102*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(bp1.SetValue(my_double_val));
103*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(bp1.SetValue(my_str_val));
104*aed3e508SAndroid Build Coastguard Worker 
105*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(ip1.SetValue(my_bool_val));
106*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(ip1.SetValue(my_int_val));
107*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(ip1.SetValue(my_double_val));
108*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(ip1.SetValue(my_str_val));
109*aed3e508SAndroid Build Coastguard Worker 
110*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(dp1.SetValue(my_bool_val));
111*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(dp1.SetValue(my_int_val));
112*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(dp1.SetValue(my_double_val));
113*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(dp1.SetValue(my_str_val));
114*aed3e508SAndroid Build Coastguard Worker 
115*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(stp1.SetValue(my_bool_val));
116*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(stp1.SetValue(my_int_val));
117*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(stp1.SetValue(my_double_val));
118*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(stp1.SetValue(my_str_val));
119*aed3e508SAndroid Build Coastguard Worker 
120*aed3e508SAndroid Build Coastguard Worker   // This code does not do anything but the code coverage
121*aed3e508SAndroid Build Coastguard Worker   // hits for not covered areas due to not running the
122*aed3e508SAndroid Build Coastguard Worker   // unused default virtual functions.
123*aed3e508SAndroid Build Coastguard Worker   PropertyDelegate pd;
124*aed3e508SAndroid Build Coastguard Worker 
125*aed3e508SAndroid Build Coastguard Worker   pd.BoolWasWritten(&bp1);
126*aed3e508SAndroid Build Coastguard Worker   pd.DoubleWasWritten(&dp1);
127*aed3e508SAndroid Build Coastguard Worker   pd.IntWasWritten(&ip1);
128*aed3e508SAndroid Build Coastguard Worker   pd.StringWasWritten(&stp1);
129*aed3e508SAndroid Build Coastguard Worker }
130*aed3e508SAndroid Build Coastguard Worker 
TEST(PropRegistryTest,PropChangeTest)131*aed3e508SAndroid Build Coastguard Worker TEST(PropRegistryTest, PropChangeTest) {
132*aed3e508SAndroid Build Coastguard Worker   PropRegistry reg;
133*aed3e508SAndroid Build Coastguard Worker   ActivityLog log(&reg);
134*aed3e508SAndroid Build Coastguard Worker   reg.set_activity_log(&log);
135*aed3e508SAndroid Build Coastguard Worker 
136*aed3e508SAndroid Build Coastguard Worker   DoubleProperty dp(&reg, "hi", 1234.0);
137*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(0, log.size());
138*aed3e508SAndroid Build Coastguard Worker   dp.HandleGesturesPropWritten();
139*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(1, log.size());
140*aed3e508SAndroid Build Coastguard Worker 
141*aed3e508SAndroid Build Coastguard Worker   BoolProperty bp(&reg, "there", true);
142*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(1, log.size());
143*aed3e508SAndroid Build Coastguard Worker   bp.HandleGesturesPropWritten();
144*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(2, log.size());
145*aed3e508SAndroid Build Coastguard Worker }
146*aed3e508SAndroid Build Coastguard Worker 
147*aed3e508SAndroid Build Coastguard Worker // Mock GesturesPropProvider
MockGesturesPropCreateBool(void * data,const char * name,GesturesPropBool * loc,size_t count,const GesturesPropBool * init)148*aed3e508SAndroid Build Coastguard Worker GesturesProp* MockGesturesPropCreateBool(void* data, const char* name,
149*aed3e508SAndroid Build Coastguard Worker                                          GesturesPropBool* loc,
150*aed3e508SAndroid Build Coastguard Worker                                          size_t count,
151*aed3e508SAndroid Build Coastguard Worker                                          const GesturesPropBool* init) {
152*aed3e508SAndroid Build Coastguard Worker   GesturesProp *dummy = new GesturesProp();
153*aed3e508SAndroid Build Coastguard Worker   *loc = true;
154*aed3e508SAndroid Build Coastguard Worker   return dummy;
155*aed3e508SAndroid Build Coastguard Worker }
156*aed3e508SAndroid Build Coastguard Worker 
MockGesturesPropCreateInt(void * data,const char * name,int * loc,size_t count,const int * init)157*aed3e508SAndroid Build Coastguard Worker GesturesProp* MockGesturesPropCreateInt(void* data, const char* name,
158*aed3e508SAndroid Build Coastguard Worker                                         int* loc, size_t count,
159*aed3e508SAndroid Build Coastguard Worker                                         const int* init) {
160*aed3e508SAndroid Build Coastguard Worker   GesturesProp *dummy = new GesturesProp();
161*aed3e508SAndroid Build Coastguard Worker   *loc = 1;
162*aed3e508SAndroid Build Coastguard Worker   return dummy;
163*aed3e508SAndroid Build Coastguard Worker }
164*aed3e508SAndroid Build Coastguard Worker 
MockGesturesPropCreateReal(void * data,const char * name,double * loc,size_t count,const double * init)165*aed3e508SAndroid Build Coastguard Worker GesturesProp* MockGesturesPropCreateReal(void* data, const char* name,
166*aed3e508SAndroid Build Coastguard Worker                                          double* loc, size_t count,
167*aed3e508SAndroid Build Coastguard Worker                                          const double* init) {
168*aed3e508SAndroid Build Coastguard Worker   GesturesProp *dummy = new GesturesProp();
169*aed3e508SAndroid Build Coastguard Worker   *loc = 1.0;
170*aed3e508SAndroid Build Coastguard Worker   return dummy;
171*aed3e508SAndroid Build Coastguard Worker }
172*aed3e508SAndroid Build Coastguard Worker 
MockGesturesPropCreateString(void * data,const char * name,const char ** loc,const char * const init)173*aed3e508SAndroid Build Coastguard Worker GesturesProp* MockGesturesPropCreateString(void* data, const char* name,
174*aed3e508SAndroid Build Coastguard Worker                                            const char** loc,
175*aed3e508SAndroid Build Coastguard Worker                                            const char* const init) {
176*aed3e508SAndroid Build Coastguard Worker   GesturesProp *dummy = new GesturesProp();
177*aed3e508SAndroid Build Coastguard Worker   *loc = "1";
178*aed3e508SAndroid Build Coastguard Worker   return dummy;
179*aed3e508SAndroid Build Coastguard Worker }
180*aed3e508SAndroid Build Coastguard Worker 
MockGesturesPropRegisterHandlers(void * data,GesturesProp * prop,void * handler_data,GesturesPropGetHandler getter,GesturesPropSetHandler setter)181*aed3e508SAndroid Build Coastguard Worker void MockGesturesPropRegisterHandlers(void* data, GesturesProp* prop,
182*aed3e508SAndroid Build Coastguard Worker                                       void* handler_data,
183*aed3e508SAndroid Build Coastguard Worker                                       GesturesPropGetHandler getter,
184*aed3e508SAndroid Build Coastguard Worker                                       GesturesPropSetHandler setter) {}
185*aed3e508SAndroid Build Coastguard Worker 
MockGesturesPropFree(void * data,GesturesProp * prop)186*aed3e508SAndroid Build Coastguard Worker void MockGesturesPropFree(void* data, GesturesProp* prop) {
187*aed3e508SAndroid Build Coastguard Worker   delete prop;
188*aed3e508SAndroid Build Coastguard Worker }
189*aed3e508SAndroid Build Coastguard Worker 
190*aed3e508SAndroid Build Coastguard Worker // This tests that if we create a prop, then set the prop provider, and the
191*aed3e508SAndroid Build Coastguard Worker // prop provider changes the value at that time, that we notify the prop
192*aed3e508SAndroid Build Coastguard Worker // delegate that the value was changed.
TEST(PropRegistryTest,SetAtCreateShouldNotifyTest)193*aed3e508SAndroid Build Coastguard Worker TEST(PropRegistryTest, SetAtCreateShouldNotifyTest) {
194*aed3e508SAndroid Build Coastguard Worker   GesturesPropProvider mock_gestures_props_provider = {
195*aed3e508SAndroid Build Coastguard Worker     MockGesturesPropCreateInt,
196*aed3e508SAndroid Build Coastguard Worker     nullptr,
197*aed3e508SAndroid Build Coastguard Worker     MockGesturesPropCreateBool,
198*aed3e508SAndroid Build Coastguard Worker     MockGesturesPropCreateString,
199*aed3e508SAndroid Build Coastguard Worker     MockGesturesPropCreateReal,
200*aed3e508SAndroid Build Coastguard Worker     MockGesturesPropRegisterHandlers,
201*aed3e508SAndroid Build Coastguard Worker     MockGesturesPropFree
202*aed3e508SAndroid Build Coastguard Worker   };
203*aed3e508SAndroid Build Coastguard Worker 
204*aed3e508SAndroid Build Coastguard Worker   PropRegistry reg;
205*aed3e508SAndroid Build Coastguard Worker   PropRegistryTestDelegate delegate;
206*aed3e508SAndroid Build Coastguard Worker   BoolProperty my_bool(&reg, "MyBool", 0);
207*aed3e508SAndroid Build Coastguard Worker   my_bool.SetDelegate(&delegate);
208*aed3e508SAndroid Build Coastguard Worker   DoubleProperty my_double(&reg, "MyDouble", 0.0);
209*aed3e508SAndroid Build Coastguard Worker   my_double.SetDelegate(&delegate);
210*aed3e508SAndroid Build Coastguard Worker   IntProperty my_int(&reg, "MyInt", 0);
211*aed3e508SAndroid Build Coastguard Worker   my_int.SetDelegate(&delegate);
212*aed3e508SAndroid Build Coastguard Worker   IntProperty my_int_no_change(&reg, "MyIntNoChange", 1);
213*aed3e508SAndroid Build Coastguard Worker   my_int_no_change.SetDelegate(&delegate);
214*aed3e508SAndroid Build Coastguard Worker   StringProperty my_string(&reg, "MyString", "mine");
215*aed3e508SAndroid Build Coastguard Worker   my_string.SetDelegate(&delegate);
216*aed3e508SAndroid Build Coastguard Worker 
217*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(0, delegate.call_cnt_);
218*aed3e508SAndroid Build Coastguard Worker   reg.SetPropProvider(&mock_gestures_props_provider, nullptr);
219*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(4, delegate.call_cnt_);
220*aed3e508SAndroid Build Coastguard Worker }
221*aed3e508SAndroid Build Coastguard Worker 
TEST(PropRegistryTest,DoublePromoteIntTest)222*aed3e508SAndroid Build Coastguard Worker TEST(PropRegistryTest, DoublePromoteIntTest) {
223*aed3e508SAndroid Build Coastguard Worker   PropRegistry reg;
224*aed3e508SAndroid Build Coastguard Worker   PropRegistryTestDelegate delegate;
225*aed3e508SAndroid Build Coastguard Worker 
226*aed3e508SAndroid Build Coastguard Worker   DoubleProperty my_double(&reg, "MyDouble", 1234.5);
227*aed3e508SAndroid Build Coastguard Worker   my_double.SetDelegate(&delegate);
228*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(ValueForProperty(my_double).c_str(), "1234.5"));
229*aed3e508SAndroid Build Coastguard Worker   IntProperty my_int(&reg, "MyInt", 321);
230*aed3e508SAndroid Build Coastguard Worker   my_int.SetDelegate(&delegate);
231*aed3e508SAndroid Build Coastguard Worker   Json::Value my_int_val = my_int.NewValue();
232*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(my_double.SetValue(my_int_val));
233*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(strstr(ValueForProperty(my_double).c_str(), "321"));
234*aed3e508SAndroid Build Coastguard Worker }
235*aed3e508SAndroid Build Coastguard Worker 
TEST(PropRegistryTest,BoolArrayTest)236*aed3e508SAndroid Build Coastguard Worker TEST(PropRegistryTest, BoolArrayTest) {
237*aed3e508SAndroid Build Coastguard Worker   PropRegistry reg;
238*aed3e508SAndroid Build Coastguard Worker   PropRegistry reg_with_delegate;
239*aed3e508SAndroid Build Coastguard Worker   PropRegistryTestDelegate delegate;
240*aed3e508SAndroid Build Coastguard Worker 
241*aed3e508SAndroid Build Coastguard Worker   GesturesPropBool vals[] = { false, true };
242*aed3e508SAndroid Build Coastguard Worker   BoolArrayProperty my_bool_array_w_delegate(
243*aed3e508SAndroid Build Coastguard Worker     &reg, "MyBoolArray", vals, 2);
244*aed3e508SAndroid Build Coastguard Worker   my_bool_array_w_delegate.SetDelegate(&delegate);
245*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(0, delegate.call_cnt_);
246*aed3e508SAndroid Build Coastguard Worker   my_bool_array_w_delegate.HandleGesturesPropWritten();
247*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(1, delegate.call_cnt_);
248*aed3e508SAndroid Build Coastguard Worker   delegate.BoolArrayWasWritten(&my_bool_array_w_delegate);
249*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(2, delegate.call_cnt_);
250*aed3e508SAndroid Build Coastguard Worker 
251*aed3e508SAndroid Build Coastguard Worker   IntProperty ip1(&reg, "hi", 567);
252*aed3e508SAndroid Build Coastguard Worker   ip1.SetDelegate(&delegate);
253*aed3e508SAndroid Build Coastguard Worker   StringProperty stp1(&reg, "hi", "foo");
254*aed3e508SAndroid Build Coastguard Worker   stp1.SetDelegate(&delegate);
255*aed3e508SAndroid Build Coastguard Worker   Json::Value my_bool_array_val = my_bool_array_w_delegate.NewValue();
256*aed3e508SAndroid Build Coastguard Worker   Json::Value my_int_val = ip1.NewValue();
257*aed3e508SAndroid Build Coastguard Worker   Json::Value my_str_val = stp1.NewValue();
258*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(my_bool_array_w_delegate.SetValue(my_int_val));
259*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(my_bool_array_w_delegate.SetValue(my_str_val));
260*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(my_bool_array_w_delegate.SetValue(my_bool_array_val));
261*aed3e508SAndroid Build Coastguard Worker 
262*aed3e508SAndroid Build Coastguard Worker   // This code does not do anything but the code coverage
263*aed3e508SAndroid Build Coastguard Worker   // hits for not covered areas due to not running the
264*aed3e508SAndroid Build Coastguard Worker   // unused default virtual functions.
265*aed3e508SAndroid Build Coastguard Worker   PropertyDelegate pd;
266*aed3e508SAndroid Build Coastguard Worker 
267*aed3e508SAndroid Build Coastguard Worker   BoolArrayProperty my_bool_array(&reg, "MyBoolArray", vals, 2);
268*aed3e508SAndroid Build Coastguard Worker   pd.BoolArrayWasWritten(&my_bool_array);
269*aed3e508SAndroid Build Coastguard Worker }
270*aed3e508SAndroid Build Coastguard Worker 
TEST(PropRegistryTest,DoubleArrayTest)271*aed3e508SAndroid Build Coastguard Worker TEST(PropRegistryTest, DoubleArrayTest) {
272*aed3e508SAndroid Build Coastguard Worker   PropRegistry reg;
273*aed3e508SAndroid Build Coastguard Worker   PropRegistry reg_with_delegate;
274*aed3e508SAndroid Build Coastguard Worker   PropRegistryTestDelegate delegate;
275*aed3e508SAndroid Build Coastguard Worker 
276*aed3e508SAndroid Build Coastguard Worker   double vals[] = { 0.0, 1.0 };
277*aed3e508SAndroid Build Coastguard Worker   DoubleArrayProperty my_double_array_w_delegate(
278*aed3e508SAndroid Build Coastguard Worker     &reg, "MyDoubleArray", vals, 2);
279*aed3e508SAndroid Build Coastguard Worker   my_double_array_w_delegate.SetDelegate(&delegate);
280*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(0, delegate.call_cnt_);
281*aed3e508SAndroid Build Coastguard Worker   my_double_array_w_delegate.HandleGesturesPropWritten();
282*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(1, delegate.call_cnt_);
283*aed3e508SAndroid Build Coastguard Worker   delegate.DoubleArrayWasWritten(&my_double_array_w_delegate);
284*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(2, delegate.call_cnt_);
285*aed3e508SAndroid Build Coastguard Worker 
286*aed3e508SAndroid Build Coastguard Worker   IntProperty ip1(&reg, "hi", 567);
287*aed3e508SAndroid Build Coastguard Worker   ip1.SetDelegate(&delegate);
288*aed3e508SAndroid Build Coastguard Worker   StringProperty stp1(&reg, "hi", "foo");
289*aed3e508SAndroid Build Coastguard Worker   stp1.SetDelegate(&delegate);
290*aed3e508SAndroid Build Coastguard Worker   Json::Value my_double_array_val = my_double_array_w_delegate.NewValue();
291*aed3e508SAndroid Build Coastguard Worker   Json::Value my_int_val = ip1.NewValue();
292*aed3e508SAndroid Build Coastguard Worker   Json::Value my_str_val = stp1.NewValue();
293*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(my_double_array_w_delegate.SetValue(my_int_val));
294*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(my_double_array_w_delegate.SetValue(my_str_val));
295*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(my_double_array_w_delegate.SetValue(my_double_array_val));
296*aed3e508SAndroid Build Coastguard Worker 
297*aed3e508SAndroid Build Coastguard Worker   // This code does not do anything but the code coverage
298*aed3e508SAndroid Build Coastguard Worker   // hits for not covered areas due to not running the
299*aed3e508SAndroid Build Coastguard Worker   // unused default virtual functions.
300*aed3e508SAndroid Build Coastguard Worker   PropertyDelegate pd;
301*aed3e508SAndroid Build Coastguard Worker 
302*aed3e508SAndroid Build Coastguard Worker   DoubleArrayProperty my_double_array(&reg, "MyDoubleArray", vals, 2);
303*aed3e508SAndroid Build Coastguard Worker   pd.DoubleArrayWasWritten(&my_double_array);
304*aed3e508SAndroid Build Coastguard Worker }
305*aed3e508SAndroid Build Coastguard Worker 
TEST(PropRegistryTest,IntArrayTest)306*aed3e508SAndroid Build Coastguard Worker TEST(PropRegistryTest, IntArrayTest) {
307*aed3e508SAndroid Build Coastguard Worker   PropRegistry reg;
308*aed3e508SAndroid Build Coastguard Worker   PropRegistry reg_with_delegate;
309*aed3e508SAndroid Build Coastguard Worker   PropRegistryTestDelegate delegate;
310*aed3e508SAndroid Build Coastguard Worker 
311*aed3e508SAndroid Build Coastguard Worker   int vals[] = { 0, 1 };
312*aed3e508SAndroid Build Coastguard Worker   IntArrayProperty my_int_array_w_delegate(
313*aed3e508SAndroid Build Coastguard Worker     &reg, "MyIntArray", vals, 2);
314*aed3e508SAndroid Build Coastguard Worker   my_int_array_w_delegate.SetDelegate(&delegate);
315*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(0, delegate.call_cnt_);
316*aed3e508SAndroid Build Coastguard Worker   my_int_array_w_delegate.HandleGesturesPropWritten();
317*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(1, delegate.call_cnt_);
318*aed3e508SAndroid Build Coastguard Worker   delegate.IntArrayWasWritten(&my_int_array_w_delegate);
319*aed3e508SAndroid Build Coastguard Worker   EXPECT_EQ(2, delegate.call_cnt_);
320*aed3e508SAndroid Build Coastguard Worker 
321*aed3e508SAndroid Build Coastguard Worker   IntProperty ip1(&reg, "hi", 567);
322*aed3e508SAndroid Build Coastguard Worker   ip1.SetDelegate(&delegate);
323*aed3e508SAndroid Build Coastguard Worker   StringProperty stp1(&reg, "hi", "foo");
324*aed3e508SAndroid Build Coastguard Worker   stp1.SetDelegate(&delegate);
325*aed3e508SAndroid Build Coastguard Worker   Json::Value my_int_array_val = my_int_array_w_delegate.NewValue();
326*aed3e508SAndroid Build Coastguard Worker   Json::Value my_int_val = ip1.NewValue();
327*aed3e508SAndroid Build Coastguard Worker   Json::Value my_str_val = stp1.NewValue();
328*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(my_int_array_w_delegate.SetValue(my_int_val));
329*aed3e508SAndroid Build Coastguard Worker   EXPECT_FALSE(my_int_array_w_delegate.SetValue(my_str_val));
330*aed3e508SAndroid Build Coastguard Worker   EXPECT_TRUE(my_int_array_w_delegate.SetValue(my_int_array_val));
331*aed3e508SAndroid Build Coastguard Worker 
332*aed3e508SAndroid Build Coastguard Worker   // This code does not do anything but the code coverage
333*aed3e508SAndroid Build Coastguard Worker   // hits for not covered areas due to not running the
334*aed3e508SAndroid Build Coastguard Worker   // unused default virtual functions.
335*aed3e508SAndroid Build Coastguard Worker   PropertyDelegate pd;
336*aed3e508SAndroid Build Coastguard Worker 
337*aed3e508SAndroid Build Coastguard Worker   IntArrayProperty my_int_array(&reg, "MyIntArray", vals, 2);
338*aed3e508SAndroid Build Coastguard Worker   pd.IntArrayWasWritten(&my_int_array);
339*aed3e508SAndroid Build Coastguard Worker }
340*aed3e508SAndroid Build Coastguard Worker 
341*aed3e508SAndroid Build Coastguard Worker }  // namespace gestures
342