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