• 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 #define private public
17 #define protected public
18 #include "ime_enabled_info_manager.h"
19 
20 #include "enable_upgrade_manager.h"
21 #include "settings_data_utils.h"
22 #undef private
23 
24 #include <gtest/gtest.h>
25 
26 #include <algorithm>
27 #include <condition_variable>
28 #include <map>
29 
30 #include "file_operator.h"
31 #include "ime_info_inquirer.h"
32 #include "parameter.h"
33 #include "tdd_util.h"
34 
35 using namespace testing::ext;
36 using namespace OHOS::DataShare;
37 namespace OHOS {
38 namespace MiscServices {
39 struct ImeFixedInfo {
40     std::string bundleName;
41     std::string extensionName;
42 };
43 
44 struct ImeEasyInfo {
45     std::string imeKey;
46     EnabledStatus status{ EnabledStatus::DISABLED };
47     bool isDefaultIme{ false };
48     bool isDefaultImeSet{ false };
49     bool isTmpIme{ false };
50     std::string currentSubName;
51 };
52 
53 struct UserImeConfigTest : public Serializable {
54     std::map<std::string, std::vector<std::string>> cfgs;
MarshalOHOS::MiscServices::UserImeConfigTest55     bool Marshal(cJSON *node) const override
56     {
57         bool ret = true;
58         for (const auto &cfg : cfgs) {
59             ret = SetValue(node, cfg.first, cfg.second) && ret;
60         }
61         return ret;
62     }
63 };
64 
65 struct EnabledImeCfgTest : public Serializable {
66     UserImeConfigTest userImeCfg;
MarshalOHOS::MiscServices::EnabledImeCfgTest67     bool Marshal(cJSON *node) const override
68     {
69         return SetValue(node, GET_NAME(enableImeList), userImeCfg);
70     }
71 };
72 
73 struct SecurityModeCfgTest : public Serializable {
74     UserImeConfigTest userImeCfg;
MarshalOHOS::MiscServices::SecurityModeCfgTest75     bool Marshal(cJSON *node) const override
76     {
77         return SetValue(node, GET_NAME(fullExperienceList), userImeCfg);
78     }
79 };
80 class ImeEnabledInfoManagerTest : public testing::Test {
81 public:
82     static constexpr const char *ENABLE_IME = "settings.inputmethod.enable_ime";
83     static constexpr const char *SECURITY_MODE = "settings.inputmethod.full_experience";
84     static constexpr const char *SYS_IME_KEY = "default_ime_key";
85     static constexpr const char *SYS_IME_CUR_SUBNAME = "sysSubName";
86     static constexpr const char *IME_KEY1 = "key1";
87     static constexpr const char *IME_KEY2 = "key2";
88     static constexpr const char *IME_KEY3 = "key3";
89     static constexpr const char *BUNDLE_NAME1 = "bundleName1";
90     static constexpr const char *BUNDLE_NAME2 = "bundleName2";
91     static constexpr const char *BUNDLE_NAME3 = "com.example.newTestIme";
92     static constexpr const char *EXT_NAME1 = "extName1";
93     static constexpr const char *EXT_NAME2 = "extName2";
94     static constexpr const char *EXT_NAME3 = "InputMethodExtAbility";
95     static constexpr const char *CUR_SUBNAME1 = "subName1";
96     static constexpr const char *CUR_SUBNAME2 = "subName2";
97     static constexpr int32_t USER_ID1 = 1;
98     static constexpr int32_t WAIT_DATA_SHARE_CB_TIMEOUT = 300;
99     static constexpr const char *IME_CFG_FILE_PATH = "/data/service/el1/public/imf/ime_cfg.json";
100     static ImeNativeCfg sysImeProp_;
101     static int32_t currentUserId_;
102     static std::map<int32_t, ImeEnabledCfg> enabledCfg_;
103     static void SetUpTestCase();
104     static void TearDownTestCase();
105     static void DataShareCallback();
106     void SetUp();
107     void TearDown();
108     static bool WaitDataShareCallback(const std::map<int32_t, ImeEnabledCfg> &enabledCfg);
109     static std::map<int32_t, std::vector<FullImeInfo>> GenerateFullImeInfos(
110         const std::map<int32_t, std::vector<std::string>> &easyInfos);
111     static std::vector<FullImeInfo> GenerateFullImeInfos(const std::vector<std::string> &imeKeys);
112     static FullImeInfo GenerateFullImeInfo(const std::string &imeKey);
113     static std::map<int32_t, ImeEnabledCfg> GenerateAllEnabledCfg(
114         const std::map<int32_t, std::vector<ImeEasyInfo>> &easyEnabledInfos);
115     static ImeEnabledCfg GenerateAllEnabledCfg(const std::vector<ImeEasyInfo> &easyEnabledInfos);
116     static std::string GetImePersistCfg();
117     static void ModImePersistCfg(const std::string &content);
118     static bool IsAllSwitchOn();
119     static bool IsNoSwitchOn();
120     static void ModImePersistCfg(const ImePersistCfg &cfg);
121     static void SetGlobalEnableTable(int32_t userId, const std::vector<std::string> &bundleNames);
122     static void SetUserEnableTable(int32_t userId, const std::vector<std::string> &bundleNames);
123     static void SetNewUserEnableTable(int32_t userId, const std::vector<ImeEasyInfo> &easyEnabledInfos);
124     static void SetGlobalFullExperienceTable(int32_t userId, const std::vector<std::string> &bundleNames);
125 
126 private:
127     static std::string originalGlobalEnableImeStr_;
128     static std::string originalGlobalFullExperienceStr_;
129     static std::string currentUserEnableImeStr_;
130     static std::mutex dataShareCbCvMutex_;
131     static std::condition_variable dataShareCbCv_;
132     static std::string originalImePersistCfgStr_;
133     static std::map<std::string, ImeFixedInfo> imeBasicInfoMapping_;
134 };
135 
SetUpTestCase()136 void ImeEnabledInfoManagerTest::SetUpTestCase()
137 {
138     TddUtil::GrantNativePermission();
139     ImeInfoInquirer::GetInstance().InitSystemConfig();
140     IMSA_HILOGI("sys cfg:[%{public}d,%{public}d,%{public}d].",
141         ImeInfoInquirer::GetInstance().GetSystemConfig().enableInputMethodFeature,
142         ImeInfoInquirer::GetInstance().GetSystemConfig().enableFullExperienceFeature,
143         ImeInfoInquirer::GetInstance().GetSystemConfig().initEnabledState);
144     currentUserId_ = TddUtil::GetCurrentUserId();
145     std::string uriProxy = SETTINGS_USER_DATA_URI + std::to_string(currentUserId_) + "?Proxy=true";
146     auto ret = SettingsDataUtils::GetInstance().CreateAndRegisterObserver(
147         uriProxy, ENABLE_IME, []() { DataShareCallback(); });
148     IMSA_HILOGI("CreateAndRegisterObserver ret:%{public}d.", ret);
149 
150     originalGlobalFullExperienceStr_ = TddUtil::GetGlobalTable(SECURITY_MODE);
151     IMSA_HILOGI("originalGlobalFullExperienceStr_:%{public}s.", originalGlobalFullExperienceStr_.c_str());
152     originalGlobalEnableImeStr_ = TddUtil::GetGlobalTable(ENABLE_IME);
153     IMSA_HILOGI("originalGlobalEnableImeStr_:%{public}s.", originalGlobalEnableImeStr_.c_str());
154     currentUserEnableImeStr_ = TddUtil::GetUserTable(currentUserId_, ENABLE_IME);
155     IMSA_HILOGI("currentUserEnableImeStr_:%{public}s.", currentUserEnableImeStr_.c_str());
156     originalImePersistCfgStr_ = GetImePersistCfg();
157 
158     SettingsDataUtils::GetInstance().isDataShareReady_ = true;
159     sysImeProp_ = ImeInfoInquirer::GetInstance().GetDefaultIme();
160     imeBasicInfoMapping_ = {
161         { IME_KEY1, { BUNDLE_NAME1, EXT_NAME1 } },
162         { IME_KEY2, { BUNDLE_NAME2, EXT_NAME2 } },
163         { IME_KEY3, { BUNDLE_NAME3, EXT_NAME3 } },
164         { SYS_IME_KEY,
165             {
166                 sysImeProp_.bundleName,
167                 sysImeProp_.extName,
168             } },
169     };
170 }
171 
TearDownTestCase()172 void ImeEnabledInfoManagerTest::TearDownTestCase()
173 {
174     if (!originalGlobalFullExperienceStr_.empty()) {
175         TddUtil::SetGlobalTable(SECURITY_MODE, originalGlobalFullExperienceStr_);
176     }
177     if (!originalGlobalEnableImeStr_.empty()) {
178         TddUtil::SetGlobalTable(ENABLE_IME, originalGlobalEnableImeStr_);
179     }
180     if (!currentUserEnableImeStr_.empty()) {
181         TddUtil::SetUserTable(currentUserId_, ENABLE_IME, currentUserEnableImeStr_);
182     }
183     if (!originalImePersistCfgStr_.empty()) {
184         ModImePersistCfg(originalImePersistCfgStr_);
185     }
186 }
187 
SetUp()188 void ImeEnabledInfoManagerTest::SetUp()
189 {
190     TddUtil::DeleteGlobalTable(ENABLE_IME);
191     TddUtil::DeleteGlobalTable(SECURITY_MODE);
192     TddUtil::DeleteUserTable(currentUserId_, ENABLE_IME);
193     ModImePersistCfg("");
194     enabledCfg_.clear();
195     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_.clear();
196     EnableUpgradeManager::GetInstance().upgradedUserId_.clear();
197 }
198 
TearDown()199 void ImeEnabledInfoManagerTest::TearDown()
200 {
201     TddUtil::DeleteGlobalTable(ENABLE_IME);
202     TddUtil::DeleteGlobalTable(SECURITY_MODE);
203     TddUtil::DeleteUserTable(currentUserId_, ENABLE_IME);
204     ModImePersistCfg("");
205     enabledCfg_.clear();
206     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_.clear();
207     EnableUpgradeManager::GetInstance().upgradedUserId_.clear();
208 }
209 
DataShareCallback()210 void ImeEnabledInfoManagerTest::DataShareCallback()
211 {
212     IMSA_HILOGI("start.");
213     std::unique_lock<std::mutex> lock(dataShareCbCvMutex_);
214     std::string content;
215     ImeEnabledCfg enabledCfg;
216     content = TddUtil::GetUserTable(currentUserId_, ENABLE_IME);
217     if (!enabledCfg.Unmarshall(content)) {
218         IMSA_HILOGE("%{public}d Unmarshall failed.", currentUserId_);
219     } else {
220         enabledCfg_.insert_or_assign(currentUserId_, enabledCfg);
221     }
222     IMSA_HILOGI("notify.");
223     dataShareCbCv_.notify_one();
224 }
225 
WaitDataShareCallback(const std::map<int32_t,ImeEnabledCfg> & enabledCfg)226 bool ImeEnabledInfoManagerTest::WaitDataShareCallback(const std::map<int32_t, ImeEnabledCfg> &enabledCfg)
227 {
228     std::unique_lock<std::mutex> lock(dataShareCbCvMutex_);
229     dataShareCbCv_.wait_for(lock, std::chrono::milliseconds(WAIT_DATA_SHARE_CB_TIMEOUT), [&enabledCfg]() {
230         return enabledCfg == enabledCfg_ && enabledCfg_ == ImeEnabledInfoManager::GetInstance().imeEnabledCfg_;
231     });
232     for (const auto &cfg : enabledCfg) {
233         IMSA_HILOGI("enabledCfg base info:[%{public}d, %{public}s].", cfg.first, cfg.second.version.c_str());
234         for (const auto &info : cfg.second.enabledInfos) {
235             IMSA_HILOGI("enabledCfg info:[%{public}s,%{public}s,%{public}d].", info.bundleName.c_str(),
236                 info.extensionName.c_str(), info.enabledStatus);
237         }
238     }
239     for (const auto &cfg : enabledCfg_) {
240         IMSA_HILOGI("enabledCfg_ base info:[%{public}d, %{public}s].", cfg.first, cfg.second.version.c_str());
241         for (const auto &info : cfg.second.enabledInfos) {
242             IMSA_HILOGI("enabledCfg_ info:[%{public}s,%{public}s,%{public}d].", info.bundleName.c_str(),
243                 info.extensionName.c_str(), info.enabledStatus);
244         }
245     }
246     for (const auto &cfg : ImeEnabledInfoManager::GetInstance().imeEnabledCfg_) {
247         IMSA_HILOGI("cache base info:[%{public}d, %{public}s].", cfg.first, cfg.second.version.c_str());
248         for (const auto &info : cfg.second.enabledInfos) {
249             IMSA_HILOGI("cache info:[%{public}s,%{public}s,%{public}d].", info.bundleName.c_str(),
250                 info.extensionName.c_str(), info.enabledStatus);
251         }
252     }
253     if (enabledCfg != enabledCfg_) {
254         IMSA_HILOGI("enabledCfg not same enabledCfg_.");
255     }
256     if (ImeEnabledInfoManager::GetInstance().imeEnabledCfg_ != enabledCfg) {
257         IMSA_HILOGI("enabledCfg not same ImeEnabledInfoManager::GetInstance().imeEnabledCfg_.");
258     }
259     return enabledCfg == enabledCfg_ && enabledCfg_ == ImeEnabledInfoManager::GetInstance().imeEnabledCfg_;
260 }
261 
GenerateFullImeInfos(const std::map<int32_t,std::vector<std::string>> & easyInfos)262 std::map<int32_t, std::vector<FullImeInfo>> ImeEnabledInfoManagerTest::GenerateFullImeInfos(
263     const std::map<int32_t, std::vector<std::string>> &easyInfos)
264 {
265     std::map<int32_t, std::vector<FullImeInfo>> fullImeInfos;
266     for (const auto &easyInfo : easyInfos) {
267         auto imeInfos = GenerateFullImeInfos(easyInfo.second);
268         fullImeInfos.insert({ easyInfo.first, imeInfos });
269     }
270     return fullImeInfos;
271 }
272 
GenerateFullImeInfos(const std::vector<std::string> & imeKeys)273 std::vector<FullImeInfo> ImeEnabledInfoManagerTest::GenerateFullImeInfos(const std::vector<std::string> &imeKeys)
274 {
275     std::vector<FullImeInfo> imeInfos;
276     for (const auto &key : imeKeys) {
277         auto imeInfo = GenerateFullImeInfo(key);
278         imeInfos.push_back(imeInfo);
279     }
280     return imeInfos;
281 }
282 
GenerateFullImeInfo(const std::string & imeKey)283 FullImeInfo ImeEnabledInfoManagerTest::GenerateFullImeInfo(const std::string &imeKey)
284 {
285     FullImeInfo imeInfo;
286     auto it = imeBasicInfoMapping_.find(imeKey);
287     if (it != imeBasicInfoMapping_.end()) {
288         imeInfo.prop.name = it->second.bundleName;
289         imeInfo.prop.id = it->second.extensionName;
290     }
291     return imeInfo;
292 }
293 
GenerateAllEnabledCfg(const std::map<int32_t,std::vector<ImeEasyInfo>> & easyEnabledInfos)294 std::map<int32_t, ImeEnabledCfg> ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(
295     const std::map<int32_t, std::vector<ImeEasyInfo>> &easyEnabledInfos)
296 {
297     std::map<int32_t, ImeEnabledCfg> allEnabledCfg;
298     for (const auto &easyInfo : easyEnabledInfos) {
299         auto enabledCfg = GenerateAllEnabledCfg(easyInfo.second);
300         allEnabledCfg.insert({ easyInfo.first, enabledCfg });
301     }
302     return allEnabledCfg;
303 }
304 
GenerateAllEnabledCfg(const std::vector<ImeEasyInfo> & easyEnabledInfos)305 ImeEnabledCfg ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(const std::vector<ImeEasyInfo> &easyEnabledInfos)
306 {
307     ImeEnabledCfg enabledCfg;
308     enabledCfg.version = GetDisplayVersion();
309     std::vector<ImeEnabledInfo> imeEnabledInfos;
310     for (const auto &info : easyEnabledInfos) {
311         ImeEnabledInfo imeEnabledInfo;
312         std::string key = info.imeKey;
313         bool hasExtName = true;
314         auto pos = info.imeKey.find('/');
315         if (pos != std::string::npos && pos + 1 < info.imeKey.size()) {
316             key = info.imeKey.substr(0, pos);
317             hasExtName = false;
318         }
319         auto it = imeBasicInfoMapping_.find(key);
320         if (it != imeBasicInfoMapping_.end()) {
321             imeEnabledInfo.bundleName = it->second.bundleName;
322             if (hasExtName) {
323                 imeEnabledInfo.extensionName = it->second.extensionName;
324             }
325         }
326         imeEnabledInfo.enabledStatus = info.status;
327         imeEnabledInfo.extraInfo.isDefaultIme = info.isDefaultIme;
328         imeEnabledInfo.extraInfo.isDefaultImeSet = info.isDefaultImeSet;
329         imeEnabledInfo.extraInfo.isTmpIme = info.isTmpIme;
330         imeEnabledInfo.extraInfo.currentSubName = info.currentSubName;
331         imeEnabledInfos.push_back(imeEnabledInfo);
332     }
333     enabledCfg.enabledInfos = imeEnabledInfos;
334     return enabledCfg;
335 }
336 
ModImePersistCfg(const std::string & content)337 void ImeEnabledInfoManagerTest::ModImePersistCfg(const std::string &content)
338 {
339     if (!FileOperator::Write(IME_CFG_FILE_PATH, content, O_CREAT | O_WRONLY | O_SYNC | O_TRUNC)) {
340         IMSA_HILOGE("failed to WriteJsonFile!");
341     }
342 }
343 
GetImePersistCfg()344 std::string ImeEnabledInfoManagerTest::GetImePersistCfg()
345 {
346     std::string cfg;
347     bool ret = FileOperator::Read(IME_CFG_FILE_PATH, cfg);
348     if (!ret) {
349         IMSA_HILOGE("failed to ReadJsonFile!");
350     }
351     return cfg;
352 }
353 
IsAllSwitchOn()354 bool ImeEnabledInfoManagerTest::IsAllSwitchOn()
355 {
356     return ImeInfoInquirer::GetInstance().GetSystemConfig().enableInputMethodFeature
357            && ImeInfoInquirer::GetInstance().GetSystemConfig().enableFullExperienceFeature;
358 }
IsNoSwitchOn()359 bool ImeEnabledInfoManagerTest::IsNoSwitchOn()
360 {
361     return !ImeInfoInquirer::GetInstance().GetSystemConfig().enableInputMethodFeature
362            && !ImeInfoInquirer::GetInstance().GetSystemConfig().enableFullExperienceFeature;
363 }
364 
SetGlobalEnableTable(int32_t userId,const std::vector<std::string> & bundleNames)365 void ImeEnabledInfoManagerTest::SetGlobalEnableTable(int32_t userId, const std::vector<std::string> &bundleNames)
366 {
367     EnabledImeCfgTest enableCfg;
368     enableCfg.userImeCfg.cfgs.insert({ std::to_string(userId), bundleNames });
369     std::string enabledStr;
370     enableCfg.Marshall(enabledStr);
371     TddUtil::SetGlobalTable(ImeEnabledInfoManagerTest::ENABLE_IME, enabledStr);
372 }
373 
SetUserEnableTable(int32_t userId,const std::vector<std::string> & bundleNames)374 void ImeEnabledInfoManagerTest::SetUserEnableTable(int32_t userId, const std::vector<std::string> &bundleNames)
375 {
376     EnabledImeCfgTest enableCfg;
377     enableCfg.userImeCfg.cfgs.insert({ std::to_string(userId), bundleNames });
378     std::string userEnabledStr;
379     enableCfg.Marshall(userEnabledStr);
380     TddUtil::SetUserTable(userId, ImeEnabledInfoManagerTest::ENABLE_IME, userEnabledStr);
381 }
382 
SetNewUserEnableTable(int32_t userId,const std::vector<ImeEasyInfo> & easyEnabledInfos)383 void ImeEnabledInfoManagerTest::SetNewUserEnableTable(int32_t userId, const std::vector<ImeEasyInfo> &easyEnabledInfos)
384 {
385     auto enabledCfg = ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos);
386     std::string userEnabledStr;
387     enabledCfg.Marshall(userEnabledStr);
388     TddUtil::SetUserTable(userId, ImeEnabledInfoManagerTest::ENABLE_IME, userEnabledStr);
389 }
390 
SetGlobalFullExperienceTable(int32_t userId,const std::vector<std::string> & bundleNames)391 void ImeEnabledInfoManagerTest::SetGlobalFullExperienceTable(
392     int32_t userId, const std::vector<std::string> &bundleNames)
393 {
394     SecurityModeCfgTest secModeCfg;
395     secModeCfg.userImeCfg.cfgs.insert({ std::to_string(userId), bundleNames });
396     std::string fullExperienceStr;
397     secModeCfg.Marshall(fullExperienceStr);
398     TddUtil::SetGlobalTable(ImeEnabledInfoManagerTest::SECURITY_MODE, fullExperienceStr);
399 }
400 
ModImePersistCfg(const ImePersistCfg & cfg)401 void ImeEnabledInfoManagerTest::ModImePersistCfg(const ImePersistCfg &cfg)
402 {
403     std::string content;
404     cfg.Marshall(content);
405     ModImePersistCfg(content);
406 }
407 
408 std::string ImeEnabledInfoManagerTest::originalGlobalEnableImeStr_;
409 std::string ImeEnabledInfoManagerTest::originalGlobalFullExperienceStr_;
410 std::string ImeEnabledInfoManagerTest::currentUserEnableImeStr_;
411 std::map<int32_t, ImeEnabledCfg> ImeEnabledInfoManagerTest::enabledCfg_;
412 std::mutex ImeEnabledInfoManagerTest::dataShareCbCvMutex_;
413 std::condition_variable ImeEnabledInfoManagerTest::dataShareCbCv_;
414 ImeNativeCfg ImeEnabledInfoManagerTest::sysImeProp_;
415 int32_t ImeEnabledInfoManagerTest::currentUserId_;
416 std::string ImeEnabledInfoManagerTest::originalImePersistCfgStr_;
417 std::map<std::string, ImeFixedInfo> ImeEnabledInfoManagerTest::imeBasicInfoMapping_;
418 
419 /**
420  * @tc.name: testInit_001
421  * @tc.desc: Init:upgrade with no table
422  *                has sys ime
423  *                test1:AllSwitchOn--sys ime is BASIC_MODE, sys ime is default ime
424  *                test2:NoSwitchOn--sys ime is FULL_EXPERIENCE_MODE, sys ime is default ime
425  * @tc.type: FUNC
426  * @tc.require:
427  * @tc.author: chenyu
428  */
429 HWTEST_F(ImeEnabledInfoManagerTest, testInit_001, TestSize.Level0)
430 {
431     IMSA_HILOGI("ImeEnabledInfoManagerTest testInit_001 START");
432     auto ret = ImeEnabledInfoManager::GetInstance().Init(ImeEnabledInfoManagerTest::GenerateFullImeInfos(
433         { { ImeEnabledInfoManagerTest::currentUserId_, { ImeEnabledInfoManagerTest::SYS_IME_KEY } } }));
434     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
435     if (ImeEnabledInfoManagerTest::IsAllSwitchOn()) {
436         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
437         easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
438             { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true } } });
439         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
440             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
441     }
442     if (ImeEnabledInfoManagerTest::IsNoSwitchOn()) {
443         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
444         easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
445             { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::FULL_EXPERIENCE_MODE, true } } });
446         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
447             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
448     }
449 }
450 
451 /**
452  * @tc.name: testInit_002
453  * @tc.desc: Init:upgrade with no table
454  *                has sys ime、BUNDLE_NAME1
455  *                BUNDLE_NAME1 is default ime that user set
456  *                test1:NoSwitchOn--sys ime is FULL_EXPERIENCE_MODE
457  *                test2:NoSwitchOn--BUNDLE_NAME1 is FULL_EXPERIENCE_MODE, default ime can retain
458  * @tc.type: FUNC
459  * @tc.require:
460  * @tc.author: chenyu
461  */
462 HWTEST_F(ImeEnabledInfoManagerTest, testInit_002, TestSize.Level0)
463 {
464     IMSA_HILOGI("ImeEnabledInfoManagerTest testInit_002 START");
465     ImePersistCfg cfg;
466     cfg.imePersistInfo.emplace_back(ImeEnabledInfoManagerTest::currentUserId_,
467         std::string(ImeEnabledInfoManagerTest::BUNDLE_NAME1) + "/" + ImeEnabledInfoManagerTest::EXT_NAME1, "", true);
468     ImeEnabledInfoManagerTest::ModImePersistCfg(cfg);
469 
470     auto ret = ImeEnabledInfoManager::GetInstance().Init(
471         ImeEnabledInfoManagerTest::GenerateFullImeInfos({ { ImeEnabledInfoManagerTest::currentUserId_,
472             { ImeEnabledInfoManagerTest::SYS_IME_KEY, ImeEnabledInfoManagerTest::IME_KEY1 } } }));
473     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
474 
475     if (ImeEnabledInfoManagerTest::IsNoSwitchOn()) {
476         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
477         easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
478             { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::FULL_EXPERIENCE_MODE },
479                 { ImeEnabledInfoManagerTest::IME_KEY1, EnabledStatus::FULL_EXPERIENCE_MODE, true, true } } });
480         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
481             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
482     }
483 }
484 
485 /**
486  * @tc.name: testInit_003
487  * @tc.desc: Init:upgrade with global enable table and full experience table
488  *                has sys ime、BUNDLE_NAME1
489  *                BUNDLE_NAME1 in full experience table, is default ime that user set
490  *                BUNDLE_NAME2 in enable table
491  *                test1:BUNDLE_NAME1 in full experience table, not in enable table, status is FULL_EXPERIENCE_MODE
492  *                test2:BUNDLE_NAME2 in enable table, but not installed, status is BASIC_MODE
493  *                test3:BUNDLE_NAME1 is default ime that user set, can retain
494  *                test4:sys ime in no table, default BASIC_MODE
495  * @tc.type: FUNC
496  * @tc.require:
497  * @tc.author: chenyu
498  */
499 HWTEST_F(ImeEnabledInfoManagerTest, testInit_003, TestSize.Level0)
500 {
501     IMSA_HILOGI("ImeEnabledInfoManagerTest testInit_003 START");
502     ImeEnabledInfoManagerTest::SetGlobalEnableTable(
503         ImeEnabledInfoManagerTest::currentUserId_, { ImeEnabledInfoManagerTest::BUNDLE_NAME2 });
504     ImeEnabledInfoManagerTest::SetGlobalFullExperienceTable(
505         ImeEnabledInfoManagerTest::currentUserId_, { ImeEnabledInfoManagerTest::BUNDLE_NAME1 });
506     ImePersistCfg cfg;
507     cfg.imePersistInfo.emplace_back(ImeEnabledInfoManagerTest::currentUserId_,
508         std::string(ImeEnabledInfoManagerTest::BUNDLE_NAME1) + "/" + ImeEnabledInfoManagerTest::EXT_NAME1, "", true);
509     ImeEnabledInfoManagerTest::ModImePersistCfg(cfg);
510 
511     std::map<int32_t, std::vector<std::string>> easyInfos;
512     easyInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_, {
513                                                                       ImeEnabledInfoManagerTest::SYS_IME_KEY,
514                                                                       ImeEnabledInfoManagerTest::IME_KEY1,
515                                                                   } });
516     auto ret = ImeEnabledInfoManager::GetInstance().Init(ImeEnabledInfoManagerTest::GenerateFullImeInfos(easyInfos));
517     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
518     if (ImeEnabledInfoManagerTest::IsAllSwitchOn()) {
519         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
520         easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
521             { { std::string(ImeEnabledInfoManagerTest::IME_KEY2) + "/" + "noExtName", EnabledStatus::BASIC_MODE },
522                 { ImeEnabledInfoManagerTest::IME_KEY1, EnabledStatus::FULL_EXPERIENCE_MODE, true, true },
523                 { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE } } });
524 
525         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
526             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
527     }
528 }
529 
530 /**
531  * @tc.name: testInit_004
532  * @tc.desc: Init:upgrade only with global enable table
533  *                has sys ime、 BUNDLE_NAME2
534  *                BUNDLE_NAME1 in enable table, is default ime
535  *                test1:BUNDLE_NAME1 in enable table, is default ime, but not installed, default ime mod to sys ime
536  *                test2:BUNDLE_NAME2 in no table, status is DISABLED
537  * @tc.type: FUNC
538  * @tc.require:
539  * @tc.author: chenyu
540  */
541 HWTEST_F(ImeEnabledInfoManagerTest, testInit_004, TestSize.Level0)
542 {
543     IMSA_HILOGI("ImeEnabledInfoManagerTest testInit_004 START");
544     ImeEnabledInfoManagerTest::SetGlobalEnableTable(
545         ImeEnabledInfoManagerTest::currentUserId_, { ImeEnabledInfoManagerTest::BUNDLE_NAME1 });
546     ImePersistCfg cfg;
547     cfg.imePersistInfo.emplace_back(ImeEnabledInfoManagerTest::currentUserId_,
548         std::string(ImeEnabledInfoManagerTest::BUNDLE_NAME1) + "/" + ImeEnabledInfoManagerTest::EXT_NAME1, "", true);
549     ImeEnabledInfoManagerTest::ModImePersistCfg(cfg);
550 
551     std::map<int32_t, std::vector<std::string>> easyInfos;
552     easyInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_, {
553                                                                       ImeEnabledInfoManagerTest::SYS_IME_KEY,
554                                                                       ImeEnabledInfoManagerTest::IME_KEY2,
555                                                                   } });
556     auto ret = ImeEnabledInfoManager::GetInstance().Init(ImeEnabledInfoManagerTest::GenerateFullImeInfos(easyInfos));
557     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
558     if (ImeEnabledInfoManagerTest::IsAllSwitchOn()) {
559         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
560         easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
561             { { std::string(ImeEnabledInfoManagerTest::IME_KEY1) + "/" + "noExtName", EnabledStatus::BASIC_MODE },
562                 { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true },
563                 { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::DISABLED } } });
564         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
565             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
566     }
567 }
568 
569 /**
570  * @tc.name: testInit_005
571  * @tc.desc: Init:upgrade with global enable table and full experience table
572  *                has sys ime、 BUNDLE_NAME1、BUNDLE_NAME2
573  *                BUNDLE_NAME1 in global enable table and full experience table
574  *                BUNDLE_NAME2 in no table, is default ime
575  *                test1:BUNDLE_NAME1 in global enable table and full experience table, status is FULL_EXPERIENCE_MODE
576  *                test2:BUNDLE_NAME2 in no table, status is DISABLED, default ime mod to sys ime
577  * @tc.type: FUNC
578  * @tc.require:
579  * @tc.author: chenyu
580  */
581 HWTEST_F(ImeEnabledInfoManagerTest, testInit_005, TestSize.Level0)
582 {
583     IMSA_HILOGI("ImeEnabledInfoManagerTest testInit_005 START");
584     ImeEnabledInfoManagerTest::SetGlobalEnableTable(
585         ImeEnabledInfoManagerTest::currentUserId_, { ImeEnabledInfoManagerTest::BUNDLE_NAME1 });
586     ImeEnabledInfoManagerTest::SetGlobalFullExperienceTable(
587         ImeEnabledInfoManagerTest::currentUserId_, { ImeEnabledInfoManagerTest::BUNDLE_NAME1 });
588     ImePersistCfg cfg;
589     cfg.imePersistInfo.emplace_back(ImeEnabledInfoManagerTest::currentUserId_,
590         std::string(ImeEnabledInfoManagerTest::BUNDLE_NAME2) + "/" + ImeEnabledInfoManagerTest::EXT_NAME2, "", false);
591     ImeEnabledInfoManagerTest::ModImePersistCfg(cfg);
592 
593     std::map<int32_t, std::vector<std::string>> easyInfos;
594     easyInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_, {
595                                                                       ImeEnabledInfoManagerTest::SYS_IME_KEY,
596                                                                       ImeEnabledInfoManagerTest::IME_KEY1,
597                                                                       ImeEnabledInfoManagerTest::IME_KEY2,
598                                                                   } });
599     auto ret = ImeEnabledInfoManager::GetInstance().Init(ImeEnabledInfoManagerTest::GenerateFullImeInfos(easyInfos));
600     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
601     if (ImeEnabledInfoManagerTest::IsAllSwitchOn()) {
602         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
603         easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
604             { { ImeEnabledInfoManagerTest::IME_KEY1, EnabledStatus::FULL_EXPERIENCE_MODE },
605                 { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true },
606                 { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::DISABLED } } });
607         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
608             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
609     }
610 }
611 
612 /**
613  * @tc.name: testInit_006
614  * @tc.desc: Init:upgrade only with global enable table and full experience table
615  *                has sys ime、 BUNDLE_NAME1
616  *                BUNDLE_NAME1 in enable table and full experience table, is default ime
617  *                enable table parse abnormal
618  *                test:BUNDLE_NAME1 status is FULL_EXPERIENCE_MODE, default ime retain
619  * @tc.type: FUNC
620  * @tc.require:
621  * @tc.author: chenyu
622  */
623 HWTEST_F(ImeEnabledInfoManagerTest, testInit_006, TestSize.Level0)
624 {
625     IMSA_HILOGI("ImeEnabledInfoManagerTest testInit_006 START");
626     ImeEnabledInfoManagerTest::SetGlobalEnableTable(0, { ImeEnabledInfoManagerTest::BUNDLE_NAME1 });
627     ImeEnabledInfoManagerTest::SetGlobalFullExperienceTable(
628         ImeEnabledInfoManagerTest::currentUserId_, { ImeEnabledInfoManagerTest::BUNDLE_NAME1 });
629     ImePersistCfg cfg;
630     cfg.imePersistInfo.emplace_back(ImeEnabledInfoManagerTest::currentUserId_,
631         std::string(ImeEnabledInfoManagerTest::BUNDLE_NAME1) + "/" + ImeEnabledInfoManagerTest::EXT_NAME1,
632         ImeEnabledInfoManagerTest::CUR_SUBNAME1, true);
633     ImeEnabledInfoManagerTest::ModImePersistCfg(cfg);
634 
635     std::map<int32_t, std::vector<std::string>> easyInfos;
636     easyInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_, {
637                                                                       ImeEnabledInfoManagerTest::SYS_IME_KEY,
638                                                                       ImeEnabledInfoManagerTest::IME_KEY1,
639                                                                   } });
640     auto ret = ImeEnabledInfoManager::GetInstance().Init(ImeEnabledInfoManagerTest::GenerateFullImeInfos(easyInfos));
641     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
642     if (ImeEnabledInfoManagerTest::IsAllSwitchOn()) {
643         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
644         easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
645             { { ImeEnabledInfoManagerTest::IME_KEY1, EnabledStatus::FULL_EXPERIENCE_MODE, true, true, false,
646                   ImeEnabledInfoManagerTest::CUR_SUBNAME1 },
647                 { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE } } });
648         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
649             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
650     }
651 }
652 
653 /**
654  * @tc.name: testInit_007
655  * @tc.desc: Init:upgrade only with global enable table and full experience table
656  *                has sys ime、 BUNDLE_NAME1
657  *                BUNDLE_NAME1 in enable table and full experience table, is default ime
658  *                full experience table parse abnormal
659  *                test:BUNDLE_NAME1 status is BASIC_MODE, default ime retain
660  * @tc.type: FUNC
661  * @tc.require:
662  * @tc.author: chenyu
663  */
664 HWTEST_F(ImeEnabledInfoManagerTest, testInit_007, TestSize.Level0)
665 {
666     IMSA_HILOGI("ImeEnabledInfoManagerTest testInit_007 START");
667     ImeEnabledInfoManagerTest::SetGlobalEnableTable(
668         ImeEnabledInfoManagerTest::currentUserId_, { ImeEnabledInfoManagerTest::BUNDLE_NAME1 });
669     ImeEnabledInfoManagerTest::SetGlobalFullExperienceTable(0, { ImeEnabledInfoManagerTest::BUNDLE_NAME1 });
670     ImePersistCfg cfg;
671     cfg.imePersistInfo.emplace_back(ImeEnabledInfoManagerTest::currentUserId_,
672         std::string(ImeEnabledInfoManagerTest::BUNDLE_NAME1) + "/" + ImeEnabledInfoManagerTest::EXT_NAME1,
673         ImeEnabledInfoManagerTest::CUR_SUBNAME1, true);
674     ImeEnabledInfoManagerTest::ModImePersistCfg(cfg);
675 
676     std::map<int32_t, std::vector<std::string>> easyInfos;
677     easyInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_, {
678                                                                       ImeEnabledInfoManagerTest::SYS_IME_KEY,
679                                                                       ImeEnabledInfoManagerTest::IME_KEY1,
680                                                                   } });
681     auto ret = ImeEnabledInfoManager::GetInstance().Init(ImeEnabledInfoManagerTest::GenerateFullImeInfos(easyInfos));
682     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
683     if (ImeEnabledInfoManagerTest::IsAllSwitchOn()) {
684         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
685         easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
686             { { ImeEnabledInfoManagerTest::IME_KEY1, EnabledStatus::BASIC_MODE, true, true, false,
687                   ImeEnabledInfoManagerTest::CUR_SUBNAME1 },
688                 { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE } } });
689         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
690             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
691     }
692 }
693 
694 /**
695  * @tc.name: testInit_008
696  * @tc.desc: Init:upgrade with global enable table and user enable table
697  *                has sys ime、BUNDLE_NAME1 and BUNDLE_NAME2
698  *                sys ime in global enable table and in user enable table,is default ime
699  *                BUNDLE_NAME1 in global enable table、
700  *                BUNDLE_NAME2 in global enable table and in user enable table
701  *                test:has user enable table, but global enable table has normal enable info of this user,
702  *                      It's up to global enable table
703  * @tc.type: FUNC
704  * @tc.require:
705  * @tc.author: chenyu
706  */
707 HWTEST_F(ImeEnabledInfoManagerTest, testInit_008, TestSize.Level0)
708 {
709     IMSA_HILOGI("ImeEnabledInfoManagerTest testInit_008 START");
710     ImeEnabledInfoManagerTest::SetGlobalEnableTable(ImeEnabledInfoManagerTest::currentUserId_,
711         { ImeEnabledInfoManagerTest::sysImeProp_.bundleName, ImeEnabledInfoManagerTest::BUNDLE_NAME1,
712             ImeEnabledInfoManagerTest::BUNDLE_NAME2 });
713     ImeEnabledInfoManagerTest::SetUserEnableTable(ImeEnabledInfoManagerTest::currentUserId_,
714         { ImeEnabledInfoManagerTest::sysImeProp_.bundleName, ImeEnabledInfoManagerTest::BUNDLE_NAME2 });
715     ImePersistCfg cfg;
716     cfg.imePersistInfo.emplace_back(ImeEnabledInfoManagerTest::currentUserId_,
717         ImeEnabledInfoManagerTest::sysImeProp_.bundleName + "/" + ImeEnabledInfoManagerTest::sysImeProp_.extName,
718         ImeEnabledInfoManagerTest::SYS_IME_CUR_SUBNAME, true);
719     ImeEnabledInfoManagerTest::ModImePersistCfg(cfg);
720 
721     std::map<int32_t, std::vector<std::string>> easyInfos;
722     easyInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_, {
723                                                                       ImeEnabledInfoManagerTest::SYS_IME_KEY,
724                                                                       ImeEnabledInfoManagerTest::IME_KEY1,
725                                                                       ImeEnabledInfoManagerTest::IME_KEY2,
726                                                                   } });
727 
728     auto ret = ImeEnabledInfoManager::GetInstance().Init(ImeEnabledInfoManagerTest::GenerateFullImeInfos(easyInfos));
729     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
730     if (ImeEnabledInfoManagerTest::IsAllSwitchOn()) {
731         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
732         easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
733             { { ImeEnabledInfoManagerTest::IME_KEY1, EnabledStatus::BASIC_MODE },
734                 { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE },
735                 { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true, true, false,
736                     ImeEnabledInfoManagerTest::SYS_IME_CUR_SUBNAME } } });
737         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
738             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
739     }
740 }
741 
742 /**
743  * @tc.name: testInit_009
744  * @tc.desc: Init:upgrade with global enable table and user enable table
745  *                has sys ime and BUNDLE_NAME1
746  *                sys ime in user enable table
747  *                BUNDLE_NAME1 in user enable table, is default ime
748  *                test:has user enable table, global enable table not has enable info of this user,
749  *                      It's up to user enable table
750  * @tc.type: FUNC
751  * @tc.require:
752  * @tc.author: chenyu
753  */
754 HWTEST_F(ImeEnabledInfoManagerTest, testInit_009, TestSize.Level0)
755 {
756     IMSA_HILOGI("ImeEnabledInfoManagerTest testInit_009 START");
757     ImeEnabledInfoManagerTest::SetGlobalEnableTable(
758         0, { ImeEnabledInfoManagerTest::sysImeProp_.bundleName, ImeEnabledInfoManagerTest::BUNDLE_NAME1,
759                ImeEnabledInfoManagerTest::BUNDLE_NAME2 });
760     ImeEnabledInfoManagerTest::SetUserEnableTable(ImeEnabledInfoManagerTest::currentUserId_,
761         { ImeEnabledInfoManagerTest::sysImeProp_.bundleName, ImeEnabledInfoManagerTest::BUNDLE_NAME1 });
762     ImePersistCfg cfg;
763     cfg.imePersistInfo.emplace_back(ImeEnabledInfoManagerTest::currentUserId_,
764         std::string(ImeEnabledInfoManagerTest::BUNDLE_NAME1) + "/" + ImeEnabledInfoManagerTest::EXT_NAME1, "", false);
765     ImeEnabledInfoManagerTest::ModImePersistCfg(cfg);
766 
767     std::map<int32_t, std::vector<std::string>> easyInfos;
768     easyInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_, {
769                                                                       ImeEnabledInfoManagerTest::SYS_IME_KEY,
770                                                                       ImeEnabledInfoManagerTest::IME_KEY1,
771                                                                   } });
772     auto ret = ImeEnabledInfoManager::GetInstance().Init(ImeEnabledInfoManagerTest::GenerateFullImeInfos(easyInfos));
773     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
774     if (ImeEnabledInfoManagerTest::IsAllSwitchOn()) {
775         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
776         easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
777             { { ImeEnabledInfoManagerTest::IME_KEY1, EnabledStatus::BASIC_MODE, true },
778                 { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE } } });
779         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
780             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
781     }
782 }
783 
784 /**
785  * @tc.name: testInit_010
786  * @tc.desc: Init:device reboot with new user enable table
787  *                has sys ime、BUNDLE_NAME2
788  *                sys ime、BUNDLE_NAME2 in global enable table
789  *                sys ime、BUNDLE_NAME2 in new user enable table, all BASIC_MODE, BUNDLE_NAME2 is default ime
790  *                BUNDLE_NAME2 in full experience table
791  *                test:has new user table, It's up to new user enable table
792  * @tc.type: FUNC
793  * @tc.require:
794  * @tc.author: chenyu
795  */
796 HWTEST_F(ImeEnabledInfoManagerTest, testInit_010, TestSize.Level0)
797 {
798     IMSA_HILOGI("ImeEnabledInfoManagerTest testInit_010 START");
799     ImeEnabledInfoManagerTest::SetGlobalEnableTable(ImeEnabledInfoManagerTest::currentUserId_,
800         { ImeEnabledInfoManagerTest::sysImeProp_.bundleName, ImeEnabledInfoManagerTest::BUNDLE_NAME2 });
801     ImeEnabledInfoManagerTest::SetGlobalFullExperienceTable(
802         ImeEnabledInfoManagerTest::currentUserId_, { ImeEnabledInfoManagerTest::BUNDLE_NAME2 });
803     ImePersistCfg cfg;
804     cfg.imePersistInfo.emplace_back(ImeEnabledInfoManagerTest::currentUserId_,
805         ImeEnabledInfoManagerTest::sysImeProp_.bundleName + "/" + ImeEnabledInfoManagerTest::sysImeProp_.extName,
806         ImeEnabledInfoManagerTest::SYS_IME_CUR_SUBNAME, true);
807     ImeEnabledInfoManagerTest::ModImePersistCfg(cfg);
808 
809     std::vector<ImeEasyInfo> easyTableInfos = { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE },
810         { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE, true } };
811     ImeEnabledInfoManagerTest::SetNewUserEnableTable(ImeEnabledInfoManagerTest::currentUserId_, easyTableInfos);
812 
813     std::map<int32_t, std::vector<std::string>> easyInfos;
814     easyInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_, {
815                                                                       ImeEnabledInfoManagerTest::SYS_IME_KEY,
816                                                                       ImeEnabledInfoManagerTest::IME_KEY2,
817                                                                   } });
818     auto ret = ImeEnabledInfoManager::GetInstance().Init(ImeEnabledInfoManagerTest::GenerateFullImeInfos(easyInfos));
819     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
820     if (ImeEnabledInfoManagerTest::IsAllSwitchOn()) {
821         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
822         easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_, easyTableInfos });
823         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
824             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
825     }
826 }
827 
828 /**
829  * @tc.name: testInit_011
830  * @tc.desc: Init:imsa restart with new user enable table
831  *                has sys ime、BUNDLE_NAME2
832  *                BUNDLE_NAME2 install when imsa died
833  *                test:bundle install when imsa died can save in imsa restart
834  *
835  * @tc.type: FUNC
836  * @tc.require:
837  * @tc.author: chenyu
838  */
839 HWTEST_F(ImeEnabledInfoManagerTest, testInit_011, TestSize.Level0)
840 {
841     IMSA_HILOGI("ImeEnabledInfoManagerTest testInit_011 START");
842     std::vector<ImeEasyInfo> easyTableInfos = { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE,
843         true } };
844     ImeEnabledInfoManagerTest::SetNewUserEnableTable(ImeEnabledInfoManagerTest::currentUserId_, easyTableInfos);
845     std::map<int32_t, std::vector<std::string>> easyInfos;
846     easyInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_, {
847                                                                       ImeEnabledInfoManagerTest::SYS_IME_KEY,
848                                                                       ImeEnabledInfoManagerTest::IME_KEY2,
849                                                                   } });
850     auto ret = ImeEnabledInfoManager::GetInstance().Init(ImeEnabledInfoManagerTest::GenerateFullImeInfos(easyInfos));
851     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
852     if (ImeEnabledInfoManagerTest::IsAllSwitchOn()) {
853         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
854         easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
855             { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true },
856                 { ImeEnabledInfoManagerTest::IME_KEY2,
857                     ImeInfoInquirer::GetInstance().GetSystemConfig().initEnabledState } } });
858         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
859             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
860     }
861     if (ImeEnabledInfoManagerTest::IsNoSwitchOn()) {
862         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
863         easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
864             { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true },
865                 { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::FULL_EXPERIENCE_MODE } } });
866         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
867             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
868     }
869 }
870 
871 /**
872  * @tc.name: testInit_012
873  * @tc.desc: Init:imsa restart with new user enable table
874  *                BUNDLE_NAME2 is default ime , and uninstall when imsa died
875  *                test:default ime uninstall when imsa died,  default ime will mode to sys ime in imsa restart
876  * @tc.type: FUNC
877  * @tc.require:
878  * @tc.author: chenyu
879  */
880 HWTEST_F(ImeEnabledInfoManagerTest, testInit_012, TestSize.Level0)
881 {
882     IMSA_HILOGI("ImeEnabledInfoManagerTest testInit_012 START");
883     std::vector<ImeEasyInfo> easyTableInfos = { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE },
884         { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE, true } };
885     ImeEnabledInfoManagerTest::SetNewUserEnableTable(ImeEnabledInfoManagerTest::currentUserId_, easyTableInfos);
886     std::map<int32_t, std::vector<std::string>> easyInfos;
887     easyInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_, { ImeEnabledInfoManagerTest::SYS_IME_KEY } });
888     auto ret = ImeEnabledInfoManager::GetInstance().Init(ImeEnabledInfoManagerTest::GenerateFullImeInfos(easyInfos));
889     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
890     if (ImeEnabledInfoManagerTest::IsAllSwitchOn()) {
891         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
892         easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
893             { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true },
894                 { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE } } });
895         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
896             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
897     }
898     if (ImeEnabledInfoManagerTest::IsNoSwitchOn()) {
899         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
900         easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
901             { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true },
902                 { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE } } });
903         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
904             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
905     }
906 }
907 
908 /**
909  * @tc.name: testInit_013
910  * @tc.desc: Init:imsa restart with new user enable table
911  *                not has default ime before upgrade
912  *                BUNDLE_NAME2 uninstall before upgrade, and install again when imsa died after upgrade
913  *                test1:not has default ime, sys ime set to default ime when upgrade
914  *                test2:BUNDLE_NAME2 can not obtain extName when upgrade, install again when imsa died,
915  *                     can obtain extName after imsa restart
916  * @tc.type: FUNC
917  * @tc.require:
918  * @tc.author: chenyu
919  */
920 HWTEST_F(ImeEnabledInfoManagerTest, testInit_013, TestSize.Level0)
921 {
922     IMSA_HILOGI("ImeEnabledInfoManagerTest testInit_013 START");
923     ImeEnabledInfoManagerTest::SetGlobalEnableTable(
924         ImeEnabledInfoManagerTest::currentUserId_, { ImeEnabledInfoManagerTest::BUNDLE_NAME2 });
925     std::map<int32_t, std::vector<std::string>> easyInfos;
926     easyInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_, { ImeEnabledInfoManagerTest::SYS_IME_KEY } });
927     auto ret = ImeEnabledInfoManager::GetInstance().Init(ImeEnabledInfoManagerTest::GenerateFullImeInfos(easyInfos));
928     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
929     if (ImeEnabledInfoManagerTest::IsAllSwitchOn()) {
930         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
931         easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
932             { { std::string(ImeEnabledInfoManagerTest::IME_KEY2) + "/" + "noExtName", EnabledStatus::BASIC_MODE },
933                 { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true } } });
934         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
935             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
936     }
937     auto imeInfo = ImeEnabledInfoManagerTest::GenerateFullImeInfo(ImeEnabledInfoManagerTest::IME_KEY2);
938     ret = ImeEnabledInfoManager::GetInstance().Add(ImeEnabledInfoManagerTest::currentUserId_, imeInfo);
939     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
940     if (ImeEnabledInfoManagerTest::IsAllSwitchOn()) {
941         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos1;
942         easyEnabledInfos1.insert({ ImeEnabledInfoManagerTest::currentUserId_,
943             { { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE },
944                 { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true } } });
945         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
946             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos1)));
947     }
948 }
949 
950 /**
951  * @tc.name: testUserSwitch_001
952  * @tc.desc: has cache
953  *           test:user enable table will not be mod if has cache
954  * @tc.type: FUNC
955  * @tc.require:
956  * @tc.author: chenyu
957  */
958 HWTEST_F(ImeEnabledInfoManagerTest, testUserAdd_001, TestSize.Level0)
959 {
960     IMSA_HILOGI("ImeEnabledInfoManagerTest testUserAdd_001 START");
961     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
962     easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
963         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true },
964             { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE } } });
965     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_ =
966         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos);
967 
968     std::vector<std::string> imeKeys = {
969         ImeEnabledInfoManagerTest::SYS_IME_KEY,
970         ImeEnabledInfoManagerTest::IME_KEY2,
971     };
972     auto imeInfos = ImeEnabledInfoManagerTest::GenerateFullImeInfos(imeKeys);
973     auto ret = ImeEnabledInfoManager::GetInstance().Switch(ImeEnabledInfoManagerTest::currentUserId_, imeInfos);
974     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
975     EXPECT_FALSE(ImeEnabledInfoManagerTest::WaitDataShareCallback(ImeEnabledInfoManager::GetInstance().imeEnabledCfg_));
976     EXPECT_TRUE(ImeEnabledInfoManagerTest::enabledCfg_.empty());
977 }
978 
979 /**
980  * @tc.name: testUserDelete_001
981  * @tc.desc: has cache
982  *           test:cache will be deleted when user deleted
983  * @tc.type: FUNC
984  * @tc.require:
985  * @tc.author: chenyu
986  */
987 HWTEST_F(ImeEnabledInfoManagerTest, testUserDelete_001, TestSize.Level0)
988 {
989     IMSA_HILOGI("ImeEnabledInfoManagerTest testUserDelete_001 START");
990     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
991     easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
992         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true },
993             { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE } } });
994     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_ =
995         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos);
996     EXPECT_FALSE(ImeEnabledInfoManager::GetInstance().imeEnabledCfg_.empty());
997     auto ret = ImeEnabledInfoManager::GetInstance().Delete(ImeEnabledInfoManagerTest::currentUserId_);
998     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
999     EXPECT_TRUE(ImeEnabledInfoManager::GetInstance().imeEnabledCfg_.empty());
1000 }
1001 
1002 /**
1003  * @tc.name: testBundleAdd_001
1004  * @tc.desc: BUNDLE_NAME1 is added
1005  *           has cache, BUNDLE_NAME1 not in cache
1006  *           test1: bundle add first the status is decided by initEnabledState
1007  * @tc.type: FUNC
1008  * @tc.require:
1009  * @tc.author: chenyu
1010  */
1011 HWTEST_F(ImeEnabledInfoManagerTest, testBundleAdd_001, TestSize.Level0)
1012 {
1013     IMSA_HILOGI("ImeEnabledInfoManagerTest testBundleAdd_001 START");
1014     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
1015     easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1016         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true } } });
1017     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_ =
1018         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos);
1019     auto imeInfo = ImeEnabledInfoManagerTest::GenerateFullImeInfo(ImeEnabledInfoManagerTest::IME_KEY2);
1020     auto ret = ImeEnabledInfoManager::GetInstance().Add(ImeEnabledInfoManagerTest::currentUserId_, imeInfo);
1021     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
1022     if (ImeEnabledInfoManagerTest::IsAllSwitchOn()) {
1023         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos1;
1024         easyEnabledInfos1.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1025             { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true },
1026                 { ImeEnabledInfoManagerTest::IME_KEY2,
1027                     ImeInfoInquirer::GetInstance().GetSystemConfig().initEnabledState } } });
1028         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
1029             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos1)));
1030     }
1031     if (ImeEnabledInfoManagerTest::IsNoSwitchOn()) {
1032         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos2;
1033         easyEnabledInfos2.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1034             { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true },
1035                 { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::FULL_EXPERIENCE_MODE } } });
1036         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
1037             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos2)));
1038     }
1039 }
1040 
1041 /**
1042  * @tc.name: testBundleAdd_002
1043  * @tc.desc: BUNDLE_NAME2 is added
1044  *           has cache, BUNDLE_NAME2 in cache, extensionName not empty
1045  *           test1: bundle not first add the status is decided by last
1046  * @tc.type: FUNC
1047  * @tc.require:
1048  * @tc.author: chenyu
1049  */
1050 HWTEST_F(ImeEnabledInfoManagerTest, testBundleAdd_002, TestSize.Level0)
1051 {
1052     IMSA_HILOGI("ImeEnabledInfoManagerTest testBundleAdd_002 START");
1053     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
1054     easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1055         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true },
1056             { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::FULL_EXPERIENCE_MODE } } });
1057     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_ =
1058         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos);
1059     auto imeInfo = ImeEnabledInfoManagerTest::GenerateFullImeInfo(ImeEnabledInfoManagerTest::IME_KEY2);
1060     auto ret = ImeEnabledInfoManager::GetInstance().Add(ImeEnabledInfoManagerTest::currentUserId_, imeInfo);
1061     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
1062     EXPECT_FALSE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
1063         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
1064     EXPECT_TRUE(ImeEnabledInfoManagerTest::enabledCfg_.empty());
1065 }
1066 
1067 /**
1068  * @tc.name: testBundleAdd_003
1069  * @tc.desc: BUNDLE_NAME2 is added
1070  *           has cache, BUNDLE_NAME2 in cache, extensionName empty
1071  *           test1: bundle uninstall before upgrade, install again that the extName can be set
1072  * @tc.type: FUNC
1073  * @tc.require:
1074  * @tc.author: chenyu
1075  */
1076 HWTEST_F(ImeEnabledInfoManagerTest, testBundleAdd_003, TestSize.Level0)
1077 {
1078     IMSA_HILOGI("ImeEnabledInfoManagerTest testBundleAdd_003 START");
1079     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
1080     easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1081         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true },
1082             { std::string(ImeEnabledInfoManagerTest::IME_KEY2) + "/" + "noExtName",
1083                 EnabledStatus::FULL_EXPERIENCE_MODE } } });
1084     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_ =
1085         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos);
1086     auto imeInfo = ImeEnabledInfoManagerTest::GenerateFullImeInfo(ImeEnabledInfoManagerTest::IME_KEY2);
1087     auto ret = ImeEnabledInfoManager::GetInstance().Add(ImeEnabledInfoManagerTest::currentUserId_, imeInfo);
1088     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
1089     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos1;
1090     easyEnabledInfos1.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1091         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true },
1092             { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::FULL_EXPERIENCE_MODE } } });
1093     EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
1094         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos1)));
1095 }
1096 
1097 /**
1098  * @tc.name: testBundleDelete_001
1099  * @tc.desc: current ime is deleted
1100  *           test:current ime delete, current ime(default ime) mod to sys ime
1101  * @tc.type: FUNC
1102  * @tc.require:
1103  * @tc.author: chenyu
1104  */
1105 HWTEST_F(ImeEnabledInfoManagerTest, testBundleDelete_001, TestSize.Level0)
1106 {
1107     IMSA_HILOGI("ImeEnabledInfoManagerTest testBundleDelete_001 START");
1108     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
1109     easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1110         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE },
1111             { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE, true } } });
1112     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_ =
1113         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos);
1114 
1115     auto ret = ImeEnabledInfoManager::GetInstance().Delete(
1116         ImeEnabledInfoManagerTest::currentUserId_, ImeEnabledInfoManagerTest::BUNDLE_NAME2);
1117     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
1118     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos1;
1119     easyEnabledInfos1.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1120         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true },
1121             { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE } } });
1122     EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
1123         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos1)));
1124 }
1125 
1126 /**
1127  * @tc.name: testBundleDelete_002
1128  * @tc.desc: not current ime delete
1129  *           test:not current ime delete, no need deal
1130  * @tc.type: FUNC
1131  * @tc.require:
1132  * @tc.author: chenyu
1133  */
1134 HWTEST_F(ImeEnabledInfoManagerTest, testBundleDelete_002, TestSize.Level0)
1135 {
1136     IMSA_HILOGI("ImeEnabledInfoManagerTest testBundleDelete_002 START");
1137     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
1138     easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1139         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true },
1140             { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE } } });
1141     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_ =
1142         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos);
1143 
1144     auto ret = ImeEnabledInfoManager::GetInstance().Delete(
1145         ImeEnabledInfoManagerTest::currentUserId_, ImeEnabledInfoManagerTest::BUNDLE_NAME2);
1146     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
1147     EXPECT_FALSE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
1148         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
1149 }
1150 
1151 /**
1152  * @tc.name: testBundleEnabledStatusUpdate_001
1153  * @tc.desc: has cache
1154  *           test:user enabled table will be mod when bundle enabledStatus changed
1155  * @tc.type: FUNC
1156  * @tc.require:
1157  * @tc.author: chenyu
1158  */
1159 HWTEST_F(ImeEnabledInfoManagerTest, testBundleEnabledStatusUpdate_001, TestSize.Level0)
1160 {
1161     IMSA_HILOGI("ImeEnabledInfoManagerTest testBundleEnabledStatusUpdate_001 START");
1162     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
1163     easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1164         { { ImeEnabledInfoManagerTest::IME_KEY3, EnabledStatus::BASIC_MODE } } });
1165     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_ =
1166         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos);
1167 
1168     auto ret = ImeEnabledInfoManager::GetInstance().Update(ImeEnabledInfoManagerTest::currentUserId_,
1169         BUNDLE_NAME3, EXT_NAME3, EnabledStatus::FULL_EXPERIENCE_MODE);
1170     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
1171     if (ImeEnabledInfoManagerTest::IsAllSwitchOn()) {
1172         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos1;
1173         easyEnabledInfos1.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1174             { { ImeEnabledInfoManagerTest::IME_KEY3, EnabledStatus::FULL_EXPERIENCE_MODE } } });
1175         EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
1176             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos1)));
1177     }
1178 }
1179 
1180 /**
1181  * @tc.name: testBundleEnabledStatusUpdate_002
1182  * @tc.desc: test:default ime not allow DISABLED
1183  * @tc.type: FUNC
1184  * @tc.require:
1185  * @tc.author: chenyu
1186  */
1187 HWTEST_F(ImeEnabledInfoManagerTest, testBundleEnabledStatusUpdate_002, TestSize.Level0)
1188 {
1189     IMSA_HILOGI("ImeEnabledInfoManagerTest testBundleEnabledStatusUpdate_002 START");
1190     auto ret = ImeEnabledInfoManager::GetInstance().Update(ImeEnabledInfoManagerTest::currentUserId_,
1191         ImeEnabledInfoManagerTest::sysImeProp_.bundleName, ImeEnabledInfoManagerTest::sysImeProp_.extName,
1192         EnabledStatus::DISABLED);
1193     EXPECT_EQ(ret, ErrorCode::ERROR_OPERATE_SYSTEM_IME);
1194 }
1195 
1196 /**
1197  * @tc.name: testBundleEnabledStatusUpdate_003
1198  * @tc.desc: test:new status same with old status. no need deal
1199  * @tc.type: FUNC
1200  * @tc.require:
1201  * @tc.author: chenyu
1202  */
1203 HWTEST_F(ImeEnabledInfoManagerTest, testBundleEnabledStatusUpdate_003, TestSize.Level0)
1204 {
1205     IMSA_HILOGI("ImeEnabledInfoManagerTest testBundleEnabledStatusUpdate_003 START");
1206     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
1207     easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1208         { { ImeEnabledInfoManagerTest::IME_KEY3, EnabledStatus::BASIC_MODE } } });
1209     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_ =
1210         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos);
1211 
1212     auto ret = ImeEnabledInfoManager::GetInstance().Update(ImeEnabledInfoManagerTest::currentUserId_,
1213         BUNDLE_NAME3, EXT_NAME3, EnabledStatus::BASIC_MODE);
1214     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
1215     if (ImeEnabledInfoManagerTest::IsAllSwitchOn()) {
1216         std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos1;
1217         easyEnabledInfos1.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1218             { { ImeEnabledInfoManagerTest::IME_KEY3, EnabledStatus::BASIC_MODE } } });
1219         EXPECT_FALSE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
1220             ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos1)));
1221         EXPECT_TRUE(ImeEnabledInfoManagerTest::enabledCfg_.empty());
1222     }
1223 }
1224 
1225 /**
1226  * @tc.name: testBundleEnabledStatusUpdate_004
1227  * @tc.desc: test:extensionName not find
1228  * @tc.type: FUNC
1229  * @tc.require:
1230  * @tc.author: chenyu
1231  */
1232 HWTEST_F(ImeEnabledInfoManagerTest, testBundleEnabledStatusUpdate_004, TestSize.Level0)
1233 {
1234     IMSA_HILOGI("ImeEnabledInfoManagerTest testBundleEnabledStatusUpdate_003 START");
1235     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
1236     easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1237         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE } } });
1238     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_ =
1239         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos);
1240 
1241     auto ret = ImeEnabledInfoManager::GetInstance().Update(ImeEnabledInfoManagerTest::currentUserId_,
1242         ImeEnabledInfoManagerTest::sysImeProp_.bundleName, "error", EnabledStatus::BASIC_MODE);
1243     EXPECT_EQ(ret, ErrorCode::ERROR_IME_NOT_FOUND);
1244 }
1245 
1246 /**
1247  * @tc.name: testSetCurrentIme_001
1248  * @tc.desc: test:current ime changed
1249  * @tc.type: FUNC
1250  * @tc.require:
1251  * @tc.author: chenyu
1252  */
1253 HWTEST_F(ImeEnabledInfoManagerTest, testSetCurrentIme_001, TestSize.Level0)
1254 {
1255     IMSA_HILOGI("ImeEnabledInfoManagerTest testSetCurrentIme_001 START");
1256     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
1257     easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1258         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, true },
1259             { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE } } });
1260     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_ =
1261         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos);
1262 
1263     auto ret = ImeEnabledInfoManager::GetInstance().SetCurrentIme(ImeEnabledInfoManagerTest::currentUserId_,
1264         std::string(ImeEnabledInfoManagerTest::BUNDLE_NAME2) + "/" + ImeEnabledInfoManagerTest::EXT_NAME2,
1265         ImeEnabledInfoManagerTest::CUR_SUBNAME2, true);
1266     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
1267     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos1;
1268     easyEnabledInfos1.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1269         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE },
1270             { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE, true, true, false,
1271                 ImeEnabledInfoManagerTest::CUR_SUBNAME2 } } });
1272     EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
1273         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos1)));
1274 }
1275 
1276 /**
1277  * @tc.name: testSetCurrentIme_002
1278  * @tc.desc: test:current ime changed, but has tmp ime, no need to deal
1279  * @tc.type: FUNC
1280  * @tc.require:
1281  * @tc.author: chenyu
1282  */
1283 HWTEST_F(ImeEnabledInfoManagerTest, testSetCurrentIme_002, TestSize.Level0)
1284 {
1285     IMSA_HILOGI("ImeEnabledInfoManagerTest testSetCurrentIme_002 START");
1286     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
1287     easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1288         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, false, false, true },
1289             { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE, true, true, false,
1290                 ImeEnabledInfoManagerTest::CUR_SUBNAME2 } } });
1291     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_ =
1292         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos);
1293 
1294     auto ret = ImeEnabledInfoManager::GetInstance().SetCurrentIme(ImeEnabledInfoManagerTest::currentUserId_,
1295         std::string(ImeEnabledInfoManagerTest::BUNDLE_NAME2) + "/" + ImeEnabledInfoManagerTest::EXT_NAME2,
1296         ImeEnabledInfoManagerTest::CUR_SUBNAME1, false);
1297     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
1298     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos1;
1299     easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1300         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, false, false, true },
1301             { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE, true, false, false,
1302                 ImeEnabledInfoManagerTest::CUR_SUBNAME1 } } });
1303     EXPECT_FALSE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
1304         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos1)));
1305     EXPECT_TRUE(ImeEnabledInfoManagerTest::enabledCfg_.empty());
1306 }
1307 
1308 /**
1309  * @tc.name: testSetTmpIme_001
1310  * @tc.desc: test:tmp ime changed, but same with original tmp ime, no need deal
1311  * @tc.type: FUNC
1312  * @tc.require:
1313  * @tc.author: chenyu
1314  */
1315 HWTEST_F(ImeEnabledInfoManagerTest, testSetTmpIme_001, TestSize.Level0)
1316 {
1317     IMSA_HILOGI("ImeEnabledInfoManagerTest testSetTmpIme_001 START");
1318     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
1319     easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1320         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, false, false, true },
1321             { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE, true, true, false,
1322                 ImeEnabledInfoManagerTest::CUR_SUBNAME2 } } });
1323     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_ =
1324         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos);
1325 
1326     auto ret = ImeEnabledInfoManager::GetInstance().SetTmpIme(
1327         ImeEnabledInfoManagerTest::currentUserId_, std::string(ImeEnabledInfoManagerTest::sysImeProp_.bundleName) + "/"
1328                                                        + ImeEnabledInfoManagerTest::sysImeProp_.extName);
1329     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
1330     EXPECT_FALSE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
1331         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
1332     EXPECT_TRUE(ImeEnabledInfoManagerTest::enabledCfg_.empty());
1333 }
1334 
1335 /**
1336  * @tc.name: testSetTmpIme_002
1337  * @tc.desc: test:tmp ime clear, but not has tmp ime, no need to deal
1338  * @tc.type: FUNC
1339  * @tc.require:
1340  * @tc.author: chenyu
1341  */
1342 HWTEST_F(ImeEnabledInfoManagerTest, testSetTmpIme_002, TestSize.Level0)
1343 {
1344     IMSA_HILOGI("ImeEnabledInfoManagerTest testSetTmpIme_002 START");
1345     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
1346     easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1347         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE },
1348             { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE, true, true, false,
1349                 ImeEnabledInfoManagerTest::CUR_SUBNAME2 } } });
1350     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_ =
1351         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos);
1352 
1353     auto ret = ImeEnabledInfoManager::GetInstance().SetTmpIme(ImeEnabledInfoManagerTest::currentUserId_, "");
1354     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
1355     EXPECT_FALSE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
1356         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos)));
1357     EXPECT_TRUE(ImeEnabledInfoManagerTest::enabledCfg_.empty());
1358 }
1359 
1360 /**
1361  * @tc.name: testSetTmpIme_003
1362  * @tc.desc: test:tmp ime clear
1363  * @tc.require:
1364  * @tc.author: chenyu
1365  */
1366 HWTEST_F(ImeEnabledInfoManagerTest, testSetTmpIme_003, TestSize.Level0)
1367 {
1368     IMSA_HILOGI("ImeEnabledInfoManagerTest testSetTmpIme_003 START");
1369     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
1370     easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1371         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, false, false, true },
1372             { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE, true, true, false,
1373                 ImeEnabledInfoManagerTest::CUR_SUBNAME2 } } });
1374     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_ =
1375         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos);
1376 
1377     auto ret = ImeEnabledInfoManager::GetInstance().SetTmpIme(ImeEnabledInfoManagerTest::currentUserId_, "");
1378     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
1379     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos1;
1380     easyEnabledInfos1.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1381         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE },
1382             { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE, true, true, false,
1383                 ImeEnabledInfoManagerTest::CUR_SUBNAME2 } } });
1384     EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
1385         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos1)));
1386 }
1387 
1388 /**
1389  * @tc.name: testSetTmpIme_004
1390  * @tc.desc: test:tmp ime set
1391  * @tc.require:
1392  * @tc.author: chenyu
1393  */
1394 HWTEST_F(ImeEnabledInfoManagerTest, testSetTmpIme_004, TestSize.Level0)
1395 {
1396     IMSA_HILOGI("ImeEnabledInfoManagerTest testSetTmpIme_004 START");
1397     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
1398     easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1399         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE },
1400             { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE, true, true, false,
1401                 ImeEnabledInfoManagerTest::CUR_SUBNAME2 } } });
1402     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_ =
1403         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos);
1404 
1405     auto ret = ImeEnabledInfoManager::GetInstance().SetTmpIme(
1406         ImeEnabledInfoManagerTest::currentUserId_, std::string(ImeEnabledInfoManagerTest::sysImeProp_.bundleName) + "/"
1407                                                        + ImeEnabledInfoManagerTest::sysImeProp_.extName);
1408     EXPECT_EQ(ret, ErrorCode::NO_ERROR);
1409     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos1;
1410     easyEnabledInfos1.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1411         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, false, false, true },
1412             { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE, true, true, false,
1413                 ImeEnabledInfoManagerTest::CUR_SUBNAME2 } } });
1414     EXPECT_TRUE(ImeEnabledInfoManagerTest::WaitDataShareCallback(
1415         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos1)));
1416 }
1417 
1418 /**
1419  * @tc.name: testGetCurrentImeCfg_001
1420  * @tc.desc: test:has tmp ime, current ime is tmp ime
1421  * @tc.require:
1422  * @tc.author: chenyu
1423  */
1424 HWTEST_F(ImeEnabledInfoManagerTest, testGetCurrentImeCfg_001, TestSize.Level0)
1425 {
1426     IMSA_HILOGI("ImeEnabledInfoManagerTest testGetCurrentImeCfg_001 START");
1427     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
1428     easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1429         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE, false, false, true },
1430             { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE, true, true, false,
1431                 ImeEnabledInfoManagerTest::CUR_SUBNAME2 } } });
1432     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_ =
1433         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos);
1434     auto currentIme = ImeEnabledInfoManager::GetInstance().GetCurrentImeCfg(ImeEnabledInfoManagerTest::currentUserId_);
1435     ASSERT_NE(currentIme, nullptr);
1436     EXPECT_EQ(currentIme->bundleName, ImeEnabledInfoManagerTest::sysImeProp_.bundleName);
1437     EXPECT_EQ(currentIme->extName, ImeEnabledInfoManagerTest::sysImeProp_.extName);
1438     EXPECT_EQ(currentIme->imeId, ImeEnabledInfoManagerTest::sysImeProp_.imeId);
1439 }
1440 
1441 /**
1442  * @tc.name: testGetCurrentImeCfg_002
1443  * @tc.desc: test:has no tmp ime, current ime is default ime
1444  * @tc.require:
1445  * @tc.author: chenyu
1446  */
1447 HWTEST_F(ImeEnabledInfoManagerTest, testGetCurrentImeCfg_002, TestSize.Level0)
1448 {
1449     IMSA_HILOGI("ImeEnabledInfoManagerTest testGetCurrentImeCfg_002 START");
1450     std::map<int32_t, std::vector<ImeEasyInfo>> easyEnabledInfos;
1451     easyEnabledInfos.insert({ ImeEnabledInfoManagerTest::currentUserId_,
1452         { { ImeEnabledInfoManagerTest::SYS_IME_KEY, EnabledStatus::BASIC_MODE },
1453             { ImeEnabledInfoManagerTest::IME_KEY2, EnabledStatus::BASIC_MODE, true, true, false,
1454                 ImeEnabledInfoManagerTest::CUR_SUBNAME2 } } });
1455     ImeEnabledInfoManager::GetInstance().imeEnabledCfg_ =
1456         ImeEnabledInfoManagerTest::GenerateAllEnabledCfg(easyEnabledInfos);
1457     auto currentIme = ImeEnabledInfoManager::GetInstance().GetCurrentImeCfg(ImeEnabledInfoManagerTest::currentUserId_);
1458     ASSERT_NE(currentIme, nullptr);
1459     EXPECT_EQ(currentIme->bundleName, ImeEnabledInfoManagerTest::BUNDLE_NAME2);
1460     EXPECT_EQ(currentIme->extName, ImeEnabledInfoManagerTest::EXT_NAME2);
1461     EXPECT_EQ(currentIme->subName, ImeEnabledInfoManagerTest::CUR_SUBNAME2);
1462     EXPECT_EQ(currentIme->imeId,
1463         std::string(ImeEnabledInfoManagerTest::BUNDLE_NAME2) + "/" + ImeEnabledInfoManagerTest::EXT_NAME2);
1464 }
1465 } // namespace MiscServices
1466 } // namespace OHOS
1467