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