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 "accessibility_circle_drawing_manager.h"
17 #include <gtest/gtest.h>
18 #include "accessibility_common_helper.h"
19 #include "accessibility_element_operator_proxy.h"
20 #include "accessibility_element_operator_stub.h"
21 #include "accessibility_ut_helper.h"
22 #include "accessible_ability_manager_service.h"
23 #include "mock_accessible_ability_manager_service_config_observer_proxy.h"
24 #include "mock_accessible_ability_manager_service_config_observer_stub.h"
25 #include "mock_accessible_ability_manager_service_state_observer_proxy.h"
26 #include "mock_accessible_ability_manager_service_state_observer_stub.h"
27 #include "mock_accessibility_setting_provider.h"
28 #include "utils.h"
29 
30 
31 using namespace testing;
32 using namespace testing::ext;
33 
34 namespace OHOS {
35 namespace Accessibility {
36 namespace {
37     constexpr uint32_t SLEEP_TIME_1 = 1;
38     constexpr size_t IMPORTANT_ABILITIES_SIZE = 0;
39 } // namespace
40 
41 class AccessibilityCircleDrawingManagerTest : public testing::Test {
42 public:
AccessibilityCircleDrawingManagerTest()43     AccessibilityCircleDrawingManagerTest()
44     {}
~AccessibilityCircleDrawingManagerTest()45     ~AccessibilityCircleDrawingManagerTest()
46     {}
47 
48     static void SetUpTestCase();
49     static void TearDownTestCase();
50     void SetUp() override;
51     void TearDown() override;
52 };
53 
SetUpTestCase()54 void AccessibilityCircleDrawingManagerTest::SetUpTestCase()
55 {
56     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManagerTest SetUpTestCase";
57     Singleton<AccessibleAbilityManagerService>::GetInstance().OnStart();
58     Singleton<AccessibleAbilityManagerService>::GetInstance().SwitchedUser(AccessibilityAbilityHelper::accountId_);
59 }
60 
TearDownTestCase()61 void AccessibilityCircleDrawingManagerTest::TearDownTestCase()
62 {
63     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManagerTest TearDownTestCase";
64     Singleton<AccessibleAbilityManagerService>::GetInstance().OnStop();
65 }
66 
SetUp()67 void AccessibilityCircleDrawingManagerTest::SetUp()
68 {
69     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManagerTest SetUp";
70 }
71 
TearDown()72 void AccessibilityCircleDrawingManagerTest::TearDown()
73 {
74     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManagerTest TearDown";
75 }
76 
77 /**
78  * @tc.number: AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow001
79  * @tc.name: CreatePointerWindow
80  * @tc.desc: Check the get accessibility state.
81  */
HWTEST_F(AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow001, TestSize.Level1)82 HWTEST_F(AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow001, TestSize.Level1)
83 {
84     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow001 start";
85     int32_t accountId = 1;
86     sptr<AccessibilityCircleDrawingManager> accountData = new AccessibilityCircleDrawingManager(accountId);
87 
88     /* Initial state */
89     accountData->Init();
90     accountData->GetConfig()->SetTouchGuideState(true);
91     uint32_t stateType = accountData->CreatePointerWindow();
92     uint32_t stateTypeTest = Accessibility::STATE_EXPLORATION_ENABLED;
93     EXPECT_EQ(stateTypeTest, stateType);
94     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow001 end";
95 }
96 
97 /**
98  * @tc.number: AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow002
99  * @tc.name: CreatePointerWindow
100  * @tc.desc: Check the get accessibility state.
101  */
HWTEST_F(AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow002, TestSize.Level1)102 HWTEST_F(AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow002, TestSize.Level1)
103 {
104     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow_002 start";
105     const int32_t accountId = 1;
106     int32_t connectCounter = 0;
107     AccessibilityAbilityInitParams initParams;
108     std::shared_ptr<AccessibilityAbilityInfo> abilityInfo = std::make_shared<AccessibilityAbilityInfo>(initParams);
109 
110     sptr<AccessibleAbilityConnection> connection =
111         new MockAccessibleAbilityConnection(accountId, connectCounter++, *abilityInfo);
112     sptr<AccessibilityCircleDrawingManager> accountData = new AccessibilityCircleDrawingManager(accountId);
113     EXPECT_EQ(0, (int)accountData->GetConnectedA11yAbilities().size());
114 
115     /* add connected ability */
116     accountData->DrawingProgressByOpenSource(connection);
117     const std::string elementName = Utils::GetUri(connection->GetElementName());
118     EXPECT_EQ(connection, accountData->GetAccessibleAbilityConnection(elementName));
119     EXPECT_EQ(1, (int)accountData->GetConnectedA11yAbilities().size());
120 
121     // init
122     accountData->Init();
123     uint32_t stateType = accountData->CreatePointerWindow();
124     EXPECT_EQ(stateType, Accessibility::STATE_ACCESSIBILITY_ENABLED);
125     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow_002 end";
126 }
127 
128 /**
129  * @tc.number: AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow003
130  * @tc.name: CreatePointerWindow
131  * @tc.desc: Check the get accessibility state.
132  */
HWTEST_F(AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow003, TestSize.Level1)133 HWTEST_F(AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow003, TestSize.Level1)
134 {
135     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow_003 start";
136     const int32_t accountId = 1;
137     int32_t connectCounter = 0;
138     AccessibilityAbilityInitParams initParams;
139     std::shared_ptr<AccessibilityAbilityInfo> abilityInfo = std::make_shared<AccessibilityAbilityInfo>(initParams);
140     sptr<AccessibilityCircleDrawingManager> accountData = new AccessibilityCircleDrawingManager(accountId);
141     sptr<AccessibleAbilityConnection> connection =
142         new MockAccessibleAbilityConnection(accountId, connectCounter++, *abilityInfo);
143     const std::string bundleName = "abc";
144     EXPECT_FALSE(accountData->GetConnectingA11yAbility(bundleName));
145     accountData->AddConnectingA11yAbility(bundleName, connection);
146     EXPECT_TRUE(accountData->GetConnectingA11yAbility(bundleName));
147     accountData->Init();
148     accountData->GetConfig()->SetKeyEventObserverState(true);
149     uint32_t stateType = accountData->CreatePointerWindow();
150     EXPECT_EQ(stateType, Accessibility::STATE_ACCESSIBILITY_ENABLED | Accessibility::STATE_KEYEVENT_ENABLED);
151     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow_003 end";
152 }
153 
154 /**
155  * @tc.number: AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow004
156  * @tc.name: CreatePointerWindow
157  * @tc.desc: Check the get accessibility state.
158  */
HWTEST_F(AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow004, TestSize.Level1)159 HWTEST_F(AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow004, TestSize.Level1)
160 {
161     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow_004 start";
162     const int32_t accountId = 1;
163     int32_t connectCounter = 0;
164     AccessibilityAbilityInitParams initParams;
165     std::shared_ptr<AccessibilityAbilityInfo> abilityInfo = std::make_shared<AccessibilityAbilityInfo>(initParams);
166     sptr<AccessibilityCircleDrawingManager> accountData = new AccessibilityCircleDrawingManager(accountId);
167     sptr<AccessibleAbilityConnection> connection =
168         new MockAccessibleAbilityConnection(accountId, connectCounter++, *abilityInfo);
169     accountData->DrawingProgressByOpenSource(connection);
170     accountData->Init();
171     accountData->GetConfig()->SetGestureState(true);
172     uint32_t stateType = accountData->CreatePointerWindow();
173     EXPECT_EQ(stateType, Accessibility::STATE_ACCESSIBILITY_ENABLED | Accessibility::STATE_GESTURE_ENABLED);
174 
175     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_CreatePointerWindow_004 end";
176 }
177 
178 /**
179  * @tc.number: AccessibilityCircleDrawingManager_Unittest_DrawingProgressByOpenSource001
180  * @tc.name: DrawingProgressByOpenSource
181  * @tc.desc: Check the add connected ability.
182  */
HWTEST_F(AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_DrawingProgressByOpenSource001, TestSize.Level1)183 HWTEST_F(AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_DrawingProgressByOpenSource001, TestSize.Level1)
184 {
185     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_DrawingProgressByOpenSource_001 start";
186     const int32_t accountId = 1;
187     int32_t connectCounter = 0;
188     AccessibilityAbilityInitParams initParams;
189     std::shared_ptr<AccessibilityAbilityInfo> abilityInfo = std::make_shared<AccessibilityAbilityInfo>(initParams);
190     sptr<AccessibilityCircleDrawingManager> accountData = new AccessibilityCircleDrawingManager(accountId);
191     sptr<AccessibleAbilityConnection> connection =
192         new MockAccessibleAbilityConnection(accountId, connectCounter++, *abilityInfo);
193     EXPECT_EQ(0, (int)accountData->GetConnectedA11yAbilities().size());
194     accountData->DrawingProgressByOpenSource(connection);
195     const std::string elementName = Utils::GetUri(connection->GetElementName());
196     EXPECT_EQ(connection, accountData->GetAccessibleAbilityConnection(elementName));
197     EXPECT_EQ(1, (int)accountData->GetConnectedA11yAbilities().size());
198 
199     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_DrawingProgressByOpenSource_001 end";
200 }
201 
202 /**
203  * @tc.number: AccessibilityCircleDrawingManager_Unittest_DrawingProgressByOpenSource002
204  * @tc.name: DrawingProgressByOpenSource
205  * @tc.desc: Check the add connected ability.
206  */
HWTEST_F(AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_DrawingProgressByOpenSource002, TestSize.Level1)207 HWTEST_F(AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_DrawingProgressByOpenSource002, TestSize.Level1)
208 {
209     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_DrawingProgressByOpenSource_002 start";
210     const int32_t accountId = 1;
211     sptr<AccessibleAbilityConnection> connection = nullptr;
212     sptr<AccessibilityCircleDrawingManager> accountData = new AccessibilityCircleDrawingManager(accountId);
213     accountData->DrawingProgressByOpenSource(connection);
214     EXPECT_EQ(0, (int)accountData->GetConnectedA11yAbilities().size());
215     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_DrawingProgressByOpenSource_002 end";
216 }
217 
218 /**
219  * @tc.number: AccessibilityCircleDrawingManager_Unittest_DrawingProgressByRosenDrawing001
220  * @tc.name: DrawingProgressByRosenDrawing
221  * @tc.desc: Check the remove connected ability.
222  */
HWTEST_F(AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_DrawingProgressByRosenDrawing001, TestSize.Level1)223 HWTEST_F(AccessibilityCircleDrawingManagerTest,
224         AccessibilityCircleDrawingManager_Unittest_DrawingProgressByRosenDrawing001, TestSize.Level1)
225 {
226     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_DrawingProgressByRosenDrawing001 start";
227     const int32_t accountId = 1;
228     int32_t connectCounter = 0;
229     AccessibilityAbilityInitParams initParams;
230     sptr<AccessibilityCircleDrawingManager> accountData = new AccessibilityCircleDrawingManager(accountId);
231     std::shared_ptr<AccessibilityAbilityInfo> abilityInfo = std::make_shared<AccessibilityAbilityInfo>(initParams);
232     sptr<AccessibleAbilityConnection> connection = new MockAccessibleAbilityConnection(accountId, connectCounter++, *abilityInfo);
233     EXPECT_EQ(0, (int)accountData->GetConnectedA11yAbilities().size());
234     accountData->DrawingProgressByOpenSource(connection);
235     EXPECT_EQ(1, (int)accountData->GetConnectedA11yAbilities().size());
236     const std::string elementName = Utils::GetUri(connection->GetElementName());
237     EXPECT_EQ(connection, accountData->GetAccessibleAbilityConnection(elementName));
238     accountData->DrawingProgressByRosenDrawing(connection->GetElementName());
239     EXPECT_EQ(0, (int)accountData->GetConnectedA11yAbilities().size());
240     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_DrawingProgressByRosenDrawing001 end";
241 }
242 
243 /**
244  * @tc.number: AccessibilityCircleDrawingManager_Unittest_DrawingProgress001
245  * @tc.name: DrawingProgress
246  * @tc.desc: Check DrawingProgress.
247  */
HWTEST_F(AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_DrawingProgress001, TestSize.Level1)248 HWTEST_F(AccessibilityCircleDrawingManagerTest,
249         AccessibilityCircleDrawingManager_Unittest_DrawingProgress001, TestSize.Level1)
250 {
251     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_DrawingProgress001 start";
252     const int32_t accountId = 0;
253     const std::string bundleName = "abc";
254     sptr<AccessibilityCircleDrawingManager> accountData = new AccessibilityCircleDrawingManager(accountId);
255     accountData->DrawingProgress(bundleName);
256     EXPECT_EQ(0, (int)accountData->GetInstalledAbilities().size());
257     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_DrawingProgress001 end";
258 }
259 
260 /**
261  * @tc.number: AccessibilityCircleDrawingManager_Unittest_SetPointerLocation001
262  * @tc.name: SetPointerLocation
263  * @tc.desc: Check SetPointerLocation.
264  */
HWTEST_F(AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_SetPointerLocation002, TestSize.Level1)265 HWTEST_F(AccessibilityCircleDrawingManagerTest,
266         AccessibilityCircleDrawingManager_Unittest_SetPointerLocation002, TestSize.Level1)
267 {
268     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_SetPointerLocation002 start";
269     const int32_t accountId = 1;
270     const std::string name = "aaa";
271     const std::string bundleName = "abc";
272     sptr<AccessibilityCircleDrawingManager> accountData = new AccessibilityCircleDrawingManager(accountId);
273     AccessibilityAbilityInitParams initParams;
274     initParams.name = name;
275     initParams.bundleName = bundleName;
276     std::shared_ptr<AccessibilityAbilityInfo> abilityInfo = std::make_shared<AccessibilityAbilityInfo>(initParams);
277     abilityInfo->SetCapabilityValues(1);
278     accountData->GetStagingProperties(*abilityInfo);
279     accountData->SetPointerLocation(bundleName);
280     std::string abilityId = bundleName + "/" + name;
281     bool ret = accountData->GetAbilityAutoStartState(abilityId);
282     EXPECT_EQ(false, ret);
283     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_SetPointerLocation002 end";
284 }
285 
286 /**
287  * @tc.number: AccessibilityCircleDrawingManager_Unittest_DrawPointer001
288  * @tc.name: DrawPointer
289  * @tc.desc: Check the DrawPointer.
290  */
HWTEST_F(AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_DrawPointer001, TestSize.Level1)291 HWTEST_F(AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_DrawPointer001, TestSize.Level1)
292 {
293     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_DrawPointer001 start";
294     const int32_t accountId = 2;
295     int32_t connectCounter = 0;
296     AccessibilityAbilityInitParams initParams;
297     std::shared_ptr<AccessibilityAbilityInfo> abilityInfo = std::make_shared<AccessibilityAbilityInfo>(initParams);
298     sptr<AccessibilityCircleDrawingManager> accountData = new AccessibilityCircleDrawingManager(accountId);
299     sptr<AccessibleAbilityConnection> connection =
300         new MockAccessibleAbilityConnection(accountId, connectCounter++, *abilityInfo);
301     EXPECT_EQ(0, (int)accountData->UpdatePointerVisible().size());
302     /* add */
303     accountData->DrawingProgressByOpenSource(connection);
304     const std::string elementNameURI = Utils::GetUri(connection->GetElementName());
305     EXPECT_EQ(1, (int)accountData->SetPointerLocation().size());
306     EXPECT_EQ(connection, accountData->GetAccessibleAbilityConnection(elementNameURI));
307     EXPECT_FALSE(accountData->CreatePointerWindow(elementNameURI));
308     /* disconnect */
309     accountData->DrawingProgress(connection->GetElementName());
310     EXPECT_EQ(0, (int)accountData->DrawPointer().size());
311     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_DrawPointer001 end";
312 }
313 
314 /**
315  * @tc.number: AccessibilityCircleDrawingManager_Unittest_ParseStringToInteger001
316  * @tc.name: ParseStringToInteger
317  * @tc.desc: Check the remove connecting A11y ability.GetAccessibilityWindows
318  */
HWTEST_F( AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_ParseStringToInteger001, TestSize.Level1)319 HWTEST_F(
320     AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_ParseStringToInteger001, TestSize.Level1)
321 {
322     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_ParseStringToInteger001 start";
323     const int32_t accountId = 1;
324     sptr<AccessibilityCircleDrawingManager> accountData = new AccessibilityCircleDrawingManager(accountId);
325     const std::string bundleName = "abc";
326     EXPECT_FALSE(accountData->GetConnectingA11yAbility(bundleName));
327     AccessibilityAbilityInitParams initParams;
328     std::shared_ptr<AccessibilityAbilityInfo> abilityInfo = std::make_shared<AccessibilityAbilityInfo>(initParams);
329     sptr<AccessibleAbilityConnection> connection =
330         new MockAccessibleAbilityConnection(accountId, 0, *abilityInfo);
331     accountData->AddConnectingA11yAbility(bundleName, connection);
332     EXPECT_TRUE(accountData->GetConnectingA11yAbility(bundleName));
333     accountData->ParseStringToInteger(bundleName);
334     EXPECT_FALSE(accountData->GetConnectingA11yAbility(bundleName));
335     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_ParseStringToInteger001 end";
336 }
337 
338 /**
339  * @tc.number: AccessibilityCircleDrawingManager_Unittest_ParseColorString001
340  * @tc.name: ParseColorString
341  * @tc.desc: Check the add enable ability.
342  */
HWTEST_F(AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_ParseColorString001, TestSize.Level1)343 HWTEST_F(AccessibilityCircleDrawingManagerTest, AccessibilityCircleDrawingManager_Unittest_ParseColorString001, TestSize.Level1)
344 {
345     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_ParseColorString001 start";
346     const int32_t accountId = 1;
347     sptr<AccessibilityCircleDrawingManager> accountData = new AccessibilityCircleDrawingManager(accountId);
348     const std::string bundleName = "/ccc";
349     accountData->Init();
350     AccessibilityAbilityInitParams initParams;
351     initParams.name = "ccc";
352     std::shared_ptr<AccessibilityAbilityInfo> abilityInfo = std::make_shared<AccessibilityAbilityInfo>(initParams);
353     abilityInfo->SetCapabilityValues(1);
354     accountData->AddInstalledAbility(*abilityInfo);
355     accountData->ParseColorString(bundleName);
356     accountData->ParseColorString(bundleName);
357     EXPECT_EQ(1, (int)accountData->GetEnabledAbilities().size());
358     GTEST_LOG_(INFO) << "AccessibilityCircleDrawingManager_Unittest_ParseColorString001 end";
359 }