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 "frameworks/core/accessibility/accessibility_node.h"
19 #include "frameworks/core/accessibility/accessibility_utils.h"
20 #include "frameworks/core/accessibility/native_interface_accessibility_provider.h"
21 #include "interfaces/native/native_interface_accessibility.h"
22 #include "securec.h"
23 
24 using namespace testing;
25 using namespace testing::ext;
26 
27 namespace OHOS::Ace::NG {
28 namespace {
29 constexpr int32_t BOOL_MASK = 2;
30 constexpr int32_t SEND_EVENT_FAILED = -1;
31 const int32_t MAX_CHILD_COUNT = 20;
32 const int32_t MAX_ACTION_COUNT = 20;
33 const int32_t MAX_C_STR_CHAR_COUNT = 100;
34 int32_t g_errcode;
35 
MockProviderCallBack(int32_t errorCode)36 void MockProviderCallBack(int32_t errorCode)
37 {
38     g_errcode = errorCode;
39 }
40 
MockEventCallBack(int32_t errorCode)41 void MockEventCallBack(int32_t errorCode)
42 {
43     g_errcode = errorCode;
44 }
45 
46 #define TWO_PARAMETER_NULLPTR_TEST(name, para0, para1, result) do {    \
47     EXPECT_EQ(OH_ArkUI_##name(para0, nullptr), result);                \
48     EXPECT_EQ(OH_ArkUI_##name(nullptr, para1), result);                \
49     EXPECT_EQ(OH_ArkUI_##name(nullptr, nullptr), result);              \
50 } while (0)
51 
52 #define TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(name, para0, para1, result) do {    \
53     EXPECT_EQ(OH_ArkUI_##name(nullptr, para1), result);                               \
54 } while (0)
55 
56 #define THREE_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(name, para0, para1, para2, result) do { \
57     EXPECT_EQ(OH_ArkUI_##name(para0, para1, nullptr), result);                              \
58     EXPECT_EQ(OH_ArkUI_##name(nullptr, para1, para2), result);                              \
59     EXPECT_EQ(OH_ArkUI_##name(nullptr, para1, nullptr), result);                            \
60 } while (0)
61 
62 #define NATIVE_ADD_ELEMENTINFO(name, para0, para1) do {               \
63     EXPECT_EQ(OH_ArkUI_AccessibilityElementInfo##name(para0, para1),  \
64         ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL);                \
65 } while (0)
66 
67 #define NATIVE_ADD_ELEMENTINFO_WITH_STRING_PTR(name, para0, para1) do {             \
68     auto para_##name = para1;                                                       \
69     EXPECT_EQ(OH_ArkUI_AccessibilityElementInfo##name(para0, para_##name.c_str()),  \
70         ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL);                              \
71 } while (0)
72 
73 std::vector<ArkUI_Accessibility_ActionType> actionTypeVector = {
74     ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_INVALID,
75     ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_CLICK,
76     ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_CLICK,
77     ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_LONG_CLICK,
78     ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_GAIN_ACCESSIBILITY_FOCUS,
79     ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_CLEAR_ACCESSIBILITY_FOCUS,
80     ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_SCROLL_FORWARD,
81     ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_SCROLL_BACKWARD,
82     ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_COPY,
83     ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_PASTE,
84     ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_CUT,
85     ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_SELECT_TEXT,
86     ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_SET_TEXT,
87     ARKUI_ACCESSIBILITY_NATIVE_ACTION_TYPE_SET_CURSOR_POSITION,
88 };
89 
90 } // namespace
91 
92 class NativeInterfaceAccessibilityTestNg : public testing::Test {
93 public:
SetUpTestCase()94     static void SetUpTestCase() {};
TearDownTestCase()95     static void TearDownTestCase() {};
96 
FillNativeAccessibilityElementInfoPart(ArkUI_AccessibilityElementInfo & beforeInfo,ArkUI_AccessibilityElementInfo & afterInfo)97     void FillNativeAccessibilityElementInfoPart(
98         ArkUI_AccessibilityElementInfo& beforeInfo,
99         ArkUI_AccessibilityElementInfo& afterInfo)
100     {
101         // screen rect
102         auto rect = beforeInfo.GetScreenRect();
103         NATIVE_ADD_ELEMENTINFO(SetScreenRect, &afterInfo, &rect);
104 
105         // rangeInfo
106         auto rangeInfo = beforeInfo.GetRangeInfo();
107         NATIVE_ADD_ELEMENTINFO(SetRangeInfo, &afterInfo, &rangeInfo);
108 
109         // GridInfo
110         auto gridInfo = beforeInfo.GetGridInfo();
111         NATIVE_ADD_ELEMENTINFO(SetGridInfo, &afterInfo, &gridInfo);
112 
113         // GridItemInfo
114         auto gridItemInfo = beforeInfo.GetGridItemInfo();
115         NATIVE_ADD_ELEMENTINFO(SetGridItemInfo, &afterInfo, &gridItemInfo);
116 
117         NATIVE_ADD_ELEMENTINFO_WITH_STRING_PTR(SetComponentType,
118             &afterInfo, beforeInfo.GetComponentType());
119         NATIVE_ADD_ELEMENTINFO_WITH_STRING_PTR(SetContents,
120             &afterInfo, beforeInfo.GetContents());
121         NATIVE_ADD_ELEMENTINFO_WITH_STRING_PTR(SetHintText,
122             &afterInfo, beforeInfo.GetHintText());
123         NATIVE_ADD_ELEMENTINFO_WITH_STRING_PTR(SetAccessibilityText,
124             &afterInfo, beforeInfo.GetAccessibilityText());
125         NATIVE_ADD_ELEMENTINFO_WITH_STRING_PTR(SetAccessibilityDescription,
126             &afterInfo, beforeInfo.GetAccessibilityDescription());
127         NATIVE_ADD_ELEMENTINFO_WITH_STRING_PTR(SetAccessibilityLevel,
128             &afterInfo, beforeInfo.GetAccessibilityLevel());
129         NATIVE_ADD_ELEMENTINFO_WITH_STRING_PTR(SetBackgroundColor,
130             &afterInfo, beforeInfo.GetBackgroundColor());
131         NATIVE_ADD_ELEMENTINFO_WITH_STRING_PTR(SetBackgroundImage,
132             &afterInfo, beforeInfo.GetBackgroundImage());
133         NATIVE_ADD_ELEMENTINFO_WITH_STRING_PTR(SetBlur,
134             &afterInfo, beforeInfo.GetBlur());
135         NATIVE_ADD_ELEMENTINFO_WITH_STRING_PTR(SetHitTestBehavior,
136             &afterInfo, beforeInfo.GetHitTestBehavior());
137     }
138 
FillNativeAccessibilityElementInfo(ArkUI_AccessibilityElementInfo & beforeInfo,ArkUI_AccessibilityElementInfo & afterInfo)139     void FillNativeAccessibilityElementInfo(
140         ArkUI_AccessibilityElementInfo& beforeInfo,
141         ArkUI_AccessibilityElementInfo& afterInfo)
142     {
143         NATIVE_ADD_ELEMENTINFO(SetParentId, &afterInfo, beforeInfo.GetParentId());
144         NATIVE_ADD_ELEMENTINFO(SetElementId, &afterInfo, beforeInfo.GetElementId());
145         NATIVE_ADD_ELEMENTINFO(SetSelectedTextStart,
146             &afterInfo, beforeInfo.GetTextBeginSelected());
147         NATIVE_ADD_ELEMENTINFO(SetSelectedTextEnd,
148              &afterInfo, beforeInfo.GetTextEndSelected());
149         NATIVE_ADD_ELEMENTINFO(SetCurrentItemIndex, &afterInfo, beforeInfo.GetCurrentIndex());
150         NATIVE_ADD_ELEMENTINFO(SetStartItemIndex, &afterInfo, beforeInfo.GetBeginIndex());
151         NATIVE_ADD_ELEMENTINFO(SetEndItemIndex, &afterInfo, beforeInfo.GetEndIndex());
152         NATIVE_ADD_ELEMENTINFO(SetItemCount, &afterInfo, beforeInfo.GetItemCount());
153         NATIVE_ADD_ELEMENTINFO(SetAccessibilityOffset, &afterInfo, beforeInfo.GetOffset());
154         NATIVE_ADD_ELEMENTINFO(SetZIndex, &afterInfo, beforeInfo.GetZIndex());
155         NATIVE_ADD_ELEMENTINFO(SetAccessibilityOpacity, &afterInfo, beforeInfo.GetOpacity());
156         NATIVE_ADD_ELEMENTINFO(SetCheckable, &afterInfo, beforeInfo.IsCheckable());
157         NATIVE_ADD_ELEMENTINFO(SetChecked, &afterInfo, beforeInfo.IsChecked());
158         NATIVE_ADD_ELEMENTINFO(SetFocusable, &afterInfo, beforeInfo.IsFocusable());
159         NATIVE_ADD_ELEMENTINFO(SetFocused, &afterInfo, beforeInfo.IsFocused());
160         NATIVE_ADD_ELEMENTINFO(SetVisible, &afterInfo, beforeInfo.IsVisible());
161         NATIVE_ADD_ELEMENTINFO(SetAccessibilityFocused,
162             &afterInfo, beforeInfo.IsAccessibilityFocused());
163         NATIVE_ADD_ELEMENTINFO(SetSelected, &afterInfo, beforeInfo.IsSelected());
164         NATIVE_ADD_ELEMENTINFO(SetClickable, &afterInfo, beforeInfo.IsClickable());
165         NATIVE_ADD_ELEMENTINFO(SetLongClickable, &afterInfo, beforeInfo.IsLongClickable());
166         NATIVE_ADD_ELEMENTINFO(SetEnabled, &afterInfo, beforeInfo.IsEnabled());
167         NATIVE_ADD_ELEMENTINFO(SetIsPassword, &afterInfo, beforeInfo.IsPassword());
168         NATIVE_ADD_ELEMENTINFO(SetScrollable, &afterInfo, beforeInfo.IsScrollable());
169         NATIVE_ADD_ELEMENTINFO(SetEditable, &afterInfo, beforeInfo.IsEditable());
170         NATIVE_ADD_ELEMENTINFO(SetIsHint, &afterInfo, beforeInfo.IsHint());
171         NATIVE_ADD_ELEMENTINFO(SetAccessibilityGroup,
172             &afterInfo, beforeInfo.GetAccessibilityGroup());
173 
174         FillNativeAccessibilityElementInfoPart(beforeInfo, afterInfo);
175     }
176 
BuildNativeAccessibilityElementInfoPart(int32_t index,ArkUI_AccessibilityElementInfo & nativeInfo)177     void BuildNativeAccessibilityElementInfoPart(
178         int32_t index,
179         ArkUI_AccessibilityElementInfo& nativeInfo)
180     {
181         // screen rect
182         auto leftTopX = ++index;
183         auto leftTopY = ++index;
184         auto rightBottomX = ++index;
185         auto rightBottomY = ++index;
186         ArkUI_AccessibleRect screenRect {leftTopX, leftTopY, rightBottomX, rightBottomY};
187         nativeInfo.SetRect(screenRect);
188         // rangeInfo
189         auto min = ++index;
190         auto max = ++index;
191         auto current = ++index;
192         ArkUI_AccessibleRangeInfo rangeInfo {min, max, current};
193         nativeInfo.SetRangeInfo(rangeInfo);
194         // GridInfo
195         auto rowCount = ++index;
196         auto columnCount = ++index;
197         auto selectionMode = ++index;
198         ArkUI_AccessibleGridInfo gridInfo {rowCount, columnCount, selectionMode};
199         nativeInfo.SetGridInfo(gridInfo);
200         // GridItemInfo
201         auto heading = (++index) % BOOL_MASK;
202         auto columnIndex = ++index;
203         auto rowIndex = ++index;
204         auto columnSpan = ++index;
205         auto rowSpan = ++index;
206         auto selected = (++index) % BOOL_MASK;
207         ArkUI_AccessibleGridItemInfo gridItemInfo {heading, columnIndex, rowIndex, columnSpan, rowSpan, selected};
208         nativeInfo.SetGridItemInfo(gridItemInfo);
209 
210         nativeInfo.SetComponentType(std::to_string(++index));
211         nativeInfo.SetContents(std::to_string(++index));
212         nativeInfo.SetHintText(std::to_string(++index));
213         nativeInfo.SetAccessibilityText(std::to_string(++index));
214         nativeInfo.SetAccessibilityDescription(std::to_string(++index));
215         nativeInfo.SetAccessibilityLevel(std::to_string(++index));
216         nativeInfo.SetBackgroundColor(std::to_string(++index));
217         nativeInfo.SetBackgroundImage(std::to_string(++index));
218         nativeInfo.SetBlur(std::to_string(++index));
219         nativeInfo.SetHitTestBehavior(std::to_string(++index));
220     }
221 
BuildNativeAccessibilityElementInfo(int32_t index,ArkUI_AccessibilityElementInfo & nativeInfo)222     void BuildNativeAccessibilityElementInfo(
223         int32_t index,
224         ArkUI_AccessibilityElementInfo& nativeInfo)
225     {
226         nativeInfo.SetPageId(index);
227         nativeInfo.SetParentId(++index);
228         nativeInfo.SetElementId(++index);
229         nativeInfo.SetTextBeginSelected(++index);
230         nativeInfo.SetTextEndSelected(++index);
231         nativeInfo.SetCurrentIndex(++index);
232         nativeInfo.SetBeginIndex(++index);
233         nativeInfo.SetEndIndex(++index);
234         nativeInfo.SetItemCount(++index);
235         nativeInfo.SetOffset(++index);
236         nativeInfo.SetZIndex(++index);
237         nativeInfo.SetOpacity(++index);
238         nativeInfo.SetCheckable((++index) % BOOL_MASK);
239         nativeInfo.SetChecked((++index) % BOOL_MASK);
240         nativeInfo.SetFocusable((++index) % BOOL_MASK);
241         nativeInfo.SetFocused((++index) % BOOL_MASK);
242         nativeInfo.SetVisible((++index) % BOOL_MASK);
243         nativeInfo.SetAccessibilityFocused((++index) % BOOL_MASK);
244         nativeInfo.SetSelected((++index) % BOOL_MASK);
245         nativeInfo.SetClickable((++index) % BOOL_MASK);
246         nativeInfo.SetLongClickable((++index) % BOOL_MASK);
247         nativeInfo.SetEnabled((++index) % BOOL_MASK);
248         nativeInfo.SetPassword((++index) % BOOL_MASK);
249         nativeInfo.SetScrollable((++index) % BOOL_MASK);
250         nativeInfo.SetEditable((++index) % BOOL_MASK);
251         nativeInfo.SetHint((++index) % BOOL_MASK);
252         nativeInfo.SetAccessibilityGroup((++index) % BOOL_MASK);
253 
254         BuildNativeAccessibilityElementInfoPart(index, nativeInfo);
255     }
256 
CheckTransformElementInfoResultPart(ArkUI_AccessibilityElementInfo & beforeInfo,ArkUI_AccessibilityElementInfo & afterInfo)257     void CheckTransformElementInfoResultPart(
258         ArkUI_AccessibilityElementInfo& beforeInfo,
259         ArkUI_AccessibilityElementInfo& afterInfo)
260     {
261         // screen rect
262         EXPECT_EQ(beforeInfo.GetScreenRect().leftTopX,
263             afterInfo.GetScreenRect().leftTopX);
264         EXPECT_EQ(beforeInfo.GetScreenRect().leftTopY,
265             afterInfo.GetScreenRect().leftTopY);
266         EXPECT_EQ(beforeInfo.GetScreenRect().rightBottomX,
267             afterInfo.GetScreenRect().rightBottomX);
268         EXPECT_EQ(beforeInfo.GetScreenRect().rightBottomY,
269             afterInfo.GetScreenRect().rightBottomY);
270 
271         // rangeInfo
272         EXPECT_EQ(beforeInfo.GetRangeInfo().min,
273             afterInfo.GetRangeInfo().min);
274         EXPECT_EQ(beforeInfo.GetRangeInfo().max,
275             afterInfo.GetRangeInfo().max);
276         EXPECT_EQ(beforeInfo.GetRangeInfo().current,
277             afterInfo.GetRangeInfo().current);
278 
279         // GridInfo
280         EXPECT_EQ(beforeInfo.GetGridInfo().rowCount,
281             afterInfo.GetGridInfo().rowCount);
282         EXPECT_EQ(beforeInfo.GetGridInfo().columnCount,
283             afterInfo.GetGridInfo().columnCount);
284         EXPECT_EQ(beforeInfo.GetGridInfo().selectionMode,
285             afterInfo.GetGridInfo().selectionMode);
286 
287         // GridItemInfo
288         EXPECT_EQ(beforeInfo.GetGridItemInfo().columnIndex,
289             afterInfo.GetGridItemInfo().columnIndex);
290         EXPECT_EQ(beforeInfo.GetGridItemInfo().rowIndex,
291             afterInfo.GetGridItemInfo().rowIndex);
292         EXPECT_EQ(beforeInfo.GetGridItemInfo().columnSpan,
293             afterInfo.GetGridItemInfo().columnSpan);
294         EXPECT_EQ(beforeInfo.GetGridItemInfo().rowSpan,
295             afterInfo.GetGridItemInfo().rowSpan);
296         EXPECT_EQ(beforeInfo.GetGridItemInfo().heading,
297             afterInfo.GetGridItemInfo().heading);
298         EXPECT_EQ(beforeInfo.GetGridItemInfo().selected,
299             afterInfo.GetGridItemInfo().selected);
300 
301         EXPECT_EQ(beforeInfo.GetComponentType(), afterInfo.GetComponentType());
302         EXPECT_EQ(beforeInfo.GetContents(), afterInfo.GetContents());
303         EXPECT_EQ(beforeInfo.GetHintText(), afterInfo.GetHintText());
304         EXPECT_EQ(beforeInfo.GetAccessibilityText(), afterInfo.GetAccessibilityText());
305         EXPECT_EQ(beforeInfo.GetAccessibilityDescription(), afterInfo.GetAccessibilityDescription());
306         EXPECT_EQ(beforeInfo.GetAccessibilityLevel(), afterInfo.GetAccessibilityLevel());
307         EXPECT_EQ(beforeInfo.GetBackgroundColor(), afterInfo.GetBackgroundColor());
308         EXPECT_EQ(beforeInfo.GetBlur(), afterInfo.GetBlur());
309         EXPECT_EQ(beforeInfo.GetHitTestBehavior(), afterInfo.GetHitTestBehavior());
310     }
311 
CheckTransformElementInfoResult(ArkUI_AccessibilityElementInfo & beforeInfo,ArkUI_AccessibilityElementInfo & afterInfo)312     void CheckTransformElementInfoResult(
313         ArkUI_AccessibilityElementInfo& beforeInfo,
314         ArkUI_AccessibilityElementInfo& afterInfo)
315     {
316         // Page ID not trans
317         EXPECT_EQ(beforeInfo.GetParentId(), afterInfo.GetParentId());
318         EXPECT_EQ(beforeInfo.GetElementId(), afterInfo.GetElementId());
319         EXPECT_EQ(beforeInfo.GetTextBeginSelected(), afterInfo.GetTextBeginSelected());
320         EXPECT_EQ(beforeInfo.GetTextEndSelected(), afterInfo.GetTextEndSelected());
321         EXPECT_EQ(beforeInfo.GetCurrentIndex(), afterInfo.GetCurrentIndex());
322         EXPECT_EQ(beforeInfo.GetBeginIndex(), afterInfo.GetBeginIndex());
323         EXPECT_EQ(beforeInfo.GetEndIndex(), afterInfo.GetEndIndex());
324         EXPECT_EQ(beforeInfo.GetItemCount(), afterInfo.GetItemCount());
325         EXPECT_EQ(beforeInfo.GetOffset(), afterInfo.GetOffset());
326         EXPECT_EQ(beforeInfo.GetZIndex(), afterInfo.GetZIndex());
327         EXPECT_EQ(beforeInfo.GetOpacity(), afterInfo.GetOpacity());
328         EXPECT_EQ(beforeInfo.IsCheckable(), afterInfo.IsCheckable());
329         EXPECT_EQ(beforeInfo.IsChecked(), afterInfo.IsChecked());
330         EXPECT_EQ(beforeInfo.IsFocusable(), afterInfo.IsFocusable());
331         EXPECT_EQ(beforeInfo.IsFocused(), afterInfo.IsFocused());
332         EXPECT_EQ(beforeInfo.IsVisible(), afterInfo.IsVisible());
333         EXPECT_EQ(beforeInfo.IsAccessibilityFocused(), afterInfo.IsAccessibilityFocused());
334         EXPECT_EQ(beforeInfo.IsSelected(), afterInfo.IsSelected());
335         EXPECT_EQ(beforeInfo.IsClickable(), afterInfo.IsClickable());
336         EXPECT_EQ(beforeInfo.IsLongClickable(), afterInfo.IsLongClickable());
337         EXPECT_EQ(beforeInfo.IsEnabled(), afterInfo.IsEnabled());
338         EXPECT_EQ(beforeInfo.IsPassword(), afterInfo.IsPassword());
339         EXPECT_EQ(beforeInfo.IsScrollable(), afterInfo.IsScrollable());
340         EXPECT_EQ(beforeInfo.IsEditable(), afterInfo.IsEditable());
341         EXPECT_EQ(beforeInfo.IsHint(), afterInfo.IsHint());
342         EXPECT_EQ(beforeInfo.GetAccessibilityGroup(), afterInfo.GetAccessibilityGroup());
343 
344         CheckTransformElementInfoResultPart(beforeInfo, afterInfo);
345     }
346 };
347 
348 /**
349  * @tc.name: accessibilityTest001
350  * @tc.desc: native_interface_accessibility.cpp abnormal
351  * @tc.type: FUNC
352  */
353 HWTEST_F(NativeInterfaceAccessibilityTestNg, AccessibilityProviderTest001, TestSize.Level1)
354 {
355     int32_t ret;
356     char testStr[] = "test";
357     int64_t testChildNodeIds[10];
358     ArkUI_AccessibilityProvider testProvider;
359     ArkUI_AccessibilityProviderCallbacks testCallbacks;
360     ArkUI_AccessibilityEventInfo testEventInfo;
361     ArkUI_AccessibilityElementInfo testElementInfo;
362 
363     TWO_PARAMETER_NULLPTR_TEST(AccessibilityProviderRegisterCallback,
364         &testProvider, &testCallbacks, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
365 
366     OH_ArkUI_SendAccessibilityAsyncEvent(nullptr, &testEventInfo, MockProviderCallBack);
367     OH_ArkUI_SendAccessibilityAsyncEvent(&testProvider, &testEventInfo, nullptr);
368     OH_ArkUI_SendAccessibilityAsyncEvent(nullptr, &testEventInfo, nullptr);
369 
370     OH_ArkUI_DestoryAccessibilityElementInfo(nullptr);
371 
372     OH_ArkUI_DestoryAccessibilityEventInfo(nullptr);
373 
374     ret = OH_ArkUI_AccessibilityElementInfoSetElementId(nullptr, 0);
375     EXPECT_EQ(ret, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
376 
377     ret = OH_ArkUI_AccessibilityElementInfoSetParentId(nullptr, 0);
378     EXPECT_EQ(ret, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
379 
380     TWO_PARAMETER_NULLPTR_TEST(AccessibilityElementInfoSetComponentType,
381         &testElementInfo, testStr, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
382 
383     TWO_PARAMETER_NULLPTR_TEST(AccessibilityElementInfoSetContents,
384         &testElementInfo, testStr, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
385 
386     TWO_PARAMETER_NULLPTR_TEST(AccessibilityElementInfoSetHintText,
387         &testElementInfo, testStr, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
388 
389     TWO_PARAMETER_NULLPTR_TEST(AccessibilityElementInfoSetAccessibilityText,
390         &testElementInfo, testStr, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
391 
392     TWO_PARAMETER_NULLPTR_TEST(AccessibilityElementInfoSetAccessibilityDescription,
393         &testElementInfo, testStr, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
394 
395     THREE_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetChildNodeIds,
396         &testElementInfo, 0, testChildNodeIds, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
397 }
398 
399 /**
400  * @tc.name: accessibilityTest002
401  * @tc.desc: native_interface_accessibility.cpp abnormal
402  * @tc.type: FUNC
403  */
404 HWTEST_F(NativeInterfaceAccessibilityTestNg, AccessibilityProviderTest002, TestSize.Level1)
405 {
406     int32_t ret;
407     ArkUI_AccessibilityElementInfo testElementInfo;
408     ArkUI_AccessibleAction testOperationActions;
409     ArkUI_AccessibleRect screenRect;
410 
411     THREE_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetOperationActions,
412         &testElementInfo, 1, &testOperationActions, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
413 
414     ret = OH_ArkUI_AccessibilityElementInfoSetOperationActions(&testElementInfo, 0, &testOperationActions);
415     EXPECT_EQ(ret, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
416 
417     TWO_PARAMETER_NULLPTR_TEST(AccessibilityElementInfoSetScreenRect,
418         &testElementInfo, &screenRect, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
419 
420     TWO_PARAMETER_NULLPTR_TEST(AccessibilityElementInfoSetScreenRect,
421         &testElementInfo, &screenRect, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
422 
423     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetCheckable,
424         &testElementInfo, true, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
425 
426     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetChecked,
427         &testElementInfo, true, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
428 
429     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetFocusable,
430         &testElementInfo, true, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
431 
432     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetFocused,
433         &testElementInfo, true, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
434 
435     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetVisible,
436         &testElementInfo, true, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
437 
438     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetAccessibilityFocused,
439         &testElementInfo, true, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
440 
441     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetSelected,
442         &testElementInfo, true, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
443 
444     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetClickable,
445         &testElementInfo, true, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
446 
447     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetLongClickable,
448         &testElementInfo, true, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
449 
450     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetEnabled,
451         &testElementInfo, true, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
452 
453     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetIsPassword,
454         &testElementInfo, true, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
455 
456     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetScrollable,
457         &testElementInfo, true, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
458 
459     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetEditable,
460         &testElementInfo, true, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
461 
462     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetIsHint,
463         &testElementInfo, true, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
464 
465     ArkUI_AccessibleRangeInfo rangeInfo;
466     TWO_PARAMETER_NULLPTR_TEST(AccessibilityElementInfoSetRangeInfo,
467         &testElementInfo, &rangeInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
468 }
469 
470 /**
471  * @tc.name: accessibilityTest003
472  * @tc.desc: native_interface_accessibility.cpp abnormal
473  * @tc.type: FUNC
474  */
475 HWTEST_F(NativeInterfaceAccessibilityTestNg, AccessibilityProviderTest003, TestSize.Level1)
476 {
477     ArkUI_AccessibilityElementInfo testElementInfo;
478     char testStr[] = "test";
479 
480     ArkUI_AccessibleGridInfo gridInfo;
481     TWO_PARAMETER_NULLPTR_TEST(AccessibilityElementInfoSetGridInfo,
482         &testElementInfo, &gridInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
483 
484     ArkUI_AccessibleGridItemInfo gridItem;
485     TWO_PARAMETER_NULLPTR_TEST(AccessibilityElementInfoSetGridItemInfo,
486         &testElementInfo, &gridItem, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
487 
488     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetSelectedTextStart,
489         &testElementInfo, 0, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
490 
491     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetSelectedTextEnd,
492         &testElementInfo, 0, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
493 
494     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetCurrentItemIndex,
495         &testElementInfo, 0, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
496 
497     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetStartItemIndex,
498         &testElementInfo, 0, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
499 
500     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetEndItemIndex,
501         &testElementInfo, 0, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
502 
503     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetItemCount,
504         &testElementInfo, 0, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
505 
506     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetAccessibilityOffset,
507         &testElementInfo, 0, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
508 
509     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetAccessibilityGroup,
510         &testElementInfo, true, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
511 
512     TWO_PARAMETER_NULLPTR_TEST(AccessibilityElementInfoSetAccessibilityLevel,
513         &testElementInfo, testStr, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
514 
515     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetZIndex,
516         &testElementInfo, 0, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
517 
518     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetAccessibilityOpacity,
519         &testElementInfo, 0, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
520 
521     TWO_PARAMETER_NULLPTR_TEST(AccessibilityElementInfoSetBackgroundColor,
522         &testElementInfo, testStr, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
523 
524     TWO_PARAMETER_NULLPTR_TEST(AccessibilityElementInfoSetBackgroundImage,
525         &testElementInfo, testStr, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
526 
527     TWO_PARAMETER_NULLPTR_TEST(AccessibilityElementInfoSetBlur,
528         &testElementInfo, testStr, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
529 
530     TWO_PARAMETER_NULLPTR_TEST(AccessibilityElementInfoSetHitTestBehavior,
531         &testElementInfo, testStr, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
532 
533     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityEventSetEventType,
534         &testElementInfo, ARKUI_ACCESSIBILITY_NATIVE_EVENT_TYPE_INVALID,
535         ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
536 }
537 
538 /**
539  * @tc.name: accessibilityTest004
540  * @tc.desc: native_interface_accessibility.cpp abnormal
541  * @tc.type: FUNC
542  */
543 HWTEST_F(NativeInterfaceAccessibilityTestNg, AccessibilityProviderTest004, TestSize.Level1)
544 {
545     ArkUI_AccessibilityEventInfo eventInfo;
546     ArkUI_AccessibilityElementInfo elementInfo;
547     int32_t ret;
548     char testStr[] = "test";
549 
550     std::map<std::string, std::string> actionArguments;
551     ArkUI_AccessibilityActionArguments arguments(actionArguments);
552 
553     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityEventSetTextAnnouncedForAccessibility,
554         &eventInfo, testStr, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
555 
556     TWO_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityEventSetRequestFocusId,
557         &eventInfo, 0, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
558 
559     TWO_PARAMETER_NULLPTR_TEST(AccessibilityEventSetElementInfo,
560         &eventInfo, &elementInfo, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
561 
562     ret =  OH_ArkUI_FindAccessibilityActionArgumentByKey(nullptr, testStr, nullptr);
563     EXPECT_EQ(ret, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
564     ret =  OH_ArkUI_FindAccessibilityActionArgumentByKey(&arguments, nullptr, nullptr);
565     EXPECT_EQ(ret, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
566     ret =  OH_ArkUI_FindAccessibilityActionArgumentByKey(nullptr, nullptr, nullptr);
567     EXPECT_EQ(ret, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
568 }
569 
570 /**
571  * @tc.name: accessibilityTest005
572  * @tc.desc: set elementinfo success
573  * @tc.type: FUNC
574  */
575 HWTEST_F(NativeInterfaceAccessibilityTestNg, AccessibilityUtilsTest005, TestSize.Level1)
576 {
577     ArkUI_AccessibilityElementInfo beforeInfo;
578     ArkUI_AccessibilityElementInfo afterInfo;
579 
580     BuildNativeAccessibilityElementInfo(1, beforeInfo);
581     FillNativeAccessibilityElementInfo(beforeInfo, afterInfo); // set afterinfo by api
582     CheckTransformElementInfoResult(beforeInfo, afterInfo);
583 }
584 
585 /**
586  * @tc.name: accessibilityTest006
587  * @tc.desc: OH_ArkUI_AccessibilityProviderRegisterCallback
588  * @tc.type: FUNC
589  */
590 HWTEST_F(NativeInterfaceAccessibilityTestNg, AccessibilityUtilsTest006, TestSize.Level1)
591 {
592     ArkUI_AccessibilityProvider provider;
593     // 1. register call back nullptr return fail
594     int32_t ret = OH_ArkUI_AccessibilityProviderRegisterCallback(&provider, nullptr);
595     EXPECT_EQ(ret, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
596     // 2 event null return fail
597     g_errcode = 0;
598     OH_ArkUI_SendAccessibilityAsyncEvent(&provider, nullptr, MockEventCallBack);
599     EXPECT_EQ(g_errcode, SEND_EVENT_FAILED);
600 
601     // 3 event alloced
602     ArkUI_AccessibilityEventInfo* eventInfo =  OH_ArkUI_CreateAccessibilityEventInfo();
603     OH_ArkUI_SendAccessibilityAsyncEvent(&provider, eventInfo, MockEventCallBack);
604     EXPECT_NE(eventInfo, nullptr);
605     OH_ArkUI_DestoryAccessibilityEventInfo(eventInfo);
606 }
607 
608 /**
609  * @tc.name: accessibilityTest006
610  * @tc.desc: OH_ArkUI_AccessibilityElementInfoSetChildNodeIds
611  * @tc.type: FUNC
612  */
613 HWTEST_F(NativeInterfaceAccessibilityTestNg, AccessibilityUtilsTest007, TestSize.Level1)
614 {
615     int64_t ret;
616     ArkUI_AccessibilityElementInfoList list;
617     int64_t childNodeIds[MAX_CHILD_COUNT];
618 
619     // test OH_ArkUI_AddAndGetAccessibilityElementInfo
620     ArkUI_AccessibilityElementInfo* elementInfo = OH_ArkUI_AddAndGetAccessibilityElementInfo(&list);
621     EXPECT_NE(elementInfo, nullptr);
622 
623     // abnormal  nullptr
624     THREE_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetChildNodeIds,
625         elementInfo, 0, childNodeIds, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
626     // abnormal  childCount <= 0
627     ret = OH_ArkUI_AccessibilityElementInfoSetChildNodeIds(elementInfo, 0, childNodeIds);
628     EXPECT_EQ(ret, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
629 
630     // add child
631     std::vector<int64_t> childIdsVector;
632     auto now = std::chrono::system_clock::now();
633     int64_t childCount =
634         std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch())
635         .count();
636     childCount = (childCount % MAX_CHILD_COUNT) + 1;
637     for (int64_t i = 0; i < childCount; i++) {
638         childIdsVector.push_back(i);
639         childNodeIds[i] = i;
640     }
641 
642     ret = OH_ArkUI_AccessibilityElementInfoSetChildNodeIds(elementInfo, childCount, childNodeIds);
643     EXPECT_EQ(ret, ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL);
644 
645     EXPECT_EQ(elementInfo->GetChildNodeIds(), childIdsVector);
646 }
647 
648 /**
649  * @tc.name: accessibilityTest008
650  * @tc.desc: OH_ArkUI_AccessibilityElementInfoSetOperationActions
651  * @tc.type: FUNC
652  */
653 HWTEST_F(NativeInterfaceAccessibilityTestNg, AccessibilityUtilsTest008, TestSize.Level1)
654 {
655     int64_t ret;
656     ArkUI_AccessibleAction operationActions[MAX_ACTION_COUNT];
657 
658     // test OH_ArkUI_CreateAccessibilityElementInfo
659     ArkUI_AccessibilityElementInfo* elementInfo = OH_ArkUI_CreateAccessibilityElementInfo();
660     EXPECT_NE(elementInfo, nullptr);
661 
662     // abnormal  nullptr
663     THREE_PARAMETER_NULLPTR_TEST_WITHOUT_SECOND(AccessibilityElementInfoSetOperationActions,
664         elementInfo, 0, operationActions, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
665     // abnormal  operationCount <= 0
666     ret = OH_ArkUI_AccessibilityElementInfoSetOperationActions(elementInfo, 0, operationActions);
667     EXPECT_EQ(ret, ARKUI_ACCESSIBILITY_NATIVE_RESULT_BAD_PARAMETER);
668 
669     // add child
670     auto now = std::chrono::system_clock::now();
671     int64_t actionCount =
672         std::chrono::duration_cast<std::chrono::milliseconds>(now.time_since_epoch())
673         .count();
674     actionCount = (actionCount % MAX_ACTION_COUNT) + 1;
675 
676     auto startIndex = actionCount;
677     char string[MAX_ACTION_COUNT][MAX_C_STR_CHAR_COUNT];
678     for (int64_t i = 0; i < actionCount; i++) {
679         ArkUI_Accessibility_ActionType actionType
680             = actionTypeVector[(startIndex + i) % actionTypeVector.size()];
681         auto content = std::to_string(startIndex + i);
682         (void)strcpy_s(string[i], MAX_C_STR_CHAR_COUNT, content.c_str());
683         operationActions[i].actionType = actionType;
684         operationActions[i].description = string[i];
685     }
686     ret = OH_ArkUI_AccessibilityElementInfoSetOperationActions(elementInfo, actionCount, operationActions);
687     EXPECT_EQ(ret, ARKUI_ACCESSIBILITY_NATIVE_RESULT_SUCCESSFUL);
688 
689     EXPECT_EQ(elementInfo->GetOperationActions().size(), actionCount);
690     auto afterActionVetor = elementInfo->GetOperationActions();
691     for (int64_t i = 0; i < actionCount; i++) {
692         EXPECT_EQ(afterActionVetor[i].actionType,
693             operationActions[i].actionType);
694         std::string str1(afterActionVetor[i].description);
695         std::string str2(operationActions[i].description);
696         EXPECT_EQ(str1, str2);
697     }
698     OH_ArkUI_DestoryAccessibilityElementInfo(elementInfo);
699 }
700 } // namespace OHOS::Ace::NG
701