1 /*
2 * Copyright (c) 2021 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 #include "mock_accessible_ability_connection.h"
18 #include <algorithm>
19 #include <map>
20 #include <vector>
21 #include "accessibility_account_data.h"
22 #include "accessibility_ut_helper.h"
23 #include "accessible_ability_manager_service.h"
24 #include "accessible_ability_channel.h"
25 #include "hilog_wrapper.h"
26
27 namespace OHOS {
28 namespace Accessibility {
MockAccessibleAbilityConnection(int32_t accountId,int32_t connectionId,AccessibilityAbilityInfo & abilityInfo)29 MockAccessibleAbilityConnection::MockAccessibleAbilityConnection(int32_t accountId, int32_t connectionId,
30 AccessibilityAbilityInfo& abilityInfo)
31 : AccessibleAbilityConnection(accountId, connectionId, abilityInfo)
32 {
33 (void)accountId;
34 (void)connectionId;
35 (void)abilityInfo;
36 }
~MockAccessibleAbilityConnection()37 MockAccessibleAbilityConnection::~MockAccessibleAbilityConnection()
38 {}
39
AccessibleAbilityChannel(const int32_t accountId,const std::string & clientName)40 AccessibleAbilityChannel::AccessibleAbilityChannel(const int32_t accountId, const std::string &clientName)
41 : clientName_(clientName), accountId_(accountId)
42 {
43 }
44
SearchElementInfoByAccessibilityId(const ElementBasicInfo elementBasicInfo,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback,const int32_t mode,bool isFilter,bool systemApi)45 RetError AccessibleAbilityChannel::SearchElementInfoByAccessibilityId(const ElementBasicInfo elementBasicInfo,
46 const int32_t requestId, const sptr<IAccessibilityElementOperatorCallback>& callback,
47 const int32_t mode, bool isFilter, bool systemApi)
48 {
49 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel SearchElementInfoByAccessibilityId";
50 (void)elementBasicInfo;
51 (void)requestId;
52 (void)callback;
53 (void)mode;
54 (void)isFilter;
55 (void)systemApi;
56 return RET_OK;
57 }
58
SearchDefaultFocusedByWindowId(const ElementBasicInfo elementBasicInfo,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback,const int32_t mode,bool isFilter)59 RetError AccessibleAbilityChannel::SearchDefaultFocusedByWindowId(const ElementBasicInfo elementBasicInfo,
60 const int32_t requestId, const sptr<IAccessibilityElementOperatorCallback>& callback,
61 const int32_t mode, bool isFilter)
62 {
63 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel SearchDefaultFocusedByWindowId";
64 (void)elementBasicInfo;
65 (void)requestId;
66 (void)callback;
67 (void)mode;
68 (void)isFilter;
69 return RET_OK;
70 }
71
SearchElementInfosByText(const int32_t accessibilityWindowId,const int64_t elementId,const std::string & text,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback,bool systemApi)72 RetError AccessibleAbilityChannel::SearchElementInfosByText(const int32_t accessibilityWindowId,
73 const int64_t elementId, const std::string& text, const int32_t requestId,
74 const sptr<IAccessibilityElementOperatorCallback>& callback, bool systemApi)
75 {
76 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel SearchElementInfosByText";
77 (void)accessibilityWindowId;
78 (void)elementId;
79 (void)text;
80 (void)requestId;
81 (void)callback;
82 (void)systemApi;
83 return RET_OK;
84 }
85
FindFocusedElementInfo(const int32_t accessibilityWindowId,const int64_t elementId,const int32_t focusType,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback,bool systemApi)86 RetError AccessibleAbilityChannel::FindFocusedElementInfo(const int32_t accessibilityWindowId,
87 const int64_t elementId, const int32_t focusType, const int32_t requestId,
88 const sptr<IAccessibilityElementOperatorCallback>& callback, bool systemApi)
89 {
90 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel FindFocusedElementInfo";
91 (void)accessibilityWindowId;
92 (void)elementId;
93 (void)focusType;
94 (void)requestId;
95 (void)callback;
96 (void)systemApi;
97 return RET_OK;
98 }
99
FocusMoveSearch(const int32_t accessibilityWindowId,const int64_t elementId,const int32_t direction,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback,bool systemApi)100 RetError AccessibleAbilityChannel::FocusMoveSearch(const int32_t accessibilityWindowId, const int64_t elementId,
101 const int32_t direction, const int32_t requestId, const sptr<IAccessibilityElementOperatorCallback>& callback,
102 bool systemApi)
103 {
104 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel FocusMoveSearch";
105 (void)accessibilityWindowId;
106 (void)elementId;
107 (void)direction;
108 (void)requestId;
109 (void)callback;
110 (void)systemApi;
111 return RET_OK;
112 }
113
ExecuteAction(const int32_t accessibilityWindowId,const int64_t elementId,const int32_t action,const std::map<std::string,std::string> & actionArguments,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback)114 RetError AccessibleAbilityChannel::ExecuteAction(const int32_t accessibilityWindowId, const int64_t elementId,
115 const int32_t action, const std::map<std::string, std::string> &actionArguments, const int32_t requestId,
116 const sptr<IAccessibilityElementOperatorCallback>& callback)
117 {
118 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel ExecuteAction";
119 (void)accessibilityWindowId;
120 (void)elementId;
121 (void)action;
122 (void)actionArguments;
123 (void)requestId;
124 (void)callback;
125 return RET_OK;
126 }
127
GetWindows(uint64_t displayId,std::vector<AccessibilityWindowInfo> & windows,bool systemApi) const128 RetError AccessibleAbilityChannel::GetWindows(uint64_t displayId, std::vector<AccessibilityWindowInfo> &windows,
129 bool systemApi) const
130 {
131 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel GetWindows";
132 (void)displayId;
133 (void)windows;
134 (void)systemApi;
135 sptr<AccessibleAbilityConnection> clientConnection = GetConnection(accountId_, clientName_);
136 if (!clientConnection) {
137 HILOG_ERROR("There is no client connection");
138 return RET_ERR_NO_CONNECTION;
139 }
140
141 if (!(clientConnection->GetAbilityInfo().GetCapabilityValues() & Capability::CAPABILITY_RETRIEVE)) {
142 HILOG_ERROR("AccessibleAbilityChannel::GetWindows failed: no capability");
143 return RET_ERR_NO_CAPABILITY;
144 }
145 return RET_OK;
146 }
147
GetWindows(std::vector<AccessibilityWindowInfo> & windows,bool systemApi)148 RetError AccessibleAbilityChannel::GetWindows(std::vector<AccessibilityWindowInfo> &windows, bool systemApi)
149 {
150 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel GetWindows";
151 uint64_t displayId = 0;
152 return GetWindows(displayId, windows, systemApi);
153 }
154
GetWindow(const int32_t windowId,AccessibilityWindowInfo & windowInfo)155 RetError AccessibleAbilityChannel::GetWindow(const int32_t windowId, AccessibilityWindowInfo &windowInfo)
156 {
157 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel GetWindow";
158 (void)windowId;
159 (void)windowInfo;
160 return RET_OK;
161 }
162
SetTargetBundleName(const std::vector<std::string> & targetBundleNames)163 RetError AccessibleAbilityChannel::SetTargetBundleName(const std::vector<std::string> &targetBundleNames)
164 {
165 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel SetTargetBundleName";
166 (void)targetBundleNames;
167 return RET_OK;
168 }
169
GetWindowsByDisplayId(const uint64_t displayId,std::vector<AccessibilityWindowInfo> & windows,bool systemApi)170 RetError AccessibleAbilityChannel::GetWindowsByDisplayId(const uint64_t displayId,
171 std::vector<AccessibilityWindowInfo> &windows, bool systemApi)
172 {
173 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel GetWindowsByDisplayId";
174 return GetWindows(displayId, windows, systemApi);
175 }
176
SetOnKeyPressEventResult(const bool handled,const int32_t sequence)177 void AccessibleAbilityChannel::SetOnKeyPressEventResult(const bool handled, const int32_t sequence)
178 {
179 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel SetOnKeyPressEventResult";
180 (void)handled;
181 (void)sequence;
182 }
183
SendSimulateGesture(const std::shared_ptr<AccessibilityGestureInjectPath> & gesturePath)184 RetError AccessibleAbilityChannel::SendSimulateGesture(
185 const std::shared_ptr<AccessibilityGestureInjectPath>& gesturePath)
186 {
187 GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel SendSimulateGesture";
188 (void)gesturePath;
189 return RET_OK;
190 }
191
GetConnection(int32_t accountId,const std::string & clientName)192 sptr<AccessibleAbilityConnection> AccessibleAbilityChannel::GetConnection(int32_t accountId,
193 const std::string &clientName)
194 {
195 sptr<AccessibilityAccountData> accountData =
196 Singleton<AccessibleAbilityManagerService>::GetInstance().GetAccountData(accountId);
197 if (!accountData) {
198 HILOG_ERROR("accountData is nullptr");
199 return nullptr;
200 }
201
202 return accountData->GetAccessibleAbilityConnection(clientName);
203 }
204
ConfigureEvents(const std::vector<uint32_t> needEvents)205 RetError AccessibleAbilityChannel::ConfigureEvents(const std::vector<uint32_t> needEvents)
206 {
207 return RET_OK;
208 }
209
AccessibleAbilityConnection(int32_t accountId,int32_t connectionId,AccessibilityAbilityInfo & abilityInfo)210 AccessibleAbilityConnection::AccessibleAbilityConnection(
211 int32_t accountId, int32_t connectionId, AccessibilityAbilityInfo& abilityInfo)
212 {
213 accountId_ = accountId;
214 connectionId_ = connectionId;
215 abilityInfo_ = abilityInfo;
216 }
217
~AccessibleAbilityConnection()218 AccessibleAbilityConnection::~AccessibleAbilityConnection()
219 {
220 HILOG_DEBUG("start");
221 }
222
OnAbilityConnectDone(const AppExecFwk::ElementName & element,const sptr<IRemoteObject> & remoteObject,int32_t resultCode)223 void AccessibleAbilityConnection::OnAbilityConnectDone(
224 const AppExecFwk::ElementName& element, const sptr<IRemoteObject>& remoteObject, int32_t resultCode)
225 {
226 (void)element;
227 (void)remoteObject;
228 (void)resultCode;
229 auto accountData = Singleton<AccessibleAbilityManagerService>::GetInstance().GetAccountData(accountId_);
230 sptr<AccessibleAbilityConnection> pointer = this;
231 if (accountData) {
232 accountData->AddConnectedAbility(pointer);
233 }
234 }
235
OnAbilityDisconnectDone(const AppExecFwk::ElementName & element,int32_t resultCode)236 void AccessibleAbilityConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementName& element, int32_t resultCode)
237 {
238 (void)element;
239 (void)resultCode;
240 return;
241 }
242
OnKeyPressEvent(const MMI::KeyEvent & keyEvent,const int32_t sequence)243 bool AccessibleAbilityConnection::OnKeyPressEvent(const MMI::KeyEvent& keyEvent, const int32_t sequence)
244 {
245 (void)sequence;
246 if (keyEvent.GetKeyAction() == MMI::KeyEvent::KEY_ACTION_UP) {
247 return false;
248 }
249 return true;
250 }
251
IsWantedEvent(int32_t eventType)252 bool AccessibleAbilityConnection::IsWantedEvent(int32_t eventType)
253 {
254 (void)eventType;
255 return true;
256 }
257
CreateWant(AppExecFwk::ElementName & element)258 AAFwk::Want CreateWant(AppExecFwk::ElementName& element)
259 {
260 (void)element;
261 AAFwk::Want want;
262 return want;
263 }
264
Disconnect()265 void AccessibleAbilityConnection::Disconnect()
266 {
267 HILOG_DEBUG("start");
268 AccessibilityAbilityHelper::GetInstance().SetTestChannelId(-1);
269 }
270
Connect(const AppExecFwk::ElementName & element)271 bool AccessibleAbilityConnection::Connect(const AppExecFwk::ElementName& element)
272 {
273 HILOG_DEBUG("start");
274 elementName_ = element;
275 return true;
276 }
277
GetChannelId()278 int32_t AccessibleAbilityConnection::GetChannelId()
279 {
280 HILOG_DEBUG("connectionId_ is %{public}d", connectionId_);
281 return connectionId_;
282 }
283
OnRemoteDied(const wptr<IRemoteObject> & remote)284 void AccessibleAbilityConnection::AccessibleAbilityConnectionDeathRecipient::OnRemoteDied(
285 const wptr<IRemoteObject>& remote)
286 {
287 (void)remote;
288 // Temp deal: notify setting
289 }
290
OnAccessibilityEvent(AccessibilityEventInfo & eventInfo)291 void AccessibleAbilityConnection::OnAccessibilityEvent(AccessibilityEventInfo &eventInfo)
292 {
293 (void)eventInfo;
294 }
295
OnAbilityConnectDoneSync(const AppExecFwk::ElementName & element,const sptr<IRemoteObject> & remoteObject)296 void AccessibleAbilityConnection::OnAbilityConnectDoneSync(const AppExecFwk::ElementName &element,
297 const sptr<IRemoteObject> &remoteObject)
298 {
299 HILOG_DEBUG();
300 auto accountData = Singleton<AccessibleAbilityManagerService>::GetInstance().GetAccountData(accountId_);
301 if (!accountData) {
302 HILOG_ERROR("accountData is nullptr.");
303 return;
304 }
305 if (!remoteObject) {
306 HILOG_ERROR("AccessibleAbilityConnection::OnAbilityConnectDone get remoteObject failed");
307 return;
308 }
309 elementName_ = element;
310
311 sptr<AccessibleAbilityConnection> pointer = this;
312 accountData->AddConnectedAbility(pointer);
313 }
314
OnAbilityDisconnectDoneSync(const AppExecFwk::ElementName & element)315 void AccessibleAbilityConnection::OnAbilityDisconnectDoneSync(const AppExecFwk::ElementName &element)
316 {
317 HILOG_DEBUG("start");
318 (void)element;
319 }
320
EnableScreenCurtain(bool isEnable)321 RetError AccessibleAbilityChannel::EnableScreenCurtain(bool isEnable)
322 {
323 (void)isEnable;
324 return RET_OK;
325 }
326
GetCursorPosition(const int32_t accessibilityWindowId,const int64_t elementId,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback)327 RetError AccessibleAbilityChannel::GetCursorPosition(const int32_t accessibilityWindowId, const int64_t elementId,
328 const int32_t requestId, const sptr<IAccessibilityElementOperatorCallback> &callback)
329 {
330 GTEST_LOG_(INFO) << "MOCK AccessibleAbilitychannel GetCursorPosition";
331 (void)accessibilityWindowId;
332 (void)elementId;
333 (void)requestId;
334 (void)callback;
335 return RET_OK;
336 }
337
SetIsRegisterDisconnectCallback(bool isRegister)338 RetError AccessibleAbilityChannel::SetIsRegisterDisconnectCallback(bool isRegister)
339 {
340 GTEST_LOG_(INFO) << "MOCK AccessibleAbilitychannel SetIsRegisterDisconnectCallback";
341 (void)isRegister;
342 return RET_OK;
343 }
344
NotifyDisconnect()345 RetError AccessibleAbilityChannel::NotifyDisconnect()
346 {
347 GTEST_LOG_(INFO) << "MOCK AccessibleAbilitychannel NotifyDisconnect";
348 return RET_OK;
349 }
350
SearchElementInfoBySpecificProperty(const ElementBasicInfo elementBasicInfo,const SpecificPropertyParam & param,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback)351 void AccessibleAbilityChannel::SearchElementInfoBySpecificProperty(const ElementBasicInfo elementBasicInfo,
352 const SpecificPropertyParam& param, const int32_t requestId,
353 const sptr<IAccessibilityElementOperatorCallback> &callback)
354 {
355 GTEST_LOG_(INFO) << "MOCK AccessibleAbilitychannel SearchElementInfoBySpecificProperty";
356 (void)elementBasicInfo;
357 (void)param;
358 (void)requestId;
359 (void)callback;
360 }
361
GetIsRegisterDisconnectCallback() const362 bool AccessibleAbilityConnection::GetIsRegisterDisconnectCallback() const
363 {
364 return false;
365 }
366
SetIsRegisterDisconnectCallback(bool isRegister)367 void AccessibleAbilityConnection::SetIsRegisterDisconnectCallback(bool isRegister)
368 {
369 (void)isRegister;
370 return;
371 }
372
NotifyDisconnect()373 void AccessibleAbilityConnection::NotifyDisconnect()
374 {
375 return;
376 }
377
DisconnectAbility()378 void AccessibleAbilityConnection::DisconnectAbility()
379 {
380 return;
381 }
382
HoldRunningLock()383 RetError AccessibleAbilityChannel::HoldRunningLock()
384 {
385 return RET_OK;
386 }
387
UnholdRunningLock()388 RetError AccessibleAbilityChannel::UnholdRunningLock()
389 {
390 return RET_OK;
391 }
392 } // namespace Accessibility
393 } // namespace OHOS