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