• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2023 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 #define private public
17 #define protected public
18 #include "enable_ime_data_parser.h"
19 #include "ime_info_inquirer.h"
20 
21 #undef private
22 
23 #include <gtest/gtest.h>
24 
25 using namespace testing::ext;
26 using namespace OHOS::DataShare;
27 namespace OHOS {
28 namespace MiscServices {
29 const std::string IME_KEY = "settings.inputmethod.enable_ime";
30 class EnableImeDataParseTest : public testing::Test {
31 public:
32     static void SetUpTestCase(void);
33     static void TearDownTestCase(void);
34     void SetUp();
35     void TearDown();
36     static std::shared_ptr<DataShareHelper> helper_;
37     static std::shared_ptr<DataShareResultSet> resultSet_;
38     static constexpr int32_t USER_ID = 100;
39 };
40 std::shared_ptr<DataShareHelper> EnableImeDataParseTest::helper_;
41 std::shared_ptr<DataShareResultSet> EnableImeDataParseTest::resultSet_;
42 constexpr uint32_t USER_100_TOTAL_COUNT = 3;
43 constexpr uint32_t USER_101_TOTAL_COUNT = 1;
SetUpTestCase(void)44 void EnableImeDataParseTest::SetUpTestCase(void)
45 {
46     std::vector<std::string> columns = { "VALUE" };
47     helper_ = DataShare::DataShareHelper::Creator(nullptr, "tsetUri", "tsetUri");
48     DataSharePredicates predicates;
49     Uri uri("tsetUri");
50     resultSet_ = helper_->Query(uri, predicates, columns);
51     EnableImeDataParser::GetInstance()->Initialize(USER_ID);
52     ImeInfoInquirer::currentIme_ = std::make_shared<Property>();
53     ImeInfoInquirer::defaultImeProperty_ = std::make_shared<Property>();
54     ImeInfoInquirer::defaultIme_ = std::make_shared<ImeInfo>();
55     ImeInfoInquirer::GetInstance().GetDefaultImeCfgProp()->name = "defaultImeName";
56     ImeInfoInquirer::GetInstance().GetDefaultImeCfgProp()->id = "defaultImeId";
57 }
58 
TearDownTestCase(void)59 void EnableImeDataParseTest::TearDownTestCase(void) { }
60 
SetUp()61 void EnableImeDataParseTest::SetUp()
62 {
63     resultSet_->strValue_ = "{\"enableImeList\" : {\"100\" : [ \"xiaoyiIme\", \"baiduIme\", "
64                             "\"sougouIme\"],\"101\" : [\"sougouIme\"]}}";
65 
66     ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->name = "defaultImeName";
67     ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->id = "defaultImeId";
68     EnableImeDataParser::GetInstance()->enableList_.clear();
69 }
70 
TearDown()71 void EnableImeDataParseTest::TearDown() { }
72 
73 /**
74  * @tc.name: testGetEnableData_001
75  * @tc.desc: Get 100 user enable ime
76  * @tc.type: FUNC
77  * @tc.require:
78  * @tc.author: mashaoyin
79  */
80 HWTEST_F(EnableImeDataParseTest, testGetEnableData_001, TestSize.Level0)
81 {
82     IMSA_HILOGI("EnableImeDataParseTest testGetEnableData_001 START");
83     std::vector<std::string> enableVec;
84     int32_t ret =
85         EnableImeDataParser::GetInstance()->GetEnableData(IME_KEY, enableVec, EnableImeDataParseTest::USER_ID);
86     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
87     EXPECT_EQ(enableVec.size(), USER_100_TOTAL_COUNT);
88     if (enableVec.size() == USER_100_TOTAL_COUNT) {
89         EXPECT_EQ(enableVec[0], "xiaoyiIme");
90         EXPECT_EQ(enableVec[1], "baiduIme");
91         EXPECT_EQ(enableVec[2], "sougouIme");
92     }
93 }
94 
95 /**
96  * @tc.name: testGetEnableData_002
97  * @tc.desc: Get 101 user enable ime
98  * @tc.type: FUNC
99  * @tc.require:
100  * @tc.author: mashaoyin
101  */
102 HWTEST_F(EnableImeDataParseTest, testGetEnableData_002, TestSize.Level0)
103 {
104     IMSA_HILOGI("EnableImeDataParseTest testGetEnableData_002 START");
105     std::vector<std::string> enableVec;
106     int32_t ret = EnableImeDataParser::GetInstance()->GetEnableData(IME_KEY, enableVec, 101);
107     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
108     EXPECT_EQ(enableVec.size(), USER_101_TOTAL_COUNT);
109     if (enableVec.size() == USER_101_TOTAL_COUNT) {
110         EXPECT_EQ(enableVec[0], "sougouIme");
111     }
112 }
113 
114 /**
115  * @tc.name: testGetEnableData_003
116  * @tc.desc: Get 100 user enable ime while enable list is empty.
117  * @tc.type: FUNC
118  * @tc.require:
119  * @tc.author: mashaoyin
120  */
121 HWTEST_F(EnableImeDataParseTest, testGetEnableData_003, TestSize.Level0)
122 {
123     IMSA_HILOGI("EnableImeDataParseTest testGetEnableData_003 START");
124     EnableImeDataParseTest::resultSet_->strValue_ = "{\"enableImeList\" : {\"100\" : []}}";
125     std::vector<std::string> enableVec;
126     int32_t ret =
127         EnableImeDataParser::GetInstance()->GetEnableData(IME_KEY, enableVec, EnableImeDataParseTest::USER_ID);
128     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
129     EXPECT_TRUE(enableVec.empty());
130 }
131 
132 /**
133  * @tc.name: testCheckNeedSwitch_001
134  * @tc.desc: Check need switch for enable list change, current ime is default
135  * @tc.type: FUNC
136  * @tc.require:
137  * @tc.author: mashaoyin
138  */
139 HWTEST_F(EnableImeDataParseTest, testCheckNeedSwitch_001, TestSize.Level0)
140 {
141     IMSA_HILOGI("EnableImeDataParseTest testCheckNeedSwitch_001 START");
142     SwitchInfo switchInfo;
143     EnableImeDataParser::GetInstance()->enableList_.clear();
144     bool ret =
145         EnableImeDataParser::GetInstance()->CheckNeedSwitch(IME_KEY, switchInfo, EnableImeDataParseTest::USER_ID);
146     EXPECT_FALSE(ret);
147 }
148 
149 /**
150  * @tc.name: testCheckNeedSwitch_002
151  * @tc.desc: Check need switch for enable list change
152  * @tc.type: FUNC
153  * @tc.require:
154  * @tc.author: mashaoyin
155  */
156 HWTEST_F(EnableImeDataParseTest, testCheckNeedSwitch_002, TestSize.Level0)
157 {
158     IMSA_HILOGI("EnableImeDataParseTest testCheckNeedSwitch_002 START");
159     ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->name = "xiaoyiIme";
160     ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->id = "xiaoyiImeId";
161     EnableImeDataParseTest::resultSet_->strValue_ = "{\"enableImeList\" : {\"100\" : [\"baiduIme\", "
162                                                     "\"sougouIme\"],\"101\" : [\"sougouIme\"]}}";
163     SwitchInfo switchInfo;
164     EnableImeDataParser::GetInstance()->enableList_[IME_KEY].push_back("xiaoyiIm"
165                                                                        "e");
166     bool ret = EnableImeDataParser::GetInstance()->CheckNeedSwitch(IME_KEY, switchInfo, USER_ID);
167     EXPECT_TRUE(ret);
168     EXPECT_EQ(switchInfo.bundleName, EnableImeDataParser::GetInstance()->defaultImeInfo_->name);
169 }
170 
171 /**
172  * @tc.name: testCheckNeedSwitch_003
173  * @tc.desc: Check need switch for enable list change
174  * @tc.type: FUNC
175  * @tc.require:
176  * @tc.author: mashaoyin
177  */
178 HWTEST_F(EnableImeDataParseTest, testCheckNeedSwitch_003, TestSize.Level0)
179 {
180     IMSA_HILOGI("EnableImeDataParseTest testCheckNeedSwitch_003 START");
181     ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->name = "xiaoyiIme";
182     ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->id = "xiaoyiImeId";
183     EnableImeDataParseTest::resultSet_->strValue_ = "{\"enableImeList\" : {\"100\" : [ \"xiaoyiIme\", \"baiduIme\", "
184                                                     "\"sougouIme\"],\"101\" : "
185                                                     "[\"sougouIme\"]}}";
186     SwitchInfo switchInfo;
187     bool ret = EnableImeDataParser::GetInstance()->CheckNeedSwitch(IME_KEY, switchInfo, USER_ID);
188     EXPECT_FALSE(ret);
189 }
190 
191 /**
192  * @tc.name: testCheckNeedSwitch_004
193  * @tc.desc: Check need switch for enable list change
194  * @tc.type: FUNC
195  * @tc.require:
196  * @tc.author: mashaoyin
197  */
198 HWTEST_F(EnableImeDataParseTest, testCheckNeedSwitch_004, TestSize.Level0)
199 {
200     IMSA_HILOGI("EnableImeDataParseTest testCheckNeedSwitch_004 START");
201     ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->name = "xiaoyiIme";
202     ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->id = "xiaoyiImeId";
203     EnableImeDataParseTest::resultSet_->strValue_ = "{\"enableImeList\" : {\"100\" : [\"baiduIme\", "
204                                                     "\"sougouIme\"],\"101\" : [\"sougouIme\"]}}";
205     SwitchInfo switchInfo;
206     EnableImeDataParser::GetInstance()->enableList_[IME_KEY].push_back("xiaoyiIme");
207     EnableImeDataParser::GetInstance()->enableList_[IME_KEY].push_back("baiduIme");
208     bool ret = EnableImeDataParser::GetInstance()->CheckNeedSwitch(IME_KEY, switchInfo, USER_ID);
209     EXPECT_TRUE(ret);
210     EXPECT_EQ(switchInfo.bundleName, "baiduIme");
211 }
212 
213 /**
214  * @tc.name: testCheckNeedSwitch_005
215  * @tc.desc: Check need switch for enable list change
216  * @tc.type: FUNC
217  * @tc.require:
218  * @tc.author: mashaoyin
219  */
220 HWTEST_F(EnableImeDataParseTest, testCheckNeedSwitch_005, TestSize.Level0)
221 {
222     IMSA_HILOGI("EnableImeDataParseTest testCheckNeedSwitch_005 START");
223     ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->name = "xiaoyiIme";
224     ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->id = "xiaoyiImeId";
225     EnableImeDataParseTest::resultSet_->strValue_ = "{\"enableImeList\" : {\"100\" : [ \"sougouIme\"],\"101\" : "
226                                                     "[\"sougouIme\"]}}";
227     SwitchInfo switchInfo;
228     EnableImeDataParser::GetInstance()->enableList_[IME_KEY].push_back("xiaoyiIme");
229     EnableImeDataParser::GetInstance()->enableList_[IME_KEY].push_back("baiduIme");
230     EnableImeDataParser::GetInstance()->enableList_[IME_KEY].push_back("sougouIme");
231     bool ret = EnableImeDataParser::GetInstance()->CheckNeedSwitch(IME_KEY, switchInfo, USER_ID);
232     EXPECT_TRUE(ret);
233     EXPECT_EQ(switchInfo.bundleName, "sougouIme");
234 }
235 
236 /**
237  * @tc.name: testCheckNeedSwitch_006
238  * @tc.desc: Check need switch for enable list change
239  * @tc.type: FUNC
240  * @tc.require:
241  * @tc.author: mashaoyin
242  */
243 HWTEST_F(EnableImeDataParseTest, testCheckNeedSwitch_006, TestSize.Level0)
244 {
245     IMSA_HILOGI("EnableImeDataParseTest testCheckNeedSwitch_006 START");
246     ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->name = "xiaoyiIme";
247     ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->id = "xiaoyiImeId";
248     SwitchInfo switchInfo;
249     bool ret = EnableImeDataParser::GetInstance()->CheckNeedSwitch(
250         "settings.inputmethod.enable_keyboard", switchInfo, USER_ID);
251     EXPECT_FALSE(ret);
252 }
253 
254 /**
255  * @tc.name: testCheckNeedSwitch_007
256  * @tc.desc: Check need switch for enable list change
257  * @tc.type: FUNC
258  * @tc.require:
259  * @tc.author: mashaoyin
260  */
261 HWTEST_F(EnableImeDataParseTest, testCheckNeedSwitch_007, TestSize.Level0)
262 {
263     IMSA_HILOGI("EnableImeDataParseTest testCheckNeedSwitch_007 START");
264     ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->name = "defaultImeName";
265     ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->id = "defaultImeId";
266     SwitchInfo switchInfo;
267     bool ret = EnableImeDataParser::GetInstance()->CheckNeedSwitch(
268         "settings.inputmethod.enable_keyboard", switchInfo, USER_ID);
269     EXPECT_FALSE(ret);
270 }
271 
272 /**
273  * @tc.name: testCheckNeedSwitch_008
274  * @tc.desc: Check need switch for switch target ime
275  * @tc.type: FUNC
276  * @tc.require:
277  * @tc.author: mashaoyin
278  */
279 HWTEST_F(EnableImeDataParseTest, testCheckNeedSwitch_008, TestSize.Level0)
280 {
281     IMSA_HILOGI("EnableImeDataParseTest testCheckNeedSwitch_008 START");
282     SwitchInfo switchInfo;
283     switchInfo.bundleName = "defaultImeName";
284     switchInfo.subName = "defaultImeId";
285     bool ret = EnableImeDataParser::GetInstance()->CheckNeedSwitch(switchInfo, USER_ID);
286     EXPECT_TRUE(ret);
287 }
288 
289 /**
290  * @tc.name: testCheckNeedSwitch_009
291  * @tc.desc: Check need switch for switch target ime
292  * @tc.type: FUNC
293  * @tc.require:
294  * @tc.author: mashaoyin
295  */
296 HWTEST_F(EnableImeDataParseTest, testCheckNeedSwitch_009, TestSize.Level0)
297 {
298     IMSA_HILOGI("EnableImeDataParseTest testCheckNeedSwitch_009 START");
299     SwitchInfo switchInfo;
300     switchInfo.bundleName = "xiaoyiIme";
301     bool ret = EnableImeDataParser::GetInstance()->CheckNeedSwitch(switchInfo, USER_ID);
302     EXPECT_TRUE(ret);
303 }
304 
305 /**
306  * @tc.name: testCheckNeedSwitch_010
307  * @tc.desc: Check need switch for switch target ime
308  * @tc.type: FUNC
309  * @tc.require:
310  * @tc.author: mashaoyin
311  */
312 HWTEST_F(EnableImeDataParseTest, testCheckNeedSwitch_010, TestSize.Level0)
313 {
314     IMSA_HILOGI("EnableImeDataParseTest testCheckNeedSwitch_010 START");
315     EnableImeDataParseTest::resultSet_->strValue_ = "{\"enableImeList\" : {\"100\" : [ \"sougouIme\"], \"101\" : "
316                                                     "[\"sougouIme\"]}}";
317     SwitchInfo switchInfo;
318     switchInfo.bundleName = "xiaoyiIme";
319     bool ret = EnableImeDataParser::GetInstance()->CheckNeedSwitch(switchInfo, USER_ID);
320     EXPECT_FALSE(ret);
321 }
322 
323 /**
324  * @tc.name: testCheckNeedSwitch_011
325  * @tc.desc: Check need switch for enable list change
326  * @tc.type: FUNC
327  * @tc.require:
328  * @tc.author: mashaoyin
329  */
330 HWTEST_F(EnableImeDataParseTest, testCheckNeedSwitch_011, TestSize.Level0)
331 {
332     IMSA_HILOGI("EnableImeDataParseTest testCheckNeedSwitch_011 START");
333     EnableImeDataParseTest::resultSet_->strValue_ = "";
334     SwitchInfo switchInfo;
335     bool ret = EnableImeDataParser::GetInstance()->CheckNeedSwitch(IME_KEY, switchInfo, USER_ID);
336     EXPECT_FALSE(ret);
337     EXPECT_EQ(switchInfo.bundleName, EnableImeDataParser::GetInstance()->defaultImeInfo_->name);
338 }
339 
340 /**
341  * @tc.name: testCheckNeedSwitch_012
342  * @tc.desc: Check need switch for enable list change
343  * @tc.type: FUNC
344  * @tc.require:
345  * @tc.author: mashaoyin
346  */
347 HWTEST_F(EnableImeDataParseTest, testCheckNeedSwitch_012, TestSize.Level0)
348 {
349     IMSA_HILOGI("EnableImeDataParseTest testCheckNeedSwitch_012 START");
350     ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->name = "xiaoyiIme";
351     ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->id = "xiaoyiImeId";
352     EnableImeDataParseTest::resultSet_->strValue_ = "{\"enableImeList\" : {\"100\" : []}}";
353     SwitchInfo switchInfo;
354     EnableImeDataParser::GetInstance()->enableList_[IME_KEY].push_back("xiaoyiIme");
355     EnableImeDataParser::GetInstance()->enableList_[IME_KEY].push_back("baiduIme");
356     EnableImeDataParser::GetInstance()->enableList_[IME_KEY].push_back("sougouIme");
357     bool ret = EnableImeDataParser::GetInstance()->CheckNeedSwitch(IME_KEY, switchInfo, USER_ID);
358     EXPECT_TRUE(ret);
359     EXPECT_EQ(switchInfo.bundleName, EnableImeDataParser::GetInstance()->defaultImeInfo_->name);
360 }
361 
362 /**
363  * @tc.name: testCheckNeedSwitch_013
364  * @tc.desc: Check need switch for enable list change
365  * @tc.type: FUNC
366  * @tc.require:
367  * @tc.author: mashaoyin
368  */
369 HWTEST_F(EnableImeDataParseTest, testCheckNeedSwitch_013, TestSize.Level0)
370 {
371     IMSA_HILOGI("EnableImeDataParseTest testCheckNeedSwitch_013 START");
372     ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->name = "xiaoyiIme";
373     ImeInfoInquirer::GetInstance().GetCurrentInputMethod(USER_ID)->id = "xiaoyiImeId";
374     SwitchInfo switchInfo;
375     bool ret = EnableImeDataParser::GetInstance()->CheckNeedSwitch(IME_KEY, switchInfo, USER_ID);
376     EXPECT_FALSE(ret);
377 
378     EXPECT_EQ(EnableImeDataParser::GetInstance()->enableList_[IME_KEY].size(), USER_100_TOTAL_COUNT);
379     if (EnableImeDataParser::GetInstance()->enableList_[IME_KEY].size() == USER_100_TOTAL_COUNT) {
380         EXPECT_EQ(EnableImeDataParser::GetInstance()->enableList_[IME_KEY][0], "xiaoyiIme");
381         EXPECT_EQ(EnableImeDataParser::GetInstance()->enableList_[IME_KEY][1], "baiduIme");
382         EXPECT_EQ(EnableImeDataParser::GetInstance()->enableList_[IME_KEY][2], "sougouIme");
383     }
384     resultSet_->strValue_ = "{\"enableImeList\" : {\"100\" : [ \"xiaoyiIme\"], \"101\" : [\"sougouIme\"]}}";
385 
386     ret = EnableImeDataParser::GetInstance()->CheckNeedSwitch(IME_KEY, switchInfo, USER_ID);
387 
388     EXPECT_FALSE(ret);
389     EXPECT_EQ(EnableImeDataParser::GetInstance()->enableList_[IME_KEY].size(), USER_101_TOTAL_COUNT);
390     if (EnableImeDataParser::GetInstance()->enableList_[IME_KEY].size() == USER_101_TOTAL_COUNT) {
391         EXPECT_EQ(EnableImeDataParser::GetInstance()->enableList_[IME_KEY][0], "xiaoyiIme");
392     }
393 
394     ImeInfoInquirer::currentIme_ = nullptr;
395     EXPECT_NE(ImeInfoInquirer::defaultImeProperty_, nullptr);
396     ret = EnableImeDataParser::GetInstance()->CheckNeedSwitch(IME_KEY, switchInfo, USER_ID);
397     EXPECT_TRUE(ret);
398     EXPECT_EQ(switchInfo.bundleName, ImeInfoInquirer::GetInstance().GetDefaultImeCfgProp()->name);
399 
400     ImeInfoInquirer::currentIme_ = std::make_shared<Property>();
401     ImeInfoInquirer::defaultImeProperty_ = nullptr;
402     ret = EnableImeDataParser::GetInstance()->CheckNeedSwitch(IME_KEY, switchInfo, USER_ID);
403     EXPECT_TRUE(ret);
404 }
405 
406 /**
407  * @tc.name: testOnUserChanged_001
408  * @tc.desc: Test local enable list cache change when user changed.
409  * @tc.type: FUNC
410  * @tc.require:
411  * @tc.author: mashaoyin
412  */
413 HWTEST_F(EnableImeDataParseTest, testOnUserChanged_001, TestSize.Level0)
414 {
415     IMSA_HILOGI("EnableImeDataParseTest testOnUserChanged_001 START");
416     int32_t ret = EnableImeDataParser::GetInstance()->GetEnableData(
417         IME_KEY, EnableImeDataParser::GetInstance()->enableList_[IME_KEY], USER_ID);
418     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
419     EXPECT_EQ(EnableImeDataParser::GetInstance()->enableList_[IME_KEY].size(), USER_100_TOTAL_COUNT);
420     // 101 means new user id
421     EnableImeDataParser::GetInstance()->OnUserChanged(101);
422     EXPECT_EQ(EnableImeDataParser::GetInstance()->enableList_[IME_KEY].size(), USER_101_TOTAL_COUNT);
423     if (EnableImeDataParser::GetInstance()->enableList_[IME_KEY].size() == USER_101_TOTAL_COUNT) {
424         EXPECT_EQ(EnableImeDataParser::GetInstance()->enableList_[IME_KEY][0], "sougouIme");
425     }
426 }
427 } // namespace MiscServices
428 } // namespace OHOS
429