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