1 /*
2 * Copyright (c) 2022 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 <string_view>
17 #include <vector>
18
19 #include <gtest/gtest.h>
20 #include <gmock/gmock.h>
21
22 #define private public
23 #include "ability_manager_service.h"
24 #include "mission_list_manager.h"
25 #undef private
26 #include "ability_util.h"
27 #include "mission_list.h"
28
29 using namespace testing::ext;
30 using namespace OHOS::AppExecFwk;
31 using OHOS::iface_cast;
32 using OHOS::sptr;
33 using testing::_;
34 using testing::Invoke;
35 using testing::Return;
36
37 namespace OHOS {
38 namespace AAFwk {
39 class OnNewWantModuleTest : public testing::Test {
40 public:
41 static void SetUpTestCase();
42 static void TearDownTestCase();
43 void SetUp();
44 void TearDown();
45 AbilityInfo CreateAbilityInfo(const std::string &name, const std::string &appName, const std::string &bundleName,
46 const std::string &moduleName, bool mode);
47 ApplicationInfo CreateAppInfo(const std::string &appName, const std::string &name);
48 inline static std::shared_ptr<AbilityManagerService> abilityMgrServ_ {nullptr};
49 };
50
CreateAbilityInfo(const std::string & name,const std::string & appName,const std::string & bundleName,const std::string & moduleName,bool mode)51 AbilityInfo OnNewWantModuleTest::CreateAbilityInfo(const std::string &name, const std::string &appName,
52 const std::string &bundleName, const std::string &moduleName, bool mode)
53 {
54 AbilityInfo abilityInfo;
55 abilityInfo.visible = true;
56 abilityInfo.name = name;
57 abilityInfo.applicationName = appName;
58 abilityInfo.bundleName = bundleName;
59 abilityInfo.moduleName = moduleName;
60 abilityInfo.applicationInfo.bundleName = bundleName;
61 abilityInfo.applicationName = "com.ix.hiMusic";
62 abilityInfo.applicationInfo.name = "com.ix.hiMusic";
63 abilityInfo.type = AbilityType::PAGE;
64 abilityInfo.applicationInfo.isLauncherApp = false;
65
66 if (mode) {
67 abilityInfo.launchMode = LaunchMode::SINGLETON;
68 } else {
69 abilityInfo.launchMode = LaunchMode::STANDARD;
70 }
71
72 return abilityInfo;
73 }
74
CreateAppInfo(const std::string & appName,const std::string & bundleName)75 ApplicationInfo OnNewWantModuleTest::CreateAppInfo(const std::string &appName, const std::string &bundleName)
76 {
77 ApplicationInfo appInfo;
78 appInfo.name = appName;
79 appInfo.bundleName = bundleName;
80
81 return appInfo;
82 }
83
SetUpTestCase()84 void OnNewWantModuleTest::SetUpTestCase()
85 {
86 abilityMgrServ_ = OHOS::DelayedSingleton<AbilityManagerService>::GetInstance();
87 }
88
TearDownTestCase()89 void OnNewWantModuleTest::TearDownTestCase()
90 {
91 abilityMgrServ_->OnStop();
92 }
93
SetUp()94 void OnNewWantModuleTest::SetUp()
95 {}
96
TearDown()97 void OnNewWantModuleTest::TearDown()
98 {}
99
100 /*
101 * Feature: MissionListManager
102 * Function: Startability
103 * SubFunction: NA
104 * FunctionPoints: NA
105 * CaseDescription:Start the singleton ability multiple times, and the ability is marked with newwant
106 */
107 HWTEST_F(OnNewWantModuleTest, Startability_001, TestSize.Level1)
108 {
109 int userId = 100;
110 auto missionListManager = std::make_shared<MissionListManager>(userId);
111 EXPECT_TRUE(missionListManager);
112
113 std::string abilityName = "MusicAbility";
114 std::string appName = "test_app";
115 std::string bundleName = "com.ix.hiMusic";
116 std::string moduleName = "entry";
117
118 Want want;
119 ElementName element("device", "com.ix.hiMusic", "MusicAbility", "entry");
120 want.SetElement(element);
121
122 AbilityRequest abilityRequest;
123 abilityRequest.want = want;
124 abilityRequest.abilityInfo = CreateAbilityInfo(abilityName, appName, bundleName, moduleName, true);
125 abilityRequest.appInfo = CreateAppInfo(appName, bundleName);
126
127 std::shared_ptr<AbilityRecord> abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest);
128 abilityRecord->SetAbilityState(OHOS::AAFwk::AbilityState::FOREGROUND);
129
130 std::string missionName = AbilityUtil::ConvertBundleNameSingleton(abilityRequest.abilityInfo.bundleName,
131 abilityRequest.abilityInfo.name, abilityRequest.abilityInfo.moduleName);
132 std::shared_ptr<Mission> mission = std::make_shared<Mission>(1, abilityRecord, missionName);
133
134 missionListManager->Init();
135 missionListManager->launcherList_->AddMissionToTop(mission);
136 missionListManager->StartAbility(abilityRequest);
137
138 EXPECT_TRUE(abilityRecord->IsNewWant());
139 }
140
141 /*
142 * Feature: MissionListManager
143 * Function: Startability
144 * SubFunction: NA
145 * FunctionPoints: NA
146 * CaseDescription:Start standard ability multiple times, ability has no newwant mark
147 */
148 HWTEST_F(OnNewWantModuleTest, Startability_002, TestSize.Level1)
149 {
150 int userId = 100;
151 auto missionListManager = std::make_shared<MissionListManager>(userId);
152 EXPECT_TRUE(missionListManager);
153
154 std::string abilityName = "MusicAbility";
155 std::string appName = "test_app";
156 std::string bundleName = "com.ix.hiMusic";
157 std::string moduleName = "entry";
158
159 Want want;
160 ElementName element("device", "com.ix.hiMusic", "MusicAbility", "entry");
161 want.SetElement(element);
162
163 AbilityRequest abilityRequest;
164 abilityRequest.want = want;
165 abilityRequest.abilityInfo = CreateAbilityInfo(abilityName, appName, bundleName, moduleName, false);
166 abilityRequest.appInfo = CreateAppInfo(appName, bundleName);
167
168 std::shared_ptr<AbilityRecord> abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest);
169 abilityRecord->SetAbilityState(OHOS::AAFwk::AbilityState::FOREGROUND);
170
171 std::string missionName = AbilityUtil::ConvertBundleNameSingleton(abilityRequest.abilityInfo.bundleName,
172 abilityRequest.abilityInfo.name, abilityRequest.abilityInfo.moduleName);
173 std::shared_ptr<Mission> mission = std::make_shared<Mission>(1, abilityRecord, missionName);
174
175 missionListManager->Init();
176 missionListManager->launcherList_->AddMissionToTop(mission);
177 missionListManager->StartAbility(abilityRequest);
178
179 EXPECT_EQ(abilityRecord->IsNewWant(), false);
180 }
181 } // namespace AAFwk
182 } // namespace OHOS
183