• 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         }
74 
75     public:
76         int64_t elementId_;
77         int32_t mode_;
78         int32_t requestId_;
79         std::vector<ArkUI_AccessibilityElementInfo> elementInfosList_;
80         ArkUI_AccessibilityFocusType focusType_;
81         ArkUI_AccessibilityElementInfo focusElementInfo_;
82         ArkUI_AccessibilityElementInfo nextFocusElementInfo_;
83         ArkUI_AccessibilityFocusMoveDirection direction_;
84         ArkUI_Accessibility_ActionType action_;
85         std::map<std::string, std::string> originActionArguments_;
86         std::map<std::string, std::string> resultActionArguments_;
87         int32_t cursorPosition_;
88         bool receiveClear_;
89 
90         bool registerResult_;
91 
92         int32_t errorCode_;
93         int32_t injectResult_ = 0;
94         int32_t injectActionResult_ = 0;
95         ArkUI_AccessibilityElementInfo elementInfo_;
96 };
97 
98 class MockOhAccessibilityProvider : public AccessibilityProvider {
99     DECLARE_ACE_TYPE(MockOhAccessibilityProvider, AccessibilityProvider);
100 public:
101     MockOhAccessibilityProvider() = default;
FindAccessibilityNodeInfosById(const int64_t elementId,const int32_t mode,const int32_t requestId,std::vector<ArkUI_AccessibilityElementInfo> & infos)102     int32_t FindAccessibilityNodeInfosById(
103         const int64_t elementId, const int32_t mode, const int32_t requestId,
104         std::vector<ArkUI_AccessibilityElementInfo>& infos) override
105     {
106         providerMockResult_.elementId_ = elementId;
107         providerMockResult_.mode_ = mode;
108         providerMockResult_.requestId_ = requestId;
109         int64_t startElementId = elementId;
110         if (startElementId == -1) {
111             startElementId = 0;
112         }
113 
114         if (startElementId >= MAX_TEST_ELEMENT_COUNT) {
115             return -1;
116         }
117 
118         if (mode == static_cast<uint32_t>(Accessibility::PREFETCH_RECURSIVE_CHILDREN)) {
119             std::vector<ArkUI_AccessibilityElementInfo>::iterator start
120                 = providerMockResult_.elementInfosList_.begin() + startElementId;
121             std::vector<ArkUI_AccessibilityElementInfo>::iterator end = providerMockResult_.elementInfosList_.end();
122             infos.reserve(std::distance(start, end));
123             std::copy(start, end, std::back_inserter(infos));
124         } else {
125             infos.push_back(providerMockResult_.elementInfosList_[startElementId]);
126         }
127 
128         return providerMockResult_.injectResult_;
129     }
FindAccessibilityNodeInfosByText(const int64_t elementId,std::string text,const int32_t requestId,std::vector<ArkUI_AccessibilityElementInfo> & infos)130     int32_t FindAccessibilityNodeInfosByText(
131         const int64_t elementId, std::string text, const int32_t requestId,
132         std::vector<ArkUI_AccessibilityElementInfo>& infos) override
133     {
134         providerMockResult_.elementId_ = elementId;
135         providerMockResult_.requestId_ = requestId;
136 
137         std::string textStr(text);
138         for (const auto &elementInfo: providerMockResult_.elementInfosList_) {
139             if (elementInfo.GetContents() == textStr) {
140                 infos.push_back(elementInfo);
141             }
142         }
143 
144         return providerMockResult_.injectResult_;
145     }
FindFocusedAccessibilityNode(const int64_t elementId,int32_t focusType,const int32_t requestId,ArkUI_AccessibilityElementInfo & elementInfo)146     int32_t FindFocusedAccessibilityNode(
147         const int64_t elementId, int32_t focusType, const int32_t requestId,
148         ArkUI_AccessibilityElementInfo& elementInfo) override
149     {
150         elementInfo = providerMockResult_.focusElementInfo_;
151         return providerMockResult_.injectResult_;
152     }
FindNextFocusAccessibilityNode(const int64_t elementId,int32_t direction,const int32_t requestId,ArkUI_AccessibilityElementInfo & elementInfo)153     int32_t FindNextFocusAccessibilityNode(
154         const int64_t elementId, int32_t direction, const int32_t requestId,
155         ArkUI_AccessibilityElementInfo& elementInfo) override
156     {
157         elementInfo = providerMockResult_.nextFocusElementInfo_;
158         return providerMockResult_.injectResult_;
159     }
ExecuteAccessibilityAction(const int64_t elementId,int32_t action,const int32_t requestId,const std::map<std::string,std::string> & actionArguments)160     int32_t ExecuteAccessibilityAction(
161         const int64_t elementId, int32_t action, const int32_t requestId,
162         const std::map<std::string, std::string>& actionArguments) override
163     {
164         return providerMockResult_.injectActionResult_;
165     }
ClearFocusedAccessibilityNode()166     int32_t ClearFocusedAccessibilityNode() override
167     {
168         providerMockResult_.receiveClear_ = true;
169         return providerMockResult_.injectResult_;
170     }
GetAccessibilityNodeCursorPosition(const int64_t elementId,const int32_t requestId,int32_t & cursorPosition)171     int32_t GetAccessibilityNodeCursorPosition(
172         const int64_t elementId,
173         const int32_t requestId,
174         int32_t &cursorPosition) override
175     {
176         cursorPosition = SPECIAL_CURSOR_POSTION;
177         return providerMockResult_.injectResult_;
178     }
SendAccessibilityAsyncEvent(const ArkUI_AccessibilityEventInfo & accessibilityEvent,void (* callback)(int32_t errorCode))179     int32_t SendAccessibilityAsyncEvent(
180         const ArkUI_AccessibilityEventInfo& accessibilityEvent,
181         void (*callback)(int32_t errorCode)) override
182     {
183         return providerMockResult_.injectResult_;
184     }
SendThirdAccessibilityProvider(const std::weak_ptr<ThirdAccessibilityManager> & thirdAccessibilityManager)185     void SendThirdAccessibilityProvider(
186         const std::weak_ptr<ThirdAccessibilityManager>& thirdAccessibilityManager)
187         override {}
188 
189 public:
SetInjectResult(int32_t injectResult)190     void SetInjectResult(int32_t injectResult)
191     {
192         providerMockResult_.injectResult_ = injectResult;
193     }
194 
SetInjectActionResult(int32_t injectResult)195     void SetInjectActionResult(int32_t injectResult)
196     {
197         providerMockResult_.injectActionResult_ = injectResult;
198     }
199 
200     ProviderMockResult providerMockResult_;
201 };
202 
203 }  // namespace OHOS::Ace
204 
205 #endif // TEST_UNITTEST_CORE_ACCESSIBILITY_JS_THIRD_PROVIDER_INTERACTION_OPERATION_TEST_H