• 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 
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