• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 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 #ifndef TEST_UNITTEST_CORE_ACCESSIBILITY_JS_THIRD_PROVIDER_INTERACTION_OPERATION_TEST_H
17 #define TEST_UNITTEST_CORE_ACCESSIBILITY_JS_THIRD_PROVIDER_INTERACTION_OPERATION_TEST_H
18 
19 #include "adapter/ohos/osal/js_third_provider_interaction_operation.h"
20 
21 namespace OHOS::Ace {
22 constexpr int32_t MAX_TEST_ELEMENT_COUNT = 10;
23 constexpr int32_t TEST_PARAMETER_OFFSET1 = 1;
24 constexpr int32_t TEST_PARAMETER_OFFSET2 = 2;
25 constexpr int32_t TEST_PARAMETER_OFFSET3 = 3;
26 constexpr int32_t SPECIAL_CURSOR_POSTION = 100;
27 constexpr int32_t INVALID_PARENT_ID = -2100000;
28 
29 class ProviderMockResult {
30     public:
ProviderMockResult()31         ProviderMockResult()
32         {
33             for (int32_t i = 0; i < MAX_TEST_ELEMENT_COUNT; i++) {
34                 ArkUI_AccessibilityElementInfo tempElementInfo;
35                 tempElementInfo.SetElementId(i);
36                 tempElementInfo.SetContents("testForFindByText");
37                 if (i < MAX_TEST_ELEMENT_COUNT - 1) {
38                     tempElementInfo.AddChildNodeId(i + 1);
39                 }
40 
41                 if (i > 0) {
42                     tempElementInfo.SetParentId(i - 1);
43                 } else {
44                     tempElementInfo.SetParentId(INVALID_PARENT_ID);
45                 }
46 
47                 elementInfosList_.push_back(tempElementInfo);
48             }
49 
50             focusElementInfo_.SetElementId(
51                 MAX_TEST_ELEMENT_COUNT + TEST_PARAMETER_OFFSET1);
52             nextFocusElementInfo_.SetElementId(
53                 MAX_TEST_ELEMENT_COUNT + TEST_PARAMETER_OFFSET2);
54 
55             originActionArguments_.emplace("action0", "1");
56             originActionArguments_.emplace("action1", "2");
57             cursorPosition_ = MAX_TEST_ELEMENT_COUNT + TEST_PARAMETER_OFFSET3;
58         }
59         ~ProviderMockResult() = default;
60 
Reset()61         void Reset()
62         {
63             elementId_ = 0;
64             mode_ = static_cast<int32_t>(ARKUI_ACCESSIBILITY_NATIVE_SEARCH_MODE_PREFETCH_CURRENT);
65             requestId_ = 0;
66             focusType_ = ARKUI_ACCESSIBILITY_NATIVE_FOCUS_TYPE_INVALID;
67             direction_ = ARKUI_ACCESSIBILITY_NATIVE_DIRECTION_INVALID;
68             action_ = ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_INVALID;
69             receiveClear_ = false;
70             errorCode_ = 0;
71             injectResult_ = 0;
72             injectActionResult_ = 0;
73             resultActionArguments_.clear();
74         }
75 
76     public:
77         int64_t elementId_;
78         int32_t mode_;
79         int32_t requestId_;
80         std::vector<ArkUI_AccessibilityElementInfo> elementInfosList_;
81         ArkUI_AccessibilityFocusType focusType_;
82         ArkUI_AccessibilityElementInfo focusElementInfo_;
83         ArkUI_AccessibilityElementInfo nextFocusElementInfo_;
84         ArkUI_AccessibilityFocusMoveDirection direction_;
85         ArkUI_Accessibility_ActionType action_;
86         std::map<std::string, std::string> originActionArguments_;
87         std::map<std::string, std::string> resultActionArguments_;
88         int32_t cursorPosition_;
89         bool receiveClear_;
90 
91         bool registerResult_;
92 
93         int32_t errorCode_;
94         int32_t injectResult_ = 0;
95         int32_t injectActionResult_ = 0;
96         ArkUI_AccessibilityElementInfo elementInfo_;
97 };
98 
99 class MockOhAccessibilityProvider : public AccessibilityProvider {
100     DECLARE_ACE_TYPE(MockOhAccessibilityProvider, AccessibilityProvider);
101 public:
102     MockOhAccessibilityProvider() = default;
FindAccessibilityNodeInfosById(const int64_t elementId,const int32_t mode,const int32_t requestId,std::vector<ArkUI_AccessibilityElementInfo> & infos)103     int32_t FindAccessibilityNodeInfosById(
104         const int64_t elementId, const int32_t mode, const int32_t requestId,
105         std::vector<ArkUI_AccessibilityElementInfo>& infos) override
106     {
107         providerMockResult_.elementId_ = elementId;
108         providerMockResult_.mode_ = mode;
109         providerMockResult_.requestId_ = requestId;
110         int64_t startElementId = elementId;
111         if (startElementId == -1) {
112             startElementId = 0;
113         }
114 
115         if (startElementId >= MAX_TEST_ELEMENT_COUNT) {
116             return -1;
117         }
118 
119         if (mode == static_cast<uint32_t>(Accessibility::PREFETCH_RECURSIVE_CHILDREN)) {
120             std::vector<ArkUI_AccessibilityElementInfo>::iterator start
121                 = providerMockResult_.elementInfosList_.begin() + startElementId;
122             std::vector<ArkUI_AccessibilityElementInfo>::iterator end = providerMockResult_.elementInfosList_.end();
123             infos.reserve(std::distance(start, end));
124             std::copy(start, end, std::back_inserter(infos));
125         } else {
126             infos.push_back(providerMockResult_.elementInfosList_[startElementId]);
127         }
128 
129         return providerMockResult_.injectResult_;
130     }
FindAccessibilityNodeInfosByText(const int64_t elementId,std::string text,const int32_t requestId,std::vector<ArkUI_AccessibilityElementInfo> & infos)131     int32_t FindAccessibilityNodeInfosByText(
132         const int64_t elementId, std::string text, const int32_t requestId,
133         std::vector<ArkUI_AccessibilityElementInfo>& infos) override
134     {
135         providerMockResult_.elementId_ = elementId;
136         providerMockResult_.requestId_ = requestId;
137 
138         std::string textStr(text);
139         for (const auto &elementInfo: providerMockResult_.elementInfosList_) {
140             if (elementInfo.GetContents() == textStr) {
141                 infos.push_back(elementInfo);
142             }
143         }
144 
145         return providerMockResult_.injectResult_;
146     }
FindFocusedAccessibilityNode(const int64_t elementId,int32_t focusType,const int32_t requestId,ArkUI_AccessibilityElementInfo & elementInfo)147     int32_t FindFocusedAccessibilityNode(
148         const int64_t elementId, int32_t focusType, const int32_t requestId,
149         ArkUI_AccessibilityElementInfo& elementInfo) override
150     {
151         elementInfo = providerMockResult_.focusElementInfo_;
152         return providerMockResult_.injectResult_;
153     }
FindNextFocusAccessibilityNode(const int64_t elementId,int32_t direction,const int32_t requestId,ArkUI_AccessibilityElementInfo & elementInfo)154     int32_t FindNextFocusAccessibilityNode(
155         const int64_t elementId, int32_t direction, const int32_t requestId,
156         ArkUI_AccessibilityElementInfo& elementInfo) override
157     {
158         elementInfo = providerMockResult_.nextFocusElementInfo_;
159         return providerMockResult_.injectResult_;
160     }
ExecuteAccessibilityAction(const int64_t elementId,int32_t action,const int32_t requestId,const std::map<std::string,std::string> & actionArguments)161     int32_t ExecuteAccessibilityAction(
162         const int64_t elementId, int32_t action, const int32_t requestId,
163         const std::map<std::string, std::string>& actionArguments) override
164     {
165         providerMockResult_.resultActionArguments_ = actionArguments;
166         return providerMockResult_.injectActionResult_;
167     }
ClearFocusedAccessibilityNode()168     int32_t ClearFocusedAccessibilityNode() override
169     {
170         providerMockResult_.receiveClear_ = true;
171         return providerMockResult_.injectResult_;
172     }
GetAccessibilityNodeCursorPosition(const int64_t elementId,const int32_t requestId,int32_t & cursorPosition)173     int32_t GetAccessibilityNodeCursorPosition(
174         const int64_t elementId,
175         const int32_t requestId,
176         int32_t &cursorPosition) override
177     {
178         cursorPosition = SPECIAL_CURSOR_POSTION;
179         return providerMockResult_.injectResult_;
180     }
SendAccessibilityAsyncEvent(const ArkUI_AccessibilityEventInfo & accessibilityEvent,void (* callback)(int32_t errorCode))181     int32_t SendAccessibilityAsyncEvent(
182         const ArkUI_AccessibilityEventInfo& accessibilityEvent,
183         void (*callback)(int32_t errorCode)) override
184     {
185         return providerMockResult_.injectResult_;
186     }
SendThirdAccessibilityProvider(const std::weak_ptr<ThirdAccessibilityManager> & thirdAccessibilityManager)187     void SendThirdAccessibilityProvider(
188         const std::weak_ptr<ThirdAccessibilityManager>& thirdAccessibilityManager)
189         override {}
190 
191 public:
SetInjectResult(int32_t injectResult)192     void SetInjectResult(int32_t injectResult)
193     {
194         providerMockResult_.injectResult_ = injectResult;
195     }
196 
SetInjectActionResult(int32_t injectResult)197     void SetInjectActionResult(int32_t injectResult)
198     {
199         providerMockResult_.injectActionResult_ = injectResult;
200     }
201 
202     ProviderMockResult providerMockResult_;
203 };
204 
205 }  // namespace OHOS::Ace
206 
207 #endif // TEST_UNITTEST_CORE_ACCESSIBILITY_JS_THIRD_PROVIDER_INTERACTION_OPERATION_TEST_H