1 /*
2  * Copyright (c) 2023-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 
18 #define private public
19 #include "auto_fill_manager.h"
20 #include "auto_fill_error.h"
21 #include "auto_fill_extension_callback.h"
22 #include "extension_ability_info.h"
23 #include "mock_ui_content.h"
24 #undef private
25 
26 using namespace testing;
27 using namespace testing::ext;
28 
29 namespace OHOS {
30 namespace AAFwk {
31 namespace {
32 const int32_t EVENT_ID = 1;
33 }  // namespace
34 class AutoFillManagerTest : public testing::Test {
35 public:
36     static void SetUpTestCase();
37     static void TearDownTestCase();
38     void SetUp() override;
39     void TearDown() override;
GetUIContent()40     virtual Ace::UIContent* GetUIContent()
41     {
42         return nullptr;
43     }
44 };
45 
46 class MockModalUIExtensionProxy : public Ace::ModalUIExtensionProxy {
47 public:
48     MOCK_METHOD1(SendData, void(const AAFwk::WantParams &params));
49 };
50 
SetUpTestCase(void)51 void AutoFillManagerTest::SetUpTestCase(void)
52 {}
53 
TearDownTestCase(void)54 void AutoFillManagerTest::TearDownTestCase(void)
55 {}
56 
SetUp()57 void AutoFillManagerTest::SetUp()
58 {}
59 
TearDown()60 void AutoFillManagerTest::TearDown()
61 {}
62 
63 /*
64  * Feature: AutoFillManager
65  * Function: RequestAutoFill
66  * SubFunction: NA
67  * FunctionPoints:Calling to the RequestAutoFill function parameter is invalid.
68  * EnvConditions: NA
69  * CaseDescription: Verify the parameter UIContent or fillCallback is nullptr.
70  */
71 HWTEST_F(AutoFillManagerTest, RequestAutoFill_0100, TestSize.Level1)
72 {
73     GTEST_LOG_(INFO) << "AutoFillManagerTest, RequestAutoFill_0100, TestSize.Level1";
74     auto &manager = AbilityRuntime::AutoFillManager::GetInstance();
75     const AbilityRuntime::AutoFill::AutoFillRequest autoFillRequest;
76     const std::shared_ptr<AbilityRuntime::IFillRequestCallback> fillCallback = nullptr;
77     AbilityRuntime::AutoFill::AutoFillResult result;
78     int32_t ret = manager.RequestAutoFill(GetUIContent(), autoFillRequest, fillCallback, result);
79     EXPECT_EQ(ret, AbilityRuntime::AutoFill::AUTO_FILL_OBJECT_IS_NULL);
80 }
81 
82 /*
83  * Feature: AutoFillManager
84  * Function: RequestAutoSave
85  * SubFunction: NA
86  * FunctionPoints:Calling to the RequestAutoSave function parameter is invalid.
87  * EnvConditions: NA
88  * CaseDescription: Verify the parameter UIContent or saveCallback is nullptr.
89  */
90 HWTEST_F(AutoFillManagerTest, RequestAutoSave_0100, TestSize.Level1)
91 {
92     GTEST_LOG_(INFO) << "AutoFillManagerTest, RequestAutoSave_0100, TestSize.Level1";
93     auto &manager = AbilityRuntime::AutoFillManager::GetInstance();
94     const AbilityRuntime::AutoFill::AutoFillRequest autoFillRequest;
95     const std::shared_ptr<AbilityRuntime::ISaveRequestCallback> saveCallback = nullptr;
96     AbilityRuntime::AutoFill::AutoFillResult result;
97     int32_t ret = manager.RequestAutoSave(GetUIContent(), autoFillRequest, saveCallback, result);
98     EXPECT_EQ(ret, AbilityRuntime::AutoFill::AUTO_FILL_OBJECT_IS_NULL);
99 }
100 
101 /*
102  * Feature: AutoFillManager
103  * Function: HandleRequestExecuteInner
104  * SubFunction: NA
105  * FunctionPoints:Calling to the HandleRequestExecuteInner function parameter is invalid.
106  * EnvConditions: NA
107  * CaseDescription: Verify the parameter UIContent or fillCallback or saveCallback is nullptr.
108  */
109 HWTEST_F(AutoFillManagerTest, HandleRequestExecuteInner_0100, TestSize.Level1)
110 {
111     GTEST_LOG_(INFO) << "AutoFillManagerTest, HandleRequestExecuteInner_0100, TestSize.Level1";
112     auto &manager = AbilityRuntime::AutoFillManager::GetInstance();
113     const AbilityBase::AutoFillType autoFillType = AbilityBase::AutoFillType::UNSPECIFIED;
114     const AbilityRuntime::AutoFill::AutoFillRequest autoFillRequest;
115     const std::shared_ptr<AbilityRuntime::IFillRequestCallback> fillCallback = nullptr;
116     const std::shared_ptr<AbilityRuntime::ISaveRequestCallback> saveCallback = nullptr;
117     AbilityRuntime::AutoFill::AutoFillResult result;
118     int32_t ret =
119         manager.HandleRequestExecuteInner(GetUIContent(), autoFillRequest, fillCallback, saveCallback, result);
120     EXPECT_EQ(ret, AbilityRuntime::AutoFill::AUTO_FILL_OBJECT_IS_NULL);
121 }
122 
123 /*
124  * Feature: AutoFillManager
125  * Function: SetTimeOutEvent
126  * SubFunction: NA
127  * FunctionPoints:Calling SetTimeOutEvent can create an eventHandler_ object.
128  * EnvConditions: NA
129  * CaseDescription: Verify create eventHandler_ after calling SetTimeOutEvent, which is not empty.
130  */
131 HWTEST_F(AutoFillManagerTest, SetTimeOutEvent_0100, TestSize.Level1)
132 {
133     GTEST_LOG_(INFO) << "AutoFillManagerTest, SetTimeOutEvent_0100, TestSize.Level1";
134     auto &manager = AbilityRuntime::AutoFillManager::GetInstance();
135     manager.SetTimeOutEvent(EVENT_ID);
136     EXPECT_NE(manager.eventHandler_, nullptr);
137 }
138 
139 /*
140  * Feature: AutoFillManager
141  * Function: RemoveEvent
142  * SubFunction: NA
143  * FunctionPoints: NA
144  * EnvConditions: NA
145  * CaseDescription: Verify only after calling SetTimeOutEvent can effectively call RemoveEvent.
146  */
147 HWTEST_F(AutoFillManagerTest, RemoveEvent_0100, TestSize.Level1)
148 {
149     GTEST_LOG_(INFO) << "AutoFillManagerTest, SetTimeOutEvent_0100, TestSize.Level1";
150     auto &manager = AbilityRuntime::AutoFillManager::GetInstance();
151     manager.SetTimeOutEvent(EVENT_ID);
152     EXPECT_NE(manager.eventHandler_, nullptr);
153     manager.RemoveEvent(EVENT_ID);
154     EXPECT_NE(manager.eventHandler_, nullptr);
155 }
156 
157 /*
158  * Feature: AutoFillManager
159  * Function: RemoveEvent
160  * SubFunction: NA
161  * FunctionPoints: NA
162  * EnvConditions: NA
163  * CaseDescription: Verify directly calling remove is invalid.
164  */
165 HWTEST_F(AutoFillManagerTest, RemoveEvent_0200, TestSize.Level1)
166 {
167     GTEST_LOG_(INFO) << "AutoFillManagerTest, RemoveEvent_0200, TestSize.Level1";
168     auto &manager = AbilityRuntime::AutoFillManager::GetInstance();
169     manager.RemoveEvent(EVENT_ID);
170     EXPECT_NE(manager.eventHandler_, nullptr);
171 }
172 
173 /*
174  * Feature: AutoFillManager
175  * Function: UpdateCustomPopupUIExtension
176  * SubFunction: NA
177  * FunctionPoints: NA
178  * EnvConditions: NA
179  * CaseDescription: Verify if the UpdateCustomPopupUIExtension is valid.
180  */
181 HWTEST_F(AutoFillManagerTest, UpdateCustomPopupUIExtension_0100, TestSize.Level1)
182 {
183     GTEST_LOG_(INFO) << "AutoFillManagerTest, UpdateCustomPopupUIExtension_0100, TestSize.Level1";
184     auto &manager = AbilityRuntime::AutoFillManager::GetInstance();
185     EXPECT_EQ(manager.extensionCallbacks_.size(), 0);
186     const AbilityBase::ViewData viewdata;
187     manager.UpdateCustomPopupUIExtension(1, viewdata);
188 }
189 
190 /*
191  * Feature: AutoFillManager
192  * Function: HandleTimeOut
193  * SubFunction: NA
194  * FunctionPoints: NA
195  * EnvConditions: NA
196  * CaseDescription: Verify if the processing timeout is valid.
197  */
198 HWTEST_F(AutoFillManagerTest, HandleTimeOut_0100, TestSize.Level1)
199 {
200     GTEST_LOG_(INFO) << "AutoFillManagerTest, HandleTimeOut_0100, TestSize.Level1";
201     auto &manager = AbilityRuntime::AutoFillManager::GetInstance();
202     EXPECT_EQ(manager.extensionCallbacks_.size(), 0);
203     auto extensionCallback = std::make_shared<AbilityRuntime::AutoFillExtensionCallback>();
204     manager.extensionCallbacks_.emplace(extensionCallback->GetCallbackId(), extensionCallback);
205     manager.HandleTimeOut(extensionCallback->GetCallbackId());
206     EXPECT_EQ(manager.extensionCallbacks_.size(), 0);
207     manager.extensionCallbacks_.clear();
208 }
209 
210 /*
211  * Feature: AutoFillManager
212  * Function: ConvertAutoFillWindowType
213  * SubFunction: NA
214  * FunctionPoints: NA
215  * EnvConditions: NA
216  * CaseDescription: Verify Based on whether the requestType value can correctly convert
217  * the windowType and extension types.
218  */
219 HWTEST_F(AutoFillManagerTest, ConvertAutoFillWindowType_0100, TestSize.Level1)
220 {
221     GTEST_LOG_(INFO) << "AutoFillManagerTest, ConvertAutoFillWindowType_0100, TestSize.Level1";
222     AbilityRuntime::AutoFill::AutoFillRequest autoFillRequest;
223     autoFillRequest.autoFillCommand = AbilityRuntime::AutoFill::AutoFillCommand::FILL;
224     autoFillRequest.autoFillType = AbilityBase::AutoFillType::PASSWORD;
225     auto &manager = AbilityRuntime::AutoFillManager::GetInstance();
226     bool isSmartAutoFill = false;
227     AbilityRuntime::AutoFill::AutoFillWindowType autoFillWindowType
228         = AbilityRuntime::AutoFill::AutoFillWindowType::MODAL_WINDOW;
229     manager.ConvertAutoFillWindowType(autoFillRequest, isSmartAutoFill, autoFillWindowType);
230     EXPECT_EQ(isSmartAutoFill, false);
231 
232     autoFillRequest.autoFillCommand = AbilityRuntime::AutoFill::AutoFillCommand::SAVE;
233     autoFillRequest.autoFillType = AbilityBase::AutoFillType::PERSON_FULL_NAME;
234     manager.ConvertAutoFillWindowType(autoFillRequest, isSmartAutoFill, autoFillWindowType);
235     EXPECT_EQ(isSmartAutoFill, true);
236     EXPECT_EQ(autoFillWindowType, AbilityRuntime::AutoFill::AutoFillWindowType::MODAL_WINDOW);
237 }
238 
239 /*
240  * Feature: AutoFillManager
241  * Function: IsNeedToCreatePopupWindow
242  * SubFunction: NA
243  * FunctionPoints: NA
244  * EnvConditions: NA
245  * CaseDescription: pull up the windowType and extension types.
246  */
247 HWTEST_F(AutoFillManagerTest, IsNeedToCreatePopupWindow_0100, TestSize.Level1)
248 {
249     GTEST_LOG_(INFO) << "AutoFillManagerTest, IsNeedToCreatePopupWindow_0100, TestSize.Level1";
250     auto &manager = AbilityRuntime::AutoFillManager::GetInstance();
251     bool isPopupAutoFill = false;
252 
253     isPopupAutoFill = manager.IsNeedToCreatePopupWindow(AbilityBase::AutoFillType::PERSON_FULL_NAME);
254     EXPECT_EQ(isPopupAutoFill, true);
255 }
256 } // namespace AppExecFwk
257 } // namespace OHOS