1 /*
2 * Copyright (c) 2024 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 #include <gtest/gtest.h>
17 #include <gmock/gmock.h>
18 #define private public
19 #include "cj_ability_delegator.h"
20 #include "cj_ability_lifecycle_callback.h"
21 #include "cj_ability_runtime_error.h"
22 #include "cj_application_context.h"
23 #include "ability_delegator_registry.h"
24 #include "application_context.h"
25 #include "cj_utils_ffi.h"
26 #include "window_stage_impl.h"
27
28 using namespace testing;
29 using namespace testing::ext;
30 using namespace OHOS::FFI;
31 using namespace OHOS::AbilityRuntime;
32 using namespace OHOS::AppExecFwk;
33
34 namespace OHOS {
35 namespace ApplicationContextCJ {
36
37 // Mock类
38 class MockCjAbilityLifecycleCallback : public CjAbilityLifecycleCallbackImpl {
39 public:
40 MOCK_METHOD(void, OnAbilityCreate, (const int64_t &ability));
41 MOCK_METHOD(void, OnWindowStageCreate, (const int64_t &ability, WindowStagePtr windowStage));
42 MOCK_METHOD(void, OnWindowStageActive, (const int64_t &ability, WindowStagePtr windowStage));
43 MOCK_METHOD(void, OnWindowStageInactive, (const int64_t &ability, WindowStagePtr windowStage));
44 MOCK_METHOD(void, OnWindowStageDestroy, (const int64_t &ability, WindowStagePtr windowStage));
45 MOCK_METHOD(void, OnAbilityDestroy, (const int64_t &ability));
46 MOCK_METHOD(void, OnAbilityForeground, (const int64_t &ability));
47 MOCK_METHOD(void, OnAbilityBackground, (const int64_t &ability));
48 MOCK_METHOD(void, OnAbilityContinue, (const int64_t &ability));
49
50 MOCK_METHOD(void, OnAbilityWillCreate, (const int64_t &ability));
51 MOCK_METHOD(void, OnWindowStageWillCreate, (const int64_t &ability, WindowStagePtr windowStage));
52 MOCK_METHOD(void, OnWindowStageWillDestroy, (const int64_t &ability, WindowStagePtr windowStage));
53 MOCK_METHOD(void, OnAbilityWillDestroy, (const int64_t &ability));
54 MOCK_METHOD(void, OnAbilityWillForeground, (const int64_t &ability));
55 MOCK_METHOD(void, OnAbilityWillBackground, (const int64_t &ability));
56 MOCK_METHOD(void, OnNewWant, (const int64_t &ability));
57 MOCK_METHOD(void, OnWillNewWant, (const int64_t &ability));
58 MOCK_METHOD(void, OnAbilityWillContinue, (const int64_t &ability));
59 MOCK_METHOD(void, OnWindowStageWillRestore, (const int64_t &ability, WindowStagePtr windowStage));
60 MOCK_METHOD(void, OnWindowStageRestore, (const int64_t &ability, WindowStagePtr windowStage));
61 MOCK_METHOD(void, OnAbilityWillSaveState, (const int64_t &ability));
62 MOCK_METHOD(void, OnAbilitySaveState, (const int64_t &ability));
63 };
64
65 class CjApplicationContextTest : public testing::Test {
66 public:
CjApplicationContextTest()67 CjApplicationContextTest()
68 {}
~CjApplicationContextTest()69 ~CjApplicationContextTest()
70 {}
71 static void SetUpTestCase();
72 static void TearDownTestCase();
73 void SetUp() override;
74 void TearDown() override;
75 };
76
SetUpTestCase()77 void CjApplicationContextTest::SetUpTestCase() {}
78
TearDownTestCase()79 void CjApplicationContextTest::TearDownTestCase() {}
80
SetUp()81 void CjApplicationContextTest::SetUp()
82 {
83 // Create an CJApplicationContext object
84 CJApplicationContext::GetInstance()->OnSetFont("");
85 CJApplicationContext::GetInstance()->OnSetLanguage("ZH-CN");
86 CJApplicationContext::GetInstance()->OnSetColorMode(0);
87 }
88
TearDown()89 void CjApplicationContextTest::TearDown() {}
90
91 /**
92 * @tc.name: CJApplicationContextTestGetArea_001
93 * @tc.desc: CjApplicationContextTest test for GetArea.
94 * @tc.type: FUNC
95 */
96 HWTEST_F(CjApplicationContextTest, CJApplicationContextTestGetArea_001, TestSize.Level1)
97 {
98 // 测试 GetArea 函数
99 int area = CJApplicationContext::GetInstance()->GetArea();
100 EXPECT_EQ(area, 1);
101 }
102
103 /**
104 * @tc.name: CJApplicationContextTestGetApplicationInfo_001
105 * @tc.desc: CjApplicationContextTest test for GetApplicationInfo.
106 * @tc.type: FUNC
107 */
108 HWTEST_F(CjApplicationContextTest, CJApplicationContextTestGetApplicationInfo_001, TestSize.Level1)
109 {
110 EXPECT_TRUE(CJApplicationContext::GetInstance()->GetApplicationInfo() == nullptr);
111 EXPECT_TRUE(CJApplicationContext::GetInstance()->GetApplicationContext() != nullptr);
112 }
113
114 /**
115 * @tc.name: CJApplicationContextTestIsA
116 * bilityLifecycleCallbackEmpty_001
117 * @tc.desc: CjApplicationContextTest test for IsAbilityLifecycleCallbackEmpty.
118 * @tc.type: FUNC
119 */
120 HWTEST_F(CjApplicationContextTest, CJApplicationContextTestIsAbilityLifecycleCallbackEmpty_001, TestSize.Level1)
121 {
122 bool result = CJApplicationContext::GetInstance()->IsAbilityLifecycleCallbackEmpty();
123 EXPECT_EQ(result, true);
124 }
125
126 /**
127 * @tc.name: CJApplicationContextTestOnOnEnvironment_001
128 * @tc.desc: CjApplicationContextTest test for OnOnEnvironment.
129 * @tc.type: FUNC
130 */
131 HWTEST_F(CjApplicationContextTest, CJApplicationContextTestOnOnEnvironment_001, TestSize.Level1)
132 {
__anonee6bea700102(AbilityRuntime::CConfiguration) 133 auto cfgCallback = [](AbilityRuntime::CConfiguration) {};
__anonee6bea700202(int32_t) 134 auto memCallback = [](int32_t) {};
135 auto ret =
136 CJApplicationContext::GetInstance()->OnOnEnvironment(cfgCallback, memCallback, true, nullptr);
137 EXPECT_EQ(ret, -1);
138
139 CJApplicationContext::GetInstance()->envCallback_ = nullptr;
140 ret = CJApplicationContext::GetInstance()->OnOnEnvironment(cfgCallback, memCallback, true, nullptr);
141 EXPECT_EQ(ret, -1);
142 }
143
144 /**
145 * @tc.name: CJApplicationContextTestOnOnAbilityLifecycle_001
146 * @tc.desc: CjApplicationContextTest test for OnOnAbilityLifecycle.
147 * @tc.type: FUNC
148 */
149 HWTEST_F(CjApplicationContextTest, CJApplicationContextTestOnOnAbilityLifecycle_001, TestSize.Level1)
150 {
151 CArrI64 cFuncIds;
152 bool isSync = true;
153 int32_t err = 0;
154 int32_t *errCode = &err;
155 CJApplicationContext::GetInstance()->callback_ =
156 std::make_shared<AbilityRuntime::CjAbilityLifecycleCallbackImpl>();
157 EXPECT_EQ(CJApplicationContext::GetInstance()->OnOnAbilityLifecycle(cFuncIds, isSync, errCode), -1);
158 }
159
160 /**
161 * @tc.name: CJApplicationContextTestOnOnApplicationStateChange_001
162 * @tc.desc: CjApplicationContextTest test for OnOnApplicationStateChange.
163 * @tc.type: FUNC
164 */
165 HWTEST_F(CjApplicationContextTest, CJApplicationContextTestOnOnApplicationStateChange_001, TestSize.Level1)
166 {
__anonee6bea700302() 167 auto foregroundCallback = []() {};
__anonee6bea700402() 168 auto backgroundCallback = []() {};
169 int32_t err = 0;
170 int32_t *errCode = &err;
171 auto ret = CJApplicationContext::GetInstance()->OnOnApplicationStateChange(foregroundCallback,
172 backgroundCallback, errCode);
173 EXPECT_EQ(ret, 0);
174 }
175
176 /**
177 * @tc.name: CJApplicationContextTestOnOffEnvironment_001
178 * @tc.desc: CjApplicationContextTest test for OnOffEnvironment.
179 * @tc.type: FUNC
180 */
181 HWTEST_F(CjApplicationContextTest, CJApplicationContextTestOnOffEnvironment_001, TestSize.Level1)
182 {
183 int32_t callbackId = 10;
184 int32_t err = 0;
185 int32_t *errCode = &err;
186 CJApplicationContext::GetInstance()->envCallback_ = std::make_shared<CjEnvironmentCallback>();
187 CJApplicationContext::GetInstance()->OnOffEnvironment(callbackId, errCode);
188 EXPECT_EQ(*errCode, ERR_ABILITY_RUNTIME_EXTERNAL_INVALID_PARAMETER);
189 }
190
191 /**
192 * @tc.name: CJApplicationContextTestOnOffAbilityLifecycle_001
193 * @tc.desc: CjApplicationContextTest test for OnOffAbilityLifecycle.
194 * @tc.type: FUNC
195 */
196 HWTEST_F(CjApplicationContextTest, CJApplicationContextTestOnOffAbilityLifecycle_001, TestSize.Level1)
197 {
198 int32_t callbackId = 10;
199 int32_t err = 0;
200 int32_t *errCode = &err;
201 CJApplicationContext::GetInstance()->callback_ =
202 std::make_shared<AbilityRuntime::CjAbilityLifecycleCallbackImpl>();
203 CJApplicationContext::GetInstance()->OnOffAbilityLifecycle(callbackId, errCode);
204 EXPECT_EQ(*errCode, ERR_ABILITY_RUNTIME_EXTERNAL_INVALID_PARAMETER);
205
206 CJApplicationContext::GetInstance()->applicationContext_ =
207 std::make_shared<AbilityRuntime::ApplicationContext>();
208 CJApplicationContext::GetInstance()->OnOffAbilityLifecycle(callbackId, errCode);
209 EXPECT_EQ(*errCode, ERR_ABILITY_RUNTIME_EXTERNAL_INVALID_PARAMETER);
210
211 CJApplicationContext::GetInstance()->callback_ = nullptr;
212 CJApplicationContext::GetInstance()->OnOffAbilityLifecycle(callbackId, errCode);
213 EXPECT_EQ(*errCode, ERR_ABILITY_RUNTIME_EXTERNAL_INVALID_PARAMETER);
214 }
215
216 /**
217 * @tc.name: CJApplicationContextTestOnOffApplicationStateChange_001
218 * @tc.desc: CjApplicationContextTest test for OnOffApplicationStateChange.
219 * @tc.type: FUNC
220 */
221 HWTEST_F(CjApplicationContextTest, CJApplicationContextTestOnOffApplicationStateChange_001, TestSize.Level1)
222 {
223 int32_t callbackId = 10;
224 int32_t err = 0;
225 int32_t *errCode = &err;
226 CJApplicationContext::GetInstance()->OnOffApplicationStateChange(callbackId, errCode);
227 EXPECT_EQ(*errCode, ERR_ABILITY_RUNTIME_EXTERNAL_INVALID_PARAMETER);
228
229 CJApplicationContext::GetInstance()->applicationContext_ =
230 std::make_shared<AbilityRuntime::ApplicationContext>();
231 CJApplicationContext::GetInstance()->applicationStateCallback_ =
232 std::make_shared<CjApplicationStateChangeCallback>();
233 CJApplicationContext::GetInstance()->OnOffApplicationStateChange(callbackId, errCode);
234 EXPECT_EQ(*errCode, ERR_ABILITY_RUNTIME_EXTERNAL_INVALID_PARAMETER);
235
236 CJApplicationContext::GetInstance()->applicationStateCallback_ = nullptr;
237 CJApplicationContext::GetInstance()->OnOffApplicationStateChange(callbackId, errCode);
238 EXPECT_EQ(*errCode, ERR_ABILITY_RUNTIME_EXTERNAL_INVALID_PARAMETER);
239 }
240
241 /**
242 * @tc.name: CJApplicationContextTestDispatchOnAbilityCreate_001
243 * @tc.desc: CjApplicationContextTest test for DispatchOnAbilityCreate.
244 * @tc.type: FUNC
245 */
246 HWTEST_F(CjApplicationContextTest, CJApplicationContextTestDispatchOnAbilityCreate_001, TestSize.Level1)
247 {
248 std::shared_ptr<CjAbilityLifecycleCallbackImpl> mock;
249 CJApplicationContext::GetInstance()->RegisterAbilityLifecycleCallback(mock);
250 CJApplicationContext::GetInstance()->DispatchOnAbilityCreate(10);
251 CJApplicationContext::GetInstance()->UnregisterAbilityLifecycleCallback(mock);
252 EXPECT_TRUE(CJApplicationContext::callbacks_.empty());
253 }
254
255 /**
256 * @tc.name: CJApplicationContextTestDispatchOnWindowStageCreate_001
257 * @tc.desc: CjApplicationContextTest test for DispatchOnWindowStageCreate.
258 * @tc.type: FUNC
259 */
260 HWTEST_F(CjApplicationContextTest, CJApplicationContextTestDispatchOnWindowStageCreate_001, TestSize.Level1)
261 {
262 std::shared_ptr<CjAbilityLifecycleCallbackImpl> mock;
263 CJApplicationContext::GetInstance()->RegisterAbilityLifecycleCallback(mock);
264 auto win = std::make_shared<Rosen::WindowScene>();
265 auto winStage = new Rosen::CJWindowStageImpl(win);
266 WindowStagePtr windowStage = reinterpret_cast<WindowStagePtr>(winStage);
267 CJApplicationContext::GetInstance()->DispatchOnWindowStageCreate(10, windowStage);
268 CJApplicationContext::GetInstance()->UnregisterAbilityLifecycleCallback(mock);
269 EXPECT_TRUE(CJApplicationContext::callbacks_.empty());
270 delete winStage;
271 }
272
273 /**
274 * @tc.name: CJApplicationContextTestDispatchWindowStageFocus_001
275 * @tc.desc: CjApplicationContextTest test for DispatchWindowStageFocus.
276 * @tc.type: FUNC
277 */
278 HWTEST_F(CjApplicationContextTest, CJApplicationContextTestDispatchWindowStageFocus_001, TestSize.Level1)
279 {
280 std::shared_ptr<CjAbilityLifecycleCallbackImpl> mock;
281 CJApplicationContext::GetInstance()->RegisterAbilityLifecycleCallback(mock);
282 auto win = std::make_shared<Rosen::WindowScene>();
283 auto winStage = new Rosen::CJWindowStageImpl(win);
284 WindowStagePtr windowStage = reinterpret_cast<WindowStagePtr>(winStage);
285 CJApplicationContext::GetInstance()->DispatchWindowStageFocus(10, windowStage);
286 CJApplicationContext::GetInstance()->DispatchWindowStageUnfocus(10, windowStage);
287 CJApplicationContext::GetInstance()->DispatchOnWindowStageDestroy(10, windowStage);
288 CJApplicationContext::GetInstance()->UnregisterAbilityLifecycleCallback(mock);
289 delete winStage;
290 EXPECT_TRUE(CJApplicationContext::callbacks_.empty());
291 }
292
293 /**
294 * @tc.name: CJApplicationContextTestDispatchOnWindowStageDestroy_001
295 * @tc.desc: CjApplicationContextTest test for DispatchOnWindowStageDestroy.
296 * @tc.type: FUNC
297 */
298 HWTEST_F(CjApplicationContextTest, CJApplicationContextTest_Ability_001, TestSize.Level1)
299 {
300 std::shared_ptr<CjAbilityLifecycleCallbackImpl> mock;
301 CJApplicationContext::GetInstance()->RegisterAbilityLifecycleCallback(mock);
302 CJApplicationContext::GetInstance()->DispatchOnAbilityDestroy(10);
303 CJApplicationContext::GetInstance()->DispatchOnAbilityForeground(10);
304 CJApplicationContext::GetInstance()->DispatchOnAbilityBackground(10);
305 CJApplicationContext::GetInstance()->DispatchOnAbilityContinue(10);
306 CJApplicationContext::GetInstance()->DispatchOnAbilityWillCreate(10);
307 CJApplicationContext::GetInstance()->UnregisterAbilityLifecycleCallback(mock);
308 EXPECT_TRUE(CJApplicationContext::callbacks_.empty());
309 }
310
311 /**
312 * @tc.name: CJApplicationContextTest_Ability_002
313 * @tc.desc: CjApplicationContextTest test for Ability.
314 * @tc.type: FUNC
315 */
316 HWTEST_F(CjApplicationContextTest, CJApplicationContextTest_Ability_002, TestSize.Level1)
317 {
318 std::shared_ptr<CjAbilityLifecycleCallbackImpl> mock;
319 CJApplicationContext::GetInstance()->RegisterAbilityLifecycleCallback(mock);
320 auto win = std::make_shared<Rosen::WindowScene>();
321 auto winStage = new Rosen::CJWindowStageImpl(win);
322 WindowStagePtr windowStage = reinterpret_cast<WindowStagePtr>(winStage);
323 CJApplicationContext::GetInstance()->DispatchOnWindowStageWillCreate(10, windowStage);
324 CJApplicationContext::GetInstance()->DispatchOnWindowStageWillDestroy(10, windowStage);
325 CJApplicationContext::GetInstance()->DispatchOnAbilityWillDestroy(10);
326 CJApplicationContext::GetInstance()->DispatchOnAbilityWillForeground(10);
327 CJApplicationContext::GetInstance()->UnregisterAbilityLifecycleCallback(mock);
328 delete winStage;
329 EXPECT_TRUE(CJApplicationContext::callbacks_.empty());
330 }
331
332 /**
333 * @tc.name: CJApplicationContextTest_Ability_003
334 * @tc.desc: CjApplicationContextTest test for ability.
335 * @tc.type: FUNC
336 */
337 HWTEST_F(CjApplicationContextTest, CJApplicationContextTest_Ability_003, TestSize.Level1)
338 {
339 std::shared_ptr<CjAbilityLifecycleCallbackImpl> mock;
340 CJApplicationContext::GetInstance()->RegisterAbilityLifecycleCallback(mock);
341 auto win = std::make_shared<Rosen::WindowScene>();
342 auto winStage = new Rosen::CJWindowStageImpl(win);
343 WindowStagePtr windowStage = reinterpret_cast<WindowStagePtr>(winStage);
344 CJApplicationContext::GetInstance()->DispatchOnAbilityWillBackground(10);
345 CJApplicationContext::GetInstance()->DispatchOnNewWant(10);
346 CJApplicationContext::GetInstance()->DispatchOnWillNewWant(10);
347 CJApplicationContext::GetInstance()->DispatchOnAbilityWillContinue(10);
348 CJApplicationContext::GetInstance()->DispatchOnWindowStageWillRestore(10, windowStage);
349 CJApplicationContext::GetInstance()->DispatchOnWindowStageRestore(10, windowStage);
350 CJApplicationContext::GetInstance()->DispatchOnAbilityWillSaveState(10);
351 CJApplicationContext::GetInstance()->DispatchOnAbilitySaveState(10);
352 CJApplicationContext::GetInstance()->UnregisterAbilityLifecycleCallback(mock);
353 delete winStage;
354 EXPECT_TRUE(CJApplicationContext::callbacks_.empty());
355 }
356
357 /**
358 * @tc.name: CJApplicationContextTestOnGetRunningProcessInformation_001
359 * @tc.desc: CjApplicationContextTest test for OnGetRunningProcessInformation.
360 * @tc.type: FUNC
361 */
362 HWTEST_F(CjApplicationContextTest, CJApplicationContextTestOnGetRunningProcessInformation_001, TestSize.Level1)
363 {
364 int err = 0;
365 int* errorCode = &err;
366 auto info = CJApplicationContext::GetInstance()->OnGetRunningProcessInformation(errorCode);
367 EXPECT_EQ(*errorCode, ERR_ABILITY_RUNTIME_EXTERNAL_CONTEXT_NOT_EXIST);
368 EXPECT_EQ(info, nullptr);
369 }
370
371 /**
372 * @tc.name: CJApplicationContextTestOnOnKillProcessBySelf_001
373 * @tc.desc: CjApplicationContextTest test for OnKillProcessBySelf.
374 * @tc.type: FUNC
375 */
376 HWTEST_F(CjApplicationContextTest, CJApplicationContextTestOnOnKillProcessBySelf_001, TestSize.Level1)
377 {
378 int err = 0;
379 int* errorCode = &err;
380 CJApplicationContext::GetInstance()->OnKillProcessBySelf(true, errorCode);
381 EXPECT_EQ(*errorCode, ERR_ABILITY_RUNTIME_EXTERNAL_CONTEXT_NOT_EXIST);
382 }
383
384 /**
385 * @tc.name: CJApplicationContextTestOnGetCurrentAppCloneIndex_001
386 * @tc.desc: CjApplicationContextTest test for OnGetCurrentAppCloneIndex.
387 * @tc.type: FUNC
388 */
389 HWTEST_F(CjApplicationContextTest, CJApplicationContextTestOnGetCurrentAppCloneIndex_001, TestSize.Level1)
390 {
391 int err = 0;
392 int* errorCode = &err;
393 auto index = CJApplicationContext::GetInstance()->OnGetCurrentAppCloneIndex(errorCode);
394 EXPECT_EQ(*errorCode, ERR_ABILITY_RUNTIME_EXTERNAL_CONTEXT_NOT_EXIST);
395 }
396
397 /**
398 * @tc.name: CJApplicationContextTestOnRestartApp_001
399 * @tc.desc: CjApplicationContextTest test for OnRestartApp.
400 * @tc.type: FUNC
401 */
402 HWTEST_F(CjApplicationContextTest, CJApplicationContextTestOnRestartApp_001, TestSize.Level1)
403 {
404 int err = 0;
405 int* errorCode = &err;
406 CJApplicationContext::GetInstance()->OnRestartApp(AAFwk::Want(), errorCode);
407 EXPECT_EQ(*errorCode, ERR_ABILITY_RUNTIME_EXTERNAL_CONTEXT_NOT_EXIST);
408 }
409
410 /**
411 * @tc.name: CJApplicationContextTestOnClearUpApplicationData_001
412 * @tc.desc: CjApplicationContextTest test for OnClearUpApplicationData.
413 * @tc.type: FUNC
414 */
415 HWTEST_F(CjApplicationContextTest, CJApplicationContextTestOnClearUpApplicationData_001, TestSize.Level1)
416 {
417 int err = 0;
418 int* errorCode = &err;
419 CJApplicationContext::GetInstance()->OnClearUpApplicationData(errorCode);
420 EXPECT_EQ(*errorCode, ERR_ABILITY_RUNTIME_EXTERNAL_CONTEXT_NOT_EXIST);
421 }
422
423 /**
424 * @tc.name: CJApplicationContextTestOnSetSupportedProcessCacheSelf_001
425 * @tc.desc: CjApplicationContextTest test for OnSetSupportedProcessCacheSelf.
426 * @tc.type: FUNC
427 */
428 HWTEST_F(CjApplicationContextTest, CJApplicationContextTestOnSetSupportedProcessCacheSelf_001, TestSize.Level1)
429 {
430 int err = 0;
431 int* errorCode = &err;
432 CJApplicationContext::GetInstance()->OnSetSupportedProcessCacheSelf(true, errorCode);
433 EXPECT_EQ(*errorCode, ERR_ABILITY_RUNTIME_EXTERNAL_CONTEXT_NOT_EXIST);
434 }
435 } // namespace AbilityRuntime
436 } // namespace OHOS