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