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_SECOND_ABILITY_H 17 #define AMS_KIT_SYSTEM_TEST_A_SECOND_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 SecondEventSubscriber; 28 class SecondAbility : 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 SecondAbility()116 SecondAbility() 117 { 118 initCaseFirst(); 119 initCaseSecond(); 120 initCaseThird(); 121 } 122 initCaseFirst()123 void initCaseFirst() 124 { 125 std::unordered_map<int, std::vector<std::function<void(int)>>> first = { 126 {(int)AbilityContextApi::GetApplicationInfo, 127 { 128 [this](int code) { GetApplicationInfoCase1(code); }, 129 [this](int code) { GetApplicationInfoCase2(code); }, 130 [this](int code) { GetApplicationInfoCase3(code); }, 131 }}, 132 {(int)AbilityContextApi::GetCacheDir, 133 { 134 [this](int code) { GetCacheDirCase1(code); }, 135 [this](int code) { GetCacheDirCase2(code); }, 136 [this](int code) { GetCacheDirCase3(code); }, 137 }}, 138 {(int)AbilityContextApi::GetCodeCacheDir, 139 { 140 [this](int code) { GetCodeCacheDirCase1(code); }, 141 [this](int code) { GetCodeCacheDirCase2(code); }, 142 [this](int code) { GetCodeCacheDirCase3(code); }, 143 }}, 144 {(int)AbilityContextApi::GetDatabaseDir, 145 { 146 [this](int code) { GetDatabaseDirCase1(code); }, 147 [this](int code) { GetDatabaseDirCase2(code); }, 148 [this](int code) { GetDatabaseDirCase3(code); }, 149 }}, 150 {(int)AbilityContextApi::GetDataDir, 151 { 152 [this](int code) { GetDataDirCase1(code); }, 153 [this](int code) { GetDataDirCase2(code); }, 154 [this](int code) { GetDataDirCase3(code); }, 155 }}, 156 }; 157 mapCase_.insert(first.begin(), first.end()); 158 } 159 initCaseSecond()160 void initCaseSecond() 161 { 162 std::unordered_map<int, std::vector<std::function<void(int)>>> second = { 163 {(int)AbilityContextApi::GetDir, 164 { 165 [this](int code) { GetDirCase1(code); }, 166 [this](int code) { GetDirCase2(code); }, 167 [this](int code) { GetDirCase3(code); }, 168 }}, 169 {(int)AbilityContextApi::GetBundleManager, 170 { 171 [this](int code) { GetBundleManagerCase1(code); }, 172 }}, 173 {(int)AbilityContextApi::GetBundleCodePath, 174 { 175 [this](int code) { GetBundleCodePathCase1(code); }, 176 [this](int code) { GetBundleCodePathCase2(code); }, 177 [this](int code) { GetBundleCodePathCase3(code); }, 178 }}, 179 {(int)AbilityContextApi::GetBundleName, 180 { 181 [this](int code) { GetBundleNameCase1(code); }, 182 [this](int code) { GetBundleNameCase2(code); }, 183 [this](int code) { GetBundleNameCase3(code); }, 184 }}, 185 {(int)AbilityContextApi::GetBundleResourcePath, 186 { 187 [this](int code) { GetBundleResourcePathCase1(code); }, 188 [this](int code) { GetBundleResourcePathCase2(code); }, 189 [this](int code) { GetBundleResourcePathCase3(code); }, 190 }}, 191 {(int)AbilityContextApi::GetApplicationContext, 192 { 193 [this](int code) { GetApplicationContextCase1(code); }, 194 }}, 195 {(int)AbilityContextApi::GetCallingAbility, 196 { 197 [this](int code) { GetCallingAbilityCase1(code); }, 198 [this](int code) { GetCallingAbilityCase2(code); }, 199 [this](int code) { GetCallingAbilityCase3(code); }, 200 }}, 201 {(int)AbilityContextApi::GetContext, 202 { 203 [this](int code) { GetContextCase1(code); }, 204 }}, 205 }; 206 mapCase_.insert(second.begin(), second.end()); 207 } 208 initCaseThird()209 void initCaseThird() 210 { 211 std::unordered_map<int, std::vector<std::function<void(int)>>> third = { 212 {(int)AbilityContextApi::GetAbilityManager, 213 { 214 [this](int code) { GetAbilityManagerCase1(code); }, 215 }}, 216 {(int)AbilityContextApi::GetProcessInfo, 217 { 218 [this](int code) { GetProcessInfoCase1(code); }, 219 [this](int code) { GetProcessInfoCase2(code); }, 220 [this](int code) { GetProcessInfoCase3(code); }, 221 }}, 222 {(int)AbilityContextApi::GetAppType, 223 { 224 [this](int code) { GetAppTypeCase1(code); }, 225 [this](int code) { GetAppTypeCase2(code); }, 226 [this](int code) { GetAppTypeCase3(code); }, 227 }}, 228 {(int)AbilityContextApi::GetCallingBundle, 229 { 230 [this](int code) { GetCallingBundleCase1(code); }, 231 [this](int code) { GetCallingBundleCase2(code); }, 232 [this](int code) { GetCallingBundleCase3(code); }, 233 }}, 234 {(int)AbilityContextApi::StartAbility_Want_int, 235 { 236 [this](int code) { StartAbilityCase1(code); }, 237 [this](int code) { StartAbilityCase2(code); }, 238 }}, 239 {(int)AbilityContextApi::TerminateAbility, 240 { 241 [this](int code) { TerminateAbilityCase1(code); }, 242 }}, 243 {(int)AbilityContextApi::GetElementName, 244 { 245 [this](int code) { GetElementNameCase1(code); }, 246 [this](int code) { GetElementNameCase2(code); }, 247 [this](int code) { GetElementNameCase3(code); }, 248 }}, 249 {(int)AbilityContextApi::GetHapModuleInfo, 250 { 251 [this](int code) { GetHapModuleInfoCase1(code); }, 252 [this](int code) { GetHapModuleInfoCase2(code); }, 253 [this](int code) { GetHapModuleInfoCase3(code); }, 254 }}, 255 }; 256 mapCase_.insert(third.begin(), third.end()); 257 } 258 std::unordered_map<int, std::vector<std::function<void(int)>>> mapCase_; 259 int callingTime = 0; 260 ~SecondAbility(); 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<SecondEventSubscriber> subscriber_; 275 }; 276 class SecondEventSubscriber : public EventFwk::CommonEventSubscriber { 277 public: SecondEventSubscriber(const EventFwk::CommonEventSubscribeInfo & sp)278 explicit SecondEventSubscriber(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 SecondAbility *mainAbility; 294 std::unordered_map<std::string, std::function<void(int, int, int)>> mapTestFunc_; 295 ~SecondEventSubscriber() = default; 296 }; 297 } // namespace AppExecFwk 298 } // namespace OHOS 299 #endif // AMS_KIT_SYSTEM_TEST_A_MAIN_ABILITY_H