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 #define private public
17 #define protected public
18 #include "core/components_ng/pattern/web/transitional_node_info.h"
19 #include "test/mock/base/mock_task_executor.h"
20 #include "test/mock/core/common/mock_container.h"
21 #include "test/mock/core/pipeline/mock_pipeline_context.h"
22 #include "adapter/ohos/osal/js_accessibility_manager.h"
23 #ifdef WEB_SUPPORTED
24 #include "nweb_accessibility_node_info.h"
25 #endif
26
27 using namespace OHOS::Accessibility;
28 using namespace testing;
29 using namespace testing::ext;
30
31 namespace OHOS::Ace::NG {
32
33 class JsAccessibilityManagerWebTest : public testing::Test {
34 public:
35 static void SetUpTestCase();
36 static void TearDownTestCase();
37 };
38
SetUpTestCase()39 void JsAccessibilityManagerWebTest::SetUpTestCase()
40 {
41 MockPipelineContext::SetUp();
42 MockContainer::SetUp();
43 MockContainer::Current()->taskExecutor_ = AceType::MakeRefPtr<MockTaskExecutor>();
44 MockContainer::Current()->pipelineContext_ = MockPipelineContext::GetCurrentContext();
45 MockContainer::Current()->pipelineContext_->taskExecutor_ = MockContainer::Current()->taskExecutor_;
46
47 std::unique_ptr<std::ostream> ostream = std::make_unique<std::ostringstream>();
48 ASSERT_NE(ostream, nullptr);
49 DumpLog::GetInstance().SetDumpFile(std::move(ostream));
50 }
51
TearDownTestCase()52 void JsAccessibilityManagerWebTest::TearDownTestCase()
53 {
54 MockPipelineContext::TearDown();
55 MockContainer::TearDown();
56 }
57
58 #ifdef WEB_SUPPORTED
59 class MockNWebAccessibilityNodeInfo : public NWeb::NWebAccessibilityNodeInfo {
60 public:
GetHint()61 std::string GetHint() override
62 {
63 return "";
64 }
GetError()65 std::string GetError() override
66 {
67 return "";
68 }
GetRectX()69 int32_t GetRectX()
70 {
71 return 0;
72 }
GetRectY()73 int32_t GetRectY()
74 {
75 return 0;
76 }
SetPageId(int32_t pageId)77 void SetPageId(int32_t pageId) override {}
GetPageId()78 int32_t GetPageId() override
79 {
80 return 0;
81 }
GetActions()82 std::vector<uint32_t> GetActions() override
83 {
84 return {};
85 }
GetContent()86 std::string GetContent() override
87 {
88 return "";
89 }
GetChildIds()90 std::vector<int64_t> GetChildIds() override
91 {
92 return {};
93 }
SetParentId(int64_t parentId)94 void SetParentId(int64_t parentId) override {}
GetParentId()95 int64_t GetParentId() override
96 {
97 return 0;
98 }
GetIsHeading()99 bool GetIsHeading() override
100 {
101 return false;
102 }
GetIsChecked()103 bool GetIsChecked() override
104 {
105 return false;
106 }
GetIsEnabled()107 bool GetIsEnabled() override
108 {
109 return false;
110 }
GetIsFocused()111 bool GetIsFocused() override
112 {
113 return false;
114 }
GetRectWidth()115 int32_t GetRectWidth()
116 {
117 return 0;
118 }
GetRectHeight()119 int32_t GetRectHeight()
120 {
121 return 0;
122 }
GetIsVisible()123 bool GetIsVisible() override
124 {
125 return true;
126 }
GetIsHinting()127 bool GetIsHinting() override
128 {
129 return false;
130 }
GetIsEditable()131 bool GetIsEditable() override
132 {
133 return false;
134 }
GetIsSelected()135 bool GetIsSelected() override
136 {
137 return false;
138 }
GetItemCounts()139 size_t GetItemCounts() override
140 {
141 return 0;
142 }
GetLiveRegion()143 int32_t GetLiveRegion() override
144 {
145 return 0;
146 }
GetIsPassword()147 bool GetIsPassword() override
148 {
149 return false;
150 }
GetIsCheckable()151 bool GetIsCheckable() override
152 {
153 return false;
154 }
GetIsClickable()155 bool GetIsClickable() override
156 {
157 return false;
158 }
GetIsFocusable()159 bool GetIsFocusable() override
160 {
161 return false;
162 }
GetIsScrollable()163 bool GetIsScrollable() override
164 {
165 return false;
166 }
GetIsDeletable()167 bool GetIsDeletable() override
168 {
169 return false;
170 }
GetAccessibilityId()171 int64_t GetAccessibilityId() override
172 {
173 return 0;
174 }
GetIsPopupSupported()175 bool GetIsPopupSupported() override
176 {
177 return false;
178 }
GetIsContentInvalid()179 bool GetIsContentInvalid() override
180 {
181 return false;
182 }
GetSelectionEnd()183 int32_t GetSelectionEnd() override
184 {
185 return 0;
186 }
GetSelectionStart()187 int32_t GetSelectionStart() override
188 {
189 return 0;
190 }
GetRangeInfoMin()191 float GetRangeInfoMin() override
192 {
193 return 0.0f;
194 }
GetRangeInfoMax()195 float GetRangeInfoMax() override
196 {
197 return 0.0f;
198 }
GetRangeInfoCurrent()199 float GetRangeInfoCurrent() override
200 {
201 return 0.0f;
202 }
GetInputType()203 int32_t GetInputType() override
204 {
205 return 0;
206 }
GetComponentType()207 std::string GetComponentType() override
208 {
209 return "";
210 }
GetDescriptionInfo()211 std::string GetDescriptionInfo() override
212 {
213 return "";
214 }
GetGridRows()215 int32_t GetGridRows() override
216 {
217 return 0;
218 }
GetGridItemRow()219 int32_t GetGridItemRow() override
220 {
221 return 0;
222 }
GetGridColumns()223 int32_t GetGridColumns() override
224 {
225 return 0;
226 }
GetGridItemColumn()227 int32_t GetGridItemColumn() override
228 {
229 return 0;
230 }
GetGridItemRowSpan()231 int32_t GetGridItemRowSpan() override
232 {
233 return 0;
234 }
GetGridSelectedMode()235 int32_t GetGridSelectedMode() override
236 {
237 return 0;
238 }
GetGridItemColumnSpan()239 int32_t GetGridItemColumnSpan() override
240 {
241 return 0;
242 }
GetIsAccessibilityFocus()243 bool GetIsAccessibilityFocus() override
244 {
245 return false;
246 }
GetIsPluralLineSupported()247 bool GetIsPluralLineSupported() override
248 {
249 return false;
250 }
251 };
252
253 /**
254 * @tc.name: WebSetScreenRect001
255 * @tc.desc: WebSetScreenRect degree = 90 / degree = 0
256 * @tc.type: FUNC
257 */
258 HWTEST_F(JsAccessibilityManagerWebTest, WebSetScreenRect001, TestSize.Level1)
259 {
260 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
261 Framework::CommonProperty commonProperty;
262 commonProperty.rotateTransform.rotateDegree = 90;
263 auto nWebAccessibilityNodeInfoPtr = std::make_shared<MockNWebAccessibilityNodeInfo>();
264 auto nodePtr = std::make_shared<NG::TransitionalNodeInfo>(nWebAccessibilityNodeInfoPtr);
265 AccessibilityElementInfo nodeInfo;
266
267 jsAccessibilityManager->WebSetScreenRect(nodePtr, commonProperty, nodeInfo);
268 auto rect = nodeInfo.GetRectInScreen();
269 EXPECT_EQ(rect.GetLeftTopXScreenPostion(), 0);
270 EXPECT_EQ(rect.GetLeftTopYScreenPostion(), 0);
271 EXPECT_EQ(rect.GetRightBottomXScreenPostion(), 0);
272 EXPECT_EQ(rect.GetRightBottomYScreenPostion(), 0);
273
274 commonProperty.rotateTransform.rotateDegree = 0;
275 jsAccessibilityManager->WebSetScreenRect(nodePtr, commonProperty, nodeInfo);
276 rect = nodeInfo.GetRectInScreen();
277 EXPECT_EQ(rect.GetLeftTopXScreenPostion(), 0);
278 EXPECT_EQ(rect.GetLeftTopYScreenPostion(), 0);
279 EXPECT_EQ(rect.GetRightBottomXScreenPostion(), 0);
280 EXPECT_EQ(rect.GetRightBottomYScreenPostion(), 0);
281 }
282
283 /**
284 * @tc.name: WebSetScreenRect002
285 * @tc.desc: WebSetScreenRect degree = 0, scaleX != 0, scaleY = 0
286 * @tc.type: FUNC
287 */
288 HWTEST_F(JsAccessibilityManagerWebTest, WebSetScreenRect002, TestSize.Level1)
289 {
290 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
291 Framework::CommonProperty commonProperty;
292 commonProperty.rotateTransform.rotateDegree = 0;
293 commonProperty.scaleX = 3.0f;
294 commonProperty.scaleY = 0.0f;
295 auto nWebAccessibilityNodeInfoPtr = std::make_shared<MockNWebAccessibilityNodeInfo>();
296 auto nodePtr = std::make_shared<NG::TransitionalNodeInfo>(nWebAccessibilityNodeInfoPtr);
297 AccessibilityElementInfo nodeInfo;
298
299 jsAccessibilityManager->WebSetScreenRect(nodePtr, commonProperty, nodeInfo);
300 auto rect = nodeInfo.GetRectInScreen();
301 EXPECT_EQ(rect.GetLeftTopXScreenPostion(), 0);
302 EXPECT_EQ(rect.GetLeftTopYScreenPostion(), 0);
303 EXPECT_EQ(rect.GetRightBottomXScreenPostion(), 0);
304 EXPECT_EQ(rect.GetRightBottomYScreenPostion(), 0);
305 }
306
307 /**
308 * @tc.name: WebSetScreenRect003
309 * @tc.desc: WebSetScreenRect degree = 0, scaleX = 0, scaleY != 0
310 * @tc.type: FUNC
311 */
312 HWTEST_F(JsAccessibilityManagerWebTest, WebSetScreenRect003, TestSize.Level1)
313 {
314 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
315 Framework::CommonProperty commonProperty;
316 commonProperty.rotateTransform.rotateDegree = 0;
317 commonProperty.scaleX = 0.0f;
318 commonProperty.scaleY = 3.0f;
319 auto nWebAccessibilityNodeInfoPtr = std::make_shared<MockNWebAccessibilityNodeInfo>();
320 auto nodePtr = std::make_shared<NG::TransitionalNodeInfo>(nWebAccessibilityNodeInfoPtr);
321 AccessibilityElementInfo nodeInfo;
322
323 jsAccessibilityManager->WebSetScreenRect(nodePtr, commonProperty, nodeInfo);
324 auto rect = nodeInfo.GetRectInScreen();
325 EXPECT_EQ(rect.GetLeftTopXScreenPostion(), 0);
326 EXPECT_EQ(rect.GetLeftTopYScreenPostion(), 0);
327 EXPECT_EQ(rect.GetRightBottomXScreenPostion(), 0);
328 EXPECT_EQ(rect.GetRightBottomYScreenPostion(), 0);
329 }
330
331 /**
332 * @tc.name: WebSetScreenRect004
333 * @tc.desc: WebSetScreenRect degree = 0, scaleX != 0, scaleY != 0
334 * @tc.type: FUNC
335 */
336 HWTEST_F(JsAccessibilityManagerWebTest, WebSetScreenRect004, TestSize.Level1)
337 {
338 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
339 Framework::CommonProperty commonProperty;
340 commonProperty.rotateTransform.rotateDegree = 0;
341 commonProperty.scaleX = 3.0f;
342 commonProperty.scaleY = 3.0f;
343 auto nWebAccessibilityNodeInfoPtr = std::make_shared<MockNWebAccessibilityNodeInfo>();
344 auto nodePtr = std::make_shared<NG::TransitionalNodeInfo>(nWebAccessibilityNodeInfoPtr);
345 AccessibilityElementInfo nodeInfo;
346
347 jsAccessibilityManager->WebSetScreenRect(nodePtr, commonProperty, nodeInfo);
348 auto rect = nodeInfo.GetRectInScreen();
349 EXPECT_EQ(rect.GetLeftTopXScreenPostion(), 0);
350 EXPECT_EQ(rect.GetLeftTopYScreenPostion(), 0);
351 EXPECT_EQ(rect.GetRightBottomXScreenPostion(), 0);
352 EXPECT_EQ(rect.GetRightBottomYScreenPostion(), 0);
353 }
354
355 /**
356 * @tc.name: WebSetScreenRect005
357 * @tc.desc: WebSetScreenRect degree = 0, scaleX = 0, scaleY = 0
358 * @tc.type: FUNC
359 */
360 HWTEST_F(JsAccessibilityManagerWebTest, WebSetScreenRect005, TestSize.Level1)
361 {
362 auto jsAccessibilityManager = AceType::MakeRefPtr<Framework::JsAccessibilityManager>();
363 Framework::CommonProperty commonProperty;
364 commonProperty.rotateTransform.rotateDegree = 0;
365 commonProperty.scaleX = 0.0f;
366 commonProperty.scaleY = 0.0f;
367 auto nWebAccessibilityNodeInfoPtr = std::make_shared<MockNWebAccessibilityNodeInfo>();
368 auto nodePtr = std::make_shared<NG::TransitionalNodeInfo>(nWebAccessibilityNodeInfoPtr);
369 AccessibilityElementInfo nodeInfo;
370
371 jsAccessibilityManager->WebSetScreenRect(nodePtr, commonProperty, nodeInfo);
372 auto rect = nodeInfo.GetRectInScreen();
373 EXPECT_EQ(rect.GetLeftTopXScreenPostion(), 0);
374 EXPECT_EQ(rect.GetLeftTopYScreenPostion(), 0);
375 EXPECT_EQ(rect.GetRightBottomXScreenPostion(), 0);
376 EXPECT_EQ(rect.GetRightBottomYScreenPostion(), 0);
377 }
378 #endif //WEB_SUPPORTED
379 } // namespace OHOS::Ace::NG