• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2 * Copyright (c) 2024 SwanLink (Jiangsu) Technology Development 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 "napi/native_api.h"
17 #include "napi_arraytest.h"
18 
19 const int DIFF_VALUE_FOUR = 4;
20 const int DIFF_VALUE_TWELVE = 12;
21 
22 //OH_JSVM_CreateArrayWithLength Test
23 //lenth 0 + result nonnull
TestCreateArrayWithLength_01(JSVM_Env env,JSVM_CallbackInfo info)24 [[maybe_unused]] JSVM_Value TestCreateArrayWithLength_01(JSVM_Env env, JSVM_CallbackInfo info)
25 {
26     const size_t arrayLength = 0;
27     JSVM_Value value0 = nullptr;
28     JSVM_Status status = OH_JSVM_CreateArrayWithLength(env, arrayLength, &value0);
29     if (status != JSVM_OK) {
30         OH_JSVM_ThrowError(env, nullptr, "TestCreateArrayWithLength_01: CreateArrayWithLength Failed");
31         return nullptr;
32     }
33 
34     bool setvalue = true;
35     JSVM_Value retvalue = nullptr;
36     OH_JSVM_GetBoolean(env, setvalue, &retvalue);
37     return retvalue;
38 }
39 //length 10 + result nonnull
TestCreateArrayWithLength_02(JSVM_Env env,JSVM_CallbackInfo info)40 [[maybe_unused]] JSVM_Value TestCreateArrayWithLength_02(JSVM_Env env, JSVM_CallbackInfo info)
41 {
42     const size_t arrayLength = 10;
43     JSVM_Value value1 = nullptr;
44     JSVM_Status status = OH_JSVM_CreateArrayWithLength(env, arrayLength, &value1);
45     if (status != JSVM_OK) {
46         OH_JSVM_ThrowError(env, nullptr, "TestCreateArrayWithLength_02: CreateArrayWithLength Failed");
47         return nullptr;
48     }
49 
50     bool setValue = true;
51     JSVM_Value retValue = nullptr;
52     OH_JSVM_GetBoolean(env, setValue, &retValue);
53     return retValue;
54 }
55 //lenth JSVM_AUTO_LENGTH + result nonnull
TestCreateArrayWithLength_03(JSVM_Env env,JSVM_CallbackInfo info)56 [[maybe_unused]] JSVM_Value TestCreateArrayWithLength_03(JSVM_Env env, JSVM_CallbackInfo info)
57 {
58     JSVM_Value value2 = nullptr;
59     JSVM_Status status = OH_JSVM_CreateArrayWithLength(env, JSVM_AUTO_LENGTH, &value2);
60     if (status != JSVM_OK) {
61         OH_JSVM_ThrowError(env, nullptr, "TestCreateArrayWithLength_03: CreateArrayWithLength Failed");
62         return nullptr;
63     }
64 
65     bool setValue = true;
66     JSVM_Value retValue = nullptr;
67     OH_JSVM_GetBoolean(env, setValue, &retValue);
68     return retValue;
69 }
70 //lenth 10 + result NULL
TestCreateArrayWithLength_04(JSVM_Env env,JSVM_CallbackInfo info)71 [[maybe_unused]] JSVM_Value TestCreateArrayWithLength_04(JSVM_Env env, JSVM_CallbackInfo info)
72 {
73     const size_t arrayLength = 10;
74 
75     JSVM_Status status = OH_JSVM_CreateArrayWithLength(env, arrayLength, nullptr);
76     if (status != JSVM_INVALID_ARG) {
77         OH_JSVM_ThrowError(env, nullptr, "TestCreateArrayWithLength_04: CreateArrayWithLength Failed");
78         return nullptr;
79     }
80 
81     bool setValue = true;
82     JSVM_Value retValue = nullptr;
83     OH_JSVM_GetBoolean(env, setValue, &retValue);
84     return retValue;
85 }
86 //OH_JSVM_GetArrayLength
87 //array object CreateArray + result nonnull
TestGetArrayLength_01(JSVM_Env env,JSVM_CallbackInfo info)88 [[maybe_unused]] JSVM_Value TestGetArrayLength_01(JSVM_Env env, JSVM_CallbackInfo info)
89 {
90     JSVM_Value ret;
91     OH_JSVM_CreateArray(env, &ret);
92     bool isArray = false;
93     OH_JSVM_IsArray(env, ret, &isArray);
94     if (!isArray) {
95         OH_JSVM_ThrowError(env, nullptr, "TestGetArrayLength_01: CreateArray Failed");
96         return nullptr;
97     }
98     uint32_t length;
99     JSVM_Status status = OH_JSVM_GetArrayLength(env, ret, &length);
100     if (status != JSVM_OK) {
101         OH_JSVM_ThrowError(env, nullptr, "TestGetArrayLength_01: GetArrayLength Failed");
102         return nullptr;
103     }
104 
105     bool setValue = true;
106     JSVM_Value retValue = nullptr;
107     OH_JSVM_GetBoolean(env, setValue, &retValue);
108     return retValue;
109 }
110 //array object CreateArrayWithLength + result nonnull
TestGetArrayLength_02(JSVM_Env env,JSVM_CallbackInfo info)111 [[maybe_unused]] JSVM_Value TestGetArrayLength_02(JSVM_Env env, JSVM_CallbackInfo info)
112 {
113     const size_t arrayLength = 10;
114     JSVM_Value value = nullptr;
115     JSVM_Status status = OH_JSVM_CreateArrayWithLength(env, arrayLength, &value);
116     bool isArray = false;
117     OH_JSVM_IsArray(env, value, &isArray);
118     if (!isArray) {
119         OH_JSVM_ThrowError(env, nullptr, "TestGetArrayLength_02: CreateArrayWithLength Failed");
120         return nullptr;
121     }
122     uint32_t length;
123     status = OH_JSVM_GetArrayLength(env, value, &length);
124     if (status != JSVM_OK) {
125         OH_JSVM_ThrowError(env, nullptr, "TestGetArrayLength_02: GetArrayLength Failed");
126         return nullptr;
127     }
128 
129     bool setValue = true;
130     JSVM_Value retValue = nullptr;
131     OH_JSVM_GetBoolean(env, setValue, &retValue);
132     return retValue;
133 }
134 //not array object + result nonnull
TestGetArrayLength_03(JSVM_Env env,JSVM_CallbackInfo info)135 [[maybe_unused]] JSVM_Value TestGetArrayLength_03(JSVM_Env env, JSVM_CallbackInfo info)
136 {
137     uint32_t length;
138     JSVM_Value object;
139     OH_JSVM_CreateObject(env, &object);
140     JSVM_Status status = OH_JSVM_GetArrayLength(env, object, &length);
141     if (status != JSVM_ARRAY_EXPECTED) {
142         OH_JSVM_ThrowError(env, nullptr, "TestGetArrayLength_03: GetArrayLength Failed");
143         return nullptr;
144     }
145 
146     bool setValue = true;
147     JSVM_Value retValue = nullptr;
148     OH_JSVM_GetBoolean(env, setValue, &retValue);
149     return retValue;
150 }
151 //array object + result NULL
TestGetArrayLength_04(JSVM_Env env,JSVM_CallbackInfo info)152 [[maybe_unused]] JSVM_Value TestGetArrayLength_04(JSVM_Env env, JSVM_CallbackInfo info)
153 {
154     const size_t arrayLength = 4;
155     JSVM_Value testArray = nullptr;
156     JSVM_Status status = OH_JSVM_CreateArrayWithLength(env, arrayLength, &testArray);
157     if (status != JSVM_OK) {
158         OH_JSVM_ThrowError(env, nullptr, "TestGetArrayLength_04:OH_JSVM_CreateArrayWithLength Failed");
159         return nullptr;
160     }
161 
162     status = OH_JSVM_GetArrayLength(env, testArray, nullptr);
163     if (status != JSVM_INVALID_ARG) {
164         OH_JSVM_ThrowError(env, nullptr, "TestGetArrayLength_04: GetArrayLength Failed");
165         return nullptr;
166     }
167 
168     bool setValue = true;
169     JSVM_Value retValue = nullptr;
170     OH_JSVM_GetBoolean(env, setValue, &retValue);
171     return retValue;
172 }
173 //OH_JSVM_CreateTypedarray
174 //type INT8_ARRAY + length 0 + arraybuffer obj + "byteOffset + sizeof(type) * length <= sizeof(arraybuffer)" + nonnull
TestCreateTypedarray_01(JSVM_Env env,JSVM_CallbackInfo info)175 [[maybe_unused]] JSVM_Value TestCreateTypedarray_01(JSVM_Env env, JSVM_CallbackInfo info)
176 {
177     JSVM_Value arrayBuffer = nullptr;
178     void *arrayBufferPtr = nullptr;
179     const size_t arrayBufferSize = 16;
180     const size_t typedArrayLength = 0;
181     JSVM_Value value = nullptr;
182 
183     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
184     if (status != JSVM_OK) {
185         OH_JSVM_ThrowError(env, nullptr, "TestCreateTypedarray_01:OH_JSVM_Createarraybuffer Failed");
186         return nullptr;
187     }
188 
189     status = OH_JSVM_CreateTypedarray(env,
190                                       JSVM_TypedarrayType::JSVM_INT8_ARRAY,
191                                       typedArrayLength,
192                                       arrayBuffer,
193                                       0,
194                                       &value);
195     if (status != JSVM_OK) {
196         OH_JSVM_ThrowError(env, nullptr, "TestCreateTypedarray_01:OH_JSVM_CreateTypedarray Failed");
197         return nullptr;
198     }
199 
200     bool setValue = true;
201     JSVM_Value retValue = nullptr;
202     OH_JSVM_GetBoolean(env, setValue, &retValue);
203     return retValue;
204 }
205 //type UINT8_ARRAY + length not 0 + arrayBuffer obj + "byteOffset +
206 //sizeof(type) * length <= sizeof(arraybuffer)" + nonnull
TestCreateTypedarray_02(JSVM_Env env,JSVM_CallbackInfo info)207 [[maybe_unused]] JSVM_Value TestCreateTypedarray_02(JSVM_Env env, JSVM_CallbackInfo info)
208 {
209     JSVM_Value arrayBuffer = nullptr;
210     void *arrayBufferPtr = nullptr;
211     const size_t arrayBufferSize = 16;
212     const size_t typedArrayLength = 4;
213     JSVM_Value value = nullptr;
214 
215     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
216     if (status != JSVM_OK) {
217         OH_JSVM_ThrowError(env, nullptr, "TestCreateTypedarray_02:OH_JSVM_Createarraybuffer Failed");
218         return nullptr;
219     }
220 
221     status = OH_JSVM_CreateTypedarray(env,
222                                       JSVM_TypedarrayType::JSVM_INT8_ARRAY,
223                                       typedArrayLength,
224                                       arrayBuffer,
225                                       typedArrayLength,
226                                       &value);
227     if (status != JSVM_OK) {
228         OH_JSVM_ThrowError(env, nullptr, "TestCreateTypedarray_02:OH_JSVM_CreateTypedarray Failed");
229         return nullptr;
230     }
231 
232     bool setValue = true;
233     JSVM_Value retValue = nullptr;
234     OH_JSVM_GetBoolean(env, setValue, &retValue);
235     return retValue;
236 }
237 //type UINT8_CLAMPED_ARRAY + length not 0 + nullptr + "byteOffset +
238 //sizeof(type) * length <= sizeof(arraybuffer)" + nonnull
TestCreateTypedarray_03(JSVM_Env env,JSVM_CallbackInfo info)239 [[maybe_unused]] JSVM_Value TestCreateTypedarray_03(JSVM_Env env, JSVM_CallbackInfo info)
240 {
241     const size_t typedArrayLength = 4;
242     JSVM_Value value = nullptr;
243 
244     JSVM_Status status = OH_JSVM_CreateTypedarray(env,
245                                                   JSVM_TypedarrayType::JSVM_UINT8_CLAMPED_ARRAY,
246                                                   typedArrayLength,
247                                                   nullptr,
248                                                   0,
249                                                   &value);
250     if (status != JSVM_INVALID_ARG) {
251         OH_JSVM_ThrowError(env, nullptr, "TestCreateTypedarray_03:OH_JSVM_CreateTypedarray Failed");
252         return nullptr;
253     }
254 
255     bool setValue = true;
256     JSVM_Value retValue = nullptr;
257     OH_JSVM_GetBoolean(env, setValue, &retValue);
258     return retValue;
259 }
260 //type INT16_ARRAY + length not 0 + other obj + "byteOffset + sizeof(type) * length <= sizeof(arraybuffer)" + nonnull
TestCreateTypedarray_04(JSVM_Env env,JSVM_CallbackInfo info)261 [[maybe_unused]] JSVM_Value TestCreateTypedarray_04(JSVM_Env env, JSVM_CallbackInfo info)
262 {
263     const size_t typedArrayLength = 4;
264     JSVM_Value value = nullptr;
265     JSVM_Value object;
266     OH_JSVM_CreateObject(env, &object);
267 
268     JSVM_Status status = OH_JSVM_CreateTypedarray(env,
269                                                   JSVM_TypedarrayType::JSVM_INT16_ARRAY,
270                                                   typedArrayLength,
271                                                   object,
272                                                   0,
273                                                   &value);
274     if (status != JSVM_INVALID_ARG) {
275         OH_JSVM_ThrowError(env, nullptr, "TestCreateTypedarray_04:OH_JSVM_CreateTypedarray Failed");
276         return nullptr;
277     }
278 
279     bool setValue = true;
280     JSVM_Value retValue = nullptr;
281     OH_JSVM_GetBoolean(env, setValue, &retValue);
282     return retValue;
283 }
284 //type UINT16_ARRAY + length not 0 + arraybuffer obj +
285 //"byteOffset + sizeof(type) * length > sizeof(arraybuffer)" + nonnull
TestCreateTypedarray_05(JSVM_Env env,JSVM_CallbackInfo info)286 [[maybe_unused]] JSVM_Value TestCreateTypedarray_05(JSVM_Env env, JSVM_CallbackInfo info)
287 {
288     JSVM_Value arrayBuffer = nullptr;
289     void *arrayBufferPtr = nullptr;
290     const size_t arrayBufferSize = 16;
291     const size_t typedArrayLength = 2;
292     JSVM_Value value = nullptr;
293 
294     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
295     if (status != JSVM_OK) {
296         OH_JSVM_ThrowError(env, nullptr, "TestCreateTypedarray_05:OH_JSVM_Create array buffer Failed");
297         return nullptr;
298     }
299     status = OH_JSVM_CreateTypedarray(env,
300                                       JSVM_TypedarrayType::JSVM_UINT16_ARRAY,
301                                       typedArrayLength,
302                                       arrayBuffer,
303                                       arrayBufferSize,
304                                       &value);
305     if (status != JSVM_GENERIC_FAILURE) {
306         OH_JSVM_ThrowError(env, nullptr, "TestCreateTypedarray_05:OH_JSVM_Create type array buffer error.");
307         return nullptr;
308     }
309     JSVM_Value result = nullptr;
310     status = OH_JSVM_GetAndClearLastException(env, &result);
311 
312     bool setValue = true;
313     JSVM_Value retValue = nullptr;
314     OH_JSVM_GetBoolean(env, setValue, &retValue);
315     return retValue;
316 }
317 //type INT32_ARRAY + length not 0 + arraybuffer obj +
318 //"byteOffset + sizeof(type) * length <= sizeof(arraybuffer)" + NULL
TestCreateTypedarray_06(JSVM_Env env,JSVM_CallbackInfo info)319 [[maybe_unused]] JSVM_Value TestCreateTypedarray_06(JSVM_Env env, JSVM_CallbackInfo info)
320 {
321     JSVM_Value arrayBuffer = nullptr;
322     void *arrayBufferPtr = nullptr;
323     const size_t arrayBufferSize = 16;
324     const size_t typedArrayLength = 2;
325 
326     JSVM_Status status = OH_JSVM_CreateArraybuffer(env,
327                                                    arrayBufferSize,
328                                                    &arrayBufferPtr,
329                                                    &arrayBuffer);
330     if (status != JSVM_OK) {
331         OH_JSVM_ThrowError(env, nullptr, "TestCreateTypedarray_06:OH_JSVM_Createarraybuffer Failed");
332         return nullptr;
333     }
334     status = OH_JSVM_CreateTypedarray(env,
335                                       JSVM_TypedarrayType::JSVM_INT32_ARRAY,
336                                       typedArrayLength,
337                                       arrayBuffer,
338                                       0,
339                                       nullptr);
340     if (status != JSVM_INVALID_ARG) {
341         OH_JSVM_ThrowError(env, nullptr, "TestCreateTypedarray_06:OH_JSVM_CreateTypedarray Failed");
342         return nullptr;
343     }
344 
345     bool setValue = true;
346     JSVM_Value retValue = nullptr;
347     OH_JSVM_GetBoolean(env, setValue, &retValue);
348     return retValue;
349 }
350 //OH_JSVM_GetTypedarrayInfo
351 //typedarray obj
TestGetTypedarrayInfo_01(JSVM_Env env,JSVM_CallbackInfo info)352 [[maybe_unused]] JSVM_Value TestGetTypedarrayInfo_01(JSVM_Env env, JSVM_CallbackInfo info)
353 {
354     void *data;
355     JSVM_TypedarrayType type;
356     size_t byteOffset;
357     size_t length;
358     JSVM_Value arrayBuffer = nullptr;
359     void *arrayBufferPtr = nullptr;
360     const size_t arrayBufferSize = 16;
361     const size_t typedArrayLength = 4;
362     JSVM_Value _value;
363     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
364     if (status != JSVM_OK) {
365         OH_JSVM_ThrowError(env, nullptr, "TestGetTypedarrayInfo_01:OH_JSVM_Createarraybuffer Failed");
366         return nullptr;
367     }
368 
369     status = OH_JSVM_CreateTypedarray(env,
370                                       JSVM_TypedarrayType::JSVM_INT32_ARRAY,
371                                       typedArrayLength,
372                                       arrayBuffer,
373                                       0,
374                                       &_value);
375     if (status != JSVM_OK) {
376         OH_JSVM_ThrowError(env, nullptr, "TestGetTypedarrayInfo_01:OH_JSVM_GetTypedarrayInfo Failed");
377         return nullptr;
378     }
379 
380     status = OH_JSVM_GetTypedarrayInfo(env, _value, &type, &length, &data, &arrayBuffer, &byteOffset);
381     if (status != JSVM_OK) {
382         OH_JSVM_ThrowError(env, nullptr, "TestGetTypedarrayInfo_01:OH_JSVM_GetTypedarrayInfo Failed");
383         return nullptr;
384     }
385 
386     bool setValue = true;
387     JSVM_Value retValue = nullptr;
388     OH_JSVM_GetBoolean(env, setValue, &retValue);
389     return retValue;
390 }
391 //not typedarray obj
TestGetTypedarrayInfo_02(JSVM_Env env,JSVM_CallbackInfo info)392 [[maybe_unused]] JSVM_Value TestGetTypedarrayInfo_02(JSVM_Env env, JSVM_CallbackInfo info)
393 {
394     void *data;
395     JSVM_TypedarrayType type;
396     size_t byteOffset;
397     JSVM_Value arrayBuffer;
398     size_t length;
399     JSVM_Value object;
400     OH_JSVM_CreateObject(env, &object);
401 
402     JSVM_Status status = OH_JSVM_GetTypedarrayInfo(env, object, &type, &length, &data, &arrayBuffer, &byteOffset);
403     if (status != JSVM_INVALID_ARG) {
404         OH_JSVM_ThrowError(env, nullptr, "testGetTypedarrayInfo_02:OH_JSVM_GetTypedarrayInfo Failed");
405         return nullptr;
406     }
407 
408     bool setValue = true;
409     JSVM_Value retValue = nullptr;
410     OH_JSVM_GetBoolean(env, setValue, &retValue);
411     return retValue;
412 }
413 //OH_JSVM_CreateDataview
414 //length 0 + arraybuffer obj + "byteOffset +  length <= sizeof(arraybuffer)" + nonnull
TestCreateDataview_01(JSVM_Env env,JSVM_CallbackInfo info)415 [[maybe_unused]] JSVM_Value TestCreateDataview_01(JSVM_Env env, JSVM_CallbackInfo info)
416 {
417     JSVM_Value arrayBuffer = nullptr;
418     void *arrayBufferPtr = nullptr;
419     const size_t arrayBufferSize = 16;
420     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
421     if (status != JSVM_OK) {
422         OH_JSVM_ThrowError(env, nullptr, "TestCreateDataview_01:OH_JSVM_Createarraybuffer Failed");
423         return nullptr;
424     }
425 
426     JSVM_Value result = nullptr;
427     status = OH_JSVM_CreateDataview(env, 0, arrayBuffer, 0, &result);
428     if (status != JSVM_OK) {
429         OH_JSVM_ThrowError(env, nullptr, "TestCreateDataview_01:OH_JSVM_CreateDataview Failed");
430         return nullptr;
431     }
432     bool isDataView = false;
433     OH_JSVM_IsDataview(env, result, &isDataView);
434     if (!isDataView) {
435         OH_JSVM_ThrowError(env, nullptr, "TestCreateDataview_01:OH_JSVM_CreateDataview isn't DataView Failed");
436         return nullptr;
437     }
438 
439     bool setValue = true;
440     JSVM_Value retValue = nullptr;
441     OH_JSVM_GetBoolean(env, setValue, &retValue);
442     return retValue;
443 }
444 //length not 0 + array obj + "byteOffset + length <= sizeof(arraybuffer)" + nonnull
TestCreateDataview_02(JSVM_Env env,JSVM_CallbackInfo info)445 [[maybe_unused]] JSVM_Value TestCreateDataview_02(JSVM_Env env, JSVM_CallbackInfo info)
446 {
447     JSVM_Value arrayBuffer = nullptr;
448     void *arrayBufferPtr = nullptr;
449     const size_t arrayBufferSize = 16;
450     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
451     if (arrayBuffer == nullptr) {
452         OH_JSVM_ThrowError(env, nullptr, "TestCreateDataview_02:OH_JSVM_Createarraybuffer Failed");
453         return nullptr;
454     }
455 
456     JSVM_Value result = nullptr;
457     status = OH_JSVM_CreateDataview(env, arrayBufferSize, arrayBuffer, 0, &result);
458     if (status != JSVM_OK) {
459         OH_JSVM_ThrowError(env, nullptr, "TestCreateDataview_02:OH_JSVM_CreateDataview Failed");
460         return nullptr;
461     }
462 
463     bool setValue = true;
464     JSVM_Value retValue = nullptr;
465     OH_JSVM_GetBoolean(env, setValue, &retValue);
466     return retValue;
467 }
468 // length not 0 + nullptr + "byteOffset + length <= sizeof(arraybuffer)" + nonnull
TestCreateDataview_03(JSVM_Env env,JSVM_CallbackInfo info)469 [[maybe_unused]] JSVM_Value TestCreateDataview_03(JSVM_Env env, JSVM_CallbackInfo info)
470 {
471     JSVM_Value arrayBuffer = nullptr;
472     void *arrayBufferPtr = nullptr;
473     const size_t arrayBufferSize = 16;
474     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
475     if (status != JSVM_OK || arrayBuffer == nullptr) {
476         OH_JSVM_ThrowError(env, nullptr, "TestCreateDataview_03:OH_JSVM_Createarraybuffer Failed");
477         return nullptr;
478     }
479 
480     JSVM_Value result = nullptr;
481     status = OH_JSVM_CreateDataview(env, arrayBufferSize, nullptr, 0, &result);
482     if (status != JSVM_INVALID_ARG) {
483         OH_JSVM_ThrowError(env, nullptr, "TestCreateDataview_03:OH_JSVM_CreateDataview Failed");
484         return nullptr;
485     }
486 
487     bool setValue = true;
488     JSVM_Value retValue = nullptr;
489     OH_JSVM_GetBoolean(env, setValue, &retValue);
490     return retValue;
491 }
492 //  length not 0 + other obj + "byteOffset + length <= sizeof(arraybuffer)" + nonnull
TestCreateDataview_04(JSVM_Env env,JSVM_CallbackInfo info)493 [[maybe_unused]] JSVM_Value TestCreateDataview_04(JSVM_Env env, JSVM_CallbackInfo info)
494 {
495     JSVM_Value arrayBuffer = nullptr;
496     void *arrayBufferPtr = nullptr;
497     const size_t arrayBufferSize = 16;
498     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
499     if (status != JSVM_OK || arrayBuffer == nullptr) {
500         OH_JSVM_ThrowError(env, nullptr, "TestCreateDataview_04:OH_JSVM_Createarraybuffer Failed");
501         return nullptr;
502     }
503 
504     JSVM_Value object;
505     OH_JSVM_CreateObject(env, &object);
506     JSVM_Value result = nullptr;
507     status = OH_JSVM_CreateDataview(env, arrayBufferSize, object, 0, &result);
508     if (status != JSVM_INVALID_ARG) {
509         OH_JSVM_ThrowError(env, nullptr, "TestCreateDataview_04:OH_JSVM_CreateDataview Failed");
510         return nullptr;
511     }
512 
513     bool setValue = true;
514     JSVM_Value retValue = nullptr;
515     OH_JSVM_GetBoolean(env, setValue, &retValue);
516     return retValue;
517 }
518 //length not 0 + arraybuffer obj + "byteOffset + length > sizeof(arraybuffer)" + nonnull
TestCreateDataview_05(JSVM_Env env,JSVM_CallbackInfo info)519 [[maybe_unused]] JSVM_Value TestCreateDataview_05(JSVM_Env env, JSVM_CallbackInfo info)
520 {
521     JSVM_Value arrayBuffer = nullptr;
522     void *arrayBufferPtr = nullptr;
523     const size_t arrayBufferSize = 16;
524     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
525     if (status != JSVM_OK || arrayBuffer == nullptr) {
526         OH_JSVM_ThrowError(env, nullptr, "TestCreateDataview_05:OH_JSVM_Createarraybuffer Failed");
527         return nullptr;
528     }
529 
530     JSVM_Value result = nullptr;
531     status = OH_JSVM_CreateDataview(env, arrayBufferSize, arrayBuffer, arrayBufferSize, &result);
532     if (status != JSVM_PENDING_EXCEPTION) {
533         OH_JSVM_ThrowError(env, nullptr, "TestCreateDataview_05:OH_JSVM_CreateDataview Failed");
534         return nullptr;
535     }
536 
537     JSVM_Value recvMsg = nullptr;
538     status = OH_JSVM_GetAndClearLastException(env, & recvMsg);
539 
540     bool setValue = true;
541     JSVM_Value retValue = nullptr;
542     OH_JSVM_GetBoolean(env, setValue, &retValue);
543     return retValue;
544 }
545 // length not 0 + arraybuffer obj + "byteOffset + length <= sizeof(arraybuffer)" + NULL
TestCreateDataview_06(JSVM_Env env,JSVM_CallbackInfo info)546 [[maybe_unused]] JSVM_Value TestCreateDataview_06(JSVM_Env env, JSVM_CallbackInfo info)
547 {
548     JSVM_Value arrayBuffer = nullptr;
549     void *arrayBufferPtr = nullptr;
550     const size_t arrayBufferSize = 16;
551     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
552     if (status != JSVM_OK || arrayBuffer == nullptr) {
553         OH_JSVM_ThrowError(env, nullptr, "TestCreateDataview_06:OH_JSVM_Createarraybuffer Failed");
554         return nullptr;
555     }
556 
557     status = OH_JSVM_CreateDataview(env, arrayBufferSize, arrayBuffer, 0, nullptr);
558     if (status == JSVM_OK) {
559         OH_JSVM_ThrowError(env, nullptr, "TestCreateDataview_06:OH_JSVM_CreateDataview Failed");
560         return nullptr;
561     }
562 
563     bool setValue = true;
564     JSVM_Value retValue = nullptr;
565     OH_JSVM_GetBoolean(env, setValue, &retValue);
566     return retValue;
567 }
568 //OH_JSVM_GetDataviewInfo
569 //dataview obj
TestGetDataview_01(JSVM_Env env,JSVM_CallbackInfo info)570 [[maybe_unused]] JSVM_Value TestGetDataview_01(JSVM_Env env, JSVM_CallbackInfo info)
571 {
572     JSVM_Value arrayBuffer = nullptr;
573     void *arrayBufferPtr = nullptr;
574     const size_t arrayBufferSize = 16;
575     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
576     if (status != JSVM_OK) {
577         OH_JSVM_ThrowError(env, nullptr, "TestGetDataview_01:OH_JSVM_Createarraybuffer Failed");
578         return nullptr;
579     }
580 
581     JSVM_Value result = nullptr;
582     status = OH_JSVM_CreateDataview(env, 0, arrayBuffer, 0, &result);
583     if (status != JSVM_OK) {
584         OH_JSVM_ThrowError(env, nullptr, "TestGetDataview_01:OH_JSVM_CreateDataview Failed");
585         return nullptr;
586     }
587     bool isDataView = false;
588     OH_JSVM_IsDataview(env, result, &isDataView);
589     if (!isDataView) {
590         OH_JSVM_ThrowError(env, nullptr, "TestGetDataview_01:OH_JSVM_CreateDataview isn't DataView Failed");
591         return nullptr;
592     }
593 
594     JSVM_Value retArrayBuffer = nullptr;
595     void *data = nullptr;
596     size_t byteLength = 0;
597     size_t byteOffset = -1;
598     status = OH_JSVM_GetDataviewInfo(env, result, &byteLength, &data, &retArrayBuffer, &byteOffset);
599     if (status != JSVM_OK) {
600         OH_JSVM_ThrowError(env, nullptr, "TestGetDataview_01:OH_JSVM_CreateDataview GetDataviewInfo Failed");
601         return nullptr;
602     }
603 
604     bool setValue = true;
605     JSVM_Value retValue = nullptr;
606     OH_JSVM_GetBoolean(env, setValue, &retValue);
607     return retValue;
608 }
609 //not dataview obj
TestGetDataview_02(JSVM_Env env,JSVM_CallbackInfo info)610 [[maybe_unused]] JSVM_Value TestGetDataview_02(JSVM_Env env, JSVM_CallbackInfo info)
611 {
612     JSVM_Value arrayBuffer = nullptr;
613     void *arrayBufferPtr = nullptr;
614     const size_t arrayBufferSize = 16;
615     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
616     if (status != JSVM_OK) {
617         OH_JSVM_ThrowError(env, nullptr, "TestGetDataview_02:OH_JSVM_Createarraybuffer Failed");
618         return nullptr;
619     }
620 
621     JSVM_Value retArrayBuffer = nullptr;
622     void *data = nullptr;
623     size_t byteLength = 0;
624     size_t byteOffset = 0;
625     status = OH_JSVM_GetDataviewInfo(env, arrayBuffer, &byteLength, &data, &retArrayBuffer, &byteOffset);
626     if (status == JSVM_OK) {
627         OH_JSVM_ThrowError(env, nullptr, "TestGetDataview_02:OH_JSVM_CreateDataview GetDataviewInfo abnormal");
628         return nullptr;
629     }
630 
631     bool setValue = true;
632     JSVM_Value retValue = nullptr;
633     OH_JSVM_GetBoolean(env, setValue, &retValue);
634     return retValue;
635 }
636 //OH_JSVM_SetElement
637 //arraybuffer obj + index 0 + NULL
TestSetElement_01(JSVM_Env env,JSVM_CallbackInfo info)638 [[maybe_unused]] JSVM_Value TestSetElement_01(JSVM_Env env, JSVM_CallbackInfo info)
639 {
640     JSVM_Value arrayBuffer = nullptr;
641     void *arrayBufferPtr = nullptr;
642     const size_t arrayBufferSize = 4;
643     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
644     if (status != JSVM_OK) {
645         OH_JSVM_ThrowError(env, nullptr, "TestSetElement_01:CreateArraybuffer Failed");
646         return nullptr;
647     }
648 
649     status = OH_JSVM_SetElement(env, arrayBuffer, 0, nullptr);
650     if (status != JSVM_INVALID_ARG) {
651         OH_JSVM_ThrowError(env, nullptr, "TestSetElement_01:OH_JSVM_SetElement Failed");
652         return nullptr;
653     }
654 
655     bool setValue = true;
656     JSVM_Value retValue = nullptr;
657     OH_JSVM_GetBoolean(env, setValue, &retValue);
658     return retValue;
659 }
660 //arraybuffer obj + index sizeof(obj) + nonnull
TestSetElement_02(JSVM_Env env,JSVM_CallbackInfo info)661 [[maybe_unused]] JSVM_Value TestSetElement_02(JSVM_Env env, JSVM_CallbackInfo info)
662 {
663     JSVM_Value testArray = nullptr;
664     void *arrayBufferPtr = nullptr;
665     const size_t arrayBufferSize = 4;
666     OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &testArray);
667     JSVM_Value name1 = nullptr;
668     JSVM_Status status = OH_JSVM_SetElement(env, testArray, arrayBufferSize, name1);
669     if (status != JSVM_INVALID_ARG) {
670         OH_JSVM_ThrowError(env, nullptr, "TestSetElement_02:OH_JSVM_SetElement Failed");
671         return nullptr;
672     }
673 
674     bool setValue = true;
675     JSVM_Value retValue = nullptr;
676     OH_JSVM_GetBoolean(env, setValue, &retValue);
677     return retValue;
678 }
679 //typedarray obj + index sizeof(obj) +1 + nonnull
TestSetElement_03(JSVM_Env env,JSVM_CallbackInfo info)680 [[maybe_unused]] JSVM_Value TestSetElement_03(JSVM_Env env, JSVM_CallbackInfo info)
681 {
682     JSVM_Value arrayBuffer = nullptr;
683     void *arrayBufferPtr = nullptr;
684     const size_t arrayBufferSize = 1;
685     const size_t typedArrayLength = 0;
686     JSVM_Value _value;
687     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
688     if (status != JSVM_OK) {
689         OH_JSVM_ThrowError(env, nullptr, "TestSetElement_03:OH_JSVM_CreateTypedarray Failed");
690         return nullptr;
691     }
692 
693     JSVM_Value index1 = nullptr;
694     OH_JSVM_CreateUint32(env, 1, &index1);
695     status = OH_JSVM_CreateTypedarray(env,
696                                       JSVM_TypedarrayType::JSVM_UINT32_ARRAY,
697                                       typedArrayLength,
698                                       arrayBuffer,
699                                       0,
700                                       &_value);
701     if (status != JSVM_OK) {
702         OH_JSVM_ThrowError(env, nullptr, "TestSetElement_03:OH_JSVM_CreateTypedarray Failed");
703         return nullptr;
704     }
705     status = OH_JSVM_SetElement(env, _value, arrayBufferSize+1, index1);
706     if (status != JSVM_OK) {
707         OH_JSVM_ThrowError(env, nullptr, "TestSetElement_03:OH_JSVM_SetElement 1 Failed");
708         return nullptr;
709     }
710 
711     bool setValue = true;
712     JSVM_Value retValue = nullptr;
713     OH_JSVM_GetBoolean(env, setValue, &retValue);
714     return retValue;
715 }
716 //typedarray obj + index 0 + NULL
TestSetElement_04(JSVM_Env env,JSVM_CallbackInfo info)717 [[maybe_unused]] JSVM_Value TestSetElement_04(JSVM_Env env, JSVM_CallbackInfo info)
718 {
719     JSVM_Value testArray = nullptr;
720     const size_t typedArrayLength = 2;
721     OH_JSVM_CreateArrayWithLength(env, typedArrayLength, &testArray);
722     char newStr1[] = "hahaha";
723     JSVM_Value name1 = nullptr;
724     OH_JSVM_CreateStringUtf8(env, newStr1, strlen(newStr1), &name1);
725     JSVM_Status status = OH_JSVM_SetElement(env, testArray, 0, nullptr);
726     if (status != JSVM_INVALID_ARG) {
727         OH_JSVM_ThrowError(env, nullptr, "TestSetElement_04:OH_JSVM_SetElement Failed");
728         return nullptr;
729     }
730 
731     bool setValue = true;
732     JSVM_Value retValue = nullptr;
733     OH_JSVM_GetBoolean(env, setValue, &retValue);
734     return retValue;
735 }
736 //dataview obj + index sizeof(obj) + nonnull
TestSetElement_05(JSVM_Env env,JSVM_CallbackInfo info)737 [[maybe_unused]] JSVM_Value TestSetElement_05(JSVM_Env env, JSVM_CallbackInfo info)
738 {
739     size_t argc = 2;
740     JSVM_Value args[2] = {nullptr};
741     JSVM_Value arraybuffer = nullptr;
742     JSVM_Value result = nullptr;
743     OH_JSVM_GetCbInfo(env, info, &argc, args, nullptr, nullptr);
744     OH_JSVM_CoerceToObject(env, args[0], &arraybuffer);
745     OH_JSVM_CreateDataview(env, DIFF_VALUE_TWELVE, arraybuffer, DIFF_VALUE_FOUR, &result);
746     JSVM_Value name = nullptr;
747     JSVM_Status status = OH_JSVM_SetElement(env, result, sizeof(result), name);
748     if (status != JSVM_PENDING_EXCEPTION) {
749         OH_JSVM_ThrowError(env, nullptr, "TestSetElement_05:OH_JSVM_SetElement Failed");
750         return nullptr;
751     }
752     JSVM_Value recvMsg = nullptr;
753     OH_JSVM_GetAndClearLastException(env, &recvMsg);
754 
755     bool setValue = true;
756     JSVM_Value retValue = nullptr;
757     OH_JSVM_GetBoolean(env, setValue, &retValue);
758     return retValue;
759 }
760 //not array obj + index 0 + nonnull
TestSetElement_06(JSVM_Env env,JSVM_CallbackInfo info)761 [[maybe_unused]] JSVM_Value TestSetElement_06(JSVM_Env env, JSVM_CallbackInfo info)
762 {
763     JSVM_Value name = nullptr;
764     JSVM_Value object;
765     OH_JSVM_CreateObject(env, &object);
766     JSVM_Status status = OH_JSVM_SetElement(env, object, 0, name);
767     if (status != JSVM_INVALID_ARG) {
768         OH_JSVM_ThrowError(env, nullptr, "TestSetElement_06:OH_JSVM_SetElement index 0 Failed");
769         return nullptr;
770     }
771 
772     bool setValue = true;
773     JSVM_Value retValue = nullptr;
774     OH_JSVM_GetBoolean(env, setValue, &retValue);
775     return retValue;
776 }
777 //not array obj + index 1 + nonnull
TestSetElement_07(JSVM_Env env,JSVM_CallbackInfo info)778 [[maybe_unused]] JSVM_Value TestSetElement_07(JSVM_Env env, JSVM_CallbackInfo info)
779 {
780     JSVM_Value name = nullptr;
781     const char newStr[] = "test";
782     OH_JSVM_CreateStringUtf8(env, newStr, strlen(newStr), &name);
783     JSVM_Value object;
784     OH_JSVM_CreateObject(env, &object);
785     JSVM_Status status = OH_JSVM_SetElement(env, object, 1, name);
786     if (status != JSVM_OK) {
787         OH_JSVM_ThrowError(env, nullptr, "TestSetElement_07:OH_JSVM_SetElement index 1 Failed");
788         return nullptr;
789     }
790 
791     bool setValue = true;
792     JSVM_Value retValue = nullptr;
793     OH_JSVM_GetBoolean(env, setValue, &retValue);
794     return retValue;
795 }
796 //OH_JSVM_GetElement
797 //arraybuffer obj + set index + nonnull
TestGetElement_01(JSVM_Env env,JSVM_CallbackInfo info)798 [[maybe_unused]] JSVM_Value TestGetElement_01(JSVM_Env env, JSVM_CallbackInfo info)
799 {
800     JSVM_Value testArray = nullptr;
801     void *arrayBufferPtr = nullptr;
802     const size_t arrayBufferSize = 4;
803     OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &testArray);
804     JSVM_Value name = nullptr;
805     OH_JSVM_SetElement(env, testArray, arrayBufferSize, name);
806     JSVM_Value result = nullptr;
807     JSVM_Status status = OH_JSVM_GetElement(env, testArray, sizeof(testArray), &result);
808     if (status != JSVM_OK) {
809         OH_JSVM_ThrowError(env, nullptr, "TestGetElement_01:OH_JSVM_GetElement 0 Failed");
810         return nullptr;
811     }
812 
813     bool setValue = true;
814     JSVM_Value retValue = nullptr;
815     OH_JSVM_GetBoolean(env, setValue, &retValue);
816     return retValue;
817 }
818 //arraybuffer obj + set index + NULL
TestGetElement_02(JSVM_Env env,JSVM_CallbackInfo info)819 [[maybe_unused]] JSVM_Value TestGetElement_02(JSVM_Env env, JSVM_CallbackInfo info)
820 {
821     JSVM_Value arrayBuffer = nullptr;
822     void *arrayBufferPtr = nullptr;
823     const size_t arrayBufferSize = 4;
824     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
825     if (status != JSVM_OK) {
826         OH_JSVM_ThrowError(env, nullptr, "TestGetElement_02:CreateArraybuffer Failed");
827         return nullptr;
828     }
829 
830     status = OH_JSVM_SetElement(env, arrayBuffer, 0, nullptr);
831     if (status != JSVM_INVALID_ARG) {
832         OH_JSVM_ThrowError(env, nullptr, "TestGetElement_02:OH_JSVM_SetElement Failed");
833         return nullptr;
834     }
835 
836     JSVM_Value propName = nullptr;
837     status = OH_JSVM_GetElement(env, arrayBuffer, sizeof(arrayBuffer), &propName);
838     if (status != JSVM_OK) {
839         OH_JSVM_ThrowError(env, nullptr, "TestGetElement_02:OH_JSVM_GetElement 1 Failed");
840         return nullptr;
841     }
842 
843     bool setValue = true;
844     JSVM_Value retValue = nullptr;
845     OH_JSVM_GetBoolean(env, setValue, &retValue);
846     return retValue;
847 }
848 //typedarray obj + set index + nonnull
TestGetElement_03(JSVM_Env env,JSVM_CallbackInfo info)849 [[maybe_unused]] JSVM_Value TestGetElement_03(JSVM_Env env, JSVM_CallbackInfo info)
850 {
851     JSVM_Value testArray = nullptr;
852     const size_t arrayLen = 2;
853     OH_JSVM_CreateArrayWithLength(env, arrayLen, &testArray);
854     JSVM_Value name = nullptr;
855     char newStr1[] = "test";
856     OH_JSVM_CreateStringUtf8(env, newStr1, strlen(newStr1), &name);
857     OH_JSVM_SetElement(env, testArray, arrayLen, name);
858 
859     JSVM_Value result = nullptr;
860     JSVM_Status status = OH_JSVM_GetElement(env, testArray, sizeof(testArray), &result);
861     if (status != JSVM_OK) {
862         OH_JSVM_ThrowError(env, nullptr, "TestGetElement_03:OH_JSVM_GetElement Failed");
863         return nullptr;
864     }
865 
866     bool setValue = true;
867     JSVM_Value retValue = nullptr;
868     OH_JSVM_GetBoolean(env, setValue, &retValue);
869     return retValue;
870 }
871 //dataview obj + set index + nonnull
TestGetElement_04(JSVM_Env env,JSVM_CallbackInfo info)872 [[maybe_unused]] JSVM_Value TestGetElement_04(JSVM_Env env, JSVM_CallbackInfo info)
873 {
874     size_t argc = 2;
875     JSVM_Value args[2] = {nullptr};
876     JSVM_Value arrayBuffer = nullptr;
877     JSVM_Value result = nullptr;
878     OH_JSVM_GetCbInfo(env, info, &argc, args, nullptr, nullptr);
879     OH_JSVM_CoerceToObject(env, args[0], &arrayBuffer);
880     OH_JSVM_CreateDataview(env, DIFF_VALUE_TWELVE, arrayBuffer, DIFF_VALUE_FOUR, &result);
881     JSVM_Value value = nullptr;
882     JSVM_Status status = OH_JSVM_SetElement(env, result, sizeof(result), value);
883     if (status != JSVM_PENDING_EXCEPTION) {
884         OH_JSVM_ThrowError(env, nullptr, "TestGetElement_04:OH_JSVM_SetElement 0 Failed");
885         return nullptr;
886     }
887 
888     JSVM_Value recvMsg = nullptr;
889     OH_JSVM_GetAndClearLastException(env, &recvMsg);
890 
891     JSVM_Value rst = nullptr;
892     status = OH_JSVM_GetElement(env, result, sizeof(result), &rst);
893     if (status != JSVM_INVALID_ARG) {
894         OH_JSVM_ThrowError(env, nullptr, "testSetElement_04:OH_JSVM_GetElement 1 Failed");
895         return nullptr;
896     }
897 
898     bool setValue = true;
899     JSVM_Value retValue = nullptr;
900     OH_JSVM_GetBoolean(env, setValue, &retValue);
901     return retValue;
902 }
903 //not array obj + set index + nonnull
TestGetElement_05(JSVM_Env env,JSVM_CallbackInfo info)904 [[maybe_unused]] JSVM_Value TestGetElement_05(JSVM_Env env, JSVM_CallbackInfo info)
905 {
906     JSVM_Value name = nullptr;
907     char newStr[] = "test";
908     OH_JSVM_CreateStringUtf8(env, newStr, strlen(newStr), &name);
909     JSVM_Value object;
910     OH_JSVM_CreateObject(env, &object);
911     JSVM_Status status = OH_JSVM_SetElement(env, object, 0, name);
912     if (status != JSVM_OK) {
913         OH_JSVM_ThrowError(env, nullptr, "TestGetElement_05:OH_JSVM_SetElement index 0 Failed");
914         return nullptr;
915     }
916 
917     JSVM_Value result = nullptr;
918     status = OH_JSVM_GetElement(env, object, 1, &result);
919     if (status != JSVM_OK) {
920         OH_JSVM_ThrowError(env, nullptr, "TestGetElement_05:OH_JSVM_GetElement Failed");
921         return nullptr;
922     }
923 
924     bool setValue = true;
925     JSVM_Value retValue = nullptr;
926     OH_JSVM_GetBoolean(env, setValue, &retValue);
927     return retValue;
928 }
929 //arraybuffer obj + set index + nonnull
TestGetElement_06(JSVM_Env env,JSVM_CallbackInfo info)930 [[maybe_unused]] JSVM_Value TestGetElement_06(JSVM_Env env, JSVM_CallbackInfo info)
931 {
932     JSVM_Value testArray = nullptr;
933     void *arrayBufferPtr = nullptr;
934     const size_t arrayBufferSize = 4;
935     OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &testArray);
936 
937     JSVM_Value result = nullptr;
938     JSVM_Status status = OH_JSVM_GetElement(env, testArray, sizeof(testArray), &result);
939     if (status != JSVM_OK) {
940         OH_JSVM_ThrowError(env, nullptr, "TestGetElement_06:OH_JSVM_GetElement Failed");
941         return nullptr;
942     }
943 
944     bool setValue = true;
945     JSVM_Value retValue = nullptr;
946     OH_JSVM_GetBoolean(env, setValue, &retValue);
947     return retValue;
948 }
949 //OH_JSVM_HasElement
950 //arraybuffer obj + set index + nonnull
TestHasElement_01(JSVM_Env env,JSVM_CallbackInfo info)951 [[maybe_unused]] JSVM_Value TestHasElement_01(JSVM_Env env, JSVM_CallbackInfo info)
952 {
953     JSVM_Value testArray = nullptr;
954     void *arrayBufferPtr = nullptr;
955     const size_t arrayBufferSize = 4;
956     size_t eleIndex = 2;
957     OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &testArray);
958     for (uint32_t i = 0; i < arrayBufferSize; i++) {
959         JSVM_Value element;
960         OH_JSVM_CreateUint32(env, i * eleIndex, &element);
961         OH_JSVM_SetElement(env, testArray, i, element);
962     }
963 
964     bool hasElement = false;
965     JSVM_Status status = OH_JSVM_HasElement(env, testArray, 0, &hasElement);
966 
967     if (!hasElement) {
968         OH_JSVM_ThrowError(env, nullptr, "TestHasElement_01:OH_JSVM_HasElement Failed");
969         return nullptr;
970     }
971 
972     bool setValue = true;
973     JSVM_Value retValue = nullptr;
974     OH_JSVM_GetBoolean(env, setValue, &retValue);
975     return retValue;
976 }
977 //typedarray obj + set index + nonnull
TestHasElement_02(JSVM_Env env,JSVM_CallbackInfo info)978 [[maybe_unused]] JSVM_Value TestHasElement_02(JSVM_Env env, JSVM_CallbackInfo info)
979 {
980     const size_t arrayLen = 2;
981     JSVM_Value testArray = nullptr;
982     OH_JSVM_CreateArrayWithLength(env, arrayLen, &testArray);
983     JSVM_Value name = nullptr;
984     char newStr1[] = "test";
985     OH_JSVM_CreateStringUtf8(env, newStr1, strlen(newStr1), &name);
986     JSVM_Status status = OH_JSVM_SetElement(env, testArray, 0, name);
987     bool hasElement = false;
988     OH_JSVM_HasElement(env, testArray, 0, &hasElement);
989     if (!hasElement) {
990         OH_JSVM_ThrowError(env, nullptr, "TestHasElement_02:OH_JSVM_HasElement Failed");
991         return nullptr;
992     }
993 
994     bool setValue = true;
995     JSVM_Value retValue = nullptr;
996     OH_JSVM_GetBoolean(env, setValue, &retValue);
997     return retValue;
998 }
999 //dataview obj + set index + nonnull
TestHasElement_03(JSVM_Env env,JSVM_CallbackInfo info)1000 [[maybe_unused]] JSVM_Value TestHasElement_03(JSVM_Env env, JSVM_CallbackInfo info)
1001 {
1002     size_t argc = 2;
1003     JSVM_Value args[2] = {nullptr};
1004     JSVM_Value arrayBuffer = nullptr;
1005     JSVM_Value result = nullptr;
1006     OH_JSVM_GetCbInfo(env, info, &argc, args, nullptr, nullptr);
1007     OH_JSVM_CoerceToObject(env, args[0], &arrayBuffer);
1008     OH_JSVM_CreateDataview(env, DIFF_VALUE_TWELVE, arrayBuffer, DIFF_VALUE_FOUR, &result);
1009     JSVM_Value Value = nullptr;
1010     JSVM_Status status = OH_JSVM_SetElement(env, result, sizeof(result), Value);
1011     if (status != JSVM_PENDING_EXCEPTION) {
1012         OH_JSVM_ThrowError(env, nullptr, "TestHasElement_03:OH_JSVM_SetElement 0 Failed");
1013         return nullptr;
1014     }
1015 
1016     JSVM_Value recvMsg = nullptr;
1017     OH_JSVM_GetAndClearLastException(env, &recvMsg);
1018 
1019     bool hasElement = false;
1020     OH_JSVM_HasElement(env, result, 0, &hasElement);
1021     if (hasElement) {
1022         OH_JSVM_ThrowError(env, nullptr, "TestHasElement_03:OH_JSVM_HasElement Failed");
1023         return nullptr;
1024     }
1025 
1026     bool setValue = true;
1027     JSVM_Value retValue = nullptr;
1028     OH_JSVM_GetBoolean(env, setValue, &retValue);
1029     return retValue;
1030 }
1031 //not array obj + set index + nonnull
TestHasElement_04(JSVM_Env env,JSVM_CallbackInfo info)1032 [[maybe_unused]] JSVM_Value TestHasElement_04(JSVM_Env env, JSVM_CallbackInfo info)
1033 {
1034     JSVM_Value name = nullptr;
1035     char newStr[] = "test";
1036     OH_JSVM_CreateStringUtf8(env, newStr, strlen(newStr), &name);
1037     JSVM_Value object;
1038     OH_JSVM_CreateObject(env, &object);
1039     JSVM_Status status = OH_JSVM_SetElement(env, object, 0, name);
1040     if (status != JSVM_OK) {
1041         OH_JSVM_ThrowError(env, nullptr, "TestHasElement_04:OH_JSVM_SetElement index 0 Failed");
1042         return nullptr;
1043     }
1044 
1045     bool hasElement = false;
1046     OH_JSVM_HasElement(env, object, 0, &hasElement);
1047     if (!hasElement) {
1048         OH_JSVM_ThrowError(env, nullptr, "TestHasElement_04:OH_JSVM_HasElement Failed");
1049         return nullptr;
1050     }
1051 
1052     bool setValue = true;
1053     JSVM_Value retValue = nullptr;
1054     OH_JSVM_GetBoolean(env, setValue, &retValue);
1055     return retValue;
1056 }
1057 //arraybuffer obj + not set index + nonnull
TestHasElement_05(JSVM_Env env,JSVM_CallbackInfo info)1058 [[maybe_unused]] JSVM_Value TestHasElement_05(JSVM_Env env, JSVM_CallbackInfo info)
1059 {
1060     JSVM_Value testArray = nullptr;
1061     void *arrayBufferPtr = nullptr;
1062     const size_t arrayBufferSize = 4;
1063     OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &testArray);
1064     bool hasElement = false;
1065     OH_JSVM_HasElement(env, testArray, 0, &hasElement);
1066     if (hasElement) {
1067         OH_JSVM_ThrowError(env, nullptr, "TestHasElement_05:OH_JSVM_HasElement Failed");
1068         return nullptr;
1069     }
1070 
1071     bool setValue = true;
1072     JSVM_Value retValue = nullptr;
1073     OH_JSVM_GetBoolean(env, setValue, &retValue);
1074     return retValue;
1075 }
1076 //arraybuffer obj + set index + NULL
TestHasElement_06(JSVM_Env env,JSVM_CallbackInfo info)1077 [[maybe_unused]] JSVM_Value TestHasElement_06(JSVM_Env env, JSVM_CallbackInfo info)
1078 {
1079     JSVM_Value arrayBuffer = nullptr;
1080     void *arrayBufferPtr = nullptr;
1081     const size_t arrayBufferSize = 4;
1082     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
1083     if (status != JSVM_OK) {
1084         OH_JSVM_ThrowError(env, nullptr, "TestHasElement_06:CreateArraybuffer Failed");
1085         return nullptr;
1086     }
1087 
1088     status = OH_JSVM_SetElement(env, arrayBuffer, 0, nullptr);
1089     if (status != JSVM_INVALID_ARG) {
1090         OH_JSVM_ThrowError(env, nullptr, "TestHasElement_06:OH_JSVM_SetElement Failed");
1091         return nullptr;
1092     }
1093 
1094     bool hasElement = false;
1095     OH_JSVM_HasElement(env, arrayBuffer, 0, &hasElement);
1096     if (hasElement) {
1097         OH_JSVM_ThrowError(env, nullptr, "TestHasElement_06:OH_JSVM_HasElement Failed");
1098         return nullptr;
1099     }
1100 
1101     bool setValue = true;
1102     JSVM_Value retValue = nullptr;
1103     OH_JSVM_GetBoolean(env, setValue, &retValue);
1104     return retValue;
1105 }
1106 //OH_JSVM_DeleteElement
1107 //arraybuffer obj  + set index + nonnull
TestDeleteElement_01(JSVM_Env env,JSVM_CallbackInfo info)1108 [[maybe_unused]] JSVM_Value TestDeleteElement_01(JSVM_Env env, JSVM_CallbackInfo info)
1109 {
1110     JSVM_Value testArray = nullptr;
1111     void *arrayBufferPtr = nullptr;
1112     const size_t arrayBufferSize = 4;
1113     OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &testArray);
1114     JSVM_Value name = nullptr;
1115     OH_JSVM_SetElement(env, testArray, arrayBufferSize, name);
1116     JSVM_Value result = nullptr;
1117     JSVM_Status status = OH_JSVM_GetElement(env, testArray, sizeof(testArray), &result);
1118     if (status != JSVM_OK) {
1119         OH_JSVM_ThrowError(env, nullptr, "TestDeleteElement_01:OH_JSVM_GetElement 0 Failed");
1120         return nullptr;
1121     }
1122 
1123     bool rst = false;
1124     OH_JSVM_DeleteElement(env, testArray, 0, &rst);
1125     if (!rst) {
1126         OH_JSVM_ThrowError(env, nullptr, "TestDeleteElement_01:OH_JSVM_DeleteElement Failed");
1127         return nullptr;
1128     }
1129 
1130     bool setValue = true;
1131     JSVM_Value retValue = nullptr;
1132     OH_JSVM_GetBoolean(env, setValue, &retValue);
1133     return retValue;
1134 }
1135 //typedarray obj + set index + nonnull
TestDeleteElement_02(JSVM_Env env,JSVM_CallbackInfo info)1136 [[maybe_unused]] JSVM_Value TestDeleteElement_02(JSVM_Env env, JSVM_CallbackInfo info)
1137 {
1138     JSVM_Value testArray = nullptr;
1139     const size_t arrayLen = 4;
1140     OH_JSVM_CreateArrayWithLength(env, arrayLen, &testArray);
1141     uint32_t data = 1;
1142     JSVM_Value value = nullptr;
1143     OH_JSVM_CreateUint32(env, data, &value);
1144     JSVM_Status status = OH_JSVM_CreateTypedarray(env,
1145                                                   JSVM_TypedarrayType::JSVM_INT32_ARRAY,
1146                                                   arrayLen,
1147                                                   testArray,
1148                                                   0,
1149                                                   &value);
1150     OH_JSVM_SetElement(env, testArray, 0, value);
1151     bool hasElement = false;
1152     status = OH_JSVM_HasElement(env, testArray, 0, &hasElement);
1153     if (!hasElement) {
1154         OH_JSVM_ThrowError(env, nullptr, "TestDeleteElement_02:OH_JSVM_HasElement Failed");
1155         return nullptr;
1156     }
1157 
1158     bool rst = false;
1159     OH_JSVM_DeleteElement(env, testArray, 0, &rst);
1160     if (!rst) {
1161         OH_JSVM_ThrowError(env, nullptr, "TestDeleteElement_02:OH_JSVM_DeleteElement Failed");
1162         return nullptr;
1163     }
1164 
1165     bool setValue = true;
1166     JSVM_Value retValue = nullptr;
1167     OH_JSVM_GetBoolean(env, setValue, &retValue);
1168     return retValue;
1169 }
1170 //dataview obj + set index + nonnull
TestDeleteElement_03(JSVM_Env env,JSVM_CallbackInfo info)1171 [[maybe_unused]] JSVM_Value TestDeleteElement_03(JSVM_Env env, JSVM_CallbackInfo info)
1172 {
1173     size_t argc = 2;
1174     JSVM_Value args[2] = {nullptr};
1175     JSVM_Value arraybuffer = nullptr;
1176     JSVM_Value result = nullptr;
1177     OH_JSVM_GetCbInfo(env, info, &argc, args, nullptr, nullptr);
1178     OH_JSVM_CoerceToObject(env, args[0], &arraybuffer);
1179     OH_JSVM_CreateDataview(env, DIFF_VALUE_TWELVE, arraybuffer, DIFF_VALUE_FOUR, &result);
1180 
1181     JSVM_Status status = OH_JSVM_SetElement(env, result, sizeof(result), nullptr);
1182     if (status != JSVM_PENDING_EXCEPTION) {
1183         OH_JSVM_ThrowError(env, nullptr, "TestDeleteElement_03:OH_JSVM_SetElement 0 Failed");
1184         return nullptr;
1185     }
1186 
1187     JSVM_Value recvMsg = nullptr;
1188     OH_JSVM_GetAndClearLastException(env, &recvMsg);
1189 
1190     bool rst = false;
1191     OH_JSVM_DeleteElement(env, result, 0, &rst);
1192     if (rst) {
1193         OH_JSVM_ThrowError(env, nullptr, "TestDeleteElement_03:OH_JSVM_DeleteElement Failed");
1194         return nullptr;
1195     }
1196 
1197     recvMsg = nullptr;
1198     OH_JSVM_GetAndClearLastException(env, &recvMsg);
1199 
1200     bool setValue = true;
1201     JSVM_Value retValue = nullptr;
1202     OH_JSVM_GetBoolean(env, setValue, &retValue);
1203     return retValue;
1204 }
1205 //not array obj + set index + nonnull
TestDeleteElement_04(JSVM_Env env,JSVM_CallbackInfo info)1206 [[maybe_unused]] JSVM_Value TestDeleteElement_04(JSVM_Env env, JSVM_CallbackInfo info)
1207 {
1208     JSVM_Value name = nullptr;
1209     char newStr[] = "test";
1210     OH_JSVM_CreateStringUtf8(env, newStr, strlen(newStr), &name);
1211     JSVM_Value object;
1212     OH_JSVM_CreateObject(env, &object);
1213     JSVM_Status status = OH_JSVM_SetElement(env, object, 0, name);
1214     if (status != JSVM_OK) {
1215         OH_JSVM_ThrowError(env, nullptr, "TestDeleteElement_04:OH_JSVM_SetElement index 0 Failed");
1216         return nullptr;
1217     }
1218 
1219     bool rst = false;
1220     OH_JSVM_DeleteElement(env, object, 0, &rst);
1221     if (!rst) {
1222         OH_JSVM_ThrowError(env, nullptr, "TestDeleteElement_04:OH_JSVM_DeleteElement Failed");
1223         return nullptr;
1224     }
1225 
1226     bool setValue = true;
1227     JSVM_Value retValue = nullptr;
1228     OH_JSVM_GetBoolean(env, setValue, &retValue);
1229     return retValue;
1230 }
1231 //arraybuffer obj + set index + nonnull
TestDeleteElement_05(JSVM_Env env,JSVM_CallbackInfo info)1232 [[maybe_unused]] JSVM_Value TestDeleteElement_05(JSVM_Env env, JSVM_CallbackInfo info)
1233 {
1234     JSVM_Value testArray = nullptr;
1235     void *arrayBufferPtr = nullptr;
1236     const size_t arrayBufferSize = 4;
1237     OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &testArray);
1238 
1239     bool rst = false;
1240     OH_JSVM_DeleteElement(env, testArray, 0, &rst);
1241     if (!rst) {
1242         OH_JSVM_ThrowError(env, nullptr, "TestDeleteElement_05:OH_JSVM_DeleteElement Failed");
1243         return nullptr;
1244     }
1245 
1246     bool setValue = true;
1247     JSVM_Value retValue = nullptr;
1248     OH_JSVM_GetBoolean(env, setValue, &retValue);
1249     return retValue;
1250 }
1251 //arraybuffer obj + set index + NULL
TestDeleteElement_06(JSVM_Env env,JSVM_CallbackInfo info)1252 [[maybe_unused]] JSVM_Value TestDeleteElement_06(JSVM_Env env, JSVM_CallbackInfo info)
1253 {
1254     JSVM_Value arrayBuffer = nullptr;
1255     void *arrayBufferPtr = nullptr;
1256     const size_t arrayBufferSize = 4;
1257     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
1258     if (status != JSVM_OK) {
1259         OH_JSVM_ThrowError(env, nullptr, "TestDeleteElement_06:CreateArraybuffer Failed");
1260         return nullptr;
1261     }
1262 
1263     status = OH_JSVM_SetElement(env, arrayBuffer, 0, nullptr);
1264     if (status != JSVM_INVALID_ARG) {
1265         OH_JSVM_ThrowError(env, nullptr, "TestDeleteElement_06:OH_JSVM_SetElement Failed");
1266         return nullptr;
1267     }
1268 
1269     bool rst = false;
1270     OH_JSVM_DeleteElement(env, arrayBuffer, 0, &rst);
1271     if (!rst) {
1272         OH_JSVM_ThrowError(env, nullptr, "TestDeleteElement_06:OH_JSVM_DeleteElement Failed");
1273         return nullptr;
1274     }
1275 
1276     bool setValue = true;
1277     JSVM_Value retValue = nullptr;
1278     OH_JSVM_GetBoolean(env, setValue, &retValue);
1279     return retValue;
1280 }
1281 //API Combination Call Case
1282 //CreatArray/CreateArrayWithLength-> GetArrayLength,Check if it meets expectations ->
1283 //IsArray Determine whether it is an array,
1284 //return true -> SetElement -> GetElement, Consistent with set -> HasElement Determine whether
1285 //there are array elements present,
1286 //If set, return true; if not set, return false -> DeleteElement,If set, return true; if not set, return false
1287 //The following 01 case represents the situation of set, and 02 represents the situation of not set.
TestArrayProcessSteps_01(JSVM_Env env,JSVM_CallbackInfo info)1288 [[maybe_unused]] JSVM_Value TestArrayProcessSteps_01(JSVM_Env env, JSVM_CallbackInfo info)
1289 {
1290     const size_t arrayLength = 4;
1291     JSVM_Value testArray = nullptr;
1292     JSVM_Status status = OH_JSVM_CreateArrayWithLength(env, arrayLength, &testArray);
1293     bool isArray = false;
1294     OH_JSVM_IsArray(env, testArray, &isArray);
1295     if (!isArray) {
1296         OH_JSVM_ThrowError(env, nullptr, "TestArrayProcessSteps_01: is_array Failed");
1297         return nullptr;
1298     }
1299     uint32_t calcNum = 4;
1300     uint32_t length;
1301     status = OH_JSVM_GetArrayLength(env, testArray, &length);
1302     if (length != calcNum) {
1303         OH_JSVM_ThrowError(env, nullptr, "TestArrayProcessSteps_01: GetArrayLength 02 Failed");
1304         return nullptr;
1305     }
1306     for (uint32_t i = 0; i < calcNum; i++) {
1307         JSVM_Value element;
1308         OH_JSVM_CreateUint32(env, i, &element);
1309         status = OH_JSVM_SetElement(env, testArray, i, element);
1310         if (status != JSVM_OK) {
1311             OH_JSVM_ThrowError(env, nullptr, "TestArrayProcessSteps_01:OH_JSVM_SetElement Failed");
1312             return nullptr;
1313         }
1314     }
1315 
1316     JSVM_Value result = nullptr;
1317     status = OH_JSVM_GetElement(env, testArray, sizeof(testArray), &result);
1318     bool hasElement = false;
1319     OH_JSVM_HasElement(env, testArray, 0, &hasElement);
1320     if (!hasElement) {
1321         OH_JSVM_ThrowError(env, nullptr, "TestArrayProcessSteps_01:OH_JSVM_HasElement Failed");
1322         return nullptr;
1323     }
1324 
1325     bool rst = false;
1326     OH_JSVM_DeleteElement(env, testArray, 0, &rst);
1327     if (!rst) {
1328         OH_JSVM_ThrowError(env, nullptr, "TestArrayProcessSteps_01:OH_JSVM_DeleteElement Failed");
1329         return nullptr;
1330     }
1331 
1332     bool setValue = true;
1333     JSVM_Value retValue = nullptr;
1334     OH_JSVM_GetBoolean(env, setValue, &retValue);
1335     return retValue;
1336 }
1337 
TestArrayProcessSteps_02(JSVM_Env env,JSVM_CallbackInfo info)1338 [[maybe_unused]] JSVM_Value TestArrayProcessSteps_02(JSVM_Env env, JSVM_CallbackInfo info)
1339 {
1340     size_t arrayLength = 4;
1341     JSVM_Value testArray = nullptr;
1342     JSVM_Status status = OH_JSVM_CreateArrayWithLength(env, arrayLength, &testArray);
1343     if (status != JSVM_OK) {
1344         OH_JSVM_ThrowError(env, nullptr, "testArrayProcessSteps_02:OH_JSVM_CreateArrayWithLength Failed");
1345         return nullptr;
1346     }
1347 
1348     bool isArray = false;
1349     OH_JSVM_IsArray(env, testArray, &isArray);
1350     if (!isArray) {
1351         OH_JSVM_ThrowError(env, nullptr, "testArrayProcessSteps_02: is_array Failed");
1352         return nullptr;
1353     }
1354 
1355     uint32_t length;
1356     status = OH_JSVM_GetArrayLength(env, testArray, &length);
1357     if (status != JSVM_OK) {
1358         OH_JSVM_ThrowError(env, nullptr, "testArrayProcessSteps_02: GetArrayLength 01 Failed");
1359         return nullptr;
1360     }
1361     if (length != arrayLength) {
1362         OH_JSVM_ThrowError(env, nullptr, "testArrayProcessSteps_02: GetArrayLength 02 Failed");
1363         return nullptr;
1364     }
1365 
1366     bool hasElement = true;
1367     OH_JSVM_HasElement(env, testArray, 0, &hasElement);
1368     if (hasElement) {
1369         OH_JSVM_ThrowError(env, nullptr, "testArrayProcessSteps_02:OH_JSVM_HasElement Failed");
1370         return nullptr;
1371     }
1372 
1373     bool rst = true;
1374     OH_JSVM_DeleteElement(env, testArray, 0, &rst);
1375     if (!rst) {
1376         OH_JSVM_ThrowError(env, nullptr, "testArrayProcessSteps_02:OH_JSVM_DeleteElement Failed");
1377         return nullptr;
1378     }
1379 
1380     bool setValue = true;
1381     JSVM_Value retValue = nullptr;
1382     OH_JSVM_GetBoolean(env, setValue, &retValue);
1383     return retValue;
1384 }
1385 //CreatArraybuffer -> createTypedarray -> GetTypedarrayInfo get Typedarray,
1386 //Consistent with creation -> IsTypedarray if it is a Typedarray, return true ->
1387 //IsArray,return false -> SetElement -> GetElement,
1388 //Consistent with set -> HasElement,
1389 //If set, return true; if not set, return false -> DeleteElement,If set, return true; if not set, return false.
1390 //The following 01 case represents the situation of set, and 02 represents the situation of not set.
CreateTypedarrayDataAndCheck(JSVM_Env env,JSVM_CallbackInfo info)1391 [[maybe_unused]] JSVM_Value CreateTypedarrayDataAndCheck(JSVM_Env env, JSVM_CallbackInfo info)
1392 {
1393     void *data;
1394     JSVM_TypedarrayType type;
1395     size_t byteOffset;
1396     size_t length;
1397     JSVM_Value arrayBuffer = nullptr;
1398     void *arrayBufferPtr = nullptr;
1399     const size_t arrayBufferSize = 16;
1400     const size_t typedArrayLength = 4;
1401     JSVM_Value value;
1402     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
1403     if (status != JSVM_OK) {
1404         OH_JSVM_ThrowError(env, nullptr, "TestTypedarrayProcessSteps_01:OH_JSVM_CreateTypedarray Failed");
1405         return nullptr;
1406     }
1407     status = OH_JSVM_CreateTypedarray(env,
1408                                       JSVM_TypedarrayType::JSVM_INT32_ARRAY,
1409                                       typedArrayLength,
1410                                       arrayBuffer,
1411                                       0,
1412                                       &value);
1413     if (status != JSVM_OK) {
1414         OH_JSVM_ThrowError(env, nullptr, "TestTypedarrayProcessSteps_01:OH_JSVM_CreateTypedarray Failed");
1415         return nullptr;
1416     }
1417     status = OH_JSVM_GetTypedarrayInfo(env, value, &type, &length, &data, &arrayBuffer, &byteOffset);
1418     if (status != JSVM_OK) {
1419         OH_JSVM_ThrowError(env, nullptr, "TestTypedarrayProcessSteps_01:OH_JSVM_GetTypedarrayInfo Failed");
1420         return nullptr;
1421     }
1422     if (length != typedArrayLength) {
1423         OH_JSVM_ThrowError(env, nullptr, "TestTypedarrayProcessSteps_01:OH_JSVM_GetTypedarrayInfo Failed");
1424         return nullptr;
1425     }
1426 
1427     bool isTypedArray = false;
1428     OH_JSVM_IsTypedarray(env, value, &isTypedArray);
1429     if (!isTypedArray) {
1430         OH_JSVM_ThrowError(env, nullptr, "TestTypedarrayProcessSteps_01:is not typed array Failed");
1431         return nullptr;
1432     }
1433 
1434     bool isArray = true;
1435     OH_JSVM_IsArray(env, value, &isArray);
1436     if (isArray) {
1437         OH_JSVM_ThrowError(env, nullptr, "TestTypedarrayProcessSteps_01: is array");
1438         return nullptr;
1439     }
1440 
1441     return value;
1442 }
TestTypedarrayProcessSteps_01(JSVM_Env env,JSVM_CallbackInfo info)1443 [[maybe_unused]] JSVM_Value TestTypedarrayProcessSteps_01(JSVM_Env env, JSVM_CallbackInfo info)
1444 {
1445     const size_t typedArrayLength = 4;
1446     JSVM_Value value;
1447     JSVM_Status status;
1448     value = CreateTypedarrayDataAndCheck(env, info);
1449     if (value == nullptr) {
1450         return nullptr;
1451     }
1452     uint32_t calcNum = 16;
1453     for (uint32_t i = 0; i < calcNum; i++) {
1454         JSVM_Value element;
1455         OH_JSVM_CreateUint32(env, 1, &element);
1456         status = OH_JSVM_SetElement(env, value, i, element);
1457         if (status != JSVM_OK) {
1458             OH_JSVM_ThrowError(env, nullptr, "TestTypedarrayProcessSteps_01:OH_JSVM_SetElement Failed");
1459             return nullptr;
1460         }
1461     }
1462 
1463     JSVM_Value result = nullptr;
1464     status = OH_JSVM_GetElement(env, value, 0, &result);
1465     if (status != JSVM_OK) {
1466         OH_JSVM_ThrowError(env, nullptr, "TestTypedarrayProcessSteps_01:OH_JSVM_GetElement 1 Failed");
1467         return nullptr;
1468     }
1469 
1470     bool hasElement = false;
1471     OH_JSVM_HasElement(env, value, 0, &hasElement);
1472     if (!hasElement) {
1473         OH_JSVM_ThrowError(env, nullptr, "TestTypedarrayProcessSteps_01:OH_JSVM_HasElement Failed");
1474         return nullptr;
1475     }
1476 
1477     bool rst = false;
1478     status = OH_JSVM_DeleteElement(env, value, typedArrayLength, &rst);
1479     if (!rst) {
1480         OH_JSVM_ThrowError(env, nullptr, "TestTypedarrayProcessSteps_01:OH_JSVM_DeleteElement Failed");
1481         return nullptr;
1482     }
1483 
1484     bool setValue = true;
1485     JSVM_Value retValue = nullptr;
1486     OH_JSVM_GetBoolean(env, setValue, &retValue);
1487     return retValue;
1488 }
TestTypedarrayProcessSteps_02(JSVM_Env env,JSVM_CallbackInfo info)1489 [[maybe_unused]] JSVM_Value TestTypedarrayProcessSteps_02(JSVM_Env env, JSVM_CallbackInfo info)
1490 {
1491     void *data;
1492     JSVM_TypedarrayType type;
1493     size_t byteOffset;
1494     size_t length;
1495     JSVM_Value arrayBuffer = nullptr;
1496     void *arrayBufferPtr = nullptr;
1497     const size_t arrayBufferSize = 16;
1498     const size_t typedArrayLength = 4;
1499     JSVM_Value value;
1500     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
1501     status = OH_JSVM_CreateTypedarray(env,
1502                                       JSVM_TypedarrayType::JSVM_INT32_ARRAY,
1503                                       typedArrayLength,
1504                                       arrayBuffer,
1505                                       0,
1506                                       &value);
1507     status = OH_JSVM_GetTypedarrayInfo(env, value, &type, &length, &data, &arrayBuffer, &byteOffset);
1508     if (length != typedArrayLength) {
1509         OH_JSVM_ThrowError(env, nullptr, "TestTypedarrayProcessSteps_02:OH_JSVM_GetTypedarrayInfo Failed");
1510         return nullptr;
1511     }
1512     bool isTypedArray = false;
1513     OH_JSVM_IsTypedarray(env, value, &isTypedArray);
1514     if (!isTypedArray) {
1515         OH_JSVM_ThrowError(env, nullptr, "TestTypedarrayProcessSteps_02:is not typed array Failed");
1516         return nullptr;
1517     }
1518     bool hasElement = true;
1519     OH_JSVM_HasElement(env, value, 0, &hasElement);
1520     if (!hasElement) {
1521         OH_JSVM_ThrowError(env, nullptr, "TestTypedarrayProcessSteps_02:OH_JSVM_HasElement Failed");
1522         return nullptr;
1523     }
1524 
1525     bool rst = true;
1526     status = OH_JSVM_DeleteElement(env, value, 0, &rst);
1527     if (rst) {
1528         OH_JSVM_ThrowError(env, nullptr, "TestTypedarrayProcessSteps_02:OH_JSVM_DeleteElement Failed");
1529         return nullptr;
1530     }
1531 
1532     bool setValue = true;
1533     JSVM_Value retValue = nullptr;
1534     OH_JSVM_GetBoolean(env, setValue, &retValue);
1535     return retValue;
1536 }
1537 //CreatArraybuffer-> createDataview -> GetDataviewInfo,
1538 //Consistent with creation -> IsDataview if is Dataview, return true ->  IsArray,
1539 //return false -> SetElement -> GetElement , Consistent with set -> HasElement,
1540 //If set, return true; if not set, return false -> DeleteElement,If set, return true; if not set, return false.
1541 //The following 01 case represents the situation of set, and 02 represents the situation of not set.
TestArrayDataviewProcessSteps_01(JSVM_Env env,JSVM_CallbackInfo info)1542 [[maybe_unused]] JSVM_Value TestArrayDataviewProcessSteps_01(JSVM_Env env, JSVM_CallbackInfo info)
1543 {
1544     JSVM_Value arrayBuffer = nullptr;
1545     void *arrayBufferPtr = nullptr;
1546     const size_t arrayBufferSize = 16;
1547     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
1548     if (status != JSVM_OK || arrayBuffer == nullptr) {
1549         OH_JSVM_ThrowError(env, nullptr, "TestArrayDataviewProcessSteps_01:CreateArraybuffer Failed");
1550         return nullptr;
1551     }
1552 
1553     JSVM_Value result = nullptr;
1554     status = OH_JSVM_CreateDataview(env, arrayBufferSize, arrayBuffer, 0, &result);
1555     if (status != JSVM_OK) {
1556         OH_JSVM_ThrowError(env, nullptr, "TestArrayDataviewProcessSteps_01:OH_JSVM_CreateDataview Failed");
1557         return nullptr;
1558     }
1559 
1560     bool isDataView = false;
1561     OH_JSVM_IsDataview(env, result, &isDataView);
1562     if (!isDataView) {
1563         OH_JSVM_ThrowError(env,
1564                            nullptr,
1565                            "TestArrayDataviewProcessSteps_01:OH_JSVM_CreateDataview isn't DataView Failed");
1566         return nullptr;
1567     }
1568 
1569     JSVM_Value retArrayBuffer = nullptr;
1570     void *data = nullptr;
1571     size_t byteLength = 0;
1572     size_t byteOffset = -1;
1573     status = OH_JSVM_GetDataviewInfo(env, result, &byteLength, &data, &retArrayBuffer, &byteOffset);
1574     if (status != JSVM_OK) {
1575         OH_JSVM_ThrowError(env,
1576                            nullptr,
1577                            "TestArrayDataviewProcessSteps_01:OH_JSVM_CreateDataview GetDataviewInfo Failed");
1578         return nullptr;
1579     }
1580 
1581     bool isArray = true;
1582     OH_JSVM_IsArray(env, result, &isArray);
1583     if (isArray) {
1584         OH_JSVM_ThrowError(env, nullptr, "TestArrayDataviewProcessSteps_01: is array");
1585         return nullptr;
1586     }
1587     int32_t tarNum = 3;
1588     JSVM_Value inputStr = nullptr;
1589     OH_JSVM_CreateInt32(env, tarNum, &inputStr);
1590     status = OH_JSVM_SetElement(env, result, 0, inputStr);
1591     if (status != JSVM_OK) {
1592         OH_JSVM_ThrowError(env, nullptr, "TestArrayDataviewProcessSteps_01:OH_JSVM_SetElement 0 Failed");
1593         return nullptr;
1594     }
1595 
1596     bool hasElement = false;
1597     OH_JSVM_HasElement(env, result, 0, &hasElement);
1598     if (!hasElement) {
1599         OH_JSVM_ThrowError(env, nullptr, "TestArrayDataviewProcessSteps_01:OH_JSVM_HasElement Failed");
1600         return nullptr;
1601     }
1602 
1603     JSVM_Value rst = nullptr;
1604     status = OH_JSVM_GetElement(env, result, sizeof(result), &rst);
1605     if (status != JSVM_OK) {
1606         OH_JSVM_ThrowError(env, nullptr, "TestArrayDataviewProcessSteps_01:OH_JSVM_GetElement Failed");
1607         return nullptr;
1608     }
1609 
1610     bool rstValue = false;
1611     OH_JSVM_DeleteElement(env, result, 0, &rstValue);
1612     if (!rstValue) {
1613         OH_JSVM_ThrowError(env, nullptr, "TestArrayDataviewProcessSteps_01:OH_JSVM_DeleteElement Failed");
1614         return nullptr;
1615     }
1616 
1617     bool setValue = true;
1618     JSVM_Value retValue = nullptr;
1619     OH_JSVM_GetBoolean(env, setValue, &retValue);
1620     return retValue;
1621 }
1622 
TestArrayDataviewProcessSteps_02(JSVM_Env env,JSVM_CallbackInfo info)1623 [[maybe_unused]] JSVM_Value TestArrayDataviewProcessSteps_02(JSVM_Env env, JSVM_CallbackInfo info)
1624 {
1625     JSVM_Value arrayBuffer = nullptr;
1626     void *arrayBufferPtr = nullptr;
1627     const size_t arrayBufferSize = 16;
1628     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
1629     JSVM_Value result = nullptr;
1630     status = OH_JSVM_CreateDataview(env, arrayBufferSize, arrayBuffer, 0, &result);
1631     bool isDataView = false;
1632     OH_JSVM_IsDataview(env, result, &isDataView);
1633     if (!isDataView) {
1634         OH_JSVM_ThrowError(env,
1635                            nullptr,
1636                            "TestArrayDataviewProcessSteps_02:OH_JSVM_CreateDataview isn't DataView Failed");
1637         return nullptr;
1638     }
1639     JSVM_Value retArrayBuffer = nullptr;
1640     void *data = nullptr;
1641     size_t byteLength = 0;
1642     size_t byteOffset = -1;
1643     status = OH_JSVM_GetDataviewInfo(env, result, &byteLength, &data, &retArrayBuffer, &byteOffset);
1644     if (status != JSVM_OK) {
1645         OH_JSVM_ThrowError(env,
1646                            nullptr,
1647                            "TestArrayDataviewProcessSteps_02:OH_JSVM_CreateDataview GetDataviewInfo Failed");
1648         return nullptr;
1649     }
1650     bool isArray = true;
1651     OH_JSVM_IsArray(env, result, &isArray);
1652     if (isArray) {
1653         OH_JSVM_ThrowError(env, nullptr, "TestArrayDataviewProcessSteps_02: is array");
1654         return nullptr;
1655     }
1656     bool hasElement = true;
1657     OH_JSVM_HasElement(env, result, 0, &hasElement);
1658     if (hasElement) {
1659         OH_JSVM_ThrowError(env, nullptr, "TestArrayDataviewProcessSteps_02:OH_JSVM_HasElement");
1660         return nullptr;
1661     }
1662     bool rst = true;
1663     OH_JSVM_DeleteElement(env, result, 0, &rst);
1664     if (!rst) {
1665         OH_JSVM_ThrowError(env, nullptr, "TestArrayDataviewProcessSteps_02:OH_JSVM_DeleteElement Failed.");
1666         return nullptr;
1667     }
1668 
1669     bool setValue = true;
1670     JSVM_Value retValue = nullptr;
1671     OH_JSVM_GetBoolean(env, setValue, &retValue);
1672     return retValue;
1673 }
1674 //CreatArraybuffer -> createTypedarray -> GetTypedarrayInfo,
1675 //Consistent with creation -> IsTypedarray if it is Typedarray, return true -> createDataview -> GetDataviewInfo,
1676 //Consistent with creation -> IsDataview if it is Dataview, return true
TestTypeArrayAndDataviewProcessSteps_01(JSVM_Env env,JSVM_CallbackInfo info)1677 [[maybe_unused]] JSVM_Value TestTypeArrayAndDataviewProcessSteps_01(JSVM_Env env, JSVM_CallbackInfo info)
1678 {
1679     JSVM_Value arrayBuffer = nullptr;
1680     void *arrayBufferPtr = nullptr;
1681     size_t arrayBufferSize = 16;
1682     JSVM_Status status = OH_JSVM_CreateArraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
1683     JSVM_Value value = nullptr;
1684     size_t typedArrayLength = 0;
1685     OH_JSVM_CreateTypedarray(env,
1686                              JSVM_TypedarrayType::JSVM_INT16_ARRAY,
1687                              typedArrayLength,
1688                              arrayBuffer,
1689                              0,
1690                              &value);
1691     JSVM_TypedarrayType type;
1692     size_t byteOffset = 0;
1693     void *data = nullptr;
1694     OH_JSVM_GetTypedarrayInfo(env, value, &type, &typedArrayLength, &data, &arrayBuffer, &byteOffset);
1695     bool isTypedArray = false;
1696     OH_JSVM_IsTypedarray(env, value, &isTypedArray);
1697     if (!isTypedArray) {
1698         OH_JSVM_ThrowError(env, nullptr, "TestTypeArrayAndDataviewProcessSteps_01:is not typed array Failed");
1699         return nullptr;
1700     }
1701     JSVM_Value result = nullptr;
1702     status = OH_JSVM_CreateDataview(env, arrayBufferSize, arrayBuffer, 0, &result);
1703     if (status != JSVM_OK) {
1704         OH_JSVM_ThrowError(env, nullptr, "TestTypeArrayAndDataviewProcessSteps_01:OH_JSVM_CreateDataview Failed");
1705         return nullptr;
1706     }
1707     bool isDataView = false;
1708     OH_JSVM_IsDataview(env, result, &isDataView);
1709     if (!isDataView) {
1710         OH_JSVM_ThrowError(env, nullptr,
1711                            "TestTypeArrayAndDataviewProcessSteps_01:OH_JSVM_CreateDataview isn't DataView Failed");
1712         return nullptr;
1713     }
1714 
1715     JSVM_Value retArrayBuffer = nullptr;
1716     size_t byteLength = 0;
1717     byteOffset = 0;
1718     status = OH_JSVM_GetDataviewInfo(env, result, &byteLength, &data, &retArrayBuffer, &byteOffset);
1719     if (status != JSVM_OK) {
1720         OH_JSVM_ThrowError(env, nullptr, "TestTypeArrayAndDataviewProcessSteps_01:GetDataviewInfo Failed");
1721         return nullptr;
1722     }
1723 
1724     bool setValue = true;
1725     JSVM_Value retValue = nullptr;
1726     OH_JSVM_GetBoolean(env, setValue, &retValue);
1727     return retValue;
1728 }
1729 //TypeArray repeated set at the same index
TestTypeArraySetMultipleTimes_01(JSVM_Env env,JSVM_CallbackInfo info)1730 [[maybe_unused]] JSVM_Value TestTypeArraySetMultipleTimes_01(JSVM_Env env, JSVM_CallbackInfo info)
1731 {
1732     const size_t typedArrayLength = 8;
1733     JSVM_Value testArray = nullptr;
1734     OH_JSVM_CreateArrayWithLength(env, typedArrayLength, &testArray);
1735     JSVM_Value name = nullptr;
1736     char newStr1[] = "abc";
1737     OH_JSVM_CreateStringUtf8(env, newStr1, strlen(newStr1), &name);
1738     JSVM_Status status = OH_JSVM_SetElement(env, testArray, typedArrayLength, name);
1739     if (status != JSVM_OK) {
1740         OH_JSVM_ThrowError(env, nullptr, "TestTypeArraySetMultipleTimes_01:OH_JSVM_SetElement 1 Failed");
1741         return nullptr;
1742     }
1743 
1744     uint32_t tarNum = 2;
1745     for (uint32_t i = 0; i < tarNum; i++) {
1746         JSVM_Value element;
1747         OH_JSVM_CreateUint32(env, i + 1, &element);
1748         status = OH_JSVM_SetElement(env, testArray, i, element);
1749         if (status != JSVM_OK) {
1750             OH_JSVM_ThrowError(env, nullptr, "TestTypeArraySetMultipleTimes_01:OH_JSVM_SetElement 2 Failed");
1751             return nullptr;
1752         }
1753     }
1754 
1755     bool hasElement = false;
1756     OH_JSVM_HasElement(env, testArray, 0, &hasElement);
1757     if (!hasElement) {
1758         OH_JSVM_ThrowError(env, nullptr, "TestTypeArraySetMultipleTimes_01:OH_JSVM_HasElement Failed");
1759         return nullptr;
1760     }
1761 
1762     JSVM_Value rst = nullptr;
1763     status = OH_JSVM_GetElement(env, testArray, 0, &rst);
1764     if (status != JSVM_OK) {
1765         OH_JSVM_ThrowError(env, nullptr, "TestTypeArraySetMultipleTimes_01:OH_JSVM_GetElement 1 Failed");
1766         return nullptr;
1767     }
1768 
1769     bool setValue = true;
1770     JSVM_Value retValue = nullptr;
1771     OH_JSVM_GetBoolean(env, setValue, &retValue);
1772     return retValue;
1773 }
1774 //Array repeated set at the same index
TestArraySetMultipleTimes_01(JSVM_Env env,JSVM_CallbackInfo info)1775 [[maybe_unused]] JSVM_Value TestArraySetMultipleTimes_01(JSVM_Env env, JSVM_CallbackInfo info)
1776 {
1777     const size_t arrayLength = 2;
1778     JSVM_Value lhs;
1779     OH_JSVM_CreateArrayWithLength(env, arrayLength, &lhs);
1780     for (uint32_t i = 0; i < arrayLength; i++) {
1781         JSVM_Value element;
1782         OH_JSVM_CreateUint32(env, i + 1, &element);
1783         OH_JSVM_SetElement(env, lhs, i, element);
1784     }
1785 
1786     size_t testLen = 3;
1787     JSVM_Value element;
1788     OH_JSVM_CreateUint32(env, testLen, &element);
1789     JSVM_Status status = OH_JSVM_SetElement(env, lhs, 3, element);
1790     if (status != JSVM_OK) {
1791         OH_JSVM_ThrowError(env, nullptr, "TestArraySetMultipleTimes_01:OH_JSVM_SetElement 2 Failed");
1792         return nullptr;
1793     }
1794 
1795     bool hasElement = false;
1796     OH_JSVM_HasElement(env, lhs, 1, &hasElement);
1797     if (!hasElement) {
1798         OH_JSVM_ThrowError(env, nullptr, "TestArraySetMultipleTimes_01:OH_JSVM_HasElement Failed");
1799         return nullptr;
1800     }
1801 
1802     JSVM_Value rst = nullptr;
1803     status = OH_JSVM_GetElement(env, lhs, 1, &rst);
1804     if (status != JSVM_OK) {
1805         OH_JSVM_ThrowError(env, nullptr, "TestArraySetMultipleTimes_01:OH_JSVM_GetElement 1 Failed");
1806         return nullptr;
1807     }
1808 
1809     bool setValue = true;
1810     JSVM_Value retValue = nullptr;
1811     OH_JSVM_GetBoolean(env, setValue, &retValue);
1812     return retValue;
1813 }
1814 //TypeArray gets multiple times
TestArrayGetMultipleTimes_01(JSVM_Env env,JSVM_CallbackInfo info)1815 [[maybe_unused]] JSVM_Value TestArrayGetMultipleTimes_01(JSVM_Env env, JSVM_CallbackInfo info)
1816 {
1817     const size_t typedArrayLength = 8;
1818     JSVM_Value testArray = nullptr;
1819     OH_JSVM_CreateArrayWithLength(env, typedArrayLength, &testArray);
1820     JSVM_Value value = nullptr;
1821     const char testStr[] = "ab+c";
1822     OH_JSVM_CreateStringUtf8(env, testStr, strlen(testStr), &value);
1823     JSVM_Status status = OH_JSVM_SetElement(env, testArray, typedArrayLength, value);
1824     if (status != JSVM_OK) {
1825         OH_JSVM_ThrowError(env, nullptr, "TestArrayGetMultipleTimes_01:OH_JSVM_SetElement Failed.");
1826         return nullptr;
1827     }
1828 
1829     uint32_t dataIndex = 2;
1830     bool hasElement = false;
1831     OH_JSVM_HasElement(env, testArray, dataIndex, &hasElement);
1832     if (hasElement) {
1833         OH_JSVM_ThrowError(env, nullptr, "TestArrayGetMultipleTimes_01:OH_JSVM_HasElement Abnormal.");
1834         return nullptr;
1835     }
1836 
1837     JSVM_Value rst = nullptr;
1838     status = OH_JSVM_GetElement(env, testArray, dataIndex, &rst);
1839     if (status != JSVM_OK) {
1840         OH_JSVM_ThrowError(env, nullptr, "TestArrayGetMultipleTimes_01:OH_JSVM_GetElement 0 Abnormal.");
1841         return nullptr;
1842     }
1843 
1844     status = OH_JSVM_GetElement(env, testArray, typedArrayLength, &rst);
1845     if (status != JSVM_OK) {
1846         OH_JSVM_ThrowError(env, nullptr, "TestArrayGetMultipleTimes_01:OH_JSVM_GetElement 2 Failed");
1847         return nullptr;
1848     }
1849 
1850     bool setValue = true;
1851     JSVM_Value retValue = nullptr;
1852     OH_JSVM_GetBoolean(env, setValue, &retValue);
1853     return retValue;
1854 }
1855 //Repeat delete, same index
1856 //Return the execution status code JSVM_Status. JSVM-OK indicates successful execution.
1857 //JSVM_GENERIC_SAILURE indicates that there is an unknown reason causing execution failure.
TestArrayDeleteMultipleTimes_01(JSVM_Env env,JSVM_CallbackInfo info)1858 [[maybe_unused]] JSVM_Value TestArrayDeleteMultipleTimes_01(JSVM_Env env, JSVM_CallbackInfo info)
1859 {
1860     size_t testLen = 4;
1861     size_t testLen1 = 2;
1862     JSVM_Value testArray = nullptr;
1863     OH_JSVM_CreateArrayWithLength(env, testLen, &testArray);
1864     JSVM_Value index1 = nullptr;
1865     OH_JSVM_CreateUint32(env, 1, &index1);
1866     JSVM_Value index2 = nullptr;
1867     OH_JSVM_CreateUint32(env, testLen, &index2);
1868     OH_JSVM_SetElement(env, testArray, 0, index1);
1869     OH_JSVM_SetElement(env, testArray, 1, index2);
1870 
1871     bool hasElement = false;
1872     OH_JSVM_HasElement(env, testArray, 0, &hasElement);
1873     if (!hasElement) {
1874         OH_JSVM_ThrowError(env, nullptr, "TestArrayDeleteMultipleTimes_01:OH_JSVM_HasElement Failed");
1875         return nullptr;
1876     }
1877 
1878     bool rst = true;
1879     OH_JSVM_DeleteElement(env, testArray, 0, &rst);
1880     if (!rst) {
1881         OH_JSVM_ThrowError(env, nullptr, "TestArrayDeleteMultipleTimes_01:OH_JSVM_DeleteElement Failed.");
1882         return nullptr;
1883     }
1884     OH_JSVM_HasElement(env, testArray, 0, &hasElement);
1885     if (hasElement) {
1886         OH_JSVM_ThrowError(env, nullptr, "TestArrayDeleteMultipleTimes_01:OH_JSVM_HasElement 1 Failed");
1887         return nullptr;
1888     }
1889     OH_JSVM_DeleteElement(env, testArray, 0, &rst);
1890     if (!rst) {
1891         OH_JSVM_ThrowError(env, nullptr, "TestArrayDeleteMultipleTimes_01:OH_JSVM_DeleteElement 1 Failed.");
1892         return nullptr;
1893     }
1894 
1895     bool setValue = true;
1896     JSVM_Value retValue = nullptr;
1897     OH_JSVM_GetBoolean(env, setValue, &retValue);
1898     return retValue;
1899 }
1900 //Multiple deletions with different indices
TestArrayDeleteMultipleTimes_02(JSVM_Env env,JSVM_CallbackInfo info)1901 [[maybe_unused]] JSVM_Value TestArrayDeleteMultipleTimes_02(JSVM_Env env, JSVM_CallbackInfo info)
1902 {
1903     const size_t testLen0 = 2;
1904     const size_t testLen1 = 5;
1905     JSVM_Value testArray = nullptr;
1906     OH_JSVM_CreateArrayWithLength(env, testLen0, &testArray);
1907     JSVM_Value index1 = nullptr;
1908     OH_JSVM_CreateUint32(env, 1, &index1);
1909     JSVM_Value index2 = nullptr;
1910     OH_JSVM_CreateUint32(env, testLen0, &index2);
1911     OH_JSVM_SetElement(env, testArray, 0, index1);
1912     OH_JSVM_SetElement(env, testArray, 1, index2);
1913 
1914     bool hasElement = false;
1915     OH_JSVM_HasElement(env, testArray, 0, &hasElement);
1916     if (!hasElement) {
1917         OH_JSVM_ThrowError(env, nullptr, "TestArrayDeleteMultipleTimes_02:OH_JSVM_HasElement Failed");
1918         return nullptr;
1919     }
1920 
1921     bool rst = true;
1922     OH_JSVM_DeleteElement(env, testArray, 0, &rst);
1923     if (!rst) {
1924         OH_JSVM_ThrowError(env, nullptr, "TestArrayDeleteMultipleTimes_02:OH_JSVM_DeleteElement Failed.");
1925         return nullptr;
1926     }
1927 
1928     OH_JSVM_HasElement(env, testArray, testLen1, &hasElement);
1929     if (hasElement) {
1930         OH_JSVM_ThrowError(env, nullptr, "TestArrayDeleteMultipleTimes_02:OH_JSVM_HasElement Failed");
1931         return nullptr;
1932     }
1933     JSVM_Status status = OH_JSVM_DeleteElement(env, testArray, testLen1, &rst);
1934     if (status != JSVM_OK) {
1935         OH_JSVM_ThrowError(env, nullptr, "TestArrayDeleteMultipleTimes_02:OH_JSVM_DeleteElement 1 Failed.");
1936         return nullptr;
1937     }
1938 
1939     bool setValue = true;
1940     JSVM_Value retValue = nullptr;
1941     OH_JSVM_GetBoolean(env, setValue, &retValue);
1942     return retValue;
1943 }