• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2025 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  * http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 #define private public
16 #define protected public
17 
18 #include <gtest/gtest.h>
19 
20 #include "setting_datashare.h"
21 #include "touchpad_settings_handler.h"
22 
23 
24 namespace OHOS {
25 namespace MMI {
26 namespace {
27 using namespace testing::ext;
28 } // namespace
29 const std::string g_volumeSwitchesKey {"settings.trackpad.right_volume_switches"};
30 const std::string g_brightnessSwitchesKey {"settings.trackpad.left_brightness_switches"};
31 const std::string g_pressureKey {"settings.trackpad.press_level"};
32 const std::string g_vibrationKey {"settings.trackpad.shock_level"};
33 const std::string g_touchpadSwitchesKey {"settings.trackpad.touchpad_switches"};
34 const std::string g_knuckleSwitchesKey {"settings.trackpad.touchpad_switches"};
35 class TouchpadSettingsHandlerTest : public testing::Test {
36 public:
37     static void SetUpTestCase(void);
38     static void TearDownTestCase(void);
39     void SetUp();
40     void TearDown();
41 };
42 
SetUpTestCase(void)43 void TouchpadSettingsHandlerTest::SetUpTestCase(void)
44 {
45 }
46 
TearDownTestCase(void)47 void TouchpadSettingsHandlerTest::TearDownTestCase(void)
48 {
49 }
50 
SetUp()51 void TouchpadSettingsHandlerTest::SetUp()
52 {
53 }
54 
TearDown()55 void TouchpadSettingsHandlerTest::TearDown()
56 {
57 }
58 
59 /**
60  * @tc.name: RegisterTpObserver_001
61  * @tc.desc: Test when the observer has already been registered, the function should return false
62  * @tc.type: FUNC
63  * @tc.require:
64  */
65 HWTEST_F(TouchpadSettingsHandlerTest, RegisterTpObserver_001, TestSize.Level1)
66 {
67     TouchpadSettingsObserver observer;
68     observer.hasRegistered_ = true;
69     EXPECT_FALSE(observer.RegisterTpObserver(123));
70 }
71 
72 /**
73  * @tc.name: RegisterTpObserver_002
74  * @tc.desc: Test when the account id is negative, the function should return false
75  * @tc.type: FUNC
76  * @tc.require:
77  */
78 HWTEST_F(TouchpadSettingsHandlerTest, RegisterTpObserver_002, TestSize.Level1)
79 {
80     TouchpadSettingsObserver observer;
81     EXPECT_FALSE(observer.RegisterTpObserver(-1));
82 }
83 
84 /**
85  * @tc.name: RegisterTpObserver_003
86  * @tc.desc: Test when the update function is null, the function should return false
87  * @tc.type: FUNC
88  * @tc.require:
89  */
90 HWTEST_F(TouchpadSettingsHandlerTest, RegisterTpObserver_003, TestSize.Level1)
91 {
92     TouchpadSettingsObserver observer;
93     observer.updateFunc_ = nullptr;
94     EXPECT_FALSE(observer.RegisterTpObserver(-1));
95 }
96 
97 /**
98  * @tc.name: UnregisterTpObserver_001
99  * @tc.desc: Test when the observer is not registered, UnregisterTpObserver should return false
100  * @tc.type: FUNC
101  * @tc.require:
102  */
103 HWTEST_F(TouchpadSettingsHandlerTest, UnregisterTpObserver_001, TestSize.Level1)
104 {
105     TouchpadSettingsObserver observer;
106     observer.hasRegistered_ = false;
107     observer.currentAccountId_ = 1;
108     EXPECT_FALSE(observer.UnregisterTpObserver(2));
109 }
110 
111 /**
112  * @tc.name: UnregisterTpObserver_002
113  * @tc.desc: Test when the observer is registered with the same accountId, UnregisterTpObserver should return false
114  * @tc.type: FUNC
115  * @tc.require:
116  */
117 HWTEST_F(TouchpadSettingsHandlerTest, UnregisterTpObserver_002, TestSize.Level1)
118 {
119     TouchpadSettingsObserver observer;
120     observer.hasRegistered_ = true;
121     observer.currentAccountId_ = 1;
122     EXPECT_FALSE(observer.UnregisterTpObserver(1));
123 }
124 
125 /**
126  * @tc.name: UnregisterTpObserver_003
127  * @tc.desc: Test when the observer is registered with a different accountId, UnregisterTpObserver should return true
128  * @tc.type: FUNC
129  * @tc.require:
130  */
131 HWTEST_F(TouchpadSettingsHandlerTest, UnregisterTpObserver_003, TestSize.Level1)
132 {
133     TouchpadSettingsObserver observer;
134     observer.hasRegistered_ = true;
135     observer.currentAccountId_ = 1;
136     EXPECT_TRUE(observer.UnregisterTpObserver(2));
137 }
138 
139 /**
140  * @tc.name: UnregisterTpObserver_004
141  * @tc.desc: Test when the observer is null, UnregisterTpObserver should return true
142  * @tc.type: FUNC
143  * @tc.require:
144  */
145 HWTEST_F(TouchpadSettingsHandlerTest, UnregisterTpObserver_004, TestSize.Level1)
146 {
147     TouchpadSettingsObserver observer;
148     observer.hasRegistered_ = true;
149     observer.currentAccountId_ = 1;
150     observer.volumeSwitchesObserver_ = nullptr;
151     observer.brightnessSwitchesObserver_ = nullptr;
152     observer.pressureObserver_ = nullptr;
153     observer.vibrationObserver_ = nullptr;
154     observer.touchpadSwitchesObserver_ = nullptr;
155     observer.knuckleSwitchesObserver_ = nullptr;
156     EXPECT_TRUE(observer.UnregisterTpObserver(2));
157 }
158 
159 /**
160  * @tc.name: RegisterUpdateFunc_001
161  * @tc.desc: Test if RegisterUpdateFunc sets the updateFunc_ to a non-null value
162  * @tc.type: FUNC
163  * @tc.require:
164  */
165 HWTEST_F(TouchpadSettingsHandlerTest, RegisterUpdateFunc_001, TestSize.Level1)
166 {
167     TouchpadSettingsObserver observer;
168     observer.RegisterUpdateFunc();
169     EXPECT_NE(observer.updateFunc_, nullptr);
170 }
171 
172 /**
173  * @tc.name: SyncTouchpadSettingsData_001
174  * @tc.desc: Test when the updateFunc_ is null, SyncTouchpadSettingsData should return true
175  * @tc.type: FUNC
176  * @tc.require:
177  */
178 HWTEST_F(TouchpadSettingsHandlerTest, SyncTouchpadSettingsData_001, TestSize.Level1)
179 {
180     TouchpadSettingsObserver observer;
181     observer.hasRegistered_ = true;
182     observer.updateFunc_ = nullptr;
183     observer.SyncTouchpadSettingsData();
184     EXPECT_EQ(observer.hasRegistered_, true);
185 }
186 
187 /**
188  * @tc.name: SyncTouchpadSettingsData_003
189  * @tc.desc: Test when the updateFunc_ is null, SyncTouchpadSettingsData should return true
190  * @tc.type: FUNC
191  * @tc.require:
192  */
193 HWTEST_F(TouchpadSettingsHandlerTest, SyncTouchpadSettingsData_003, TestSize.Level1)
194 {
195     TouchpadSettingsObserver observer;
196     observer.hasRegistered_ = true;
197     bool ret = true;
__anon0910c3700202(const std::string& key) 198     SettingObserver::UpdateFunc UpdateFunc = [&ret](const std::string& key) {
199         std::cout <<"Test UpdateFunc" << std::endl;
200     };
201     observer.updateFunc_ = UpdateFunc;
202     EXPECT_NE(observer.updateFunc_, nullptr);
203     ASSERT_NO_FATAL_FAILURE(observer.SyncTouchpadSettingsData());
204 }
205 
206 /**
207  * @tc.name: SyncTouchpadSettingsData_004
208  * @tc.desc: Test in normal case, SyncTouchpadSettingsData should not return early
209  * @tc.type: FUNC
210  * @tc.require:
211  */
212 HWTEST_F(TouchpadSettingsHandlerTest, SyncTouchpadSettingsData_004, TestSize.Level1)
213 {
214     TouchpadSettingsObserver observer;
215     observer.hasRegistered_ = true;
216     bool ret = true;
__anon0910c3700302(const std::string& key) 217     SettingObserver::UpdateFunc UpdateFunc = [&ret](const std::string& key) {
218         std::cout <<"Test UpdateFunc" << std::endl;
219     };
220     observer.updateFunc_ = UpdateFunc;
221     observer.isCommonEventReady_.store(true);
222     EXPECT_NE(observer.updateFunc_, nullptr);
223     ASSERT_NO_FATAL_FAILURE(observer.SyncTouchpadSettingsData());
224 }
225 
226 /**
227  * @tc.name: UnregisterTpObserver_005
228  * @tc.desc: Test when the observer is null, UnregisterTpObserver should return true
229  * @tc.type: FUNC
230  * @tc.require:
231  */
232 HWTEST_F(TouchpadSettingsHandlerTest, UnregisterTpObserver_005, TestSize.Level1)
233 {
234     TouchpadSettingsObserver observer;
235     observer.hasRegistered_ = true;
236     observer.currentAccountId_ = 1;
237     int32_t serviceId = 3101;
238     observer.volumeSwitchesObserver_ = SettingDataShare::GetInstance(serviceId)
239             .CreateObserver(g_volumeSwitchesKey, observer.updateFunc_);
240     observer.brightnessSwitchesObserver_ = SettingDataShare::GetInstance(serviceId)
241             .CreateObserver(g_brightnessSwitchesKey, observer.updateFunc_);
242     observer.pressureObserver_ = SettingDataShare::GetInstance(serviceId)
243             .CreateObserver(g_pressureKey, observer.updateFunc_);
244     observer.vibrationObserver_ = SettingDataShare::GetInstance(serviceId)
245             .CreateObserver(g_vibrationKey, observer.updateFunc_);
246     observer.touchpadSwitchesObserver_ = SettingDataShare::GetInstance(serviceId)
247             .CreateObserver(g_touchpadSwitchesKey, observer.updateFunc_);
248     observer.knuckleSwitchesObserver_ = SettingDataShare::GetInstance(serviceId)
249             .CreateObserver(g_knuckleSwitchesKey, observer.updateFunc_);
250     EXPECT_TRUE(observer.UnregisterTpObserver(2));
251     observer.volumeSwitchesObserver_ = nullptr;
252     observer.brightnessSwitchesObserver_ = nullptr;
253     observer.pressureObserver_ = nullptr;
254     observer.vibrationObserver_ = nullptr;
255     observer.touchpadSwitchesObserver_ = nullptr;
256     observer.knuckleSwitchesObserver_ = nullptr;
257 }
258 
259 /**
260  * @tc.name: RegisterTpObserver_006
261  * @tc.desc: Test when the observer has already been registered, the function should return false
262  * @tc.type: FUNC
263  * @tc.require:
264  */
265 HWTEST_F(TouchpadSettingsHandlerTest, RegisterTpObserver_006, TestSize.Level1)
266 {
267     TouchpadSettingsObserver observer;
268     observer.hasRegistered_ = false;
269     int32_t serviceId = 2;
270     observer.pressureObserver_ = SettingDataShare::GetInstance(serviceId)
271             .CreateObserver(g_pressureKey, observer.updateFunc_);
272     observer.vibrationObserver_ = SettingDataShare::GetInstance(serviceId)
273             .CreateObserver(g_vibrationKey, observer.updateFunc_);
274     observer.touchpadSwitchesObserver_ = SettingDataShare::GetInstance(serviceId)
275             .CreateObserver(g_touchpadSwitchesKey, observer.updateFunc_);
276     observer.knuckleSwitchesObserver_ = SettingDataShare::GetInstance(serviceId)
277             .CreateObserver(g_knuckleSwitchesKey, observer.updateFunc_);
278     bool ret = true;
__anon0910c3700402(const std::string& key) 279     SettingObserver::UpdateFunc UpdateFunc = [&ret](const std::string& key) {
280         std::cout <<"Test UpdateFunc" << std::endl;
281     };
282     observer.updateFunc_ = UpdateFunc;
283     ASSERT_NO_FATAL_FAILURE(observer.RegisterTpObserver(123));
284 }
285 
286 /**
287  * @tc.name: RegisterTpObserver_008
288  * @tc.desc: Test when the observer has already been registered, the function should return false
289  * @tc.type: FUNC
290  * @tc.require:
291  */
292 HWTEST_F(TouchpadSettingsHandlerTest, RegisterTpObserver_008, TestSize.Level1)
293 {
294     TouchpadSettingsObserver observer;
295     bool ret = true;
__anon0910c3700502(const std::string& key) 296     SettingObserver::UpdateFunc UpdateFunc = [&ret](const std::string& key) {
297         std::cout <<"Test UpdateFunc" << std::endl;
298     };
299     observer.updateFunc_ = UpdateFunc;
300     int32_t serviceId = 3101;
301     observer.volumeSwitchesObserver_ = SettingDataShare::GetInstance(serviceId)
302             .CreateObserver(g_volumeSwitchesKey, observer.updateFunc_);
303     observer.brightnessSwitchesObserver_ = SettingDataShare::GetInstance(serviceId)
304             .CreateObserver(g_brightnessSwitchesKey, observer.updateFunc_);
305     observer.pressureObserver_ = SettingDataShare::GetInstance(serviceId)
306             .CreateObserver(g_pressureKey, observer.updateFunc_);
307     observer.vibrationObserver_ = SettingDataShare::GetInstance(serviceId)
308             .CreateObserver(g_vibrationKey, observer.updateFunc_);
309     observer.touchpadSwitchesObserver_ = SettingDataShare::GetInstance(serviceId)
310             .CreateObserver(g_touchpadSwitchesKey, observer.updateFunc_);
311     observer.knuckleSwitchesObserver_ = SettingDataShare::GetInstance(serviceId)
312             .CreateObserver(g_knuckleSwitchesKey, observer.updateFunc_);
313     ASSERT_NO_FATAL_FAILURE(observer.RegisterTpObserver(123));
314     observer.volumeSwitchesObserver_ = nullptr;
315     observer.brightnessSwitchesObserver_ = nullptr;
316     observer.pressureObserver_ = nullptr;
317     observer.vibrationObserver_ = nullptr;
318     observer.touchpadSwitchesObserver_ = nullptr;
319     observer.knuckleSwitchesObserver_ = nullptr;
320 }
321 
322 /**
323  * @tc.name: RegisterTpObserver_009
324  * @tc.desc: Test in normal case, the function should not return early
325  * @tc.type: FUNC
326  * @tc.require:
327  */
328 HWTEST_F(TouchpadSettingsHandlerTest, RegisterTpObserver_009, TestSize.Level1)
329 {
330     TouchpadSettingsObserver observer;
331     bool ret = true;
__anon0910c3700602(const std::string& key) 332     SettingObserver::UpdateFunc UpdateFunc = [&ret](const std::string& key) {
333         std::cout <<"Test UpdateFunc" << std::endl;
334     };
335     observer.updateFunc_ = UpdateFunc;
336     observer.isCommonEventReady_.store(true);
337     observer.hasRegistered_ = false;
338     observer.currentAccountId_ = 0;
339     ASSERT_NO_FATAL_FAILURE(observer.RegisterTpObserver(123));
340 }
341 
342 /**
343  * @tc.name: RegisterTpObserver_0010
344  * @tc.desc: Test when the observer has already been registered, the function should return false
345  * @tc.type: FUNC
346  * @tc.require:
347  */
348 HWTEST_F(TouchpadSettingsHandlerTest, RegisterTpObserver_0010, TestSize.Level1)
349 {
350     TouchpadSettingsObserver observer;
351     bool ret = true;
__anon0910c3700702(const std::string& key) 352     SettingObserver::UpdateFunc UpdateFunc = [&ret](const std::string& key) {
353         std::cout <<"Test UpdateFunc" << std::endl;
354     };
355     observer.updateFunc_ = UpdateFunc;
356     int32_t serviceId = 3101;
357     observer.volumeSwitchesObserver_ = SettingDataShare::GetInstance(serviceId)
358             .CreateObserver(g_volumeSwitchesKey, observer.updateFunc_);
359     observer.brightnessSwitchesObserver_ = SettingDataShare::GetInstance(serviceId)
360             .CreateObserver(g_brightnessSwitchesKey, observer.updateFunc_);
361     observer.isCommonEventReady_.store(true);
362     observer.hasRegistered_ = false;
363     observer.currentAccountId_ = 0;
364     ASSERT_NO_FATAL_FAILURE(observer.RegisterTpObserver(123));
365     observer.volumeSwitchesObserver_ = nullptr;
366     observer.brightnessSwitchesObserver_ = nullptr;
367 }
368 
369 /**
370  * @tc.name: GetInstance_001
371  * @tc.desc: Test if GetInstance method returns the same singleton instance when called multiple times
372  * @tc.type: FUNC
373  * @tc.require:
374  */
375 HWTEST_F(TouchpadSettingsHandlerTest, GetInstance_001, TestSize.Level1)
376 {
377     TouchpadSettingsObserver::instance_ = nullptr;
378     auto instance = OHOS::MMI::TouchpadSettingsObserver::GetInstance();
379     EXPECT_NE(instance, nullptr);
380 }
381 
382 /**
383  * @tc.name: GetInstance_002
384  * @tc.desc: Test if GetInstance method returns the same singleton instance when called multiple times
385  * @tc.type: FUNC
386  * @tc.require:
387  */
388 HWTEST_F(TouchpadSettingsHandlerTest, GetInstance_002, TestSize.Level1)
389 {
390     TouchpadSettingsObserver::instance_ = std::make_shared<TouchpadSettingsObserver>();
391     auto instance = OHOS::MMI::TouchpadSettingsObserver::GetInstance();
392     EXPECT_NE(instance, nullptr);
393 }
394 
395 /**
396  * @tc.name: RegisterDatashareObserver_001
397  * @tc.desc: Test when parameter "key" is empty, the function should return nullptr
398  * @tc.type: FUNC
399  * @tc.require:
400  */
401 HWTEST_F(TouchpadSettingsHandlerTest, RegisterDatashareObserverTest_001, TestSize.Level1)
402 {
403     TouchpadSettingsObserver observer;
404     std::string key = "";
405     bool ret = true;
__anon0910c3700802(const std::string& key) 406     SettingObserver::UpdateFunc UpdateFunc = [&ret](const std::string& key) {
407         std::cout <<"Test UpdateFunc" << std::endl;
408     };
409     observer.updateFunc_ = UpdateFunc;
410     observer.datashareUri_ = "datashare:///com.ohos.settingsdata/entry/settingsdata/USER_SETTINGSDATA_100?Proxy=true";
411     EXPECT_EQ(observer.RegisterDatashareObserver(key, UpdateFunc), nullptr);
412 }
413 
414 /**
415  * @tc.name: RegisterDatashareObserver_002
416  * @tc.desc: Test when parameter "datashareUri_" is empty, the function should return nullptr
417  * @tc.type: FUNC
418  * @tc.require:
419  */
420 HWTEST_F(TouchpadSettingsHandlerTest, RegisterDatashareObserverTest_002, TestSize.Level1)
421 {
422     TouchpadSettingsObserver observer;
423     std::string key = "settings.trackpad.right_volume_switches";
424     bool ret = true;
__anon0910c3700902(const std::string& key) 425     SettingObserver::UpdateFunc UpdateFunc = [&ret](const std::string& key) {
426         std::cout <<"Test UpdateFunc" << std::endl;
427     };
428     observer.updateFunc_ = UpdateFunc;
429     observer.datashareUri_ = "";
430     EXPECT_EQ(observer.RegisterDatashareObserver(key, UpdateFunc), nullptr);
431 }
432 
433 /**
434  * @tc.name: RegisterDatashareObserver_003
435  * @tc.desc: Test when parameter "onUpdate" is empty, the function should return nullptr
436  * @tc.type: FUNC
437  * @tc.require:
438  */
439 HWTEST_F(TouchpadSettingsHandlerTest, RegisterDatashareObserverTest_003, TestSize.Level1)
440 {
441     TouchpadSettingsObserver observer;
442     std::string key = "settings.trackpad.right_volume_switches";
443     observer.datashareUri_ = "datashare:///com.ohos.settingsdata/entry/settingsdata/USER_SETTINGSDATA_100?Proxy=true";
444     EXPECT_EQ(observer.RegisterDatashareObserver(key, nullptr), nullptr);
445 }
446 
447 /**
448  * @tc.name: RegisterDatashareObserver_004
449  * @tc.desc: Test in normal case, the fonction should return a SettingObserver
450  * @tc.type: FUNC
451  * @tc.require:
452  */
453 HWTEST_F(TouchpadSettingsHandlerTest, RegisterDatashareObserverTest_004, TestSize.Level1)
454 {
455     TouchpadSettingsObserver observer;
456     std::string key = "settings.trackpad.right_volume_switches";
457     bool ret = true;
__anon0910c3700a02(const std::string& key) 458     SettingObserver::UpdateFunc UpdateFunc = [&ret](const std::string& key) {
459         std::cout <<"Test UpdateFunc" << std::endl;
460     };
461     observer.updateFunc_ = UpdateFunc;
462     observer.datashareUri_ = "datashare:///com.ohos.settingsdata/entry/settingsdata/USER_SETTINGSDATA_100?Proxy=true";
463     EXPECT_NE(observer.RegisterDatashareObserver(key, UpdateFunc), nullptr);
464     observer.volumeSwitchesObserver_ = nullptr;
465 }
466 
467 /**
468  * @tc.name: SyncTouchpadSettingsData_001
469  * @tc.desc: Test if GetInstance method returns the same singleton instance when called multiple times
470  * @tc.type: FUNC
471  * @tc.require:
472  */
473 HWTEST_F(TouchpadSettingsHandlerTest, SyncTouchpadSettingsDataTest_001, TestSize.Level1)
474 {
475     TouchpadSettingsObserver observer;
476     observer.SetCommonEventReady();
477     observer.hasRegistered_ = false;
478     ASSERT_NO_FATAL_FAILURE(observer.SyncTouchpadSettingsData());
479 }
480 
481 /**
482  * @tc.name: SyncTouchpadSettingsData_002
483  * @tc.desc: Test if GetInstance method returns the same singleton instance when called multiple times
484  * @tc.type: FUNC
485  * @tc.require:
486  */
487 HWTEST_F(TouchpadSettingsHandlerTest, SyncTouchpadSettingsDataTest_002, TestSize.Level1)
488 {
489     TouchpadSettingsObserver observer;
490     observer.SetCommonEventReady();
491     observer.hasRegistered_ = true;
492     ASSERT_NO_FATAL_FAILURE(observer.SyncTouchpadSettingsData());
493 }
494 }
495 } // namespace OHOS::MMI