1 /* 2 * Copyright (c) 2021 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 #ifndef AMS_KIT_SYSTEM_TEST_A_MAIN_ABILITY_H 17 #define AMS_KIT_SYSTEM_TEST_A_MAIN_ABILITY_H 18 #include "ability.h" 19 #include "ability_loader.h" 20 #include "common_event.h" 21 #include "common_event_manager.h" 22 #include "kit_test_common_info.h" 23 24 namespace OHOS { 25 namespace AppExecFwk { 26 using namespace OHOS::EventFwk; 27 class FirstEventSubscriber; 28 class MainAbility : public Ability { 29 public: 30 void SubscribeEvent(); 31 void TestAbility(int apiIndex, int caseIndex, int code); 32 33 void GetApplicationInfoCase1(int code); 34 void GetApplicationInfoCase2(int code); 35 void GetApplicationInfoCase3(int code); 36 37 void GetCacheDirCase1(int code); 38 void GetCacheDirCase2(int code); 39 void GetCacheDirCase3(int code); 40 41 void GetDatabaseDirCase1(int code); 42 void GetDatabaseDirCase2(int code); 43 void GetDatabaseDirCase3(int code); 44 45 void GetDataDirCase1(int code); 46 void GetDataDirCase2(int code); 47 void GetDataDirCase3(int code); 48 49 void GetDirCase1(int code); 50 void GetDirCase2(int code); 51 void GetDirCase3(int code); 52 53 void GetNoBackupFilesDirCase1(int code); 54 55 void GetBundleManagerCase1(int code); 56 57 void VerifyCallingPermissionCase1(int code); 58 59 void VerifyPermissionCase1(int code); 60 61 void VerifySelfPermissionCase1(int code); 62 63 void GetBundleCodePathCase1(int code); 64 void GetBundleCodePathCase2(int code); 65 void GetBundleCodePathCase3(int code); 66 67 void GetBundleNameCase1(int code); 68 void GetBundleNameCase2(int code); 69 void GetBundleNameCase3(int code); 70 71 void GetBundleResourcePathCase1(int code); 72 void GetBundleResourcePathCase2(int code); 73 void GetBundleResourcePathCase3(int code); 74 75 void CanRequestPermissionCase1(int code); 76 77 void GetCallingAbilityCase1(int code); 78 void GetCallingAbilityCase2(int code); 79 void GetCallingAbilityCase3(int code); 80 81 void GetContextCase1(int code); 82 83 void GetAbilityManagerCase1(int code); 84 85 void GetProcessInfoCase1(int code); 86 void GetProcessInfoCase2(int code); 87 void GetProcessInfoCase3(int code); 88 89 void GetAppTypeCase1(int code); 90 void GetAppTypeCase2(int code); 91 void GetAppTypeCase3(int code); 92 93 void GetCallingBundleCase1(int code); 94 void GetCallingBundleCase2(int code); 95 void GetCallingBundleCase3(int code); 96 97 void StartAbilityCase1(int code); 98 void StartAbilityCase2(int code); 99 100 void TerminateAbilityCase1(int code); 101 102 void GetElementNameCase1(int code); 103 void GetElementNameCase2(int code); 104 void GetElementNameCase3(int code); 105 106 void GetHapModuleInfoCase1(int code); 107 void GetHapModuleInfoCase2(int code); 108 void GetHapModuleInfoCase3(int code); 109 110 void GetCodeCacheDirCase1(int code); 111 void GetCodeCacheDirCase2(int code); 112 void GetCodeCacheDirCase3(int code); 113 114 void GetApplicationContextCase1(int code); 115 116 std::unordered_map<int, std::vector<std::function<void(int)>>> mapCase_; 117 ~MainAbility(); 118 initCaseFirst()119 void initCaseFirst() 120 { 121 std::unordered_map<int, std::vector<std::function<void(int)>>> first = { 122 {(int)AbilityContextApi::GetApplicationInfo, 123 { 124 [this](int code) { GetApplicationInfoCase1(code); }, 125 [this](int code) { GetApplicationInfoCase2(code); }, 126 [this](int code) { GetApplicationInfoCase3(code); }, 127 }}, 128 {(int)AbilityContextApi::GetCacheDir, 129 { 130 [this](int code) { GetCacheDirCase1(code); }, 131 [this](int code) { GetCacheDirCase2(code); }, 132 [this](int code) { GetCacheDirCase3(code); }, 133 }}, 134 {(int)AbilityContextApi::GetCodeCacheDir, 135 { 136 [this](int code) { GetCodeCacheDirCase1(code); }, 137 [this](int code) { GetCodeCacheDirCase2(code); }, 138 [this](int code) { GetCodeCacheDirCase3(code); }, 139 }}, 140 {(int)AbilityContextApi::GetDatabaseDir, 141 { 142 [this](int code) { GetDatabaseDirCase1(code); }, 143 [this](int code) { GetDatabaseDirCase2(code); }, 144 [this](int code) { GetDatabaseDirCase3(code); }, 145 }}, 146 {(int)AbilityContextApi::GetDataDir, 147 { 148 [this](int code) { GetDataDirCase1(code); }, 149 [this](int code) { GetDataDirCase2(code); }, 150 [this](int code) { GetDataDirCase3(code); }, 151 }}, 152 }; 153 mapCase_.insert(first.begin(), first.end()); 154 } 155 initCaseSecond()156 void initCaseSecond() 157 { 158 std::unordered_map<int, std::vector<std::function<void(int)>>> second = { 159 {(int)AbilityContextApi::GetDir, 160 { 161 [this](int code) { GetDirCase1(code); }, 162 [this](int code) { GetDirCase2(code); }, 163 [this](int code) { GetDirCase3(code); }, 164 }}, 165 {(int)AbilityContextApi::GetBundleManager, 166 { 167 [this](int code) { GetBundleManagerCase1(code); }, 168 }}, 169 {(int)AbilityContextApi::GetBundleCodePath, 170 { 171 [this](int code) { GetBundleCodePathCase1(code); }, 172 [this](int code) { GetBundleCodePathCase2(code); }, 173 [this](int code) { GetBundleCodePathCase3(code); }, 174 }}, 175 {(int)AbilityContextApi::GetBundleName, 176 { 177 [this](int code) { GetBundleNameCase1(code); }, 178 [this](int code) { GetBundleNameCase2(code); }, 179 [this](int code) { GetBundleNameCase3(code); }, 180 }}, 181 {(int)AbilityContextApi::GetBundleResourcePath, 182 { 183 [this](int code) { GetBundleResourcePathCase1(code); }, 184 [this](int code) { GetBundleResourcePathCase2(code); }, 185 [this](int code) { GetBundleResourcePathCase3(code); }, 186 }}, 187 {(int)AbilityContextApi::GetApplicationContext, 188 { 189 [this](int code) { GetApplicationContextCase1(code); }, 190 }}, 191 {(int)AbilityContextApi::GetCallingAbility, 192 { 193 [this](int code) { GetCallingAbilityCase1(code); }, 194 [this](int code) { GetCallingAbilityCase2(code); }, 195 [this](int code) { GetCallingAbilityCase3(code); }, 196 }}, 197 {(int)AbilityContextApi::GetContext, 198 { 199 [this](int code) { GetContextCase1(code); }, 200 }}, 201 }; 202 mapCase_.insert(second.begin(), second.end()); 203 } 204 initCaseThird()205 void initCaseThird() 206 { 207 std::unordered_map<int, std::vector<std::function<void(int)>>> third = { 208 {(int)AbilityContextApi::GetAbilityManager, 209 { 210 [this](int code) { GetAbilityManagerCase1(code); }, 211 }}, 212 {(int)AbilityContextApi::GetProcessInfo, 213 { 214 [this](int code) { GetProcessInfoCase1(code); }, 215 [this](int code) { GetProcessInfoCase2(code); }, 216 [this](int code) { GetProcessInfoCase3(code); }, 217 }}, 218 {(int)AbilityContextApi::GetAppType, 219 { 220 [this](int code) { GetAppTypeCase1(code); }, 221 [this](int code) { GetAppTypeCase2(code); }, 222 [this](int code) { GetAppTypeCase3(code); }, 223 }}, 224 {(int)AbilityContextApi::GetCallingBundle, 225 { 226 [this](int code) { GetCallingBundleCase1(code); }, 227 [this](int code) { GetCallingBundleCase2(code); }, 228 [this](int code) { GetCallingBundleCase3(code); }, 229 }}, 230 {(int)AbilityContextApi::StartAbility_Want_int, 231 { 232 [this](int code) { StartAbilityCase1(code); }, 233 [this](int code) { StartAbilityCase2(code); }, 234 }}, 235 {(int)AbilityContextApi::TerminateAbility, 236 { 237 [this](int code) { TerminateAbilityCase1(code); }, 238 }}, 239 {(int)AbilityContextApi::GetElementName, 240 { 241 [this](int code) { GetElementNameCase1(code); }, 242 [this](int code) { GetElementNameCase2(code); }, 243 [this](int code) { GetElementNameCase3(code); }, 244 }}, 245 {(int)AbilityContextApi::GetHapModuleInfo, 246 { 247 [this](int code) { GetHapModuleInfoCase1(code); }, 248 [this](int code) { GetHapModuleInfoCase2(code); }, 249 [this](int code) { GetHapModuleInfoCase3(code); }, 250 }}, 251 }; 252 mapCase_.insert(third.begin(), third.end()); 253 } 254 MainAbility()255 MainAbility() 256 { 257 initCaseFirst(); 258 initCaseSecond(); 259 initCaseThird(); 260 } 261 262 protected: 263 void Init(const std::shared_ptr<AbilityInfo> &abilityInfo, const std::shared_ptr<OHOSApplication> &application, 264 std::shared_ptr<AbilityHandler> &handler, const sptr<IRemoteObject> &token) override; 265 virtual void OnStart(const Want &want) override; 266 virtual void OnStop() override; 267 virtual void OnActive() override; 268 virtual void OnInactive() override; 269 virtual void OnBackground() override; 270 virtual void OnForeground(const Want &want) override; 271 virtual void OnAbilityResult(int requestCode, int resultCode, const Want &resultData) override; 272 virtual void OnBackPressed() override; 273 virtual void OnNewWant(const Want &want) override; 274 std::shared_ptr<FirstEventSubscriber> subscriber_; 275 }; 276 class FirstEventSubscriber : public EventFwk::CommonEventSubscriber { 277 public: FirstEventSubscriber(const EventFwk::CommonEventSubscribeInfo & sp)278 explicit FirstEventSubscriber(const EventFwk::CommonEventSubscribeInfo &sp) : CommonEventSubscriber(sp) 279 { 280 mapTestFunc_ = { 281 {"Ability", [this](int apiIndex, int caseIndex, int code) { TestAbility(apiIndex, caseIndex, code); }}, 282 }; 283 mainAbility = nullptr; 284 } 285 TestAbility(int apiIndex,int caseIndex,int code)286 void TestAbility(int apiIndex, int caseIndex, int code) 287 { 288 mainAbility->TestAbility(apiIndex, caseIndex, code); 289 } 290 291 virtual void OnReceiveEvent(const EventFwk::CommonEventData &data); 292 293 MainAbility *mainAbility; 294 std::unordered_map<std::string, std::function<void(int, int, int)>> mapTestFunc_; 295 ~FirstEventSubscriber() = default; 296 }; 297 } // namespace AppExecFwk 298 } // namespace OHOS 299 #endif // AMS_KIT_SYSTEM_TEST_A_MAIN_ABILITY_H