1 /* 2 * Copyright (c) 2025 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 <string> 17 18 #include "gtest/gtest.h" 19 20 #define private public 21 #define protected public 22 #include "core/components_ng/base/frame_node.h" 23 #include "core/components_ng/base/ui_node.h" 24 #include "core/components_ng/base/view_stack_processor.h" 25 #include "core/components_ng/event/long_press_event.h" 26 #include "core/components_ng/pattern/button/button_pattern.h" 27 #include "core/components_ng/pattern/linear_layout/column_model.h" 28 #include "core/components_ng/pattern/linear_layout/column_model_ng.h" 29 #include "core/components_ng/pattern/linear_layout/linear_layout_pattern.h" 30 #include "core/components_ng/pattern/pattern.h" 31 #include "core/components_ng/pattern/text/span_node.h" 32 #include "core/components_ng/property/accessibility_property.h" 33 #include "core/components_v2/inspector/inspector_constants.h" 34 #include "core/components_ng/base/view_abstract_model_ng.h" 35 36 using namespace testing; 37 using namespace testing::ext; 38 39 namespace OHOS::Ace::NG { 40 namespace { 41 const InspectorFilter filter; 42 const OffsetF OFFSETF { 1.0, 1.0 }; 43 } // namespace 44 45 class MockPattern : public Pattern { 46 public: 47 MockPattern() = default; 48 ~MockPattern() override = default; 49 }; 50 class AccessibilityPropertyTestTwoNg : public testing::Test { 51 public: SetUpTestCase()52 static void SetUpTestCase() {}; TearDownTestCase()53 static void TearDownTestCase() {}; 54 }; 55 56 /** 57 * @tc.name: AccessibilityPropertyTestTwoNg001 58 * @tc.desc: test GetGroupTextRecursive 59 * @tc.type: FUNC 60 */ 61 HWTEST_F(AccessibilityPropertyTestTwoNg, AccessibilityPropertyTest001, TestSize.Level1) 62 { 63 AccessibilityProperty accessibilityProperty; 64 const std::string textValue = "textValue"; 65 accessibilityProperty.SetUserTextValue(textValue); 66 auto node1 = AceType::MakeRefPtr<FrameNode>("test1", 1, AceType::MakeRefPtr<Pattern>()); 67 WeakPtr<FrameNode> hostBak = AceType::WeakClaim(AceType::RawPtr(node1)); 68 accessibilityProperty.SetHost(hostBak); 69 std::string text = ""; 70 EXPECT_NE(hostBak.Upgrade(), nullptr); 71 hostBak.Upgrade()->SetInternal(); 72 accessibilityProperty.GetGroupTextRecursive(false, text, false); 73 EXPECT_EQ(text, ""); 74 75 accessibilityProperty.SetAccessibilityLevel(AccessibilityProperty::Level::NO_HIDE_DESCENDANTS); 76 hostBak.Upgrade()->isInternal_ = false; 77 accessibilityProperty.GetGroupTextRecursive(false, text, false); 78 EXPECT_EQ(text, ""); 79 80 text = ""; 81 accessibilityProperty.SetAccessibilityLevel(AccessibilityProperty::Level::YES_STR); 82 accessibilityProperty.GetGroupTextRecursive(false, text, false); 83 84 text = "text"; 85 accessibilityProperty.propText_ = ""; 86 accessibilityProperty.accessibilityText_ = ""; 87 accessibilityProperty.GetGroupTextRecursive(false, text, false); 88 EXPECT_EQ(text, "text"); 89 90 accessibilityProperty.propText_ = "text"; 91 accessibilityProperty.accessibilityText_ = "text"; 92 accessibilityProperty.GetGroupTextRecursive(false, text, false); 93 EXPECT_EQ(text, "text, text"); 94 95 EXPECT_TRUE(hostBak.Upgrade()->frameChildren_.empty()); 96 hostBak.Upgrade()->frameChildren_.insert(nullptr); 97 accessibilityProperty.GetGroupTextRecursive(false, text, false); 98 } 99 100 /** 101 * @tc.name: AccessibilityPropertyTestTwoNg002 102 * @tc.desc: CreateNodeSearchInfo 103 * @tc.type: FUNC 104 */ 105 HWTEST_F(AccessibilityPropertyTestTwoNg, AccessibilityPropertyTestTwoNg002, TestSize.Level1) 106 { 107 AccessibilityProperty accessibilityProperty; 108 AccessibilityHoverTestPath path; 109 auto root = FrameNode::GetOrCreateFrameNode( __anon08b032dd0202() 110 V2::BUTTON_ETS_TAG, 13, []() { return AceType::MakeRefPtr<ButtonPattern>(); }); 111 root->accessibilityProperty_ = nullptr; 112 NG::PointF hoverPoint(0, 0); 113 auto debugInfo = std::make_unique<AccessibilityProperty::HoverTestDebugTraceInfo>(); 114 accessibilityProperty.HoverTest(hoverPoint, root, debugInfo); 115 116 auto subNode = FrameNode::GetOrCreateFrameNode( __anon08b032dd0302() 117 V2::BUTTON_ETS_TAG, 1, []() { return AceType::MakeRefPtr<ButtonPattern>(); }); 118 root->AddChild(subNode); 119 root->parent_ = nullptr; 120 EXPECT_FALSE(subNode->IsRootNode()); 121 bool ancestorGroupFlag = false; 122 auto result = accessibilityProperty.CreateNodeSearchInfo(subNode, hoverPoint, ancestorGroupFlag); 123 } 124 125 /** 126 * @tc.name: AccessibilityPropertyTestTwoNg003 127 * @tc.desc: ProcessHoverTestRecursive 128 * @tc.type: FUNC 129 */ 130 HWTEST_F(AccessibilityPropertyTestTwoNg, AccessibilityPropertyTestTwoNg003, TestSize.Level1) 131 { 132 AccessibilityProperty accessibilityProperty; 133 AccessibilityHoverTestPath path; 134 auto root = FrameNode::GetOrCreateFrameNode( __anon08b032dd0402() 135 V2::BUTTON_ETS_TAG, 13, []() { return AceType::MakeRefPtr<ButtonPattern>(); }); 136 NG::PointF hoverPoint(0, 0); 137 auto debugInfo = std::make_unique<AccessibilityProperty::HoverTestDebugTraceInfo>(); 138 AccessibilityProperty::RecursiveParam recursiveParam; 139 recursiveParam.hitTarget = true; 140 recursiveParam.ancestorGroupFlag = true; 141 auto node1 = AceType::MakeRefPtr<FrameNode>("test1", 1, AceType::MakeRefPtr<Pattern>()); 142 WeakPtr<FrameNode> hostBak = AceType::WeakClaim(AceType::RawPtr(node1)); 143 accessibilityProperty.SetHost(hostBak); 144 EXPECT_NE(hostBak.Upgrade(), nullptr); 145 hostBak.Upgrade()->frameChildren_.insert(nullptr); 146 hostBak.Upgrade()->frameChildren_.insert(root); 147 auto result = accessibilityProperty.ProcessHoverTestRecursive(hoverPoint, root, path, debugInfo, recursiveParam); 148 EXPECT_EQ(result, true); 149 150 accessibilityProperty.accessibilityVirtualNode_ = FrameNode::GetOrCreateFrameNode( __anon08b032dd0502() 151 V2::BUTTON_ETS_TAG, 13, []() { return AceType::MakeRefPtr<ButtonPattern>(); }); 152 result = accessibilityProperty.ProcessHoverTestRecursive(hoverPoint, root, path, debugInfo, recursiveParam); 153 EXPECT_EQ(result, true); 154 } 155 156 /** 157 * @tc.name: AccessibilityPropertyTestTwoNg004 158 * @tc.desc: test IsMatchAccessibilityResponseRegion 159 * @tc.type: FUNC 160 */ 161 HWTEST_F(AccessibilityPropertyTestTwoNg, AccessibilityPropertyTestTwoNg004, TestSize.Level1) 162 { 163 AccessibilityProperty accessibilityProperty; 164 auto host = FrameNode::GetOrCreateFrameNode( __anon08b032dd0602() 165 V2::BUTTON_ETS_TAG, 1, []() { return AceType::MakeRefPtr<ButtonPattern>(); }); 166 host->isActive_ = true; 167 DimensionRect responseRect(Dimension(-1), Dimension(-1), DimensionOffset(OFFSETF)); 168 std::vector<DimensionRect> responseRegion; 169 responseRegion.push_back(responseRect); 170 auto gestureEventHub = host->GetOrCreateEventHub<EventHub>()->GetOrCreateGestureEventHub(); 171 gestureEventHub->SetResponseRegion(responseRegion); 172 auto paintRect = host->renderContext_->GetPaintRectWithoutTransform(); 173 auto responseRegionList = host->GetResponseRegionList(paintRect, 2); 174 EXPECT_FALSE(responseRegionList.size() != 1); 175 176 auto rect = responseRegionList.back(); 177 EXPECT_FALSE(rect == paintRect); 178 179 EXPECT_FALSE(!accessibilityProperty.IsAccessibilityCompInResponseRegion(rect, paintRect)); 180 181 WeakPtr<FrameNode> hostBak = host; 182 accessibilityProperty.SetHost(hostBak); 183 auto result = accessibilityProperty.IsMatchAccessibilityResponseRegion(true); 184 EXPECT_TRUE(result); 185 } 186 187 /** 188 * @tc.name: AccessibilityPropertyTestTwoNg005 189 * @tc.desc: test ActActionClick 190 * @tc.type: FUNC 191 */ 192 HWTEST_F(AccessibilityPropertyTestTwoNg, AccessibilityPropertyTestTwoNg005, TestSize.Level1) 193 { 194 AccessibilityProperty accessibilityProperty; 195 auto host = FrameNode::GetOrCreateFrameNode( __anon08b032dd0702() 196 V2::BUTTON_ETS_TAG, 1, []() { return AceType::MakeRefPtr<ButtonPattern>(); }); 197 EXPECT_FALSE(accessibilityProperty.ActActionClick()); 198 199 accessibilityProperty.actionClickImpl_ = nullptr; 200 EXPECT_FALSE(accessibilityProperty.ActActionClick()); 201 __anon08b032dd0802()202 ActionClickImpl actionsImpl = [](){}; 203 accessibilityProperty.actionClickImpl_ = actionsImpl; 204 EXPECT_TRUE(accessibilityProperty.ActActionClick()); 205 } 206 207 /** 208 * @tc.name: AccessibilityPropertyTestTwoNg006 209 * @tc.desc: test ActActionLongClick 210 * @tc.type: FUNC 211 */ 212 HWTEST_F(AccessibilityPropertyTestTwoNg, AccessibilityPropertyTestTwoNg006, TestSize.Level1) 213 { 214 AccessibilityProperty accessibilityProperty; 215 auto host = FrameNode::GetOrCreateFrameNode( __anon08b032dd0902() 216 V2::BUTTON_ETS_TAG, 1, []() { return AceType::MakeRefPtr<ButtonPattern>(); }); 217 EXPECT_FALSE(accessibilityProperty.ActActionLongClick()); 218 219 accessibilityProperty.actionLongClickImpl_ = nullptr; 220 EXPECT_FALSE(accessibilityProperty.ActActionLongClick()); 221 __anon08b032dd0a02()222 ActionLongClickImpl actionsImpl = [](){}; 223 accessibilityProperty.actionLongClickImpl_ = actionsImpl; 224 EXPECT_TRUE(accessibilityProperty.ActActionLongClick()); 225 } 226 227 /** 228 * @tc.name: AccessibilityPropertyTestTwoNg007 229 * @tc.desc: test ActActionLongClick, IsAccessibilityFocusableTag and GetWindowScenePosition 230 * @tc.type: FUNC 231 */ 232 HWTEST_F(AccessibilityPropertyTestTwoNg, AccessibilityPropertyTestTwoNg007, TestSize.Level1) 233 { 234 AccessibilityProperty accessibilityProperty; 235 auto node = FrameNode::CreateFrameNode("childNode", 10, AceType::MakeRefPtr<Pattern>(), true); 236 EXPECT_NE(node->GetRenderContext(), nullptr); 237 accessibilityProperty.UpdateHoverTestRect(node); 238 239 node->isAccessibilityVirtualNode_ = true; 240 accessibilityProperty.UpdateHoverTestRect(node); 241 242 std::string checkboxEtsTag = "Toggle"; 243 EXPECT_TRUE(accessibilityProperty.IsAccessibilityFocusableTag(checkboxEtsTag)); 244 245 checkboxEtsTag = "test"; 246 EXPECT_FALSE(accessibilityProperty.IsAccessibilityFocusableTag(checkboxEtsTag)); 247 248 NG::WindowSceneInfo windowSceneInfo; 249 EXPECT_EQ(accessibilityProperty.getWindowScenePositionImpl_, nullptr); 250 accessibilityProperty.GetWindowScenePosition(windowSceneInfo); 251 __anon08b032dd0b02(NG::WindowSceneInfo& windowSceneInfo)252 GetWindowScenePositionImpl getWindowScenePositionImpl = [](NG::WindowSceneInfo& windowSceneInfo){}; 253 accessibilityProperty.getWindowScenePositionImpl_ = getWindowScenePositionImpl; 254 EXPECT_NE(accessibilityProperty.getWindowScenePositionImpl_, nullptr); 255 accessibilityProperty.GetWindowScenePosition(windowSceneInfo); 256 } 257 258 /** 259 * @tc.name: AccessibilityPropertyTestTwoNg008 260 * @tc.desc: HoverTestRecursive 261 * @tc.type: FUNC 262 */ 263 HWTEST_F(AccessibilityPropertyTestTwoNg, AccessibilityPropertyTestTwoNg008, TestSize.Level1) 264 { 265 AccessibilityProperty accessibilityProperty; 266 AccessibilityHoverTestPath path; 267 auto root = FrameNode::GetOrCreateFrameNode( __anon08b032dd0c02() 268 V2::BUTTON_ETS_TAG, 1, []() { return AceType::MakeRefPtr<ButtonPattern>(); }); 269 NG::PointF hoverPoint(0, 0); 270 auto debugInfo = std::make_unique<AccessibilityProperty::HoverTestDebugTraceInfo>(); 271 272 bool ancestorGroupFlag = false; 273 274 root->SetActive(false); 275 auto result = accessibilityProperty.HoverTestRecursive(hoverPoint, root, path, debugInfo, ancestorGroupFlag); 276 EXPECT_EQ(result, false); 277 root->SetActive(true); 278 279 result = accessibilityProperty.HoverTestRecursive(hoverPoint, root, path, debugInfo, ancestorGroupFlag); 280 EXPECT_EQ(result, false); 281 282 root->isAccessibilityVirtualNode_ = true; 283 debugInfo = nullptr; 284 result = accessibilityProperty.HoverTestRecursive(hoverPoint, root, path, debugInfo, ancestorGroupFlag); 285 EXPECT_EQ(result, false); 286 287 debugInfo = std::make_unique<AccessibilityProperty::HoverTestDebugTraceInfo>(); 288 result = accessibilityProperty.HoverTestRecursive(hoverPoint, root, path, debugInfo, ancestorGroupFlag); 289 EXPECT_EQ(result, false); 290 } 291 292 } // namespace OHOS::Ace::NG 293