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
16 #include <gtest/gtest.h>
17
18 #include "multimodal_input_preferences_manager.h"
19 #include "struct_multimodal.h"
20 #include "define_multimodal.h"
21
22 #undef MMI_LOG_TAG
23 #define MMI_LOG_TAG "MultimodalInputPreferencesManagerTest"
24 namespace OHOS {
25 namespace MMI {
26 namespace {
27 using namespace testing::ext;
28 } // namespace
29
30 const std::string PATH { "/data/service/el1/public/multimodalinput/" };
31 const std::string TOUCHPAD_FILE_NAME { "touchpad_settings.xml" };
32 const std::string MOUSE_FILE_NAME { "mouse_settings.xml" };
33 const std::string strTouchpadRightClickType_ = "rightMenuSwitch";
34 const std::string strMousePrimaryButton_ = "primaryButton";
35 constexpr int32_t PRIMARY_BUTTON { 0 };
36
37 class MultimodalInputPreferencesManagerTest : public testing::Test {
38 public:
SetUpTestCase(void)39 static void SetUpTestCase(void) {}
TearDownTestCase(void)40 static void TearDownTestCase(void) {}
41 void SetUp();
42 private:
43 std::shared_ptr<MultiModalInputPreferencesManager> manager;
44 std::shared_ptr<NativePreferences::Preferences> mousePref;
45 std::shared_ptr<NativePreferences::Preferences> touchpadPref;
46 };
47
SetUp()48 void MultimodalInputPreferencesManagerTest::SetUp()
49 {
50 int32_t errCode = RET_OK;
51 manager = std::make_shared<MultiModalInputPreferencesManager>();
52 mousePref = NativePreferences::PreferencesHelper::GetPreferences(PATH + MOUSE_FILE_NAME, errCode);
53 touchpadPref = NativePreferences::PreferencesHelper::GetPreferences(PATH + TOUCHPAD_FILE_NAME, errCode);
54 }
55
56 /**
57 * @tc.name : MultimodalInputPreferencesManagerTest_GetPreValueTest_001
58 * @tc.number: GetPreValueTest_001
59 * @tc.desc : 测试当键在 preferencesMap_ 中找不到时,GetPreValue 应返回 defaultValue
60 */
61 HWTEST_F(MultimodalInputPreferencesManagerTest,
62 MultimodalInputPreferencesManagerTest_GetPreValueTest_001, TestSize.Level0)
63 {
64 std::string key = "non_existent_key";
65 NativePreferences::PreferencesValue defaultValue = std::vector<uint8_t> {1, 1};
66 NativePreferences::PreferencesValue result = manager->GetPreValue(key, defaultValue);
67 EXPECT_TRUE(result == defaultValue);
68 }
69
70 /**
71 * @tc.name : MultimodalInputPreferencesManagerTest_GetPreValueTest_002
72 * @tc.number: GetPreValueTest_002
73 * @tc.desc : 测试当键在 preferencesMap_ 中找到时,GetPreValue 应返回对应的值
74 */
75 HWTEST_F(MultimodalInputPreferencesManagerTest,
76 MultimodalInputPreferencesManagerTest_GetPreValueTest_002, TestSize.Level0)
77 {
78 std::string key = "existing_key";
79 std::string filePath = "";
80 NativePreferences::PreferencesValue defaultValue = std::vector<uint8_t> {1, 1};
81 NativePreferences::PreferencesValue expectedValue = std::vector<uint8_t> {2, 2};
82 manager->UpdatePreferencesMap(key, TOUCHPAD_FILE_NAME, 2, filePath);
83 int ret = manager->SetPreValue(key, filePath, expectedValue);
84 ASSERT_TRUE(ret == RET_OK);
85 NativePreferences::PreferencesValue result = manager->GetPreValue(key, defaultValue);
86 touchpadPref->Delete(key);
87 touchpadPref->FlushSync();
88 EXPECT_TRUE(result == expectedValue);
89 }
90
91 /**
92 * @tc.name : MultimodalInputPreferencesManagerTest_GetRightClickTypeValTest_001
93 * @tc.number: GetRightClickTypeValTest_001
94 * @tc.desc : 当 touchpadPref 中没有存储 clickType 时,应返回默认的 v2.0 点击类型
95 */
96 HWTEST_F(MultimodalInputPreferencesManagerTest,
97 MultimodalInputPreferencesManagerTest_GetRightClickTypeValTest_001, TestSize.Level0)
98 {
99 touchpadPref->Delete(strTouchpadRightClickType_);
100 touchpadPref->FlushSync();
101 int32_t defaultValue = manager->mousePrimaryButton_ == PRIMARY_BUTTON ?
102 TOUCHPAD_TWO_FINGER_TAP_OR_RIGHT_BUTTON : TOUCHPAD_TWO_FINGER_TAP_OR_LEFT_BUTTON;
103 int32_t result = manager->GetRightClickTypeVal(touchpadPref);
104 EXPECT_EQ(result, defaultValue);
105 }
106
107 /**
108 * @tc.name : MultimodalInputPreferencesManagerTest_GetRightClickTypeValTest_002
109 * @tc.number: GetRightClickTypeValTest_002
110 * @tc.desc : 当 touchpadPref 中存储了 clickType 时,应储存新的 [v1, v2] vector
111 */
112 HWTEST_F(MultimodalInputPreferencesManagerTest,
113 MultimodalInputPreferencesManagerTest_GetRightClickTypeValTest_002, TestSize.Level0)
114 {
115 int32_t valV1 = 2;
116 int32_t valV2 = manager->mousePrimaryButton_ == PRIMARY_BUTTON ?
117 TOUCHPAD_TWO_FINGER_TAP_OR_RIGHT_BUTTON : TOUCHPAD_TWO_FINGER_TAP_OR_LEFT_BUTTON;
118 NativePreferences::PreferencesValue defaultValue = std::vector<uint8_t> {1, 1};
119 NativePreferences::PreferencesValue expectedValue = std::vector<uint8_t> {valV1, valV2};
120 touchpadPref->Delete(strTouchpadRightClickType_);
121 touchpadPref->PutInt(strTouchpadRightClickType_, valV1);
122 touchpadPref->FlushSync();
123 int32_t result = manager->GetRightClickTypeVal(touchpadPref);
124 EXPECT_EQ(result, valV2);
125 NativePreferences::PreferencesValue resultPre = touchpadPref->Get(strTouchpadRightClickType_, defaultValue);
126 touchpadPref->Delete(strTouchpadRightClickType_);
127 touchpadPref->FlushSync();
128 EXPECT_TRUE(resultPre == expectedValue);
129 }
130
131 /**
132 * @tc.name : MultimodalInputPreferencesManagerTest_GetRightClickTypeValTest_003
133 * @tc.number: GetRightClickTypeValTest_003
134 * @tc.desc : 当 touchpadPref 中没有存储 clickType 但储存 [v1, v2] vector 时,应返回储存的v2
135 */
136 HWTEST_F(MultimodalInputPreferencesManagerTest,
137 MultimodalInputPreferencesManagerTest_GetRightClickTypeValTest_003, TestSize.Level0)
138 {
139 int32_t valV1 = 2;
140 int32_t valV2 = 2;
141 std::string filePath = PATH + TOUCHPAD_FILE_NAME;
142 NativePreferences::PreferencesValue defaultValue = std::vector<uint8_t> {1, 1};
143 NativePreferences::PreferencesValue expectedValue = std::vector<uint8_t> {valV1, valV2};
144 touchpadPref->Delete(strTouchpadRightClickType_);
145 touchpadPref->Put(strTouchpadRightClickType_, expectedValue);
146 touchpadPref->FlushSync();
147 int32_t result = manager->GetRightClickTypeVal(touchpadPref);
148 EXPECT_EQ(result, valV2);
149 NativePreferences::PreferencesValue resultPre = touchpadPref->Get(strTouchpadRightClickType_, defaultValue);
150 touchpadPref->Delete(strTouchpadRightClickType_);
151 touchpadPref->FlushSync();
152 EXPECT_TRUE(resultPre == expectedValue);
153 }
154
155 /**
156 * @tc.name : MultimodalInputPreferencesManagerTest_SetPreValueTest_001
157 * @tc.number: SetPreValueTest_001
158 * @tc.desc : 测试 SetPreValue 函数在所有操作都成功时返回 RET_OK
159 */
160 HWTEST_F(MultimodalInputPreferencesManagerTest,
161 MultimodalInputPreferencesManagerTest_SetPreValueTest_001, TestSize.Level0)
162 {
163 std::string filePath = PATH + TOUCHPAD_FILE_NAME;
164 std::vector<uint8_t> setVector {1, 1};
165 int32_t result = manager->SetPreValue(strTouchpadRightClickType_, filePath, setVector);
166 touchpadPref->Delete(strTouchpadRightClickType_);
167 touchpadPref->FlushSync();
168 EXPECT_EQ(result, RET_OK);
169 }
170 } // namespace MMI
171 } // namespace OHOS