• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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