• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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