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 "hilog_wrapper.h"
25 
26 namespace OHOS {
27 namespace Accessibility {
MockAccessibleAbilityConnection(int32_t accountId,int32_t connectionId,AccessibilityAbilityInfo & abilityInfo)28 MockAccessibleAbilityConnection::MockAccessibleAbilityConnection(int32_t accountId, int32_t connectionId,
29     AccessibilityAbilityInfo& abilityInfo)
30     : AccessibleAbilityConnection(accountId, connectionId, abilityInfo)
31 {
32     (void)accountId;
33     (void)connectionId;
34     (void)abilityInfo;
35 }
~MockAccessibleAbilityConnection()36 MockAccessibleAbilityConnection::~MockAccessibleAbilityConnection()
37 {}
38 
AccessibleAbilityChannel(const int32_t accountId,const std::string & clientName)39 AccessibleAbilityChannel::AccessibleAbilityChannel(const int32_t accountId, const std::string &clientName)
40     : clientName_(clientName), accountId_(accountId)
41 {
42 }
43 
SearchElementInfoByAccessibilityId(const ElementBasicInfo elementBasicInfo,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback,const int32_t mode,bool isFilter)44 RetError AccessibleAbilityChannel::SearchElementInfoByAccessibilityId(const ElementBasicInfo elementBasicInfo,
45     const int32_t requestId, const sptr<IAccessibilityElementOperatorCallback>& callback,
46     const int32_t mode, bool isFilter)
47 {
48     GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel SearchElementInfoByAccessibilityId";
49     (void)elementBasicInfo;
50     (void)requestId;
51     (void)callback;
52     (void)mode;
53     (void)isFilter;
54     return RET_OK;
55 }
56 
SearchElementInfosByText(const int32_t accessibilityWindowId,const int64_t elementId,const std::string & text,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback)57 RetError AccessibleAbilityChannel::SearchElementInfosByText(const int32_t accessibilityWindowId,
58     const int64_t elementId, const std::string& text, const int32_t requestId,
59     const sptr<IAccessibilityElementOperatorCallback>& callback)
60 {
61     GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel SearchElementInfosByText";
62     (void)accessibilityWindowId;
63     (void)elementId;
64     (void)text;
65     (void)requestId;
66     (void)callback;
67     return RET_OK;
68 }
69 
FindFocusedElementInfo(const int32_t accessibilityWindowId,const int64_t elementId,const int32_t focusType,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback)70 RetError AccessibleAbilityChannel::FindFocusedElementInfo(const int32_t accessibilityWindowId,
71     const int64_t elementId, const int32_t focusType, const int32_t requestId,
72     const sptr<IAccessibilityElementOperatorCallback>& callback)
73 {
74     GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel FindFocusedElementInfo";
75     (void)accessibilityWindowId;
76     (void)elementId;
77     (void)focusType;
78     (void)requestId;
79     (void)callback;
80     return RET_OK;
81 }
82 
FocusMoveSearch(const int32_t accessibilityWindowId,const int64_t elementId,const int32_t direction,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback)83 RetError AccessibleAbilityChannel::FocusMoveSearch(const int32_t accessibilityWindowId, const int64_t elementId,
84     const int32_t direction, const int32_t requestId, const sptr<IAccessibilityElementOperatorCallback>& callback)
85 {
86     GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel FocusMoveSearch";
87     (void)accessibilityWindowId;
88     (void)elementId;
89     (void)direction;
90     (void)requestId;
91     (void)callback;
92     return RET_OK;
93 }
94 
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)95 RetError AccessibleAbilityChannel::ExecuteAction(const int32_t accessibilityWindowId, const int64_t elementId,
96     const int32_t action, const std::map<std::string, std::string> &actionArguments, const int32_t requestId,
97     const sptr<IAccessibilityElementOperatorCallback>& callback)
98 {
99     GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel ExecuteAction";
100     (void)accessibilityWindowId;
101     (void)elementId;
102     (void)action;
103     (void)actionArguments;
104     (void)requestId;
105     (void)callback;
106     return RET_OK;
107 }
108 
GetWindows(uint64_t displayId,std::vector<AccessibilityWindowInfo> & windows) const109 RetError AccessibleAbilityChannel::GetWindows(uint64_t displayId, std::vector<AccessibilityWindowInfo> &windows) const
110 {
111     GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel GetWindows";
112     (void)displayId;
113     (void)windows;
114     sptr<AccessibleAbilityConnection> clientConnection = GetConnection(accountId_, clientName_);
115     if (!clientConnection) {
116         HILOG_ERROR("There is no client connection");
117         return RET_ERR_NO_CONNECTION;
118     }
119 
120     if (!(clientConnection->GetAbilityInfo().GetCapabilityValues() & Capability::CAPABILITY_RETRIEVE)) {
121         HILOG_ERROR("AccessibleAbilityChannel::GetWindows failed: no capability");
122         return RET_ERR_NO_CAPABILITY;
123     }
124     return RET_OK;
125 }
126 
GetWindows(std::vector<AccessibilityWindowInfo> & windows)127 RetError AccessibleAbilityChannel::GetWindows(std::vector<AccessibilityWindowInfo> &windows)
128 {
129     GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel GetWindows";
130     uint64_t displayId = 0;
131     return GetWindows(displayId, windows);
132 }
133 
GetWindow(const int32_t windowId,AccessibilityWindowInfo & windowInfo)134 RetError AccessibleAbilityChannel::GetWindow(const int32_t windowId, AccessibilityWindowInfo &windowInfo)
135 {
136     GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel GetWindow";
137     (void)windowId;
138     (void)windowInfo;
139     return RET_OK;
140 }
141 
SetTargetBundleName(const std::vector<std::string> & targetBundleNames)142 RetError AccessibleAbilityChannel::SetTargetBundleName(const std::vector<std::string> &targetBundleNames)
143 {
144     GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel SetTargetBundleName";
145     (void)targetBundleNames;
146     return RET_OK;
147 }
148 
GetWindowsByDisplayId(const uint64_t displayId,std::vector<AccessibilityWindowInfo> & windows)149 RetError AccessibleAbilityChannel::GetWindowsByDisplayId(const uint64_t displayId,
150     std::vector<AccessibilityWindowInfo> &windows)
151 {
152     GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel GetWindowsByDisplayId";
153     return GetWindows(displayId, windows);
154 }
155 
SetOnKeyPressEventResult(const bool handled,const int32_t sequence)156 void AccessibleAbilityChannel::SetOnKeyPressEventResult(const bool handled, const int32_t sequence)
157 {
158     GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel SetOnKeyPressEventResult";
159     (void)handled;
160     (void)sequence;
161 }
162 
SendSimulateGesture(const std::shared_ptr<AccessibilityGestureInjectPath> & gesturePath)163 RetError AccessibleAbilityChannel::SendSimulateGesture(
164     const std::shared_ptr<AccessibilityGestureInjectPath>& gesturePath)
165 {
166     GTEST_LOG_(INFO) << "MOCK AccessibleAbilityChannel SendSimulateGesture";
167     (void)gesturePath;
168     return RET_OK;
169 }
170 
GetConnection(int32_t accountId,const std::string & clientName)171 sptr<AccessibleAbilityConnection> AccessibleAbilityChannel::GetConnection(int32_t accountId,
172     const std::string &clientName)
173 {
174     sptr<AccessibilityAccountData> accountData =
175         Singleton<AccessibleAbilityManagerService>::GetInstance().GetAccountData(accountId);
176     if (!accountData) {
177         HILOG_ERROR("accountData is nullptr");
178         return nullptr;
179     }
180 
181     return accountData->GetAccessibleAbilityConnection(clientName);
182 }
183 
AccessibleAbilityConnection(int32_t accountId,int32_t connectionId,AccessibilityAbilityInfo & abilityInfo)184 AccessibleAbilityConnection::AccessibleAbilityConnection(
185     int32_t accountId, int32_t connectionId, AccessibilityAbilityInfo& abilityInfo)
186 {
187     accountId_ = accountId;
188     connectionId_ = connectionId;
189     abilityInfo_ = abilityInfo;
190 }
191 
~AccessibleAbilityConnection()192 AccessibleAbilityConnection::~AccessibleAbilityConnection()
193 {
194     HILOG_DEBUG("start");
195 }
196 
OnAbilityConnectDone(const AppExecFwk::ElementName & element,const sptr<IRemoteObject> & remoteObject,int32_t resultCode)197 void AccessibleAbilityConnection::OnAbilityConnectDone(
198     const AppExecFwk::ElementName& element, const sptr<IRemoteObject>& remoteObject, int32_t resultCode)
199 {
200     (void)element;
201     (void)remoteObject;
202     (void)resultCode;
203     auto accountData = Singleton<AccessibleAbilityManagerService>::GetInstance().GetAccountData(accountId_);
204     sptr<AccessibleAbilityConnection> pointer = this;
205     if (accountData) {
206         accountData->AddConnectedAbility(pointer);
207     }
208 }
209 
OnAbilityDisconnectDone(const AppExecFwk::ElementName & element,int32_t resultCode)210 void AccessibleAbilityConnection::OnAbilityDisconnectDone(const AppExecFwk::ElementName& element, int32_t resultCode)
211 {
212     (void)element;
213     (void)resultCode;
214     return;
215 }
216 
OnKeyPressEvent(const MMI::KeyEvent & keyEvent,const int32_t sequence)217 bool AccessibleAbilityConnection::OnKeyPressEvent(const MMI::KeyEvent& keyEvent, const int32_t sequence)
218 {
219     (void)sequence;
220     if (keyEvent.GetKeyAction() == MMI::KeyEvent::KEY_ACTION_UP) {
221         return false;
222     }
223     return true;
224 }
225 
IsWantedEvent(int32_t eventType)226 bool AccessibleAbilityConnection::IsWantedEvent(int32_t eventType)
227 {
228     (void)eventType;
229     return true;
230 }
231 
CreateWant(AppExecFwk::ElementName & element)232 AAFwk::Want CreateWant(AppExecFwk::ElementName& element)
233 {
234     (void)element;
235     AAFwk::Want want;
236     return want;
237 }
238 
Disconnect()239 void AccessibleAbilityConnection::Disconnect()
240 {
241     HILOG_DEBUG("start");
242     AccessibilityAbilityHelper::GetInstance().SetTestChannelId(-1);
243 }
244 
Connect(const AppExecFwk::ElementName & element)245 bool AccessibleAbilityConnection::Connect(const AppExecFwk::ElementName& element)
246 {
247     HILOG_DEBUG("start");
248     elementName_ = element;
249     return true;
250 }
251 
GetChannelId()252 int32_t AccessibleAbilityConnection::GetChannelId()
253 {
254     HILOG_DEBUG("connectionId_ is %{public}d", connectionId_);
255     return connectionId_;
256 }
257 
OnRemoteDied(const wptr<IRemoteObject> & remote)258 void AccessibleAbilityConnection::AccessibleAbilityConnectionDeathRecipient::OnRemoteDied(
259     const wptr<IRemoteObject>& remote)
260 {
261     (void)remote;
262     // Temp deal: notify setting
263 }
264 
OnAccessibilityEvent(AccessibilityEventInfo & eventInfo)265 void AccessibleAbilityConnection::OnAccessibilityEvent(AccessibilityEventInfo &eventInfo)
266 {
267     (void)eventInfo;
268 }
269 
OnAbilityConnectDoneSync(const AppExecFwk::ElementName & element,const sptr<IRemoteObject> & remoteObject)270 void AccessibleAbilityConnection::OnAbilityConnectDoneSync(const AppExecFwk::ElementName &element,
271     const sptr<IRemoteObject> &remoteObject)
272 {
273     HILOG_DEBUG();
274     auto accountData = Singleton<AccessibleAbilityManagerService>::GetInstance().GetAccountData(accountId_);
275     if (!accountData) {
276         HILOG_ERROR("accountData is nullptr.");
277         return;
278     }
279     if (!remoteObject) {
280         HILOG_ERROR("AccessibleAbilityConnection::OnAbilityConnectDone get remoteObject failed");
281         return;
282     }
283     elementName_ = element;
284 
285     sptr<AccessibleAbilityConnection> pointer = this;
286     accountData->AddConnectedAbility(pointer);
287 }
288 
OnAbilityDisconnectDoneSync(const AppExecFwk::ElementName & element)289 void AccessibleAbilityConnection::OnAbilityDisconnectDoneSync(const AppExecFwk::ElementName &element)
290 {
291     HILOG_DEBUG("start");
292     (void)element;
293 }
294 
EnableScreenCurtain(bool isEnable)295 RetError AccessibleAbilityChannel::EnableScreenCurtain(bool isEnable)
296 {
297     (void)isEnable;
298     return RET_OK;
299 }
300 
GetCursorPosition(const int32_t accessibilityWindowId,const int64_t elementId,const int32_t requestId,const sptr<IAccessibilityElementOperatorCallback> & callback)301 RetError AccessibleAbilityChannel::GetCursorPosition(const int32_t accessibilityWindowId, const int64_t elementId,
302     const int32_t requestId, const sptr<IAccessibilityElementOperatorCallback> &callback)
303 {
304     GTEST_LOG_(INFO) << "MOCK AccessibleAbilitychannel GetCursorPosition";
305     (void)accessibilityWindowId;
306     (void)elementId;
307     (void)requestId;
308     (void)callback;
309     return RET_OK;
310 }
311 } // namespace Accessibility
312 } // namespace OHOS