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 };
49 
CreateAbilityInfo(const std::string & name,const std::string & appName,const std::string & bundleName,const std::string & moduleName,bool mode)50 AbilityInfo OnNewWantModuleTest::CreateAbilityInfo(const std::string& name, const std::string& appName,
51     const std::string& bundleName, const std::string& moduleName, bool mode)
52 {
53     AbilityInfo abilityInfo;
54     abilityInfo.visible = true;
55     abilityInfo.name = name;
56     abilityInfo.applicationName = appName;
57     abilityInfo.bundleName = bundleName;
58     abilityInfo.moduleName = moduleName;
59     abilityInfo.applicationInfo.bundleName = bundleName;
60     abilityInfo.applicationName = "com.ix.hiMusic";
61     abilityInfo.applicationInfo.name = "com.ix.hiMusic";
62     abilityInfo.type = AbilityType::PAGE;
63     abilityInfo.applicationInfo.isLauncherApp = false;
64 
65     if (mode) {
66         abilityInfo.launchMode = LaunchMode::SINGLETON;
67     } else {
68         abilityInfo.launchMode = LaunchMode::STANDARD;
69     }
70 
71     return abilityInfo;
72 }
73 
CreateAppInfo(const std::string & appName,const std::string & bundleName)74 ApplicationInfo OnNewWantModuleTest::CreateAppInfo(const std::string& appName, const std::string& bundleName)
75 {
76     ApplicationInfo appInfo;
77     appInfo.name = appName;
78     appInfo.bundleName = bundleName;
79 
80     return appInfo;
81 }
82 
SetUpTestCase()83 void OnNewWantModuleTest::SetUpTestCase() {}
84 
TearDownTestCase()85 void OnNewWantModuleTest::TearDownTestCase() {}
86 
SetUp()87 void OnNewWantModuleTest::SetUp() {}
88 
TearDown()89 void OnNewWantModuleTest::TearDown() {}
90 
91 /*
92  * Feature: MissionListManager
93  * Function: Startability
94  * SubFunction: NA
95  * FunctionPoints: NA
96  * CaseDescription:Start the singleton ability multiple times, and the ability is marked with newwant
97  */
98 HWTEST_F(OnNewWantModuleTest, Startability_001, TestSize.Level1)
99 {
100     int userId = 100;
101     auto missionListManager = std::make_shared<MissionListManager>(userId);
102     EXPECT_TRUE(missionListManager);
103 
104     std::string abilityName = "MusicAbility";
105     std::string appName = "test_app";
106     std::string bundleName = "com.ix.hiMusic";
107     std::string moduleName = "entry";
108 
109     Want want;
110     ElementName element("device", "com.ix.hiMusic", "MusicAbility", "entry");
111     want.SetElement(element);
112 
113     AbilityRequest abilityRequest;
114     abilityRequest.want = want;
115     abilityRequest.abilityInfo = CreateAbilityInfo(abilityName, appName, bundleName, moduleName, true);
116     abilityRequest.appInfo = CreateAppInfo(appName, bundleName);
117 
118     std::shared_ptr<AbilityRecord> abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest);
119     abilityRecord->SetAbilityState(OHOS::AAFwk::AbilityState::FOREGROUND);
120 
121     std::string missionName = AbilityUtil::ConvertBundleNameSingleton(abilityRequest.abilityInfo.bundleName,
122         abilityRequest.abilityInfo.name, abilityRequest.abilityInfo.moduleName);
123     std::shared_ptr<Mission> mission = std::make_shared<Mission>(1, abilityRecord, missionName);
124 
125     missionListManager->Init();
126     missionListManager->launcherList_->AddMissionToTop(mission);
127     missionListManager->StartAbility(abilityRequest);
128 
129     EXPECT_TRUE(abilityRecord->IsNewWant());
130 }
131 
132 /*
133  * Feature: MissionListManager
134  * Function: Startability
135  * SubFunction: NA
136  * FunctionPoints: NA
137  * CaseDescription:Start standard ability multiple times, ability has no newwant mark
138  */
139 HWTEST_F(OnNewWantModuleTest, Startability_002, TestSize.Level1)
140 {
141     int userId = 100;
142     auto missionListManager = std::make_shared<MissionListManager>(userId);
143     EXPECT_TRUE(missionListManager);
144 
145     std::string abilityName = "MusicAbility";
146     std::string appName = "test_app";
147     std::string bundleName = "com.ix.hiMusic";
148     std::string moduleName = "entry";
149 
150     Want want;
151     ElementName element("device", "com.ix.hiMusic", "MusicAbility", "entry");
152     want.SetElement(element);
153 
154     AbilityRequest abilityRequest;
155     abilityRequest.want = want;
156     abilityRequest.abilityInfo = CreateAbilityInfo(abilityName, appName, bundleName, moduleName, false);
157     abilityRequest.appInfo = CreateAppInfo(appName, bundleName);
158 
159     std::shared_ptr<AbilityRecord> abilityRecord = AbilityRecord::CreateAbilityRecord(abilityRequest);
160     abilityRecord->SetAbilityState(OHOS::AAFwk::AbilityState::FOREGROUND);
161 
162     std::string missionName = AbilityUtil::ConvertBundleNameSingleton(abilityRequest.abilityInfo.bundleName,
163         abilityRequest.abilityInfo.name, abilityRequest.abilityInfo.moduleName);
164     std::shared_ptr<Mission> mission = std::make_shared<Mission>(1, abilityRecord, missionName);
165 
166     missionListManager->Init();
167     missionListManager->launcherList_->AddMissionToTop(mission);
168     missionListManager->StartAbility(abilityRequest);
169 
170     EXPECT_EQ(abilityRecord->IsNewWant(), false);
171 }
172 }  // namespace AAFwk
173 }  // namespace OHOS
174