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 }