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 #include "gtest/gtest.h"
17 
18 #include "adapter/ohos/osal/js_third_provider_interaction_operation_utils.h"
19 #include "frameworks/core/accessibility/accessibility_node.h"
20 #include "frameworks/core/accessibility/accessibility_utils.h"
21 #include "securec.h"
22 
23 using namespace testing;
24 using namespace testing::ext;
25 
26 namespace OHOS::Ace::NG {
27 namespace {
28     const int32_t BOOL_MASK = 2;
29     const int32_t MAX_CHILD_COUNT = 20;
30     const int32_t MAX_ACTION_COUNT = 20;
31     const int32_t MAX_C_STR_COUNT = 30;
32     const int32_t MAX_C_STR_CHAR_COUNT = 100;
33 } // namespace
34 
35 class AccessibilityProviderUtilsTestNg : public testing::Test {
36 public:
SetUpTestCase()37     static void SetUpTestCase() {};
TearDownTestCase()38     static void TearDownTestCase() {};
39 
FillNativeAccessibilityElementInfoPart(const OHOS::Accessibility::AccessibilityElementInfo & accessibilityElementInfo,ArkUI_AccessibilityElementInfo & nativeInfo)40     void FillNativeAccessibilityElementInfoPart(
41         const OHOS::Accessibility::AccessibilityElementInfo& accessibilityElementInfo,
42         ArkUI_AccessibilityElementInfo& nativeInfo)
43     {
44         // screen rect
45         ArkUI_AccessibleRect screenRect {
46             accessibilityElementInfo.GetRectInScreen().GetLeftTopXScreenPostion(),
47             accessibilityElementInfo.GetRectInScreen().GetLeftTopYScreenPostion(),
48             accessibilityElementInfo.GetRectInScreen().GetRightBottomXScreenPostion(),
49             accessibilityElementInfo.GetRectInScreen().GetRightBottomYScreenPostion()};
50         nativeInfo.SetRect(screenRect);
51         // rangeInfo
52         ArkUI_AccessibleRangeInfo rangeInfo {
53             accessibilityElementInfo.GetRange().GetMin(),
54             accessibilityElementInfo.GetRange().GetMax(),
55             accessibilityElementInfo.GetRange().GetCurrent()};
56         nativeInfo.SetRangeInfo(rangeInfo);
57         // GridInfo
58         ArkUI_AccessibleGridInfo gridInfo {
59             accessibilityElementInfo.GetGrid().GetRowCount(),
60             accessibilityElementInfo.GetGrid().GetColumnCount(),
61             accessibilityElementInfo.GetGrid().GetSelectionMode()};
62         nativeInfo.SetGridInfo(gridInfo);
63         // GridItemInfo
64         ArkUI_AccessibleGridItemInfo gridItemInfo {
65             accessibilityElementInfo.GetGridItem().IsHeading(),
66             accessibilityElementInfo.GetGridItem().IsSelected(),
67             accessibilityElementInfo.GetGridItem().GetColumnIndex(),
68             accessibilityElementInfo.GetGridItem().GetRowIndex(),
69             accessibilityElementInfo.GetGridItem().GetColumnSpan(),
70             accessibilityElementInfo.GetGridItem().GetRowSpan()};
71         nativeInfo.SetGridItemInfo(gridItemInfo);
72 
73         nativeInfo.SetComponentType(accessibilityElementInfo.GetComponentType());
74         nativeInfo.SetContents(accessibilityElementInfo.GetContent());
75         nativeInfo.SetHintText(accessibilityElementInfo.GetHint());
76         nativeInfo.SetAccessibilityText(accessibilityElementInfo.GetAccessibilityText());
77         nativeInfo.SetAccessibilityDescription(accessibilityElementInfo.GetDescriptionInfo());
78         nativeInfo.SetAccessibilityLevel(accessibilityElementInfo.GetAccessibilityLevel());
79         nativeInfo.SetBackgroundColor(accessibilityElementInfo.GetBackgroundColor());
80         nativeInfo.SetBackgroundImage(accessibilityElementInfo.GetBackgroundImage());
81         nativeInfo.SetBlur(accessibilityElementInfo.GetBlur());
82         nativeInfo.SetHitTestBehavior(accessibilityElementInfo.GetHitTestBehavior());
83     }
84 
FillNativeAccessibilityElementInfo(const OHOS::Accessibility::AccessibilityElementInfo & accessibilityElementInfo,ArkUI_AccessibilityElementInfo & nativeInfo)85     void FillNativeAccessibilityElementInfo(
86         const OHOS::Accessibility::AccessibilityElementInfo& accessibilityElementInfo,
87         ArkUI_AccessibilityElementInfo& nativeInfo)
88     {
89         nativeInfo.SetPageId(accessibilityElementInfo.GetPageId());
90         nativeInfo.SetParentId(accessibilityElementInfo.GetParentNodeId());
91         nativeInfo.SetElementId(accessibilityElementInfo.GetAccessibilityId());
92         nativeInfo.SetTextBeginSelected(accessibilityElementInfo.GetSelectedBegin());
93         nativeInfo.SetTextEndSelected(accessibilityElementInfo.GetSelectedEnd());
94         nativeInfo.SetCurrentIndex(accessibilityElementInfo.GetCurrentIndex());
95         nativeInfo.SetBeginIndex(accessibilityElementInfo.GetBeginIndex());
96         nativeInfo.SetEndIndex(accessibilityElementInfo.GetEndIndex());
97         nativeInfo.SetItemCount(accessibilityElementInfo.GetItemCounts());
98         nativeInfo.SetOffset(accessibilityElementInfo.GetOffset());
99         nativeInfo.SetZIndex(accessibilityElementInfo.GetZIndex());
100         nativeInfo.SetOpacity(accessibilityElementInfo.GetOpacity());
101         nativeInfo.SetCheckable(accessibilityElementInfo.IsCheckable());
102         nativeInfo.SetChecked(accessibilityElementInfo.IsChecked());
103         nativeInfo.SetFocusable(accessibilityElementInfo.IsFocusable());
104         nativeInfo.SetFocused(accessibilityElementInfo.IsFocused());
105         nativeInfo.SetVisible(accessibilityElementInfo.IsVisible());
106         nativeInfo.SetAccessibilityFocused(accessibilityElementInfo.HasAccessibilityFocus());
107         nativeInfo.SetSelected(accessibilityElementInfo.IsSelected());
108         nativeInfo.SetClickable(accessibilityElementInfo.IsClickable());
109         nativeInfo.SetLongClickable(accessibilityElementInfo.IsLongClickable());
110         nativeInfo.SetEnabled(accessibilityElementInfo.IsEnabled());
111         nativeInfo.SetPassword(accessibilityElementInfo.IsPassword());
112         nativeInfo.SetScrollable(accessibilityElementInfo.IsScrollable());
113         nativeInfo.SetEditable(accessibilityElementInfo.IsEditable());
114         nativeInfo.SetHint(accessibilityElementInfo.IsGivingHint());
115         nativeInfo.SetAccessibilityGroup(accessibilityElementInfo.GetAccessibilityGroup());
116 
117         FillNativeAccessibilityElementInfoPart(accessibilityElementInfo, nativeInfo);
118     }
119 
BuildAccessibilityElementInfoPart(int32_t index,OHOS::Accessibility::AccessibilityElementInfo & accessibilityElementInfo)120     void BuildAccessibilityElementInfoPart(
121         int32_t index,
122         OHOS::Accessibility::AccessibilityElementInfo& accessibilityElementInfo)
123     {
124         std::string content;
125         // screen rect
126         auto leftTopX = ++index;
127         auto leftTopY = ++index;
128         auto rightBottomX = ++index;
129         auto rightBottomY = ++index;
130         OHOS::Accessibility::Rect screenRect (leftTopX, leftTopY, rightBottomX, rightBottomY);
131         accessibilityElementInfo.SetRectInScreen(screenRect);
132         // rangeInfo
133         auto min = ++index;
134         auto max = ++index;
135         auto current = ++index;
136         OHOS::Accessibility::RangeInfo rangeInfo (min, max, current);
137         accessibilityElementInfo.SetRange(rangeInfo);
138         // GridInfo
139         auto rowCount = ++index;
140         auto columnCount = ++index;
141         auto selectionMode = ++index;
142         OHOS::Accessibility::GridInfo gridInfo (rowCount, columnCount, selectionMode);
143         accessibilityElementInfo.SetGrid(gridInfo);
144         // GridItemInfo
145         auto heading = (++index) % BOOL_MASK;
146         auto columnIndex = ++index;
147         auto rowIndex = ++index;
148         auto columnSpan = ++index;
149         auto rowSpan = ++index;
150         auto selected = (++index) % BOOL_MASK;
151         OHOS::Accessibility::GridItemInfo gridItemInfo
152             (heading, columnIndex, rowIndex, columnSpan, rowSpan, selected);
153         accessibilityElementInfo.SetGridItem(gridItemInfo);
154 
155         content = std::to_string(++index);
156         accessibilityElementInfo.SetComponentType(content);
157         content = std::to_string(++index);
158         accessibilityElementInfo.SetContent(content);
159         content = std::to_string(++index);
160         accessibilityElementInfo.SetHint(content);
161         content = std::to_string(++index);
162         accessibilityElementInfo.SetAccessibilityText(content);
163         content = std::to_string(++index);
164         accessibilityElementInfo.SetDescriptionInfo(content);
165         content = std::to_string(++index);
166         accessibilityElementInfo.SetAccessibilityLevel(content);
167         content = std::to_string(++index);
168         accessibilityElementInfo.SetBackgroundColor(content);
169         content = std::to_string(++index);
170         accessibilityElementInfo.SetBackgroundImage(content);
171         content = std::to_string(++index);
172         accessibilityElementInfo.SetBlur(content);
173         content = std::to_string(++index);
174         accessibilityElementInfo.SetHitTestBehavior(content);
175     }
176 
BuildAccessibilityElementInfo(int32_t index,OHOS::Accessibility::AccessibilityElementInfo & accessibilityElementInfo)177     void BuildAccessibilityElementInfo(
178         int32_t index,
179         OHOS::Accessibility::AccessibilityElementInfo& accessibilityElementInfo)
180     {
181         std::string content;
182 
183         accessibilityElementInfo.SetPageId(index);
184         accessibilityElementInfo.SetParent(++index);
185         accessibilityElementInfo.SetAccessibilityId(++index);
186         accessibilityElementInfo.SetSelectedBegin(++index);
187         accessibilityElementInfo.SetSelectedEnd(++index);
188 
189         accessibilityElementInfo.SetCurrentIndex(++index);
190         accessibilityElementInfo.SetBeginIndex(++index);
191         accessibilityElementInfo.SetEndIndex(++index);
192         accessibilityElementInfo.SetItemCounts(++index);
193         accessibilityElementInfo.SetOffset(++index);
194         accessibilityElementInfo.SetZIndex(++index);
195         accessibilityElementInfo.SetOpacity(++index);
196         accessibilityElementInfo.SetCheckable((++index) % BOOL_MASK);
197         accessibilityElementInfo.SetChecked((++index) % BOOL_MASK);
198         accessibilityElementInfo.SetFocusable((++index) % BOOL_MASK);
199         accessibilityElementInfo.SetFocused((++index) % BOOL_MASK);
200         accessibilityElementInfo.SetVisible((++index) % BOOL_MASK);
201         accessibilityElementInfo.SetAccessibilityFocus((++index) % BOOL_MASK);
202         accessibilityElementInfo.SetSelected((++index) % BOOL_MASK);
203         accessibilityElementInfo.SetClickable((++index) % BOOL_MASK);
204         accessibilityElementInfo.SetLongClickable((++index) % BOOL_MASK);
205         accessibilityElementInfo.SetEnabled((++index) % BOOL_MASK);
206         accessibilityElementInfo.SetPassword((++index) % BOOL_MASK);
207         accessibilityElementInfo.SetScrollable((++index) % BOOL_MASK);
208         accessibilityElementInfo.SetEditable((++index) % BOOL_MASK);
209         accessibilityElementInfo.SetHinting((++index) % BOOL_MASK);
210         accessibilityElementInfo.SetAccessibilityGroup((++index) % BOOL_MASK);
211 
212         BuildAccessibilityElementInfoPart(index, accessibilityElementInfo);
213     }
214 
CheckTransformElementInfoResultPart(const OHOS::Accessibility::AccessibilityElementInfo & beforeInfo,const OHOS::Accessibility::AccessibilityElementInfo & afterInfo)215     void CheckTransformElementInfoResultPart(
216         const OHOS::Accessibility::AccessibilityElementInfo& beforeInfo,
217         const OHOS::Accessibility::AccessibilityElementInfo& afterInfo)
218     {
219         // screen rect
220         EXPECT_EQ(beforeInfo.GetRectInScreen().GetLeftTopXScreenPostion(),
221             afterInfo.GetRectInScreen().GetLeftTopXScreenPostion());
222         EXPECT_EQ(beforeInfo.GetRectInScreen().GetLeftTopYScreenPostion(),
223             afterInfo.GetRectInScreen().GetLeftTopYScreenPostion());
224         EXPECT_EQ(beforeInfo.GetRectInScreen().GetRightBottomXScreenPostion(),
225             afterInfo.GetRectInScreen().GetRightBottomXScreenPostion());
226         EXPECT_EQ(beforeInfo.GetRectInScreen().GetRightBottomYScreenPostion(),
227             afterInfo.GetRectInScreen().GetRightBottomYScreenPostion());
228 
229         // rangeInfo
230         EXPECT_EQ(beforeInfo.GetRange().GetMin(),
231             afterInfo.GetRange().GetMin());
232         EXPECT_EQ(beforeInfo.GetRange().GetMax(),
233             afterInfo.GetRange().GetMax());
234         EXPECT_EQ(beforeInfo.GetRange().GetCurrent(),
235             afterInfo.GetRange().GetCurrent());
236 
237         // GridInfo
238         EXPECT_EQ(beforeInfo.GetGrid().GetRowCount(),
239             afterInfo.GetGrid().GetRowCount());
240         EXPECT_EQ(beforeInfo.GetGrid().GetColumnCount(),
241             afterInfo.GetGrid().GetColumnCount());
242         EXPECT_EQ(beforeInfo.GetGrid().GetSelectionMode(),
243             afterInfo.GetGrid().GetSelectionMode());
244 
245         // GridItemInfo
246         EXPECT_EQ(beforeInfo.GetGridItem().GetColumnIndex(),
247             afterInfo.GetGridItem().GetColumnIndex());
248         EXPECT_EQ(beforeInfo.GetGridItem().GetRowIndex(),
249             afterInfo.GetGridItem().GetRowIndex());
250         EXPECT_EQ(beforeInfo.GetGridItem().GetColumnSpan(),
251             afterInfo.GetGridItem().GetColumnSpan());
252         EXPECT_EQ(beforeInfo.GetGridItem().GetRowSpan(),
253             afterInfo.GetGridItem().GetRowSpan());
254         EXPECT_EQ(beforeInfo.GetGridItem().IsHeading(),
255             afterInfo.GetGridItem().IsHeading());
256         EXPECT_EQ(beforeInfo.GetGridItem().IsSelected(),
257             afterInfo.GetGridItem().IsSelected());
258 
259         EXPECT_EQ(beforeInfo.GetComponentType(), afterInfo.GetComponentType());
260         EXPECT_EQ(beforeInfo.GetContent(), afterInfo.GetContent());
261         EXPECT_EQ(beforeInfo.GetHint(), afterInfo.GetHint());
262         EXPECT_EQ(beforeInfo.GetAccessibilityText(), afterInfo.GetAccessibilityText());
263         EXPECT_EQ(beforeInfo.GetDescriptionInfo(), afterInfo.GetDescriptionInfo());
264         EXPECT_EQ(beforeInfo.GetAccessibilityLevel(), afterInfo.GetAccessibilityLevel());
265         EXPECT_EQ(beforeInfo.GetBackgroundColor(), afterInfo.GetBackgroundColor());
266         EXPECT_EQ(beforeInfo.GetBlur(), afterInfo.GetBlur());
267         EXPECT_EQ(beforeInfo.GetHitTestBehavior(), afterInfo.GetHitTestBehavior());
268     }
269 
CheckTransformElementInfoResult(const OHOS::Accessibility::AccessibilityElementInfo & beforeInfo,const OHOS::Accessibility::AccessibilityElementInfo & afterInfo)270     void CheckTransformElementInfoResult(
271         const OHOS::Accessibility::AccessibilityElementInfo& beforeInfo,
272         const OHOS::Accessibility::AccessibilityElementInfo& afterInfo)
273     {
274         // Page ID not trans
275         EXPECT_EQ(beforeInfo.GetParentNodeId(), afterInfo.GetParentNodeId());
276         EXPECT_EQ(beforeInfo.GetAccessibilityId(), afterInfo.GetAccessibilityId());
277         EXPECT_EQ(beforeInfo.GetSelectedBegin(), afterInfo.GetSelectedBegin());
278         EXPECT_EQ(beforeInfo.GetSelectedEnd(), afterInfo.GetSelectedEnd());
279         EXPECT_EQ(beforeInfo.GetCurrentIndex(), afterInfo.GetCurrentIndex());
280         EXPECT_EQ(beforeInfo.GetBeginIndex(), afterInfo.GetBeginIndex());
281         EXPECT_EQ(beforeInfo.GetEndIndex(), afterInfo.GetEndIndex());
282         EXPECT_EQ(beforeInfo.GetItemCounts(), afterInfo.GetItemCounts());
283         EXPECT_EQ(beforeInfo.GetOffset(), afterInfo.GetOffset());
284         EXPECT_EQ(beforeInfo.GetZIndex(), afterInfo.GetZIndex());
285         EXPECT_EQ(beforeInfo.GetOpacity(), afterInfo.GetOpacity());
286         EXPECT_EQ(beforeInfo.IsCheckable(), afterInfo.IsCheckable());
287         EXPECT_EQ(beforeInfo.IsChecked(), afterInfo.IsChecked());
288         EXPECT_EQ(beforeInfo.IsFocusable(), afterInfo.IsFocusable());
289         EXPECT_EQ(beforeInfo.IsFocused(), afterInfo.IsFocused());
290         EXPECT_EQ(beforeInfo.IsVisible(), afterInfo.IsVisible());
291         EXPECT_EQ(beforeInfo.HasAccessibilityFocus(), afterInfo.HasAccessibilityFocus());
292         EXPECT_EQ(beforeInfo.IsSelected(), afterInfo.IsSelected());
293         EXPECT_EQ(beforeInfo.IsClickable(), afterInfo.IsClickable());
294         EXPECT_EQ(beforeInfo.IsLongClickable(), afterInfo.IsLongClickable());
295         EXPECT_EQ(beforeInfo.IsEnabled(), afterInfo.IsEnabled());
296         EXPECT_EQ(beforeInfo.IsPassword(), afterInfo.IsPassword());
297         EXPECT_EQ(beforeInfo.IsScrollable(), afterInfo.IsScrollable());
298         EXPECT_EQ(beforeInfo.IsEditable(), afterInfo.IsEditable());
299         EXPECT_EQ(beforeInfo.IsGivingHint(), afterInfo.IsGivingHint());
300         EXPECT_EQ(beforeInfo.GetAccessibilityGroup(), afterInfo.GetAccessibilityGroup());
301 
302         CheckTransformElementInfoResultPart(beforeInfo, afterInfo);
303     }
304 
BuildAccessibilityEventInfo(int32_t index,OHOS::Accessibility::AccessibilityEventInfo & beforeEventInfo,OHOS::Accessibility::AccessibilityElementInfo & beforeElementInfo)305     void BuildAccessibilityEventInfo(
306         int32_t index,
307         OHOS::Accessibility::AccessibilityEventInfo& beforeEventInfo,
308         OHOS::Accessibility::AccessibilityElementInfo& beforeElementInfo)
309     {
310         beforeEventInfo.SetEventType(static_cast<OHOS::Accessibility::EventType>(index));
311         beforeEventInfo.SetPageId(++index);
312         beforeEventInfo.SetRequestFocusElementId(++index);
313         beforeEventInfo.SetElementInfo(beforeElementInfo);
314         beforeEventInfo.SetTextAnnouncedForAccessibility(std::to_string(++index));
315     }
316 
FillNativeAccessibilityEventInfo(ArkUI_AccessibilityEventInfo & nativeEventInfo,OHOS::Accessibility::AccessibilityEventInfo & beforeEventInfo,ArkUI_AccessibilityElementInfo & info)317     void FillNativeAccessibilityEventInfo(
318         ArkUI_AccessibilityEventInfo& nativeEventInfo,
319         OHOS::Accessibility::AccessibilityEventInfo& beforeEventInfo,
320         ArkUI_AccessibilityElementInfo &info)
321     {
322         nativeEventInfo.SetEventType(
323             static_cast<ArkUI_AccessibilityEventType>(beforeEventInfo.GetEventType()));
324         nativeEventInfo.SetPageId(beforeEventInfo.GetPageId());
325         nativeEventInfo.SetRequestFocusId(beforeEventInfo.GetRequestFocusElementId());
326         nativeEventInfo.SetElementInfo(&(info));
327         nativeEventInfo.SetTextAnnouncedForAccessibility(
328             beforeEventInfo.GetTextAnnouncedForAccessibility());
329     }
330 
CheckTransformEventInfoResult(const OHOS::Accessibility::AccessibilityEventInfo & beforeEventInfo,const OHOS::Accessibility::AccessibilityEventInfo & afterEventInfo)331     void CheckTransformEventInfoResult(
332         const OHOS::Accessibility::AccessibilityEventInfo& beforeEventInfo,
333         const OHOS::Accessibility::AccessibilityEventInfo& afterEventInfo)
334     {
335         EXPECT_EQ(beforeEventInfo.GetEventType(), afterEventInfo.GetEventType());
336         // page not transform
337         EXPECT_EQ(beforeEventInfo.GetRequestFocusElementId(),
338             afterEventInfo.GetRequestFocusElementId());
339         CheckTransformElementInfoResult(beforeEventInfo.GetElementInfo(),
340             afterEventInfo.GetElementInfo());
341         EXPECT_EQ(beforeEventInfo.GetTextAnnouncedForAccessibility(),
342             afterEventInfo.GetTextAnnouncedForAccessibility());
343     }
344 
345     std::vector<ArkUI_Accessibility_ActionType> actionTypeVector = {
346         ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_INVALID,
347         ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_CLICK,
348         ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_CLICK,
349         ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_LONG_CLICK,
350         ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_GAIN_ACCESSIBILITY_FOCUS,
351         ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_CLEAR_ACCESSIBILITY_FOCUS,
352         ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_SCROLL_FORWARD,
353         ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_SCROLL_BACKWARD,
354         ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_COPY,
355         ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_PASTE,
356         ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_CUT,
357         ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_SELECT_TEXT,
358         ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_SET_TEXT,
359         ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_SET_CURSOR_POSITION,
360     };
361 };
362 
363 /**
364  * @tc.name: accessibilityTest001
365  * @tc.desc: TransformAccessbilityElementInfo
366  * @tc.type: FUNC
367  */
368 HWTEST_F(AccessibilityProviderUtilsTestNg, AccessibilityUtilsTest001, TestSize.Level1)
369 {
370     OHOS::Accessibility::AccessibilityElementInfo beforeInfo;
371     BuildAccessibilityElementInfo(1, beforeInfo);
372     ArkUI_AccessibilityElementInfo info;
373     FillNativeAccessibilityElementInfo(beforeInfo, info);
374     OHOS::Accessibility::AccessibilityElementInfo afterInfo;
375     Framework::TransformAccessbilityElementInfo(info, afterInfo);
376     CheckTransformElementInfoResult(beforeInfo, afterInfo);
377 }
378 
379 /**
380  * @tc.name: accessibilityTest002
381  * @tc.desc: TransformAccessbilityEventInfo
382  * @tc.type: FUNC
383  */
384 HWTEST_F(AccessibilityProviderUtilsTestNg, AccessibilityUtilsTest002, TestSize.Level1)
385 {
386     OHOS::Accessibility::AccessibilityElementInfo beforeElementInfo;
387     BuildAccessibilityElementInfo(1, beforeElementInfo);
388     ArkUI_AccessibilityElementInfo info;
389     FillNativeAccessibilityElementInfo(beforeElementInfo, info);
390 
391     OHOS::Accessibility::AccessibilityEventInfo beforeEventInfo;
392     BuildAccessibilityEventInfo(1, beforeEventInfo, beforeElementInfo);
393     ArkUI_AccessibilityEventInfo nativeEventInfo;
394     FillNativeAccessibilityEventInfo(nativeEventInfo, beforeEventInfo, info);
395 
396     OHOS::Accessibility::AccessibilityEventInfo accessibilityEventInfo;
397     Framework::TransformAccessbilityEventInfo(nativeEventInfo, accessibilityEventInfo);
398 
399     CheckTransformEventInfoResult(beforeEventInfo, accessibilityEventInfo);
400 }
401 
402 /**
403  * @tc.name: accessibilityTest003
404  * @tc.desc: Check child
405  * @tc.type: FUNC
406  */
407 HWTEST_F(AccessibilityProviderUtilsTestNg, AccessibilityUtilsTest003, TestSize.Level1)
408 {
409     OHOS::Accessibility::AccessibilityElementInfo beforeInfo;
410     BuildAccessibilityElementInfo(1, beforeInfo);
411     ArkUI_AccessibilityElementInfo info;
412     FillNativeAccessibilityElementInfo(beforeInfo, info);
413 
414     // add child
415     std::vector<int64_t> childIds;
416     auto now = std::chrono::system_clock::now();
417     int64_t childCount =
418         std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch())
419         .count();
420     childCount = (childCount % MAX_CHILD_COUNT) + 1;
421     for (int64_t i = 0; i < childCount; i++) {
422         info.AddChildNodeId(i);
423         childIds.push_back(i);
424     }
425 
426     OHOS::Accessibility::AccessibilityElementInfo afterInfo;
427     Framework::TransformAccessbilityElementInfo(info, afterInfo);
428     CheckTransformElementInfoResult(beforeInfo, afterInfo);
429 
430     EXPECT_EQ(afterInfo.GetChildCount(), childCount);
431     EXPECT_EQ(afterInfo.GetChildIds(), childIds);
432 
433     // clear child
434     info.ClearChildNodeIds();
435     OHOS::Accessibility::AccessibilityElementInfo afterInfo2;
436     Framework::TransformAccessbilityElementInfo(info, afterInfo2);
437     CheckTransformElementInfoResult(beforeInfo, afterInfo2);
438     EXPECT_EQ(afterInfo2.GetChildCount(), 0);
439 }
440 
441 /**
442  * @tc.name: accessibilityTest004
443  * @tc.desc: Check action
444  * @tc.type: FUNC
445  */
446 HWTEST_F(AccessibilityProviderUtilsTestNg, AccessibilityUtilsTest004, TestSize.Level1)
447 {
448     OHOS::Accessibility::AccessibilityElementInfo beforeInfo;
449     BuildAccessibilityElementInfo(1, beforeInfo);
450     ArkUI_AccessibilityElementInfo info;
451     FillNativeAccessibilityElementInfo(beforeInfo, info);
452 
453     // add action
454     std::vector<Accessibility::AccessibleAction> accessibilityActions;
455     auto now = std::chrono::system_clock::now();
456     int64_t actionCount =
457         std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch())
458         .count();
459     actionCount = (actionCount % MAX_ACTION_COUNT) + 1;
460     auto startIndex = actionCount;
461     char string[MAX_C_STR_COUNT][MAX_C_STR_CHAR_COUNT];
462     for (int64_t i = 0; i < actionCount; i++) {
463         ArkUI_Accessibility_ActionType actionType
464             = actionTypeVector[(startIndex + i) % actionTypeVector.size()];
465         auto content = std::to_string(startIndex + i);
466         (void)strcpy_s(string[i], MAX_C_STR_CHAR_COUNT, content.c_str());
467         ArkUI_AccessibleAction tempAction { actionType, string[i]};
468         info.AddOperationAction(tempAction);
469         Accessibility::AccessibleAction tempAccessibilityActions
470             {static_cast<Accessibility::ActionType>(actionType), string[i]};
471         accessibilityActions.push_back(tempAccessibilityActions);
472     }
473 
474     OHOS::Accessibility::AccessibilityElementInfo afterInfo;
475     Framework::TransformAccessbilityElementInfo(info, afterInfo);
476     CheckTransformElementInfoResult(beforeInfo, afterInfo);
477 
478     EXPECT_EQ(afterInfo.GetActionList().size(), actionCount);
479     EXPECT_EQ(accessibilityActions.size(), actionCount);
480     auto afterActionList = afterInfo.GetActionList();
481     for (int64_t i = 0; i < actionCount; i++) {
482         EXPECT_EQ(afterActionList[i].GetActionType(),
483             accessibilityActions[i].GetActionType());
484         EXPECT_EQ(afterActionList[i].GetDescriptionInfo(),
485             accessibilityActions[i].GetDescriptionInfo());
486     }
487 
488     // clear action
489     info.ClearOperationActions();
490     OHOS::Accessibility::AccessibilityElementInfo afterInfo2;
491     Framework::TransformAccessbilityElementInfo(info, afterInfo2);
492     CheckTransformElementInfoResult(beforeInfo, afterInfo2);
493     EXPECT_EQ(afterInfo2.GetActionList().size(), 0);
494 }
495 
496 } // namespace OHOS::Ace::NG
497