• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-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 "common/native_common.h"
17 #include "napi/native_api.h"
18 #include <securec.h>
19 #include <pthread.h>
20 #include <stdint.h>
21 #include <string>
22 #include <stdio.h>
23 #include <vector>
24 #include <malloc.h>
25 #include <cstdlib>
26 #include <ctime>
27 #include <thread>
28 #include <unistd.h>
29 #include <memory.h>
30 #include <uv.h>
31 
32 static napi_ref test_reference = NULL;
33 const int TAG_NUMBER = 666;
34 const int NUMBER_FIVE = 5;
35 const int THREAD_NAME_LENGTH = 20;
36 const int INVALID_PARAM_WITH_NOWAIT = 0;
37 const int INVALID_PARAM_WITH_DEFAULT = 1;
38 const int RUN_IN_MAIN_THREAD_WITH_NOWAIT = 2;
39 const int RUN_IN_MAIN_THREAD_WITH_DEFAULT = 3;
40 const int RUN_IN_WORKER_THREAD_WITH_NOWAIT = 4;
41 const int RUN_IN_WORKER_THREAD_WITH_DEFAULT = 5;
42 const int RUN_NAPI_LOOP_WITH_NOWAIT = 6;
43 const int RUN_NAPI_LOOP_WITH_DEFAULT = 7;
44 const int RUN_NAPI_LOOP_AFTER_RUN_FINISH = 8;
45 const int WITHOUT_RUN_NAPI_LOOP = 9;
46 const int DIFF_VALUE_ONE = 2;
47 const int DIFF_VALUE_TWO = 4;
48 const int PARAM_SIZE_TWO = 2;
49 const int INVALID_PARAM_WITH_STOP_LOOP = 0;
50 const int STOP_LOOP_IN_MAIN_THREAD = 1;
51 const int STOP_LOOP_IN_WORKER_THREAD = 2;
52 const int STOP_LOOP_BEFORE_RUN = 3;
53 const int STOP_LOOP_AFTER_RUN = 4;
54 static int g_delCount = 0;
55 static int g_cleanupHookCount = 0;
56 static napi_env g_sharedEnv = nullptr;
57 static napi_deferred g_deferred = nullptr;
58 static bool g_isTaskFinished = false;
59 const int NAPI_ERROR_LENGTH = 11;
60 const int NAPI_STRING_LENGTH = 3;
61 const int NAPI_UTF8_LENGTH = 256;
62 const int NAPI_REF_COUNT = 2;
63 const int NAPI_ARGC_LENGTH = 2;
64 const int NAPI_COPIED_VALUE = 3;
65 const int NAPI_INVALID_NUM1 = -2;
66 const int NAPI_INVALID_NUM2 = -5;
67 const int NAPI_UTF8_MAX = 255;
68 const int NAPI_ARGS_LENGTH = 2;
69 
70 
71 struct CallbackData {
72     napi_threadsafe_function tsfn;
73     napi_async_work work;
74 };
75 
76 struct InstanceData {
77     size_t value;
78     bool print;
79     napi_ref jsCbRef;
80 };
81 
82 struct InstanceAddonData {
83     napi_ref jsCbRef;
84     napi_ref jsTsfnFinalizerRef;
85     napi_threadsafe_function tsfn;
86     uv_thread_t thread;
87 };
88 
89 struct AsyncData {
90     uv_async_t async;
91     napi_env env;
92     napi_async_cleanup_hook_handle handle;
93 };
94 
95 struct AddonData {
96     napi_async_work asyncWork = nullptr;
97     napi_deferred deferred = nullptr;
98     napi_ref callback = nullptr;
99     double args = 0;
100     double result = 0;
101 };
102 
103 struct AsyncContext {
104     napi_env env;
105     napi_async_work asyncWork = nullptr;
106     napi_deferred deferred = nullptr;
107     int num1 = 0;
108     int num2 = 0;
109     int sum = 0;
110 };
111 
ResolvedCallback(napi_env env,napi_callback_info info)112 static napi_value ResolvedCallback(napi_env env, napi_callback_info info)
113 {
114     void *toStopTheLoop;
115     size_t argc = 0;
116     if (napi_get_cb_info(env, info, &argc, nullptr, nullptr, &toStopTheLoop) != napi_ok) {
117         return nullptr;
118     }
119     auto flag = reinterpret_cast<int *>(toStopTheLoop);
120     if (*flag == 1) {
121         napi_stop_event_loop(env);
122     }
123     return nullptr;
124 }
125 
RejectedCallback(napi_env env,napi_callback_info info)126 static napi_value RejectedCallback(napi_env env, napi_callback_info info)
127 {
128     napi_stop_event_loop(env);
129     return nullptr;
130 }
add_returned_status(napi_env env,const char * key,napi_value object,const char * expected_message,napi_status expected_status,napi_status actual_status)131 static void add_returned_status(napi_env env,
132                                 const char* key,
133                                 napi_value object,
134                                 const char* expected_message,
135                                 napi_status expected_status,
136                                 napi_status actual_status)
137 {
138     char napi_message_string[100] = "";
139     napi_value prop_value;
140 
141     if (actual_status != expected_status) {
142         printf("Invalid status [%d]", actual_status);
143     }
144 
145     NAPI_CALL_RETURN_VOID(env,
146             napi_create_string_utf8(env,
147                     (actual_status == expected_status ?
148                     expected_message :
149                     napi_message_string),
150                     NAPI_AUTO_LENGTH,
151                     &prop_value));
152     NAPI_CALL_RETURN_VOID(env,
153             napi_set_named_property(env,
154                     object,
155                     key,
156                     prop_value));
157 }
158 
add_last_status(napi_env env,const char * key,napi_value return_value)159 static void add_last_status(napi_env env, const char* key, napi_value return_value)
160 {
161     napi_value prop_value;
162     const napi_extended_error_info* p_last_error;
163     NAPI_CALL_RETURN_VOID(env, napi_get_last_error_info(env, &p_last_error));
164 
165     NAPI_CALL_RETURN_VOID(env,
166             napi_create_string_utf8(env,
167                     (p_last_error->error_message == nullptr ?
168                     "napi_ok" :
169                     p_last_error->error_message),
170                     NAPI_AUTO_LENGTH,
171                     &prop_value));
172     NAPI_CALL_RETURN_VOID(env, napi_set_named_property(env,
173             return_value,
174             key,
175             prop_value));
176 }
177 
getLastErrorInfo(napi_env env,napi_callback_info info)178 static napi_value getLastErrorInfo(napi_env env, napi_callback_info info)
179 {
180     napi_value value;
181     NAPI_CALL(env, napi_create_string_utf8(env, "xyz", 3, &value));
182     double double_value;
183     napi_status status = napi_get_value_double(env, value, &double_value);
184     NAPI_ASSERT(env, status != napi_ok, "Failed to produce error condition");
185     const napi_extended_error_info * error_info = 0;
186     NAPI_CALL(env, napi_get_last_error_info(env, &error_info));
187 
188     NAPI_ASSERT(env, error_info->error_code == status,
189             "Last error info code should match last status");
190     NAPI_ASSERT(env, error_info->error_message,
191             "Last error info message should not be null");
192     napi_value _value;
193     NAPI_CALL(env, napi_create_int32(env, error_info->error_code, &_value));
194     return _value;
195 }
196 
cleanUpErrorInfo(napi_env env,napi_callback_info info)197 static napi_value cleanUpErrorInfo(napi_env env, napi_callback_info info)
198 {
199     const napi_extended_error_info * error_info = 0;
200     NAPI_CALL(env, napi_get_last_error_info(env, &error_info));
201 
202     napi_value result;
203     bool is_ok = error_info->error_code == napi_ok;
204     NAPI_CALL(env, napi_get_boolean(env, is_ok, &result));
205 
206     return result;
207 }
208 
throwExistingError(napi_env env,napi_callback_info info)209 static napi_value throwExistingError(napi_env env, napi_callback_info info)
210 {
211     napi_value code = nullptr;
212     napi_value message = nullptr;
213     napi_create_string_latin1(env, "600", NAPI_AUTO_LENGTH, &code);
214     napi_create_string_latin1(env, "test error", NAPI_AUTO_LENGTH, &message);
215     napi_value error = nullptr;
216     napi_create_error(env, code, message, &error);
217     NAPI_ASSERT(env, error != nullptr, "error succes");
218     bool isError = false;
219     napi_is_error(env, error, &isError);
220     NAPI_ASSERT(env, isError, "error succes");
221 
222     NAPI_CALL(env, napi_throw(env, error));
223 
224     napi_value _value;
225     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
226     return _value;
227 }
228 
throwError(napi_env env,napi_callback_info info)229 static napi_value throwError(napi_env env, napi_callback_info info)
230 {
231     napi_value code = nullptr;
232     napi_value message = nullptr;
233     napi_create_string_latin1(env, "600", NAPI_AUTO_LENGTH, &code);
234     napi_create_string_latin1(env, "test error", NAPI_AUTO_LENGTH, &message);
235     napi_value error = nullptr;
236     napi_create_error(env, code, message, &error);
237     NAPI_ASSERT(env, error != nullptr, "error succes");
238     bool isError = false;
239     napi_is_error(env, error, &isError);
240     NAPI_ASSERT(env, isError, "error succes");
241     napi_throw_error(env, "500", "Common error");
242     napi_value _value;
243     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
244     return _value;
245 }
246 
throwTypeError(napi_env env,napi_callback_info info)247 static napi_value throwTypeError(napi_env env, napi_callback_info info)
248 {
249     napi_value code = nullptr;
250     napi_value message = nullptr;
251     napi_create_string_latin1(env, "500", NAPI_AUTO_LENGTH, &code);
252     napi_create_string_latin1(env, "type error 500", NAPI_AUTO_LENGTH, &message);
253     napi_value error = nullptr;
254     napi_create_type_error(env, code, message, &error);
255     NAPI_ASSERT(env, error != nullptr, "error succes");
256     bool isError = false;
257     napi_is_error(env, error, &isError);
258     NAPI_ASSERT(env, isError, "error succes");
259     napi_throw_type_error(env, nullptr, "type error1");
260 
261     napi_value _value;
262     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
263     return _value;
264 }
265 
throwRangeError(napi_env env,napi_callback_info info)266 static napi_value throwRangeError(napi_env env, napi_callback_info info)
267 {
268     napi_value code = nullptr;
269     napi_value message = nullptr;
270     napi_create_string_latin1(env, "500", NAPI_AUTO_LENGTH, &code);
271     napi_create_string_latin1(env, "range error 500", NAPI_AUTO_LENGTH, &message);
272     napi_value error = nullptr;
273     napi_create_range_error(env, code, message, &error);
274     NAPI_ASSERT(env, error != nullptr, "error succes");
275     bool isError = false;
276     napi_is_error(env, error, &isError);
277     NAPI_ASSERT(env, isError, "error succes");
278     napi_throw_range_error(env, nullptr, "range error");
279 
280     napi_value _value;
281     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
282     return _value;
283 }
284 
isError(napi_env env,napi_callback_info info)285 static napi_value isError(napi_env env, napi_callback_info info)
286 {
287     size_t argc = 1;
288     napi_value args[1];
289     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
290 
291     bool r;
292     NAPI_CALL(env, napi_is_error(env, args[0], &r));
293 
294     napi_value result;
295     NAPI_CALL(env, napi_get_boolean(env, r, &result));
296 
297     return result;
298 }
299 
createError(napi_env env,napi_callback_info info)300 static napi_value createError(napi_env env, napi_callback_info info)
301 {
302     napi_value code = nullptr;
303     napi_value message = nullptr;
304 
305     napi_create_string_latin1(env, "500", NAPI_AUTO_LENGTH, &code);
306     napi_create_string_latin1(env, "common error", NAPI_AUTO_LENGTH, &message);
307 
308     napi_value error = nullptr;
309     napi_create_error(env, code, message, &error);
310     NAPI_ASSERT(env, error != nullptr, "error succes");
311 
312     napi_value _value;
313     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
314     return _value;
315 }
316 
createTypeError(napi_env env,napi_callback_info info)317 static napi_value createTypeError(napi_env env, napi_callback_info info)
318 {
319     napi_value code = nullptr;
320     napi_value message = nullptr;
321     napi_create_string_latin1(env, "500", NAPI_AUTO_LENGTH, &code);
322     napi_create_string_latin1(env, "type error", NAPI_AUTO_LENGTH, &message);
323     napi_value error = nullptr;
324     napi_create_type_error(env, code, message, &error);
325     NAPI_ASSERT(env, error != nullptr, "error succes");
326 
327     napi_value _value;
328     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
329     return _value;
330 }
331 
createRangeError(napi_env env,napi_callback_info info)332 static napi_value createRangeError(napi_env env, napi_callback_info info)
333 {
334     napi_value code = nullptr;
335     napi_value message = nullptr;
336     napi_create_string_latin1(env, "500", NAPI_AUTO_LENGTH, &code);
337     napi_create_string_latin1(env, "range error", NAPI_AUTO_LENGTH, &message);
338     napi_value error = nullptr;
339     napi_create_range_error(env, code, message, &error);
340 
341     NAPI_ASSERT(env, error != nullptr, "error succes");
342 
343     napi_value _value;
344     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
345     return _value;
346 }
347 
getAndClearLastException(napi_env env,napi_callback_info info)348 static napi_value getAndClearLastException(napi_env env, napi_callback_info info)
349 {
350     napi_value code = nullptr;
351     napi_value message = nullptr;
352     napi_create_string_latin1(env, "600", NAPI_AUTO_LENGTH, &code);
353     napi_create_string_latin1(env, "tag range error", NAPI_AUTO_LENGTH, &message);
354 
355     napi_value error = nullptr;
356     napi_create_range_error(env, code, message, &error);
357     NAPI_ASSERT(env, error != nullptr, "tag error succes");
358 
359     bool isError = false;
360     napi_is_error(env, error, &isError);
361     NAPI_ASSERT(env, isError, "tag isError 1");
362 
363     napi_value ex;
364     napi_get_and_clear_last_exception(env, &ex);
365 
366     bool exceptionWasPending = true;
367     napi_is_exception_pending(env, &exceptionWasPending);
368     NAPI_ASSERT(env, !exceptionWasPending, "tag !exceptionWasPending 1");
369 
370     napi_throw(env, error);
371 
372     napi_is_exception_pending(env, &exceptionWasPending);
373     NAPI_ASSERT(env, exceptionWasPending, "tag exceptionWasPending 2");
374 
375     napi_value ex1;
376     napi_get_and_clear_last_exception(env, &ex1);
377     isError = false;
378     napi_is_error(env, ex1, &isError);
379     NAPI_ASSERT(env, isError, "tag isError 2");
380 
381     napi_is_exception_pending(env, &exceptionWasPending);
382     NAPI_ASSERT(env, !exceptionWasPending, "tag !exceptionWasPending 3");
383 
384     return ex1;
385 }
386 
isExceptionPending(napi_env env,napi_callback_info info)387 static napi_value isExceptionPending(napi_env env, napi_callback_info info)
388 {
389     bool exceptionWasPending = true;
390     napi_is_exception_pending(env, &exceptionWasPending);
391 
392     NAPI_ASSERT(env, !exceptionWasPending, "isExceptionPending failed");
393 
394     napi_value _value;
395     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
396     return _value;
397 }
398 
openAndCloseHandleScope(napi_env env,napi_callback_info info)399 static napi_value openAndCloseHandleScope(napi_env env, napi_callback_info info)
400 {
401     napi_handle_scope scope;
402     napi_status openStatus = napi_open_handle_scope(env, &scope);
403     napi_value output = nullptr;
404     napi_status createStatus = napi_create_object(env, &output);
405     napi_status closeStatus = napi_close_handle_scope(env, scope);
406     if (openStatus == napi_ok && createStatus == napi_ok && closeStatus == napi_ok) {
407         napi_value undefined;
408         napi_get_undefined(env, &undefined);
409         return undefined;
410     }
411     return output;
412 }
413 
openAndCloseEscapableHandleScope(napi_env env,napi_callback_info info)414 static napi_value openAndCloseEscapableHandleScope(napi_env env, napi_callback_info info)
415 {
416     napi_escapable_handle_scope scope;
417     NAPI_CALL(env, napi_open_escapable_handle_scope(env, &scope));
418     napi_value output = nullptr;
419     napi_value escapee = nullptr;
420     NAPI_CALL(env, napi_create_object(env, &output));
421     NAPI_CALL(env, napi_escape_handle(env, scope, output, &escapee));
422     NAPI_CALL(env, napi_close_escapable_handle_scope(env, scope));
423     return escapee;
424 }
425 
createReference(napi_env env,napi_callback_info info)426 static napi_value createReference(napi_env env, napi_callback_info info)
427 {
428     napi_value result = nullptr;
429 
430     napi_create_int32(env, TAG_NUMBER, &result);
431     NAPI_CALL(env, napi_create_reference(env, result, 1, &test_reference));
432     napi_value value;
433     NAPI_CALL(env, napi_create_int32(env, 0, &value));
434     return value;
435 }
436 
getAndDeleteReference(napi_env env,napi_callback_info info)437 static napi_value getAndDeleteReference(napi_env env, napi_callback_info info)
438 {
439     NAPI_ASSERT(env, test_reference != nullptr,
440             "A reference must have been created.");
441 
442     napi_value refValue = nullptr;
443     napi_get_reference_value(env, test_reference, &refValue);
444 
445     int32_t value = 0;
446     napi_get_value_int32(env, refValue, &value);
447     NAPI_ASSERT(env, value == TAG_NUMBER,
448             "refValue expect equal to 666.");
449 
450     NAPI_CALL(env, napi_delete_reference(env, test_reference));
451     test_reference = nullptr;
452     return nullptr;
453 }
454 
referenceRefAndUnref(napi_env env,napi_callback_info info)455 static napi_value referenceRefAndUnref(napi_env env, napi_callback_info info)
456 {
457     napi_value result = nullptr;
458     napi_ref resultRef = nullptr;
459     uint32_t resultRefCount = 0;
460 
461     napi_create_object(env, &result);
462     napi_create_reference(env, result, 1, &resultRef);
463 
464     napi_reference_ref(env, resultRef, &resultRefCount);
465     NAPI_ASSERT(env, resultRefCount == 2,
466             "resultRefCount expect equal to 2");
467     napi_reference_unref(env, resultRef, &resultRefCount);
468     NAPI_ASSERT(env, resultRefCount == 1,
469             "resultRefCount expect equal to 1.");
470 
471     napi_value refValue = nullptr;
472     napi_get_reference_value(env, resultRef, &refValue);
473     NAPI_ASSERT(env, refValue != nullptr,
474                 "A reference must have been created.");
475     napi_delete_reference(env, resultRef);
476 
477     napi_value _value;
478     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
479 
480     return _value;
481 }
482 
createArrayAndGetLength(napi_env env,napi_callback_info info)483 static napi_value createArrayAndGetLength(napi_env env, napi_callback_info info)
484 {
485     size_t argc = 1;
486     napi_value args[1];
487     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
488 
489     NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments");
490 
491     napi_valuetype valuetype0;
492     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
493 
494     NAPI_ASSERT(env, valuetype0 == napi_object,
495             "Wrong type of arguments. Expects an array as first argument.");
496 
497     napi_value ret;
498     NAPI_CALL(env, napi_create_array(env, &ret));
499 
500     uint32_t i, length;
501     NAPI_CALL(env, napi_get_array_length(env, args[0], &length));
502 
503     for (i = 0; i < length; i++) {
504         napi_value e;
505         NAPI_CALL(env, napi_get_element(env, args[0], i, &e));
506         NAPI_CALL(env, napi_set_element(env, ret, i, e));
507     }
508     return ret;
509 }
510 
getArrayWithLength(napi_env env,napi_callback_info info)511 static napi_value getArrayWithLength(napi_env env, napi_callback_info info)
512 {
513     size_t argc = 1;
514     napi_value args[1];
515     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
516 
517     NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments");
518 
519     napi_valuetype valuetype0;
520     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
521 
522     NAPI_ASSERT(env, valuetype0 == napi_object,
523             "Wrong type of arguments. Expects an integer the first argument.");
524 
525     uint32_t array_length = 0;
526     NAPI_CALL(env, napi_get_array_length(env, args[0], &array_length));
527     NAPI_ASSERT(env, array_length == 2, "array_length expect equal to 2");
528 
529     napi_value ret;
530     NAPI_CALL(env, napi_create_array_with_length(env, array_length, &ret));
531     for (uint32_t i = 0; i < array_length * 2; i++) {
532         napi_value e;
533         NAPI_CALL(env, napi_create_uint32(env, i, &e));
534         NAPI_CALL(env, napi_set_element(env, ret, i, e));
535     }
536 
537     return ret;
538 }
539 
createExternal(napi_env env,napi_callback_info info)540 static napi_value createExternal(napi_env env, napi_callback_info info)
541 {
542     const char testStr[] = "test";
543     napi_value external = nullptr;
544     napi_create_external(
545         env, (void*)testStr,
546         [](napi_env env, void* data, void* hint) {},
547         (void*)testStr, &external);
548     void* tempExternal = nullptr;
549     NAPI_CALL(env, napi_get_value_external(env, external, &tempExternal));
550     NAPI_ASSERT(env, tempExternal != nullptr, "tempExternal expect not equal to nullptr");
551     NAPI_ASSERT(env, tempExternal == testStr, "tempExternal expect equal to testStr");
552 
553     napi_value _value;
554     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
555 
556     return _value;
557 }
558 
createExternalArraybuffer(napi_env env,napi_callback_info info)559 static napi_value createExternalArraybuffer(napi_env env, napi_callback_info info)
560 {
561     int* testInt = (int*)malloc(sizeof(int));
562     *testInt = TAG_NUMBER;
563     napi_value external = nullptr;
564     size_t arrayBufferSize = 1024;
565 
566     napi_create_external_arraybuffer(
567         env, (void*)testInt, arrayBufferSize,
568         [](napi_env env, void* data, void* hint) {
569             int* temp = static_cast<int*>(data);
570             free(temp);
571             temp = nullptr;
572         },
573         (void*)testInt, &external);
574 
575     return external;
576 }
577 
createObject(napi_env env,napi_callback_info info)578 static napi_value createObject(napi_env env, napi_callback_info info)
579 {
580     napi_value result = nullptr;
581     NAPI_CALL(env, napi_create_object(env, &result));
582     NAPI_ASSERT(env, result != nullptr, "napi_create_object");
583     return result;
584 }
585 
createSymbol(napi_env env,napi_callback_info info)586 static napi_value createSymbol(napi_env env, napi_callback_info info)
587 {
588     size_t argc = 1;
589     napi_value args[1];
590     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
591 
592     napi_value description = nullptr;
593     if (argc >= 1) {
594         napi_valuetype valuetype;
595         NAPI_CALL(env, napi_typeof(env, args[0], &valuetype));
596 
597         NAPI_ASSERT(env, valuetype == napi_string,
598                 "Wrong type of arguments. Expects a string.");
599 
600         description = args[0];
601     }
602 
603     napi_value symbol;
604     NAPI_CALL(env, napi_create_symbol(env, description, &symbol));
605 
606     napi_valuetype valuetypeSymbol;
607     NAPI_CALL(env, napi_typeof(env, symbol, &valuetypeSymbol));
608 
609     NAPI_ASSERT(env, valuetypeSymbol == napi_symbol,
610                 "Wrong type of arguments. Expects a string.");
611     napi_value _value;
612     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
613 
614     return _value;
615 }
616 
createTypeArray(napi_env env,napi_callback_info info)617 static napi_value createTypeArray(napi_env env, napi_callback_info info)
618 {
619     napi_value arrayBuffer = nullptr;
620     void* arrayBufferPtr = nullptr;
621     size_t arrayBufferSize = 16;
622     size_t typedArrayLength = 4;
623     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
624 
625     void* tmpArrayBufferPtr = nullptr;
626     size_t arrayBufferLength = 0;
627     napi_get_arraybuffer_info(env, arrayBuffer, &tmpArrayBufferPtr, &arrayBufferLength);
628 
629     NAPI_ASSERT(env, arrayBufferPtr == tmpArrayBufferPtr, "napi_get_arraybuffer_info success");
630     NAPI_ASSERT(env, arrayBufferSize ==  arrayBufferLength, "napi_create_arraybuffer success");
631 
632     napi_value _value;
633     napi_create_typedarray(env, napi_int32_array, typedArrayLength, arrayBuffer, 0, &_value);
634 
635     return _value;
636 }
637 
createDataView(napi_env env,napi_callback_info info)638 static napi_value createDataView(napi_env env, napi_callback_info info)
639 {
640     napi_value arrayBuffer = nullptr;
641     void* arrayBufferPtr = nullptr;
642     size_t arrayBufferSize = 16;
643     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
644     NAPI_ASSERT(env, arrayBufferPtr != nullptr, "napi_create_arraybuffer success");
645     bool isArrayBuffer = false;
646     napi_is_arraybuffer(env, arrayBuffer, &isArrayBuffer);
647     NAPI_ASSERT(env, isArrayBuffer, " napi_is_arraybuffer success");
648 
649     napi_value result = nullptr;
650     NAPI_CALL(env, napi_create_dataview(env, arrayBufferSize, arrayBuffer, 0, &result));
651 
652     bool isDataView = false;
653     napi_is_dataview(env, result, &isDataView);
654     NAPI_ASSERT(env, isDataView, " napi_is_dataview success");
655 
656     return result;
657 }
658 
createAndGetInt32(napi_env env,napi_callback_info info)659 static napi_value createAndGetInt32(napi_env env, napi_callback_info info)
660 {
661     size_t argc = 1;
662     napi_value args[1];
663     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
664 
665     int32_t value;
666     NAPI_CALL(env, napi_get_value_int32(env, args[0], &value));
667 
668     napi_value output;
669     NAPI_CALL(env, napi_create_int32(env, value, &output));
670 
671     return output;
672 }
673 
createAndGetUInt32(napi_env env,napi_callback_info info)674 static napi_value createAndGetUInt32(napi_env env, napi_callback_info info)
675 {
676     size_t argc = 1;
677     napi_value args[1];
678     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
679 
680     uint32_t value;
681     NAPI_CALL(env, napi_get_value_uint32(env, args[0], &value));
682 
683     napi_value output;
684     NAPI_CALL(env, napi_create_uint32(env, value, &output));
685 
686     return output;
687 }
688 
createAndGetInt64(napi_env env,napi_callback_info info)689 static napi_value createAndGetInt64(napi_env env, napi_callback_info info)
690 {
691     size_t argc = 1;
692     napi_value args[1];
693     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
694 
695     int64_t value;
696     NAPI_CALL(env, napi_get_value_int64(env, args[0], &value));
697 
698     napi_value output;
699     NAPI_CALL(env, napi_create_int64(env, (double)value, &output));
700 
701     return output;
702 }
703 
createDouble(napi_env env,napi_callback_info info)704 static napi_value createDouble(napi_env env, napi_callback_info info)
705 {
706     size_t argc = 1;
707     napi_value args[1];
708     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
709 
710     double value;
711     NAPI_CALL(env, napi_get_value_double(env, args[0], &value));
712 
713     napi_value output;
714     NAPI_CALL(env, napi_create_double(env, value, &output));
715 
716     return output;
717 }
718 
createAndGetStringLatin1(napi_env env,napi_callback_info info)719 static napi_value createAndGetStringLatin1(napi_env env, napi_callback_info info)
720 {
721     size_t argc = 1;
722     napi_value args[1];
723     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
724 
725     NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments");
726 
727     napi_valuetype valuetype;
728     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype));
729 
730     NAPI_ASSERT(env, valuetype == napi_string,
731             "Wrong type of argment. Expects a string.");
732 
733     char buffer[128];
734     size_t bufferSize = 128;
735     size_t copied = 0;
736 
737     NAPI_CALL(env,
738         napi_get_value_string_latin1(env, args[0], buffer, bufferSize, &copied));
739     NAPI_ASSERT(env, copied == 3, "napi_get_value_string_latin1 fail");
740 
741     napi_value output;
742     NAPI_CALL(env, napi_create_string_latin1(env, buffer, copied, &output));
743 
744     return output;
745 }
746 
createAndGetStringUtf8(napi_env env,napi_callback_info info)747 static napi_value createAndGetStringUtf8(napi_env env, napi_callback_info info)
748 {
749     size_t argc = 1;
750     napi_value args[1];
751     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
752 
753     NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments");
754 
755     napi_valuetype valuetype;
756     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype));
757 
758     NAPI_ASSERT(env, valuetype == napi_string,
759             "Wrong type of argment. Expects a string.");
760 
761     char buffer[128];
762     size_t bufferSize = 128;
763     size_t copied = 0;
764 
765     NAPI_CALL(env,
766         napi_get_value_string_utf8(env, args[0], buffer, bufferSize, &copied));
767     NAPI_ASSERT(env, copied == 2, "napi_get_value_string_utf8 fail");
768 
769     napi_value output;
770     NAPI_CALL(env, napi_create_string_utf8(env, buffer, copied, &output));
771 
772     return output;
773 }
774 
StringUtf8OfLengthLeZero(napi_env env,napi_callback_info info)775 static napi_value StringUtf8OfLengthLeZero(napi_env env, napi_callback_info info)
776 {
777     size_t argc = 1;
778     napi_value args[1];
779     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
780 
781     NAPI_ASSERT(env, argc == 1, "Expects one argument.");
782 
783     napi_valuetype valueType;
784     NAPI_CALL(env, napi_typeof(env, args[0], &valueType));
785 
786     NAPI_ASSERT(env, valueType == napi_string,
787             "Wrong type of argment. Expects a string.");
788 
789     char buffer[128];
790     size_t bufferSize = 128;
791     size_t copied = 0;
792 
793     NAPI_CALL(env,
794         napi_get_value_string_utf8(env, args[0], buffer, bufferSize, &copied));
795 
796     napi_value output;
797     NAPI_CALL(env, napi_create_string_utf8(env, buffer, -1, &output));
798 
799     return output;
800 }
801 
CreateAndGetStringUtf16(napi_env env,napi_callback_info info)802 static napi_value CreateAndGetStringUtf16(napi_env env, napi_callback_info info)
803 {
804     size_t argc = 1;
805     napi_value args[1];
806     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
807 
808     NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments.");
809 
810     napi_valuetype valuetype;
811     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype));
812 
813     NAPI_ASSERT(env, valuetype == napi_string, "Expect a string.");
814 
815     char16_t buffer[128]; // 128: char16_t type of element size
816     size_t bufferSize = 128; // 128: char16_t type of element size
817     size_t copied = 0;
818 
819     NAPI_CALL(env, napi_get_value_string_utf16(env, args[0], buffer, bufferSize, &copied));
820 
821     napi_value result;
822     NAPI_CALL(env, napi_create_string_utf16(env, buffer, copied, &result));
823 
824     return result;
825 }
826 
StringUtf16OfCase(napi_env env,napi_callback_info info)827 static napi_value StringUtf16OfCase(napi_env env, napi_callback_info info)
828 {
829     size_t argc = 1;
830     napi_value args[1];
831     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
832 
833     NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments.");
834 
835     napi_valuetype valuetype;
836     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype));
837 
838     NAPI_ASSERT(env, valuetype == napi_string, "Expects a string.");
839 
840     char16_t buffer[5]; // 5: char16_t type of element size
841     size_t bufferSize = 5; // 5: char16_t type of element size
842     size_t copied  = 0;
843 
844     NAPI_CALL(env,
845         napi_get_value_string_utf16(env, args[0], buffer, bufferSize, &copied));
846 
847     napi_value result;
848     NAPI_CALL(env, napi_create_string_utf16(env, buffer, copied, &result));
849 
850     return result;
851 }
852 
StringUtf16OfLengthLeZero(napi_env env,napi_callback_info info)853 static napi_value StringUtf16OfLengthLeZero(napi_env env, napi_callback_info info)
854 {
855     size_t argc = 1;
856     napi_value args[1];
857     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
858 
859     NAPI_ASSERT(env, argc == 1, "Expects one argument.");
860 
861     napi_valuetype valueType;
862     NAPI_CALL(env, napi_typeof(env, args[0], &valueType));
863 
864     NAPI_ASSERT(env, valueType == napi_string, "Expects a string.");
865 
866     char16_t buffer[128];
867     size_t bufferSize = 128;
868     size_t copied = 0;
869 
870     NAPI_CALL(env,
871         napi_get_value_string_utf16(env, args[0], buffer, bufferSize, &copied));
872 
873     napi_value result;
874     NAPI_CALL(env, napi_create_string_utf16(env, buffer, -1, &result));
875 
876     return result;
877 }
878 
StringUtf16OfLengthEqOne(napi_env env,napi_callback_info info)879 static napi_value StringUtf16OfLengthEqOne(napi_env env, napi_callback_info info)
880 {
881     size_t argc = 1;
882     napi_value args[1];
883     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
884 
885     NAPI_ASSERT(env, argc == 1, "Expects one argument.");
886 
887     char16_t buffer[128];
888     size_t bufferSize = 1;
889     size_t copied = 1;
890 
891     NAPI_CALL(env,
892         napi_get_value_string_utf16(env, args[0], buffer, bufferSize, &copied));
893 
894     napi_value value;
895     NAPI_CALL(env, napi_create_int32(env, copied, &value));
896     return value;
897 }
898 
899 static const napi_type_tag typeTags[NUMBER_FIVE] = {
900     {0xdaf987b3cc62481a, 0xb745b0497f299531},
901     {0xbb7936c374084d9b, 0xa9548d0762eeedb9},
902     {0xa5ed9ce2e4c00c38, 0xa9548d0762eeedb1},
903     {0, 0},
904     {0xa5ed9ce2e4c00c38, 0xdaf987b3cc62481a},
905 };
906 
TypeTaggedInstance(napi_env env,napi_callback_info info)907 static napi_value TypeTaggedInstance(napi_env env, napi_callback_info info)
908 {
909     size_t argc = 1;
910     uint32_t typeIndex = 0;
911     napi_value instance = nullptr;
912     napi_value whichType = nullptr;
913     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &whichType, nullptr, nullptr));
914     NAPI_CALL(env, napi_get_value_uint32(env, whichType, &typeIndex));
915     NAPI_ASSERT(env, typeIndex <= NUMBER_FIVE, "typeIndex out of range");
916     NAPI_CALL(env, napi_create_object(env, &instance));
917 
918     NAPI_CALL(env, napi_type_tag_object(env, instance, &typeTags[typeIndex]));
919     return instance;
920 }
921 
CheckTypeTag(napi_env env,napi_callback_info info)922 static napi_value CheckTypeTag(napi_env env, napi_callback_info info)
923 {
924     size_t argc = 2;
925     bool result;
926     napi_value argv[2];
927     napi_value jsResult = nullptr;
928     uint32_t typeIndex;
929 
930     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr));
931 
932     NAPI_CALL(env, napi_get_value_uint32(env, argv[0], &typeIndex));
933 
934     NAPI_ASSERT(env, typeIndex <= NUMBER_FIVE, "typeIndex out of range");
935 
936     NAPI_CALL(env, napi_check_object_type_tag(env, argv[1], &typeTags[typeIndex], &result));
937     NAPI_CALL(env, napi_get_boolean(env, result, &jsResult));
938 
939     return jsResult;
940 }
941 
getPrototype(napi_env env,napi_callback_info info)942 static napi_value getPrototype(napi_env env, napi_callback_info info)
943 {
944     napi_value testWrapClass = nullptr;
945     napi_define_class(env, "TestWrapClass", NAPI_AUTO_LENGTH, [](napi_env env, napi_callback_info info) -> napi_value {
946                   napi_value thisVar = nullptr;
947                   napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
948                   return thisVar;
949               }, nullptr, 0, nullptr, &testWrapClass);
950 
951     napi_value customClassPrototype = nullptr;
952     NAPI_CALL(env, napi_get_prototype(env, testWrapClass, &customClassPrototype));
953     NAPI_ASSERT(env, customClassPrototype != nullptr, "napi_get_prototype fail");
954 
955     return customClassPrototype;
956 }
957 
getPrototype2(napi_env env,napi_callback_info info)958 static napi_value getPrototype2(napi_env env, napi_callback_info info)
959 {
960     size_t argc = 1;
961     napi_value args[1];
962     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
963 
964     NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments");
965 
966     napi_valuetype valuetype;
967     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype));
968 
969     NAPI_ASSERT(env, valuetype == napi_function,
970             "Wrong type of argment. Expects a napi_function.");
971 
972     napi_value customClassPrototype = nullptr;
973     NAPI_CALL(env, napi_get_prototype(env, args[0], &customClassPrototype));
974     NAPI_ASSERT(env, customClassPrototype != nullptr, "napi_get_prototype fail");
975 
976     return customClassPrototype;
977 }
978 
getTypedArrayInfo(napi_env env,napi_callback_info info)979 static napi_value getTypedArrayInfo(napi_env env, napi_callback_info info)
980 {
981     napi_value arrayBuffer = nullptr;
982     void* arrayBufferPtr = nullptr;
983     size_t arrayBufferSize = 16;
984     size_t typedArrayLength = 4;
985     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
986     NAPI_ASSERT(env, arrayBufferPtr != nullptr, "getTypedArrayInfo napi_create_arraybuffer fail");
987     bool isArrayBuffer = false;
988     napi_is_arraybuffer(env, arrayBuffer, &isArrayBuffer);
989     NAPI_ASSERT(env, isArrayBuffer, "getTypedArrayInfo napi_is_arraybuffer fail");
990     napi_value result;
991     napi_create_typedarray(env, napi_int32_array, typedArrayLength, arrayBuffer, 0, &result);
992 
993     bool isTypedArray = false;
994     napi_is_typedarray(env, result, &isTypedArray);
995     NAPI_ASSERT(env, isTypedArray, "getTypedArrayInfo napi_is_dataview fail");
996 
997     napi_typedarray_type type;
998     size_t length = 0;
999     void* data = nullptr;
1000     napi_value retArrayBuffer;
1001     size_t byteOffset = -1;
1002     NAPI_CALL(env, napi_get_typedarray_info(env, result, &type, &length, &data, &retArrayBuffer, &byteOffset));
1003     NAPI_ASSERT(env, type == napi_int32_array, "napi_get_typedarray_info success 0");
1004     NAPI_ASSERT(env, length == arrayBufferSize, "napi_get_typedarray_info success 1");
1005     NAPI_ASSERT(env, data == arrayBufferPtr, "napi_get_dataview_info success 2");
1006 
1007     bool retIsArrayBuffer = false;
1008     NAPI_CALL(env, napi_is_arraybuffer(env, retArrayBuffer, &retIsArrayBuffer));
1009     void* tmpArrayBufferPtr = nullptr;
1010     size_t arrayBufferLength = 0;
1011     NAPI_CALL(env, napi_get_arraybuffer_info(env, retArrayBuffer, &tmpArrayBufferPtr, &arrayBufferLength));
1012 
1013     NAPI_ASSERT(env, byteOffset == 0, "napi_get_dataview_info success 3");
1014 
1015     napi_value _value;
1016     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
1017     return _value;
1018 }
1019 
getDataViewInfo(napi_env env,napi_callback_info info)1020 static napi_value getDataViewInfo(napi_env env, napi_callback_info info)
1021 {
1022     napi_value arrayBuffer = nullptr;
1023     void* arrayBufferPtr = nullptr;
1024     size_t arrayBufferSize = 1024;
1025     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
1026     NAPI_ASSERT(env, arrayBufferPtr != nullptr, "getDataViewInfo napi_create_arraybuffer fail");
1027     bool isArrayBuffer = false;
1028     napi_is_arraybuffer(env, arrayBuffer, &isArrayBuffer);
1029     NAPI_ASSERT(env, isArrayBuffer, "getDataViewInfo napi_is_arraybuffer fail");
1030     napi_value result = nullptr;
1031     napi_create_dataview(env, arrayBufferSize, arrayBuffer, 0, &result);
1032 
1033     bool isDataView = false;
1034     napi_is_dataview(env, result, &isDataView);
1035     NAPI_ASSERT(env, isDataView, "getDataViewInfo napi_is_dataview fail");
1036 
1037     napi_value retArrayBuffer = nullptr;
1038     void* data = nullptr;
1039     size_t byteLength = 0;
1040     size_t byteOffset = -1;
1041     napi_get_dataview_info(env, result, &byteLength, &data, &retArrayBuffer, &byteOffset);
1042 
1043     bool retIsArrayBuffer = false;
1044     napi_is_arraybuffer(env, retArrayBuffer, &retIsArrayBuffer);
1045     void* tmpArrayBufferPtr = nullptr;
1046     size_t arrayBufferLength = 0;
1047     napi_get_arraybuffer_info(env, retArrayBuffer, &tmpArrayBufferPtr, &arrayBufferLength);
1048 
1049     NAPI_ASSERT(env, arrayBufferLength == arrayBufferSize, "napi_get_dataview_info success 0");
1050     NAPI_ASSERT(env, arrayBufferPtr == data, "napi_get_dataview_info success 1");
1051     NAPI_ASSERT(env, byteOffset == 0, "napi_get_dataview_info success 2");
1052 
1053     napi_value _value;
1054     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
1055     return _value;
1056 }
1057 
getValueBool(napi_env env,napi_callback_info info)1058 static napi_value getValueBool(napi_env env, napi_callback_info info)
1059 {
1060     size_t argc = 1;
1061     napi_value args[1];
1062     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
1063 
1064     bool value;
1065     NAPI_CALL(env, napi_get_value_bool(env, args[0], &value));
1066 
1067     napi_value output;
1068     NAPI_CALL(env, napi_get_boolean(env, value, &output));
1069 
1070     return output;
1071 }
1072 
getValueDouble(napi_env env,napi_callback_info info)1073 static napi_value getValueDouble(napi_env env, napi_callback_info info)
1074 {
1075     size_t argc = 1;
1076     napi_value args[1];
1077     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
1078 
1079     double value;
1080     NAPI_CALL(env, napi_get_value_double(env, args[0], &value));
1081 
1082     napi_value output;
1083     NAPI_CALL(env, napi_create_double(env, value, &output));
1084 
1085     return output;
1086 }
1087 
getValueExternal(napi_env env,napi_callback_info info)1088 static napi_value getValueExternal(napi_env env, napi_callback_info info)
1089 {
1090     const char testStr[] = "test";
1091     napi_value external = nullptr;
1092     napi_create_external(
1093         env, (void*)testStr,
1094         [](napi_env env, void* data, void* hint) {},
1095         (void*)testStr, &external);
1096     void* tempExternal = nullptr;
1097     napi_get_value_external(env, external, &tempExternal);
1098 
1099     NAPI_ASSERT(env, tempExternal == testStr, "napi_get_value_external true");
1100 
1101     napi_value _value;
1102     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
1103 
1104     return _value;
1105 }
1106 
getNull(napi_env env,napi_callback_info info)1107 static napi_value getNull(napi_env env, napi_callback_info info)
1108 {
1109     napi_value result = nullptr;
1110     NAPI_CALL(env, napi_get_null(env, &result));
1111     NAPI_ASSERT(env, result != nullptr, "napi_get_null success");
1112     napi_valuetype type;
1113     NAPI_CALL(env, napi_typeof(env, result, &type));
1114     NAPI_ASSERT(env, type == napi_null, "napi_get_null fail");
1115 
1116     napi_value _value;
1117     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
1118 
1119     return _value;
1120 }
1121 
getUndefined(napi_env env,napi_callback_info info)1122 static napi_value getUndefined(napi_env env, napi_callback_info info)
1123 {
1124     napi_value result = nullptr;
1125     NAPI_CALL(env, napi_get_undefined(env, &result));
1126     NAPI_ASSERT(env, result != nullptr, "napi_get_undefined success");
1127     napi_valuetype type;
1128     NAPI_CALL(env, napi_typeof(env, result, &type));
1129     NAPI_ASSERT(env, type == napi_undefined, "napi_get_undefined fail");
1130 
1131     napi_value _value;
1132     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
1133 
1134     return _value;
1135 }
1136 
coerceToBool(napi_env env,napi_callback_info info)1137 static napi_value coerceToBool(napi_env env, napi_callback_info info)
1138 {
1139     size_t argc = 1;
1140     napi_value args[1];
1141     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
1142 
1143     napi_value output;
1144     NAPI_CALL(env, napi_coerce_to_bool(env, args[0], &output));
1145 
1146     return output;
1147 }
1148 
coerceToNumber(napi_env env,napi_callback_info info)1149 static napi_value coerceToNumber(napi_env env, napi_callback_info info)
1150 {
1151     size_t argc = 1;
1152     napi_value args[1];
1153     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
1154 
1155     napi_value output;
1156     NAPI_CALL(env, napi_coerce_to_number(env, args[0], &output));
1157 
1158     return output;
1159 }
1160 
coerceToObject(napi_env env,napi_callback_info info)1161 static napi_value coerceToObject(napi_env env, napi_callback_info info)
1162 {
1163     size_t argc = 1;
1164     napi_value args[1];
1165     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
1166 
1167     napi_value output;
1168     NAPI_CALL(env, napi_coerce_to_object(env, args[0], &output));
1169 
1170     return output;
1171 }
1172 
coerceToString(napi_env env,napi_callback_info info)1173 static napi_value coerceToString(napi_env env, napi_callback_info info)
1174 {
1175     size_t argc = 1;
1176     napi_value args[1];
1177     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
1178 
1179     napi_value output;
1180     NAPI_CALL(env, napi_coerce_to_string(env, args[0], &output));
1181 
1182     return output;
1183 }
1184 
instanceOf(napi_env env,napi_callback_info info)1185 static napi_value instanceOf(napi_env env, napi_callback_info info)
1186 {
1187     napi_value customClass = nullptr;
1188 
1189     napi_define_class(env, "TestWrapClass", NAPI_AUTO_LENGTH,
1190         [](napi_env env, napi_callback_info info) -> napi_value {
1191             napi_value thisVar = nullptr;
1192             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
1193             return thisVar;
1194         }, nullptr, 0, nullptr, &customClass);
1195 
1196     napi_value customClassPrototype = nullptr;
1197     napi_get_prototype(env, customClass, &customClassPrototype);
1198 
1199     napi_value customInstance = nullptr;
1200     NAPI_CALL(env, napi_new_instance(env, customClass, 0, nullptr, &customInstance));
1201 
1202     bool isInstanceOf = false;
1203     NAPI_CALL(env, napi_instanceof(env, customInstance, customClass, &isInstanceOf));
1204 
1205     NAPI_ASSERT(env, isInstanceOf, "isInstanceOf success");
1206 
1207     napi_value result;
1208     NAPI_CALL(env, napi_get_boolean(env, isInstanceOf, &result));
1209 
1210     return result;
1211 }
1212 
NapiIsSendable(napi_env env,napi_callback_info info)1213 static napi_value NapiIsSendable(napi_env env, napi_callback_info info)
1214 {
1215     size_t argc = 1;
1216     napi_value args[1] = {nullptr};
1217     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1218     bool isSendable = false;
1219     napi_is_sendable(env, args[0], &isSendable);
1220     napi_value result;
1221     napi_get_boolean(env, isSendable, &result);
1222     return result;
1223 }
1224 
NapiDefineSendableClass(napi_env env,napi_callback_info info)1225 static napi_value NapiDefineSendableClass(napi_env env, napi_callback_info info)
1226 {
1227     napi_value str;
1228     napi_create_string_utf8(env, "static str", NAPI_AUTO_LENGTH, &str);
1229     napi_property_descriptor props[] = {
1230         {"staticStr", nullptr, nullptr, nullptr, nullptr, str,
1231          static_cast<napi_property_attributes>(napi_static | napi_writable), nullptr},
1232         {"staticFunc", nullptr,
1233          [](napi_env env, napi_callback_info info) -> napi_value {
1234              napi_value val;
1235              napi_create_string_utf8(env, "static func", NAPI_AUTO_LENGTH, &val);
1236              return val;
1237          },
1238          nullptr, nullptr, nullptr, napi_static, nullptr},
1239         {"str", nullptr, nullptr, nullptr, nullptr, str, static_cast<napi_property_attributes>(1 << 9 | napi_writable),
1240          nullptr},
1241         {"func", nullptr, nullptr, nullptr, nullptr, nullptr,
1242          static_cast<napi_property_attributes>(1 << 11 | napi_writable), nullptr},
1243     };
1244 
1245     napi_value sendableClass = nullptr;
1246     napi_define_sendable_class(
1247         env, "SendableClass", NAPI_AUTO_LENGTH,
1248         [](napi_env env, napi_callback_info info) -> napi_value {
1249             napi_value thisVar = nullptr;
1250             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
1251             napi_value str;
1252             napi_create_string_utf8(env, "instance str", NAPI_AUTO_LENGTH, &str);
1253             napi_property_descriptor props[] = {
1254                 {"str", nullptr, nullptr, nullptr, nullptr, str, napi_default, nullptr},
1255                 {"func", nullptr,
1256                  [](napi_env env, napi_callback_info info) -> napi_value {
1257                      napi_value val;
1258                      napi_create_string_utf8(env, "instance func", NAPI_AUTO_LENGTH, &val);
1259                      return val;
1260                  },
1261                  nullptr, nullptr, nullptr, napi_default, nullptr},
1262             };
1263             napi_define_properties(env, thisVar, sizeof(props) / sizeof(props[0]), props);
1264             return thisVar;
1265         },
1266         nullptr, sizeof(props) / sizeof(props[0]), props, nullptr, &sendableClass);
1267 
1268     return sendableClass;
1269 }
1270 
NapiCreateSendableObject(napi_env env,napi_callback_info info)1271 static napi_value NapiCreateSendableObject(napi_env env, napi_callback_info info)
1272 {
1273     napi_value val_true;
1274     napi_get_boolean(env, true, &val_true);
1275     napi_property_descriptor desc[] = {
1276         {"x", nullptr, nullptr, nullptr, nullptr, val_true, napi_default_jsproperty, nullptr},
1277     };
1278     napi_value obj;
1279     napi_create_sendable_object_with_properties(env, 1, desc, &obj);
1280     return obj;
1281 }
1282 
NapiCreateSendableArray(napi_env env,napi_callback_info info)1283 static napi_value NapiCreateSendableArray(napi_env env, napi_callback_info info)
1284 {
1285     napi_value result = nullptr;
1286     napi_create_sendable_array(env, &result);
1287     return result;
1288 }
1289 
NapiCreateSendableArrayWithLength(napi_env env,napi_callback_info info)1290 static napi_value NapiCreateSendableArrayWithLength(napi_env env, napi_callback_info info)
1291 {
1292     napi_value result = nullptr;
1293     napi_create_sendable_array_with_length(env, 1, &result);
1294     return result;
1295 }
1296 
NapiCreateSendableArrayBuffer(napi_env env,napi_callback_info info)1297 static napi_value NapiCreateSendableArrayBuffer(napi_env env, napi_callback_info info)
1298 {
1299     static size_t length = 1024;
1300     void* data;
1301     napi_value result = nullptr;
1302     napi_create_sendable_arraybuffer(env, length, &data, &result);
1303     bool isArrayBuffer = false;
1304     napi_is_arraybuffer(env, result, &isArrayBuffer);
1305     NAPI_ASSERT(env, isArrayBuffer, "napi_is_arraybuffer success");
1306     return result;
1307 }
1308 
NapiCreateSendableTypedArray(napi_env env,napi_callback_info info)1309 static napi_value NapiCreateSendableTypedArray(napi_env env, napi_callback_info info)
1310 {
1311     static size_t length = 1024;
1312     static size_t offset = 0;
1313     void* data;
1314     napi_value arraybuffer = nullptr;
1315     napi_create_sendable_arraybuffer(env, length, &data, &arraybuffer);
1316 
1317     napi_value result = nullptr;
1318     napi_create_sendable_typedarray(env, napi_uint8_array, length, arraybuffer, offset, &result);
1319     bool isTypedArray = false;
1320     napi_is_typedarray(env, result, &isTypedArray);
1321     NAPI_ASSERT(env, isTypedArray, "napi_is_typedarray success");
1322     return result;
1323 }
1324 
NapiWrapSendable(napi_env env,napi_callback_info info)1325 static napi_value NapiWrapSendable(napi_env env, napi_callback_info info)
1326 {
1327     size_t argc = 2;
1328     napi_value args[2];
1329     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1330 
1331     static size_t length = 256;
1332     char* data = new char[length];
1333     size_t size = 0;
1334     napi_get_value_string_utf8(env, args[1], data, length - 1, &size);
1335 
1336     napi_wrap_sendable(
1337         env, args[0], (void*)data,
1338         [](napi_env env, void* data, void* hint) {
1339             char* tmp = reinterpret_cast<char*>(data);
1340             delete[] tmp;
1341         },
1342         nullptr);
1343     return args[0];
1344 }
1345 
NapiWrapSendableWithSize(napi_env env,napi_callback_info info)1346 static napi_value NapiWrapSendableWithSize(napi_env env, napi_callback_info info)
1347 {
1348     size_t argc = 2;
1349     napi_value args[2];
1350     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1351 
1352     static size_t length = 256;
1353     char* data = new char[length];
1354     size_t size = 0;
1355     napi_get_value_string_utf8(env, args[1], data, length - 1, &size);
1356 
1357     static size_t nativeBindingSize = 1024;
1358     napi_wrap_sendable_with_size(
1359         env, args[0], (void*)data,
1360         [](napi_env env, void* data, void* hint) {
1361             char* tmp = reinterpret_cast<char*>(data);
1362             delete[] tmp;
1363         },
1364         nullptr, nativeBindingSize);
1365     return args[0];
1366 }
1367 
NapiUnwrapSendable(napi_env env,napi_callback_info info)1368 static napi_value NapiUnwrapSendable(napi_env env, napi_callback_info info)
1369 {
1370     size_t argc = 1;
1371     napi_value args[1];
1372     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1373 
1374     char* data = nullptr;
1375     napi_unwrap_sendable(env, args[0], (void**)&data);
1376 
1377     napi_value result = nullptr;
1378     napi_create_string_utf8(env, data, NAPI_AUTO_LENGTH, &result);
1379     return result;
1380 }
1381 
NapiRemoveWrapSendable(napi_env env,napi_callback_info info)1382 static napi_value NapiRemoveWrapSendable(napi_env env, napi_callback_info info)
1383 {
1384     size_t argc = 1;
1385     napi_value args[1];
1386     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
1387 
1388     char* data = nullptr;
1389     napi_remove_wrap_sendable(env, args[0], (void**)&data);
1390 
1391     napi_value result = nullptr;
1392     napi_create_string_utf8(env, data, NAPI_AUTO_LENGTH, &result);
1393     return result;
1394 }
1395 
isArray(napi_env env,napi_callback_info info)1396 static napi_value isArray(napi_env env, napi_callback_info info)
1397 {
1398     napi_value array = nullptr;
1399     napi_create_array(env, &array);
1400     NAPI_ASSERT(env, array != nullptr, "napi_get_undefined success");
1401     bool isArray = false;
1402     napi_is_array(env, array, &isArray);
1403     NAPI_ASSERT(env, isArray, "napi_is_arrayd success");
1404 
1405     napi_value _value;
1406     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
1407     return _value;
1408 }
1409 
isDate(napi_env env,napi_callback_info info)1410 static napi_value isDate(napi_env env, napi_callback_info info)
1411 {
1412     napi_value date, result;
1413     size_t argc = 1;
1414     bool is_date = false;
1415 
1416     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &date, nullptr, nullptr));
1417     NAPI_CALL(env, napi_is_date(env, date, &is_date));
1418     NAPI_CALL(env, napi_get_boolean(env, is_date, &result));
1419 
1420     return result;
1421 }
1422 
strictEquals(napi_env env,napi_callback_info info)1423 static napi_value strictEquals(napi_env env, napi_callback_info info)
1424 {
1425     const char* testStringStr = "test";
1426     napi_value testString = nullptr;
1427     napi_create_string_utf8(env, testStringStr, strlen(testStringStr), &testString);
1428     bool isStrictEquals = false;
1429     napi_strict_equals(env, testString, testString, &isStrictEquals);
1430     NAPI_ASSERT(env, isStrictEquals, "napi_strict_equals success 0");
1431 
1432     napi_value testObject = nullptr;
1433     napi_create_object(env, &testObject);
1434     isStrictEquals = false;
1435     napi_strict_equals(env, testObject, testObject, &isStrictEquals);
1436     NAPI_ASSERT(env, isStrictEquals, "napi_strict_equals success 1");
1437 
1438     napi_value napi_number1 = nullptr;
1439     napi_value napi_number2 = nullptr;
1440     napi_create_double(env, 10.1, &napi_number1);
1441     napi_create_int32(env, 10, &napi_number2);
1442     isStrictEquals = true;
1443     napi_strict_equals(env, napi_number1, napi_number2, &isStrictEquals);
1444     NAPI_ASSERT(env, !isStrictEquals, "napi_strict_equals success 2");
1445 
1446     napi_value _value;
1447     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
1448     return _value;
1449 }
1450 
getPropertyNames(napi_env env,napi_callback_info info)1451 static napi_value getPropertyNames(napi_env env, napi_callback_info info)
1452 {
1453     napi_value result = nullptr;
1454     NAPI_CALL(env, napi_create_object(env, &result));
1455 
1456     NAPI_ASSERT(env, result != nullptr, "napi_create_object success");
1457 
1458     const char testStr[] = "1234567";
1459     napi_value strAttribute = nullptr;
1460 
1461     NAPI_CALL(env, napi_create_string_utf8(env, testStr, strlen(testStr), &strAttribute));
1462     NAPI_ASSERT(env, strAttribute != nullptr, "napi_create_string_utf8 success");
1463 
1464     NAPI_CALL(env, napi_set_named_property(env, result, "strAttribute", strAttribute));
1465     bool hasNamedProperty = false;
1466     NAPI_CALL(env, napi_has_named_property(env, result, "strAttribute", &hasNamedProperty));
1467     NAPI_ASSERT(env, hasNamedProperty, "napi_has_named_property fail");
1468 
1469     napi_value retStrAttribute = nullptr;
1470     NAPI_CALL(env, napi_get_named_property(env, result, "strAttribute", &retStrAttribute));
1471     NAPI_ASSERT(env, retStrAttribute != nullptr, "napi_get_named_property success");
1472     napi_valuetype type;
1473     NAPI_CALL(env, napi_typeof(env, retStrAttribute, &type));
1474     NAPI_ASSERT(env, type == napi_string, "napi_get_named_property fail");
1475     napi_value res;
1476     napi_coerce_to_number(env, retStrAttribute, &res);
1477     int32_t num = 0;
1478     napi_get_value_int32(env, res, &num);
1479     NAPI_ASSERT(env, num == 1234567, "getPropertyNames fail");
1480 
1481     napi_value _value;
1482     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
1483     return _value;
1484 }
1485 
setProperty(napi_env env,napi_callback_info info)1486 static napi_value setProperty(napi_env env,
1487                               napi_callback_info info)
1488 {
1489     napi_status status;
1490     napi_value object, key, value;
1491 
1492     NAPI_CALL(env, napi_create_object(env, &object));
1493 
1494     NAPI_CALL(env, napi_create_string_utf8(env, "", NAPI_AUTO_LENGTH, &key));
1495 
1496     NAPI_CALL(env, napi_create_object(env, &value));
1497 
1498     status = napi_set_property(nullptr, object, key, value);
1499 
1500     add_returned_status(env,
1501             "envIsNull",
1502             object,
1503             "Invalid argument",
1504             napi_invalid_arg,
1505             status);
1506 
1507     napi_set_property(env, nullptr, key, value);
1508 
1509     add_last_status(env, "objectIsNull", object);
1510 
1511     napi_set_property(env, object, nullptr, value);
1512 
1513     add_last_status(env, "keyIsNull", object);
1514 
1515     napi_set_property(env, object, key, nullptr);
1516 
1517     add_last_status(env, "valueIsNull", object);
1518 
1519     return object;
1520 }
1521 
getProperty(napi_env env,napi_callback_info info)1522 static napi_value getProperty(napi_env env,
1523                               napi_callback_info info)
1524 {
1525     napi_status status;
1526     napi_value object, key, result;
1527 
1528     NAPI_CALL(env, napi_create_object(env, &object));
1529 
1530     NAPI_CALL(env, napi_create_string_utf8(env, "", NAPI_AUTO_LENGTH, &key));
1531 
1532     NAPI_CALL(env, napi_create_object(env, &result));
1533 
1534     status = napi_get_property(nullptr, object, key, &result);
1535 
1536     add_returned_status(env,
1537             "envIsNull",
1538             object,
1539             "Invalid argument",
1540             napi_invalid_arg,
1541             status);
1542 
1543     napi_get_property(env, nullptr, key, &result);
1544 
1545     add_last_status(env, "objectIsNull", object);
1546 
1547     napi_get_property(env, object, nullptr, &result);
1548 
1549     add_last_status(env, "keyIsNull", object);
1550 
1551     napi_get_property(env, object, key, nullptr);
1552 
1553     add_last_status(env, "resultIsNull", object);
1554 
1555     return object;
1556 }
1557 
hasProperty(napi_env env,napi_callback_info info)1558 static napi_value hasProperty(napi_env env, napi_callback_info info)
1559 {
1560     napi_value result = nullptr;
1561     NAPI_CALL(env, napi_create_object(env, &result));
1562 
1563     const char testStr[] = "1234567";
1564     napi_value strAttribute = nullptr;
1565     NAPI_CALL(env, napi_create_string_utf8(env, testStr, strlen(testStr), &strAttribute));
1566     NAPI_CALL(env, napi_set_named_property(env, result, "strAttribute", strAttribute));
1567 
1568     napi_value retStrAttribute = nullptr;
1569     NAPI_CALL(env, napi_get_named_property(env, result, "strAttribute", &retStrAttribute));
1570 
1571     int32_t testNumber = 12345;
1572     napi_value numberAttribute = nullptr;
1573     NAPI_CALL(env, napi_create_int32(env, testNumber, &numberAttribute));
1574     NAPI_CALL(env, napi_set_named_property(env, result, "numberAttribute", numberAttribute));
1575 
1576     napi_value propNames = nullptr;
1577     NAPI_CALL(env, napi_get_property_names(env, result, &propNames));
1578     NAPI_ASSERT(env, propNames != nullptr, "napi_get_property_names success");
1579 
1580     bool isArray = false;
1581     NAPI_CALL(env, napi_is_array(env, propNames, &isArray));
1582     NAPI_ASSERT(env, isArray, "napi_is_array success");
1583 
1584     uint32_t arrayLength = 0;
1585     NAPI_CALL(env, napi_get_array_length(env, propNames, &arrayLength));
1586 
1587     for (uint32_t i = 0; i < arrayLength; i++) {
1588         bool hasElement = false;
1589         NAPI_CALL(env, napi_has_element(env, propNames, i, &hasElement));
1590         NAPI_ASSERT(env, hasElement, "napi_has_element success");
1591 
1592         napi_value propName = nullptr;
1593         NAPI_CALL(env, napi_get_element(env, propNames, i, &propName));
1594         NAPI_ASSERT(env, propName != nullptr, "napi_get_element success");
1595 
1596         bool hasProp = false;
1597         napi_has_property(env, result, propName, &hasProp);
1598         NAPI_ASSERT(env, hasProp, "napi_get_element success");
1599 
1600         napi_value propValue = nullptr;
1601         napi_get_property(env, result, propName, &propValue);
1602         NAPI_ASSERT(env, propValue != nullptr, "napi_get_property success");
1603     }
1604 
1605     bool deletion = false;
1606     NAPI_CALL(env, napi_delete_element(env, propNames, 1, &deletion));
1607     NAPI_ASSERT(env, deletion, "napi_delete_element fail");
1608     bool hasElement = true;
1609     NAPI_CALL(env, napi_has_element(env, propNames, 1, &hasElement));
1610     NAPI_ASSERT(env, !hasElement, "napi_has_element fail");
1611 
1612     napi_value _value;
1613     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
1614     return _value;
1615 }
1616 
setAndDeleteProperty(napi_env env,napi_callback_info info)1617 static napi_value setAndDeleteProperty(napi_env env, napi_callback_info info)
1618 {
1619     size_t argc = 2;
1620     napi_value args[2];
1621 
1622     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
1623     NAPI_ASSERT(env, argc == 2, "Wrong number of arguments");
1624 
1625     napi_valuetype valuetype0;
1626     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
1627     NAPI_ASSERT(env, valuetype0 == napi_object,
1628             "Wrong type of arguments. Expects an object as first argument.");
1629 
1630     napi_valuetype valuetype1;
1631     NAPI_CALL(env, napi_typeof(env, args[1], &valuetype1));
1632     NAPI_ASSERT(env, valuetype1 == napi_string || valuetype1 == napi_symbol,
1633             "Wrong type of arguments. Expects a string or symbol as second.");
1634 
1635     const char testStr[] = "cKey";
1636     napi_value cKey;
1637     napi_value cValue;
1638     NAPI_CALL(env, napi_create_string_utf8(env, testStr, strlen(testStr), &cKey));
1639     NAPI_CALL(env, napi_create_int32(env, 3, &cValue));
1640     NAPI_CALL(env, napi_set_property(env, args[0], cKey, cValue));
1641 
1642     bool hasProp = false;
1643     NAPI_CALL(env, napi_has_property(env, args[0], cKey, &hasProp));
1644     NAPI_ASSERT(env, hasProp, "setAndDeleteProperty napi_has_property fail 1");
1645 
1646     bool result;
1647     napi_value ret;
1648     NAPI_CALL(env, napi_delete_property(env, args[0], cKey, &result));
1649     NAPI_CALL(env, napi_get_boolean(env, result, &ret));
1650     NAPI_CALL(env, napi_has_property(env, args[0], cKey, &hasProp));
1651     NAPI_ASSERT(env, !hasProp, "setAndDeleteProperty napi_has_property fail 2");
1652 
1653     napi_value _value;
1654     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
1655     return _value;
1656 }
1657 
hasOwnProperty(napi_env env,napi_callback_info info)1658 static napi_value hasOwnProperty(napi_env env, napi_callback_info info)
1659 {
1660     size_t argc = 2;
1661     napi_value args[2];
1662     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
1663 
1664     NAPI_ASSERT(env, argc == 2, "Wrong number of arguments");
1665 
1666     napi_valuetype valuetype0;
1667     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
1668 
1669     NAPI_ASSERT(env, valuetype0 == napi_object,
1670             "Wrong type of arguments. Expects an object as first argument.");
1671 
1672     bool has_property;
1673     NAPI_CALL(env, napi_has_own_property(env, args[0], args[1], &has_property));
1674 
1675     napi_value ret;
1676     NAPI_CALL(env, napi_get_boolean(env, has_property, &ret));
1677 
1678     return ret;
1679 }
1680 
setNamedProperty(napi_env env,napi_callback_info info)1681 static napi_value setNamedProperty(napi_env env, napi_callback_info info)
1682 {
1683     size_t argc = 3;
1684     napi_value args[3];
1685     char key[256] = "";
1686     size_t key_length;
1687     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
1688 
1689     NAPI_ASSERT(env, argc >= 3, "Wrong number of arguments");
1690 
1691     napi_valuetype value_type0;
1692     NAPI_CALL(env, napi_typeof(env, args[0], &value_type0));
1693 
1694     NAPI_ASSERT(env, value_type0 == napi_object,
1695             "Wrong type of arguments. Expects an object as first argument.");
1696 
1697     napi_valuetype value_type1;
1698     NAPI_CALL(env, napi_typeof(env, args[1], &value_type1));
1699 
1700     NAPI_ASSERT(env, value_type1 == napi_string,
1701             "Wrong type of arguments. Expects a string as second.");
1702 
1703     NAPI_CALL(env,
1704             napi_get_value_string_utf8(env, args[1], key, 255, &key_length));
1705     key[255] = 0;
1706     NAPI_ASSERT(env, key_length <= 255,
1707             "Cannot accommodate keys longer than 255 bytes");
1708 
1709     NAPI_CALL(env, napi_set_named_property(env, args[0], key, args[2]));
1710 
1711     napi_value value_true;
1712     NAPI_CALL(env, napi_get_boolean(env, true, &value_true));
1713 
1714     return value_true;
1715 }
1716 
getNamedProperty(napi_env env,napi_callback_info info)1717 static napi_value getNamedProperty(napi_env env, napi_callback_info info)
1718 {
1719     size_t argc = 2;
1720     napi_value args[2];
1721     char key[256] = "";
1722     size_t key_length;
1723     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
1724 
1725     NAPI_ASSERT(env, argc >= 2, "Wrong number of arguments");
1726 
1727     napi_valuetype value_type0;
1728     NAPI_CALL(env, napi_typeof(env, args[0], &value_type0));
1729 
1730     NAPI_ASSERT(env, value_type0 == napi_object,
1731             "Wrong type of arguments. Expects an object as first argument.");
1732 
1733     napi_valuetype value_type1;
1734     NAPI_CALL(env, napi_typeof(env, args[1], &value_type1));
1735 
1736     NAPI_ASSERT(env, value_type1 == napi_string,
1737             "Wrong type of arguments. Expects a string as second.");
1738 
1739     napi_value object = args[0];
1740     NAPI_CALL(env,
1741             napi_get_value_string_utf8(env, args[1], key, 255, &key_length));
1742     key[255] = 0;
1743     NAPI_ASSERT(env, key_length <= 255,
1744             "Cannot accommodate keys longer than 255 bytes");
1745     napi_value output;
1746     NAPI_CALL(env, napi_get_named_property(env, object, key, &output));
1747 
1748     return output;
1749 }
1750 
hasNamedProperty(napi_env env,napi_callback_info info)1751 static napi_value hasNamedProperty(napi_env env, napi_callback_info info)
1752 {
1753     size_t argc = 2;
1754     napi_value args[2];
1755     char key[256] = "";
1756     size_t key_length;
1757     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
1758 
1759     NAPI_ASSERT(env, argc >= 2, "Wrong number of arguments");
1760 
1761     napi_valuetype value_type0;
1762     NAPI_CALL(env, napi_typeof(env, args[0], &value_type0));
1763 
1764     NAPI_ASSERT(env, value_type0 == napi_object,
1765             "Wrong type of arguments. Expects an object as first argument.");
1766 
1767     napi_valuetype value_type1;
1768     NAPI_CALL(env, napi_typeof(env, args[1], &value_type1));
1769 
1770     NAPI_ASSERT(env, value_type1 == napi_string || value_type1 == napi_symbol,
1771             "Wrong type of arguments. Expects a string as second.");
1772 
1773     NAPI_CALL(env,
1774             napi_get_value_string_utf8(env, args[1], key, 255, &key_length));
1775     key[255] = 0;
1776     NAPI_ASSERT(env, key_length <= 255,
1777             "Cannot accommodate keys longer than 255 bytes");
1778 
1779     bool has_property;
1780     NAPI_CALL(env, napi_has_named_property(env, args[0], key, &has_property));
1781 
1782     napi_value ret;
1783     NAPI_CALL(env, napi_get_boolean(env, has_property, &ret));
1784 
1785     return ret;
1786 }
1787 
setElement(napi_env env,napi_callback_info info)1788 static napi_value setElement(napi_env env, napi_callback_info info)
1789 {
1790     napi_value return_value, object;
1791 
1792     NAPI_CALL(env, napi_create_object(env, &return_value));
1793     NAPI_CALL(env, napi_create_object(env, &object));
1794 
1795     add_returned_status(env,
1796             "envIsNull",
1797             return_value,
1798             "Invalid argument",
1799             napi_invalid_arg,
1800             napi_set_element(nullptr, object, 0, object));
1801 
1802     napi_set_element(env, nullptr, 0, object);
1803     add_last_status(env, "objectIsNull", return_value);
1804 
1805 
1806     napi_set_property(env, object, 0, nullptr);
1807     add_last_status(env, "valueIsNull", return_value);
1808 
1809     return return_value;
1810 }
1811 
getElement(napi_env env,napi_callback_info info)1812 static napi_value getElement(napi_env env, napi_callback_info info)
1813 {
1814     napi_value return_value, object, prop;
1815 
1816     NAPI_CALL(env, napi_create_object(env, &return_value));
1817     NAPI_CALL(env, napi_create_object(env, &object));
1818 
1819     add_returned_status(env,
1820             "envIsNull",
1821             return_value,
1822             "Invalid argument",
1823             napi_invalid_arg,
1824             napi_get_element(nullptr, object, 0, &prop));
1825 
1826     napi_get_property(env, nullptr, 0, &prop);
1827     add_last_status(env, "objectIsNull", return_value);
1828 
1829     napi_get_property(env, object, 0, nullptr);
1830     add_last_status(env, "valueIsNull", return_value);
1831 
1832     return return_value;
1833 }
1834 
TestBoolValuedElementApi(napi_env env,napi_status (* api)(napi_env,napi_value,uint32_t,bool *))1835 static napi_value TestBoolValuedElementApi(napi_env env,
1836                                            napi_status (* api)(napi_env, napi_value, uint32_t, bool*))
1837 {
1838     napi_value return_value, object;
1839     bool result;
1840 
1841     NAPI_CALL(env, napi_create_object(env, &return_value));
1842     NAPI_CALL(env, napi_create_object(env, &object));
1843 
1844     add_returned_status(env,
1845             "envIsNull",
1846             return_value,
1847             "Invalid argument",
1848             napi_invalid_arg,
1849             api(nullptr, object, 0, &result));
1850 
1851     api(env, nullptr, 0, &result);
1852     add_last_status(env, "objectIsNull", return_value);
1853 
1854     api(env, object, 0, nullptr);
1855     add_last_status(env, "valueIsNull", return_value);
1856 
1857     return return_value;
1858 }
1859 
hasElement(napi_env env,napi_callback_info info)1860 static napi_value hasElement(napi_env env, napi_callback_info info)
1861 {
1862     return TestBoolValuedElementApi(env, napi_has_element);
1863 }
1864 
deleteElement(napi_env env,napi_callback_info info)1865 static napi_value deleteElement(napi_env env, napi_callback_info info)
1866 {
1867     return TestBoolValuedElementApi(env, napi_delete_element);
1868 }
1869 
defineProperties(napi_env env,napi_callback_info info)1870 static napi_value defineProperties(napi_env env, napi_callback_info info)
1871 {
1872     napi_value object, return_value;
1873 
1874     napi_property_descriptor desc = {"prop", NULL, defineProperties, NULL, NULL, NULL, napi_enumerable, NULL};
1875 
1876     NAPI_CALL(env, napi_create_object(env, &object));
1877     NAPI_CALL(env, napi_create_object(env, &return_value));
1878 
1879     add_returned_status(env,
1880             "envIsNull",
1881             return_value,
1882             "Invalid argument",
1883             napi_invalid_arg,
1884             napi_define_properties(nullptr, object, 1, &desc));
1885 
1886     napi_define_properties(env, nullptr, 1, &desc);
1887     add_last_status(env, "objectIsNull", return_value);
1888 
1889     napi_define_properties(env, object, 1, nullptr);
1890     add_last_status(env, "descriptorListIsNull", return_value);
1891 
1892     desc.utf8name = nullptr;
1893     napi_define_properties(env, object, 1, nullptr);
1894     add_last_status(env, "utf8nameIsNull", return_value);
1895     desc.utf8name = "prop";
1896 
1897     desc.method = nullptr;
1898     napi_define_properties(env, object, 1, nullptr);
1899     add_last_status(env, "methodIsNull", return_value);
1900     desc.method = defineProperties;
1901 
1902     return return_value;
1903 }
1904 
MyConstructor(napi_env env,napi_callback_info info)1905 static napi_value MyConstructor(napi_env env, napi_callback_info info)
1906 {
1907     napi_value thisVar = nullptr;
1908     size_t argc = 0;
1909     napi_value constructor = nullptr;
1910     napi_get_cb_info(env, info, &argc, nullptr, &thisVar, nullptr);
1911     napi_get_new_target(env, info, &constructor);
1912     if (constructor == nullptr) {
1913         napi_throw_error(env, nullptr, "is not new instance");
1914     }
1915     return thisVar;
1916 }
1917 
NewTargetTest(napi_env env,napi_callback_info info)1918 static napi_value NewTargetTest(napi_env env, napi_callback_info info)
1919 {
1920     bool isConstructor = true;
1921     napi_value constructor = nullptr;
1922     napi_get_new_target(env, info, &constructor);
1923     if (constructor == nullptr) {
1924         napi_throw_error(env, nullptr, "is not new instance");
1925         isConstructor = false;
1926     }
1927     napi_value value;
1928     NAPI_CALL(env, napi_get_boolean(env, isConstructor, &value));
1929 
1930     return value;
1931 }
1932 
wrap(napi_env env,napi_callback_info info)1933 static napi_value wrap(napi_env env, napi_callback_info info)
1934 {
1935     napi_value testClass = nullptr;
1936     napi_define_class(
1937         env, "TestClass", NAPI_AUTO_LENGTH,
1938         [](napi_env env, napi_callback_info info) -> napi_value {
1939             napi_value thisVar = nullptr;
1940             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
1941 
1942             return thisVar;
1943         },
1944         nullptr, 0, nullptr, &testClass);
1945 
1946     napi_value instanceValue = nullptr;
1947     napi_new_instance(env, testClass, 0, nullptr, &instanceValue);
1948 
1949     const char* testStr = "test";
1950     napi_wrap(
1951         env, instanceValue, (void*)testStr, [](napi_env env, void* data, void* hint) {}, nullptr, nullptr);
1952 
1953     napi_value _value;
1954     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
1955     return _value;
1956 }
1957 
unwrap(napi_env env,napi_callback_info info)1958 static napi_value unwrap(napi_env env, napi_callback_info info)
1959 {
1960     napi_value testClass = nullptr;
1961     napi_define_class(
1962         env, "TestClass", NAPI_AUTO_LENGTH,
1963         [](napi_env env, napi_callback_info info) -> napi_value {
1964             napi_value thisVar = nullptr;
1965             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
1966 
1967             return thisVar;
1968         },
1969         nullptr, 0, nullptr, &testClass);
1970 
1971     napi_value instanceValue = nullptr;
1972     napi_new_instance(env, testClass, 0, nullptr, &instanceValue);
1973 
1974     const char* testStr = "test";
1975     napi_wrap(
1976         env, instanceValue, (void*)testStr, [](napi_env env, void* data, void* hint) {}, nullptr, nullptr);
1977 
1978     const char* tmpTestStr = nullptr;
1979     NAPI_CALL(env, napi_unwrap(env, instanceValue, (void**)&tmpTestStr));
1980     NAPI_ASSERT(env, tmpTestStr == testStr, "napi_unwrap fail");
1981 
1982     napi_value _value;
1983     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
1984     return _value;
1985 }
1986 
removeWrap(napi_env env,napi_callback_info info)1987 static napi_value removeWrap(napi_env env, napi_callback_info info)
1988 {
1989     napi_value testClass = nullptr;
1990     napi_define_class(
1991         env, "TestClass", NAPI_AUTO_LENGTH,
1992         [](napi_env env, napi_callback_info info) -> napi_value {
1993             napi_value thisVar = nullptr;
1994             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
1995 
1996             return thisVar;
1997         },
1998         nullptr, 0, nullptr, &testClass);
1999 
2000     napi_value instanceValue = nullptr;
2001     napi_new_instance(env, testClass, 0, nullptr, &instanceValue);
2002 
2003     const char* testStr = "test";
2004     napi_wrap(
2005         env, instanceValue, (void*)testStr, [](napi_env env, void* data, void* hint) {}, nullptr, nullptr);
2006 
2007     const char* tmpTestStr = nullptr;
2008     NAPI_CALL(env, napi_unwrap(env, instanceValue, (void**)&tmpTestStr));
2009     NAPI_ASSERT(env, tmpTestStr == testStr, "napi_unwrap fail");
2010 
2011     const char* tmpTestStr1 = nullptr;
2012     napi_remove_wrap(env, instanceValue, (void**)&tmpTestStr1);
2013     NAPI_ASSERT(env, tmpTestStr1 == testStr, "napi_remove_wrap fail 1");
2014 
2015     NAPI_CALL(env, napi_unwrap(env, instanceValue, (void**)&tmpTestStr1));
2016     NAPI_ASSERT(env, tmpTestStr1 == nullptr, "napi_remove_wrap fail");
2017 
2018     napi_value _value;
2019     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
2020     return _value;
2021 }
2022 
getVersion(napi_env env,napi_callback_info info)2023 static napi_value getVersion(napi_env env, napi_callback_info info)
2024 {
2025     uint32_t version;
2026     napi_value result;
2027     NAPI_CALL(env, napi_get_version(env, &version));
2028     NAPI_CALL(env, napi_create_uint32(env, version, &result));
2029     return result;
2030 }
2031 
createPromise(napi_env env,napi_callback_info info)2032 static napi_value createPromise(napi_env env, napi_callback_info info)
2033 {
2034     napi_deferred deferred = nullptr;
2035     napi_value promise = nullptr;
2036     napi_create_promise(env, &deferred, &promise);
2037     NAPI_ASSERT(env, deferred != nullptr, "create promise success");
2038     NAPI_ASSERT(env, promise != nullptr, "create promise success");
2039 
2040     napi_value _value;
2041     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
2042     return _value;
2043 }
2044 
resolveAndRejectDeferred(napi_env env,napi_callback_info info)2045 static napi_value resolveAndRejectDeferred(napi_env env, napi_callback_info info)
2046 {
2047     napi_deferred deferred = nullptr;
2048     napi_value promise = nullptr;
2049     NAPI_CALL(env, napi_create_promise(env, &deferred, &promise));
2050 
2051     bool isPromise = false;
2052     napi_is_promise(env, promise, &isPromise);
2053 
2054     napi_value undefined = nullptr;
2055     napi_get_undefined(env, &undefined);
2056     NAPI_CALL(env, napi_resolve_deferred(env, deferred, undefined));
2057 
2058     napi_value _value;
2059     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
2060     return _value;
2061 }
2062 
isPromise(napi_env env,napi_callback_info info)2063 static napi_value isPromise(napi_env env, napi_callback_info info)
2064 {
2065     napi_deferred deferred = nullptr;
2066     napi_value promise = nullptr;
2067     NAPI_CALL(env, napi_create_promise(env, &deferred, &promise));
2068 
2069     bool isPromise = false;
2070     NAPI_CALL(env, napi_is_promise(env, promise, &isPromise));
2071     NAPI_ASSERT(env, isPromise, "napi_is_promise success");
2072 
2073     napi_value _value;
2074     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
2075     return _value;
2076 }
2077 
runScript(napi_env env,napi_callback_info info)2078 static napi_value runScript(napi_env env, napi_callback_info info)
2079 {
2080     napi_value script, result;
2081     size_t argc = 1;
2082 
2083     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &script, nullptr, nullptr));
2084 
2085     NAPI_CALL(env, napi_run_script(env, script, &result));
2086 
2087     return result;
2088 }
2089 
getUvEventLoop(napi_env env,napi_callback_info info)2090 static napi_value getUvEventLoop(napi_env env, napi_callback_info info)
2091 {
2092     struct uv_loop_s* loop = nullptr;
2093 
2094     NAPI_CALL(env, napi_get_uv_event_loop(env, &loop));
2095     NAPI_ASSERT(env, loop != nullptr, "napi_get_uv_event_loop fail");
2096 
2097     return nullptr;
2098 }
2099 
TestLatin1(napi_env env,napi_callback_info info)2100 static napi_value TestLatin1(napi_env env, napi_callback_info info)
2101 {
2102     size_t argc = 1;
2103     napi_value args[1];
2104     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
2105 
2106     NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments");
2107 
2108     napi_valuetype valuetype;
2109     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype));
2110 
2111     NAPI_ASSERT(env, valuetype == napi_string,
2112             "Wrong type of argment. Expects a string.");
2113 
2114     char buffer[128];
2115     size_t bufferSize = 128;
2116     size_t copied;
2117 
2118     NAPI_CALL(env,
2119             napi_get_value_string_latin1(env, args[0], buffer, bufferSize, &copied));
2120 
2121     napi_value output;
2122     NAPI_CALL(env, napi_create_string_latin1(env, buffer, copied, &output));
2123 
2124     return output;
2125 }
2126 
TestUtf8(napi_env env,napi_callback_info info)2127 static napi_value TestUtf8(napi_env env, napi_callback_info info)
2128 {
2129     size_t argc = 1;
2130     napi_value args[1];
2131     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
2132 
2133     NAPI_ASSERT(env, argc == 1, "Expects one argument.");
2134 
2135     napi_valuetype valuetype;
2136     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype));
2137 
2138     NAPI_ASSERT(env, valuetype == napi_string,
2139             "Wrong type of argment. Expects a string.");
2140 
2141     char buffer[128];
2142     size_t bufferSize = 128;
2143     size_t copied;
2144 
2145     NAPI_CALL(env,
2146         napi_get_value_string_utf8(env, args[0], buffer, bufferSize, &copied));
2147 
2148     napi_value output;
2149     NAPI_CALL(env, napi_create_string_utf8(env, buffer, copied, &output));
2150 
2151     return output;
2152 }
2153 
TestUtf16(napi_env env,napi_callback_info info)2154 static napi_value TestUtf16(napi_env env, napi_callback_info info)
2155 {
2156     size_t argc = 1;
2157     napi_value args[1];
2158     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
2159 
2160     NAPI_ASSERT(env, argc == 1, "Expects one argument.");
2161 
2162     napi_valuetype valuetype;
2163     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype));
2164 
2165     NAPI_ASSERT(env, valuetype == napi_string,
2166             "Wrong type of argment. Expects a string.");
2167 
2168     char16_t buffer[128];
2169     size_t bufferSize = 128;
2170     size_t copied;
2171 
2172     NAPI_CALL(env,
2173         napi_get_value_string_utf16(env, args[0], buffer, bufferSize, &copied));
2174 
2175     napi_value output;
2176     NAPI_CALL(env, napi_create_string_utf16(env, buffer, copied, &output));
2177 
2178     return output;
2179 }
2180 // test the napi function
napCreateArrayBuffer(napi_env env,napi_callback_info info)2181 static napi_value napCreateArrayBuffer(napi_env env, napi_callback_info info)
2182 {
2183     napi_value arrayBuffer = nullptr;
2184     void* arrayBufferPtr = nullptr;
2185     size_t arrayBufferSize = 1024;
2186     napi_status status = napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
2187     NAPI_ASSERT(env, status == napi_ok, "success to napi_create_arraybuffer");
2188     NAPI_ASSERT(env, arrayBuffer != nullptr, "success create_arrayBuffer");
2189 
2190     return arrayBuffer;
2191 }
2192 
napiGetCbInfo(napi_env env,napi_callback_info info)2193 static napi_value napiGetCbInfo(napi_env env, napi_callback_info info)
2194 {
2195     size_t argc = 1;
2196     napi_value args[1];
2197     napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
2198     NAPI_ASSERT(env, status == napi_ok, "get_cb_info ok");
2199     NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments");
2200     double value;
2201     napi_get_value_double(env, args[0], &value);
2202 
2203     napi_valuetype valuetype;
2204     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype));
2205     NAPI_ASSERT(env, valuetype == napi_number, "Wrong type of argment. Expects a nunber.");
2206 
2207     napi_value returnValue;
2208     napi_status statusDouble = napi_create_double(env, value, &returnValue);
2209     NAPI_ASSERT(env, statusDouble == napi_ok, "success to napi_create_double");
2210 
2211     return returnValue;
2212 }
2213 
naiGetArrayBufferInfo(napi_env env,napi_callback_info info)2214 static napi_value naiGetArrayBufferInfo(napi_env env, napi_callback_info info)
2215 {
2216     // the value to return
2217     napi_value arrayBuffer;
2218     napi_status status;
2219     void* yourPointer = nullptr;
2220     size_t arrayBufferSize = 1024;
2221     status = napi_create_arraybuffer(env, arrayBufferSize, &yourPointer, &arrayBuffer);
2222     NAPI_ASSERT(env, status == napi_ok, "success to napi_create_arraybuffer");
2223 
2224     void* tmpArrayBufferPtr = nullptr;
2225     size_t arrayBufferLength = 0;
2226     status = napi_get_arraybuffer_info(env, arrayBuffer, &tmpArrayBufferPtr, &arrayBufferLength);
2227     NAPI_ASSERT(env, status == napi_ok, "success to napi_get_arraybuffer_info");
2228 
2229     napi_value arrayLength;
2230     // return the length of array js type int
2231     NAPI_CALL(env, napi_create_int32(env, arrayBufferLength, &arrayLength));
2232 
2233     return arrayLength;
2234 }
2235 
napiDefineClass(napi_env env,napi_callback_info info)2236 static napi_value napiDefineClass(napi_env env, napi_callback_info info)
2237 {
2238     napi_value testWrapClass = nullptr;
2239     napi_define_class(env, "TestWrapClass", NAPI_AUTO_LENGTH, [](napi_env env, napi_callback_info info) -> napi_value {
2240                   napi_value thisVar = nullptr;
2241                   napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
2242                   return thisVar;
2243               }, nullptr, 0, nullptr, &testWrapClass);
2244 
2245     napi_value instanceValue = nullptr;
2246     napi_new_instance(env, testWrapClass, 0, nullptr, &instanceValue);
2247     NAPI_ASSERT(env, instanceValue != nullptr, "success napiDefineClass");
2248     napi_value value;
2249     NAPI_CALL(env, napi_create_int32(env, 0, &value));
2250 
2251     return value;
2252 }
2253 
napiRunScriptPath(napi_env env,napi_callback_info info)2254 static napi_value napiRunScriptPath(napi_env env, napi_callback_info info)
2255 {
2256     napi_value value;
2257     const char* path =  "pages/index.ets";
2258     napi_status status = napi_run_script_path(env, path, &value);
2259     NAPI_ASSERT(env, status == napi_ok, "napi_run_script_path ok");
2260     NAPI_ASSERT(env, value != nullptr, "napi_run_script_path success");
2261 
2262     napi_value _value;
2263     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
2264 
2265     return _value;
2266 }
2267 
napiLoadModule(napi_env env,napi_callback_info info)2268 static napi_value napiLoadModule(napi_env env, napi_callback_info info)
2269 {
2270     napi_value value;
2271     const char* path =  "@ohos.hilog";
2272     napi_status status = napi_load_module(env, path, &value);
2273     NAPI_ASSERT(env, status == napi_ok, "napi_load_module ok");
2274     NAPI_ASSERT(env, value != nullptr, "napi_load_module success");
2275 
2276     napi_value _value;
2277     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
2278 
2279     return _value;
2280 }
2281 
napiGetNodeVersion(napi_env env,napi_callback_info info)2282 static napi_value napiGetNodeVersion(napi_env env, napi_callback_info info)
2283 {
2284     napi_value value;
2285     const napi_node_version* version;
2286     napi_get_node_version(env, &version);
2287     const char* release = version->release;
2288     napi_status status = napi_create_string_utf8(env, release, strlen(release), &value);
2289     NAPI_ASSERT(env, status == napi_ok, "napi_create_string_utf8 ok");
2290     napi_value _value;
2291     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
2292 
2293     return _value;
2294 }
2295 
napiCallThreadsafeFunction(napi_env env,napi_callback_info info)2296 static napi_value napiCallThreadsafeFunction(napi_env env, napi_callback_info info)
2297 {
2298     void* data = nullptr;
2299     napi_threadsafe_function func = (napi_threadsafe_function)data;
2300     napi_threadsafe_function_call_mode blockMode = napi_tsfn_nonblocking;
2301     void* context = nullptr;
2302     napi_status status = napi_get_threadsafe_function_context(func, &context);
2303     NAPI_ASSERT(env, status != napi_ok, "napi_get_threadsafe_function_context fail");
2304     static int32_t gSendData = 0;
2305     napi_call_threadsafe_function(func, &gSendData, blockMode);
2306     status = napi_call_threadsafe_function(func, &gSendData, blockMode);
2307     NAPI_ASSERT(env, status != napi_ok, "napi_call_threadsafe_function fail");
2308     napi_release_threadsafe_function(func, napi_tsfn_release);
2309     napi_value value;
2310     NAPI_CALL(env, napi_create_int32(env, 0, &value));
2311 
2312     return value;
2313 }
2314 
napiCreateThreadsafeFunction(napi_env env,napi_callback_info info)2315 static napi_value napiCreateThreadsafeFunction(napi_env env, napi_callback_info info)
2316 {
2317     napi_threadsafe_function tsFunc = nullptr;
2318     napi_value resourceName = 0;
2319     napi_create_string_latin1(env, __func__, NAPI_AUTO_LENGTH, &resourceName);
2320     int32_t  callJstCbDataTestId = 101;
2321     int32_t  finalCbtDataTestID = 1001;
2322     napi_status status = napi_create_threadsafe_function(env, nullptr, nullptr, resourceName,
2323                                                          0, 1, &callJstCbDataTestId, nullptr,
2324                                                          &finalCbtDataTestID, nullptr, &tsFunc);
2325     NAPI_ASSERT(env, status != napi_ok, "napi_create_threadsafe_function failed");
2326 
2327     napi_acquire_threadsafe_function(tsFunc);
2328     status = napi_unref_threadsafe_function(env, tsFunc);
2329     NAPI_ASSERT(env, status != napi_ok, "napi_unref_threadsafe_function failed");
2330 
2331     napi_value _value;
2332     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
2333 
2334     return _value;
2335 }
2336 
AddExecuteCB(napi_env env,void * data)2337 static void AddExecuteCB(napi_env env, void *data) {
2338     AddonData *addonData = (AddonData *)data;
2339     addonData->result = addonData->args;
2340 }
2341 
AddCallbackCompleteCB(napi_env env,napi_status status,void * data)2342 static void AddCallbackCompleteCB(napi_env env, napi_status status, void *data) {
2343     AddonData *addonData = (AddonData *)data;
2344     napi_value callback = nullptr;
2345     NAPI_CALL_RETURN_VOID(env, napi_get_reference_value(env, addonData->callback, &callback));
2346     napi_value result = nullptr;
2347     NAPI_CALL_RETURN_VOID(env, napi_create_double(env, addonData->result, &result));
2348     napi_value callbackResult = nullptr;
2349 
2350     int32_t ret = 0;
2351     NAPI_CALL_RETURN_VOID(env, napi_call_function(env, nullptr, callback, 1, &result, &callbackResult));
2352     NAPI_CALL_RETURN_VOID(env, napi_get_value_int32(env, callbackResult, &ret));
2353     NAPI_ASSERT_RETURN_VOID(env, ret == 2000, "AddCallbackCompleteCB failed");
2354 
2355     if (addonData->callback != nullptr) {
2356         NAPI_CALL_RETURN_VOID(env, napi_delete_reference(env, addonData->callback));
2357     }
2358 
2359     NAPI_CALL_RETURN_VOID(env, napi_delete_async_work(env, addonData->asyncWork));
2360     free(addonData);
2361 }
2362 
testAsyncWork(napi_env env,napi_callback_info info)2363 static napi_value testAsyncWork(napi_env env, napi_callback_info info) {
2364     size_t argc = 2;
2365     napi_value args[2];
2366     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
2367 
2368     AddonData* addonData = reinterpret_cast<AddonData*>(malloc(sizeof(AddonData)));
2369     if (addonData == nullptr) {
2370         return nullptr;
2371     }
2372 
2373     NAPI_CALL(env, napi_get_value_double(env, args[0], &addonData->args));
2374     NAPI_CALL(env, napi_create_reference(env, args[1], 1, &addonData->callback));
2375 
2376     napi_value resourceName = nullptr;
2377     NAPI_CALL(env, napi_create_string_utf8(env, "AsyncWorkTest", NAPI_AUTO_LENGTH, &resourceName));
2378     NAPI_CALL(env, napi_create_async_work(env, nullptr, resourceName, AddExecuteCB, AddCallbackCompleteCB,
2379         (void *)addonData, &addonData->asyncWork));
2380 
2381     NAPI_CALL(env, napi_queue_async_work(env, addonData->asyncWork));
2382 
2383     napi_value _value = 0;
2384     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
2385     return _value;
2386 }
2387 
AddPromiseCompleteCB(napi_env env,napi_status status,void * data)2388 static void AddPromiseCompleteCB(napi_env env, napi_status status, void *data) {
2389     AddonData *addonData = (AddonData *)data;
2390     napi_value result = nullptr;
2391     NAPI_CALL_RETURN_VOID(env, napi_create_double(env, addonData->result, &result));
2392     if (addonData->result > 0) {
2393         NAPI_CALL_RETURN_VOID(env, napi_resolve_deferred(env, addonData->deferred, result));
2394     } else {
2395         NAPI_CALL_RETURN_VOID(env, napi_reject_deferred(env, addonData->deferred, result));
2396     }
2397 
2398     NAPI_CALL_RETURN_VOID(env, napi_delete_async_work(env, addonData->asyncWork));
2399     free(addonData);
2400     addonData = nullptr;
2401 }
2402 
testPromise(napi_env env,napi_callback_info info)2403 static napi_value testPromise(napi_env env, napi_callback_info info)
2404 {
2405     size_t argc = 1;
2406     napi_value args[1];
2407     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
2408 
2409     napi_value promise = nullptr;
2410     napi_deferred deferred = nullptr;
2411     NAPI_CALL(env, napi_create_promise(env, &deferred, &promise));
2412 
2413     AddonData* addonData = reinterpret_cast<AddonData*>(malloc(sizeof(AddonData)));
2414     if (addonData == nullptr) {
2415         return nullptr;
2416     }
2417     addonData->deferred = deferred;
2418 
2419     NAPI_CALL(env, napi_get_value_double(env, args[0], &addonData->args));
2420 
2421     napi_value resourceName = nullptr;
2422     NAPI_CALL(env, napi_create_string_utf8(env, "AsyncCallback", NAPI_AUTO_LENGTH, &resourceName));
2423     NAPI_CALL(env, napi_create_async_work(env, nullptr, resourceName, AddExecuteCB,
2424         AddPromiseCompleteCB, (void *)addonData, &addonData->asyncWork));
2425 
2426     napi_queue_async_work(env, addonData->asyncWork);
2427 
2428     return promise;
2429 }
2430 
napiCancelAsyncWork(napi_env env,napi_callback_info info)2431 static napi_value napiCancelAsyncWork(napi_env env, napi_callback_info info)
2432 {
2433     napi_async_work work = nullptr;
2434     napi_value resourceName = nullptr;
2435     napi_create_string_utf8(env, "AsyncWorkTest", NAPI_AUTO_LENGTH, &resourceName);
2436     napi_create_async_work(env, nullptr, resourceName, [](napi_env value, void* data) {},
2437                            [](napi_env env, napi_status status, void* data) {}, nullptr, &work);
2438     NAPI_CALL(env, napi_cancel_async_work(env, work));
2439     napi_delete_async_work(env, work);
2440     napi_value value;
2441     NAPI_CALL(env, napi_create_int32(env, 0, &value));
2442 
2443     return value;
2444 }
2445 
SayHello(napi_env env,napi_callback_info info)2446 static napi_value SayHello(napi_env env, napi_callback_info info)
2447 {
2448     printf("Hello\n");
2449     napi_value ret;
2450     NAPI_CALL(env, napi_create_int32(env, TAG_NUMBER, &ret));
2451     return ret;
2452 }
2453 
napiCreateFunction(napi_env env,napi_callback_info info)2454 static napi_value napiCreateFunction(napi_env env, napi_callback_info info)
2455 {
2456     napi_value funcValue = nullptr;
2457     napi_status status = napi_create_function(env, "func", NAPI_AUTO_LENGTH, SayHello, nullptr, &funcValue);
2458     NAPI_ASSERT(env, funcValue != nullptr, "napi_create_function fail");
2459     NAPI_ASSERT(env, status == napi_ok, "napi_create_function fail");
2460     napi_value value;
2461     NAPI_CALL(env, napi_create_int32(env, 1, &value));
2462 
2463     return funcValue;
2464 }
2465 
NapiCreateFunctionTwo(napi_env env,napi_callback_info info)2466 static napi_value NapiCreateFunctionTwo(napi_env env, napi_callback_info info)
2467 {
2468     napi_value resultValue = nullptr;
2469     napi_status status = napi_create_function(env, nullptr, NAPI_AUTO_LENGTH, SayHello, nullptr, &resultValue);
2470     if (resultValue == nullptr) {
2471         napi_throw_error(env, nullptr, "napi_create_function fail");
2472         return nullptr;
2473     }
2474     if (status != napi_ok) {
2475         napi_throw_error(env, nullptr, "napi_create_function fail");
2476         return nullptr;
2477     }
2478     napi_value value;
2479     NAPI_CALL(env, napi_create_int32(env, 1, &value));
2480 
2481     return resultValue;
2482 }
2483 
napiRefthreadSafeFunction(napi_env env,napi_callback_info info)2484 static napi_value napiRefthreadSafeFunction(napi_env env, napi_callback_info info)
2485 {
2486     napi_threadsafe_function tsFunc = nullptr;
2487     napi_value resourceName = 0;
2488     napi_create_string_latin1(env, __func__, NAPI_AUTO_LENGTH, &resourceName);
2489     int32_t callJsCbDataTestId = 101;
2490     int32_t finalCbDataTestId = 1001;
2491     napi_status status = napi_create_threadsafe_function(env, nullptr, nullptr, resourceName,
2492                                                          0, 1, &callJsCbDataTestId,
2493                                                          nullptr, &finalCbDataTestId, nullptr, &tsFunc);
2494     NAPI_ASSERT(env, status != napi_ok, "napi_create_threadsafe_function failed");
2495 
2496     status = napi_ref_threadsafe_function(env, tsFunc);
2497     NAPI_ASSERT(env, status != napi_ok, "napi_ref_threadsafe_function");
2498     napi_value _value;
2499     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
2500 
2501     return _value;
2502 }
2503 
napiCreateDate(napi_env env,napi_callback_info info)2504 static napi_value napiCreateDate(napi_env env, napi_callback_info info)
2505 {
2506     napi_value createResult = nullptr;
2507     double time = 202110181203150;
2508     napi_status status = napi_create_date(env, time, &createResult);
2509     NAPI_ASSERT(env, status == napi_ok, "napi_create_date success");
2510     double getTime = false;
2511     napi_get_date_value(env, createResult, &getTime);
2512     bool result = false;
2513     if (time == getTime) {
2514         result = true;
2515     }
2516     napi_value value;
2517     NAPI_CALL(env, napi_create_int32(env, result, &value));
2518 
2519     return value;
2520 }
2521 
napiCreateBigintUint64(napi_env env,napi_callback_info info)2522 static napi_value napiCreateBigintUint64(napi_env env, napi_callback_info info)
2523 {
2524     uint64_t testValue = UINT64_MAX;
2525     napi_value result = nullptr;
2526     napi_create_bigint_uint64(env, testValue, &result);
2527 
2528     uint64_t resultValue = 0;
2529     bool flag = false;
2530     napi_get_value_bigint_uint64(env, result, &resultValue, &flag);
2531     NAPI_ASSERT(env, resultValue == testValue, "napi_get_value_bigint_int64 failed");
2532     napi_value value;
2533     NAPI_CALL(env, napi_create_int32(env, flag, &value));
2534 
2535     return value;
2536 }
2537 
napiCreateBigintInt64(napi_env env,napi_callback_info info)2538 static napi_value napiCreateBigintInt64(napi_env env, napi_callback_info info)
2539 {
2540     int64_t testValue = INT64_MAX;
2541     napi_value result = nullptr;
2542     napi_create_bigint_int64(env, testValue, &result);
2543     int64_t resultValue = 0;
2544     bool flag = false;
2545     napi_get_value_bigint_int64(env, result, &resultValue, &flag);
2546     NAPI_ASSERT(env, resultValue == testValue, "napi_get_value_bigint_int64 failed");
2547     napi_value value;
2548     NAPI_CALL(env, napi_create_int32(env, flag, &value));
2549 
2550     return value;
2551 }
2552 
napiCreateBigintWords(napi_env env,napi_callback_info info)2553 static napi_value napiCreateBigintWords(napi_env env, napi_callback_info info)
2554 {
2555     int signBit = 0;
2556     size_t wordCount = 4;
2557     uint64_t words[] = {0ULL, 34ULL, 56ULL, 2ULL};
2558     uint64_t wordsOut[] = {0ULL, 0ULL, 0ULL, 0ULL};
2559     napi_value result = nullptr;
2560     NAPI_CALL(env, napi_create_bigint_words(env, signBit, wordCount, words, &result));
2561     int retSignBit = -1;
2562     size_t retWordCount = 4;
2563     NAPI_CALL(env, napi_get_value_bigint_words(env, result, &retSignBit, &retWordCount, wordsOut));
2564     bool testResult = true;
2565     if (retSignBit != signBit || retWordCount != wordCount) {
2566         testResult = false;
2567     }
2568     for (size_t i = 0; i < wordCount; i++) {
2569         if (wordsOut[i] != words[i]) {
2570             testResult = false;
2571             break;
2572         }
2573     }
2574     napi_value value;
2575     NAPI_CALL(env, napi_create_int32(env, testResult, &value));
2576 
2577     return value;
2578 }
2579 
callFunction(napi_env env,napi_callback_info info)2580 static napi_value callFunction(napi_env env, napi_callback_info info)
2581 {
2582     size_t argc = 1;
2583     napi_value args[1];
2584     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
2585 
2586     NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments");
2587 
2588     napi_valuetype valuetype;
2589     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype));
2590 
2591     NAPI_ASSERT(env, valuetype == napi_function,
2592             "Wrong type of argment. Expects a string.");
2593     napi_value ret;
2594     NAPI_CALL(env, napi_call_function(env, nullptr, args[0], 0, nullptr, &ret));
2595     return ret;
2596 }
2597 
getGlobal(napi_env env,napi_callback_info info)2598 static napi_value getGlobal(napi_env env, napi_callback_info info)
2599 {
2600     napi_value result = nullptr;
2601     NAPI_CALL(env, napi_get_global(env, &result));
2602     NAPI_ASSERT(env, result != nullptr, "napi_get_global failed");
2603     return nullptr;
2604 }
2605 
2606 napi_threadsafe_function tsfn;
2607 napi_ref functionRef;
CallJs(napi_env env,napi_value jsCb,void * context,void * data)2608 static void CallJs(napi_env env, napi_value jsCb, void *context, void *data) {
2609 
2610     napi_value undefined;
2611     NAPI_CALL_RETURN_VOID(env, napi_get_undefined(env, &undefined));
2612     napi_value cb;
2613     NAPI_CALL_RETURN_VOID(env, napi_get_reference_value(env, functionRef, &cb));
2614 
2615     napi_value ret;
2616     int32_t num = 0;
2617     NAPI_CALL_RETURN_VOID(env, napi_call_function(env, undefined, cb, 0, nullptr, &ret));
2618     NAPI_CALL_RETURN_VOID(env, napi_get_value_int32(env, ret, &num));
2619     NAPI_ASSERT_RETURN_VOID(env, num == TAG_NUMBER, "CallJs fail");
2620 }
2621 
ThreadSafeTest(napi_env env,napi_callback_info info)2622 static napi_value ThreadSafeTest(napi_env env, napi_callback_info info) {
2623     size_t argc = 1;
2624     napi_value jsCb, work_name;
2625     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &jsCb, nullptr, nullptr));
2626     napi_create_reference(env, jsCb, 1, &functionRef);
2627 
2628     NAPI_CALL(env, napi_create_string_utf8(env, "work_name", NAPI_AUTO_LENGTH, &work_name));
2629 
2630     napi_valuetype valueType = napi_undefined;
2631     NAPI_CALL(env, napi_typeof(env, jsCb, &valueType));
2632     NAPI_ASSERT(env, valueType == napi_function, "valueType expect equal to napi_function");
2633 
2634     const char* context = "context";
2635     NAPI_CALL(env, napi_create_threadsafe_function(env, jsCb, nullptr, work_name, 0, 1, nullptr, nullptr,
2636         const_cast<void*>(reinterpret_cast<const void*>(context)), CallJs, &tsfn));
2637     void* retContext = nullptr;
2638     NAPI_CALL(env, napi_get_threadsafe_function_context(tsfn, &retContext));
2639     NAPI_ASSERT(env, retContext == context, "napi_get_threadsafe_function_context failed");
2640 
2641     napi_acquire_threadsafe_function(tsfn);
2642     napi_call_threadsafe_function(tsfn, nullptr, napi_tsfn_blocking);
2643 
2644     NAPI_CALL(env, napi_ref_threadsafe_function(env, tsfn));
2645     NAPI_CALL(env, napi_unref_threadsafe_function(env, tsfn));
2646     NAPI_CALL(env, napi_release_threadsafe_function(tsfn, napi_tsfn_release));
2647     napi_value _value;
2648     NAPI_CALL(env, napi_create_int32(env, 1, &_value));
2649     return _value;
2650 }
2651 
NoopDeleter(napi_env env,void * data,void * finalizeHint)2652 static void NoopDeleter(napi_env env, void* data, [[maybe_unused]] void* finalizeHint)
2653 {
2654     g_delCount++;
2655 }
2656 
2657 static const char TEST_STR[] =
2658     "Where there is a will, there is a way.";
2659 
DelTest(napi_env env,void * data,void * finalizeHint)2660 static void DelTest(napi_env env, void* data, [[maybe_unused]] void* finalizeHint)
2661 {
2662     free(data);
2663     g_delCount++;
2664 }
2665 
CreateBuffer(napi_env env,napi_callback_info info)2666 static napi_value CreateBuffer(napi_env env, napi_callback_info info)
2667 {
2668     const unsigned int bufferSize = sizeof(TEST_STR);
2669     char* copyPtr;
2670     napi_value napiBuffer;
2671     napi_status status = napi_create_buffer(env, bufferSize, (void**)(&copyPtr), &napiBuffer);
2672     if (status != napi_ok) {
2673         napi_throw_error(env, nullptr, "Failed to create buffer");
2674         return nullptr;
2675     }
2676     NAPI_ASSERT(env, copyPtr, "Unable to duplicate static text for CreateBuffer.");
2677     int ret = memcpy_s(copyPtr, bufferSize, TEST_STR, strlen(TEST_STR) + 1);
2678     NAPI_ASSERT(env, ret == 0, "memcpy_s failed");
2679     return napiBuffer;
2680 }
2681 
CreateExternalBuffer(napi_env env,napi_callback_info info)2682 static napi_value CreateExternalBuffer(napi_env env, napi_callback_info info)
2683 {
2684     char* copyPtr = strdup(TEST_STR);
2685     napi_value napiBuffer;
2686     const unsigned int bufferSize = sizeof(TEST_STR);
2687 
2688     NAPI_ASSERT(env, copyPtr, "Unable to duplicate static text for CreateExternalBuffer.");
2689     NAPI_CALL(env,
2690               napi_create_external_buffer(env,
2691                                           bufferSize,
2692                                           copyPtr,
2693                                           DelTest,
2694                                           nullptr /* finalizeHint */,
2695                                           &napiBuffer));
2696     return napiBuffer;
2697 }
2698 
BufferCopy(napi_env env,napi_callback_info info)2699 static napi_value BufferCopy(napi_env env, napi_callback_info info)
2700 {
2701     const unsigned int bufferSize = sizeof(TEST_STR);
2702     napi_value napiBuffer;
2703     void* dataPtr = nullptr;
2704     napi_status status = napi_create_buffer_copy(env, bufferSize, TEST_STR, &dataPtr, &napiBuffer);
2705     if (status != napi_ok) {
2706         napi_throw_error(env, nullptr, "Failed to create buffer");
2707         return nullptr;
2708     }
2709     return napiBuffer;
2710 }
2711 
IsBuffer(napi_env env,napi_callback_info info)2712 static napi_value IsBuffer(napi_env env, napi_callback_info info)
2713 {
2714     napi_value args[1];
2715     size_t argc = 1;
2716     if (napi_get_cb_info(env, info, &argc, args, nullptr, nullptr) != napi_ok) {
2717         napi_throw_error(env, nullptr, "Failed to parse arguments");
2718         return nullptr;
2719     }
2720     NAPI_ASSERT(env, argc == 1, "The number of arguments provided is incorrect.");
2721     napi_value napiBuffer = args[0];
2722     bool result;
2723     napi_status status = napi_is_buffer(env, napiBuffer, &result);
2724     if (status != napi_ok) {
2725         napi_throw_error(env, nullptr, "The parameter instance is not of type buffer.");
2726     }
2727     napi_value returnValue;
2728     NAPI_CALL(env, napi_get_boolean(env, result, &returnValue));
2729     return returnValue;
2730 }
2731 
GetBufferInfo(napi_env env,napi_callback_info info)2732 static napi_value GetBufferInfo(napi_env env, napi_callback_info info)
2733 {
2734     size_t argc = 1;
2735     napi_value args[1];
2736     const unsigned int bufferSize = sizeof(TEST_STR);
2737     if (napi_get_cb_info(env, info, &argc, args, nullptr, nullptr) != napi_ok) {
2738         napi_throw_error(env, nullptr, "Failed to parse arguments");
2739         return nullptr;
2740     }
2741     NAPI_ASSERT(env, argc == 1, "Incorrect number of parameters.");
2742     napi_value napiBuffer = args[0];
2743     char *bufferData;
2744     napi_value returnValue;
2745     size_t bufferLength;
2746     if (napi_get_buffer_info(env, napiBuffer, (void**)(&bufferData), &bufferLength) != napi_ok) {
2747         napi_throw_error(env, nullptr, "Failed to get buffer info.");
2748         return nullptr;
2749     }
2750     NAPI_CALL(env, napi_get_boolean(env,
2751                                     !strcmp(bufferData, TEST_STR) && bufferLength == bufferSize,
2752                                     &returnValue));
2753     return returnValue;
2754 }
2755 
StaticBuffer(napi_env env,napi_callback_info info)2756 static napi_value StaticBuffer(napi_env env, napi_callback_info info)
2757 {
2758     napi_value napiBuffer;
2759     const unsigned int bufferSize = sizeof(TEST_STR);
2760     NAPI_CALL(env,
2761               napi_create_external_buffer(env,
2762                                           bufferSize,
2763                                           (void*)TEST_STR,
2764                                           NoopDeleter,
2765                                           nullptr /* finalizeHint */,
2766                                           &napiBuffer));
2767     return napiBuffer;
2768 }
2769 
GetSymbolNames(napi_env env,napi_callback_info info)2770 static napi_value GetSymbolNames(napi_env env, napi_callback_info info)
2771 {
2772     size_t argc = 1;
2773     napi_value args[1];
2774     if (napi_get_cb_info(env, info, &argc, args, nullptr, nullptr) != napi_ok) {
2775         napi_throw_error(env, nullptr, "Failed to parse arguments");
2776         return nullptr;
2777     }
2778     if (argc < 1) {
2779         napi_throw_error(env, nullptr, "Wrong number of arguments");
2780         return nullptr;
2781     }
2782     napi_valuetype valueType0;
2783     NAPI_CALL(env, napi_typeof(env, args[0], &valueType0));
2784     if (valueType0 != napi_object) {
2785         napi_throw_error(env, nullptr, "Wrong type of arguments. Expects an object as first argument.");
2786         return nullptr;
2787     }
2788     napi_value output;
2789     NAPI_CALL(env,
2790               napi_get_all_property_names(env,
2791                                           args[0],
2792                                           napi_key_include_prototypes,
2793                                           napi_key_skip_strings,
2794                                           napi_key_numbers_to_strings,
2795                                           &output));
2796     return output;
2797 }
2798 
GetEnumerableWritableNames(napi_env env,napi_callback_info info)2799 static napi_value GetEnumerableWritableNames(napi_env env, napi_callback_info info)
2800 {
2801     size_t argc = 1;
2802     napi_value args[1];
2803     if (napi_get_cb_info(env, info, &argc, args, nullptr, nullptr) != napi_ok) {
2804         napi_throw_error(env, nullptr, "Failed to parse arguments");
2805         return nullptr;
2806     }
2807     if (argc < 1) {
2808         napi_throw_error(env, nullptr, "Wrong number of arguments");
2809         return nullptr;
2810     }
2811     napi_valuetype valueType0;
2812     if (napi_typeof(env, args[0], &valueType0) != napi_ok) {
2813         napi_throw_error(env, nullptr, "Failed to get argument type");
2814         return nullptr;
2815     }
2816     if (valueType0 != napi_object) {
2817         napi_throw_error(env, nullptr, "Wrong type of arguments. Expects an object as first argument.");
2818         return nullptr;
2819     }
2820     napi_value output;
2821     NAPI_CALL(env,
2822               napi_get_all_property_names(env,
2823                                           args[0],
2824                                           napi_key_include_prototypes,
2825                                           static_cast<napi_key_filter>(napi_key_writable | napi_key_enumerable),
2826                                           napi_key_numbers_to_strings,
2827                                           &output));
2828     return output;
2829 }
2830 
GetOwnWritableNames(napi_env env,napi_callback_info info)2831 static napi_value GetOwnWritableNames(napi_env env, napi_callback_info info)
2832 {
2833     size_t argc = 1;
2834     napi_value args[1];
2835     if (napi_get_cb_info(env, info, &argc, args, nullptr, nullptr) != napi_ok) {
2836         napi_throw_error(env, nullptr, "Failed to parse arguments");
2837         return nullptr;
2838     }
2839     if (argc < 1) {
2840         napi_throw_error(env, nullptr, "Wrong number of arguments");
2841         return nullptr;
2842     }
2843     napi_valuetype valueType0;
2844     if (napi_typeof(env, args[0], &valueType0) != napi_ok) {
2845         napi_throw_error(env, nullptr, "Failed to get argument type");
2846         return nullptr;
2847     }
2848     if (valueType0 != napi_object) {
2849         napi_throw_error(env, nullptr, "Wrong type of arguments. Expects an object as first argument.");
2850         return nullptr;
2851     }
2852     napi_value output;
2853     NAPI_CALL(env,
2854               napi_get_all_property_names(env,
2855                                           args[0],
2856                                           napi_key_own_only,
2857                                           napi_key_writable,
2858                                           napi_key_numbers_to_strings,
2859                                           &output));
2860     return output;
2861 }
2862 
GetEnumerableConfigurableNames(napi_env env,napi_callback_info info)2863 static napi_value GetEnumerableConfigurableNames(napi_env env, napi_callback_info info)
2864 {
2865     size_t argc = 1;
2866     napi_value args[1];
2867     if (napi_get_cb_info(env, info, &argc, args, nullptr, nullptr) != napi_ok) {
2868         napi_throw_error(env, nullptr, "Failed to parse arguments");
2869         return nullptr;
2870     }
2871     if (argc < 1) {
2872         napi_throw_error(env, nullptr, "Wrong number of arguments");
2873         return nullptr;
2874     }
2875     napi_valuetype valueType0;
2876     if (napi_typeof(env, args[0], &valueType0) != napi_ok) {
2877         napi_throw_error(env, nullptr, "Failed to get argument type");
2878         return nullptr;
2879     }
2880     if (valueType0 != napi_object) {
2881         napi_throw_error(env, nullptr, "Wrong type of arguments. Expects an object as first argument.");
2882         return nullptr;
2883     }
2884     napi_value output;
2885     NAPI_CALL(env,
2886               napi_get_all_property_names(env,
2887                                           args[0],
2888                                           napi_key_include_prototypes,
2889                                           static_cast<napi_key_filter>(napi_key_enumerable | napi_key_configurable),
2890                                           napi_key_numbers_to_strings,
2891                                           &output));
2892     return output;
2893 }
2894 
GetOwnConfigurableNames(napi_env env,napi_callback_info info)2895 static napi_value GetOwnConfigurableNames(napi_env env, napi_callback_info info)
2896 {
2897     size_t argc = 1;
2898     napi_value args[1];
2899     if (napi_get_cb_info(env, info, &argc, args, nullptr, nullptr) != napi_ok) {
2900         napi_throw_error(env, nullptr, "Failed to parse arguments");
2901         return nullptr;
2902     }
2903     if (argc < 1) {
2904         napi_throw_error(env, nullptr, "Wrong number of arguments");
2905         return nullptr;
2906     }
2907     napi_valuetype valueType0;
2908     if (napi_typeof(env, args[0], &valueType0) != napi_ok) {
2909         napi_throw_error(env, nullptr, "Failed to get argument type");
2910         return nullptr;
2911     }
2912     if (valueType0 != napi_object) {
2913         napi_throw_error(env, nullptr, "Wrong type of arguments. Expects an object as first argument.");
2914         return nullptr;
2915     }
2916     napi_value output;
2917     NAPI_CALL(env,
2918               napi_get_all_property_names(env,
2919                                           args[0],
2920                                           napi_key_own_only,
2921                                           napi_key_configurable,
2922                                           napi_key_numbers_to_strings,
2923                                           &output));
2924     return output;
2925 }
2926 
GetAllPropertyNames(napi_env env,napi_callback_info info)2927 static napi_value GetAllPropertyNames(napi_env env, napi_callback_info info)
2928 {
2929     napi_value returnValue, props;
2930     NAPI_CALL(env, napi_create_object(env, &returnValue));
2931     add_returned_status(env,
2932                         "envIsNull",
2933                         returnValue,
2934                         "Invalid argument",
2935                         napi_invalid_arg,
2936                         napi_get_all_property_names(nullptr,
2937                                                     returnValue,
2938                                                     napi_key_own_only,
2939                                                     napi_key_writable,
2940                                                     napi_key_keep_numbers,
2941                                                     &props));
2942     napi_get_all_property_names(env,
2943                                 nullptr,
2944                                 napi_key_own_only,
2945                                 napi_key_writable,
2946                                 napi_key_keep_numbers,
2947                                 &props);
2948     add_last_status(env, "objectIsNull", returnValue);
2949     napi_get_all_property_names(env,
2950                                 returnValue,
2951                                 napi_key_own_only,
2952                                 napi_key_writable,
2953                                 napi_key_keep_numbers,
2954                                 nullptr);
2955     add_last_status(env, "valueIsNull", returnValue);
2956     return returnValue;
2957 }
2958 
FreezeTest(napi_env env,napi_callback_info info)2959 static napi_value FreezeTest(napi_env env, napi_callback_info info)
2960 {
2961     size_t argc = 1;
2962     napi_value args[1];
2963     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
2964 
2965     // Check if argument is an object
2966     napi_value objectConstructor;
2967     napi_status status = napi_get_named_property(env, args[0], "Object", &objectConstructor);
2968     if (status != napi_ok) {
2969         napi_throw_error(env, nullptr, "Argument must be an object");
2970     }
2971     // Freeze the object
2972     napi_value object = args[0];
2973     NAPI_CALL(env, napi_object_freeze(env, object));
2974     return object;
2975 }
2976 
SealTest(napi_env env,napi_callback_info info)2977 static napi_value SealTest(napi_env env, napi_callback_info info)
2978 {
2979     size_t argc = 1;
2980     napi_value args[1];
2981     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
2982 
2983     // Check if argument is an object
2984     napi_value objectConstructor;
2985     napi_status status = napi_get_named_property(env, args[0], "Object", &objectConstructor);
2986     if (status != napi_ok) {
2987         napi_throw_error(env, nullptr, "Argument must be an object");
2988     }
2989     // Seal the object
2990     napi_value object = args[0];
2991     NAPI_CALL(env, napi_object_seal(env, object));
2992 
2993     return object;
2994 }
2995 
FinalizeCallback(napi_env env,void * finalizeData,void * finalizeHint)2996 void FinalizeCallback(napi_env env, void* finalizeData, void* finalizeHint)
2997 {
2998     free(finalizeData);
2999 }
3000 
External(napi_env env,napi_callback_info info)3001 static napi_value External(napi_env env, napi_callback_info info)
3002 {
3003     const uint8_t parraySize  = 3;
3004     void* externalData = malloc(parraySize  * sizeof(int8_t));
3005 
3006     //Sets the three elements of the array that are used to create an ArrayBuffer object
3007     ((int8_t*)externalData)[0] = 0; // 0 means that the first value of the created array is 0
3008     ((int8_t*)externalData)[1] = 1; // 1 means that the second value of the created array is 1
3009     ((int8_t*)externalData)[2] = 2; // 2 means that the third value of the created array is 2
3010 
3011     napi_value outputBuffer;
3012     napi_status status = napi_create_external_arraybuffer(env,
3013                                                           externalData,
3014                                                           parraySize  * sizeof(int8_t),
3015                                                           FinalizeCallback,
3016                                                           nullptr,  // finalizeHint
3017                                                           &outputBuffer);
3018     if (status != napi_ok) {
3019         napi_throw_error(env, nullptr, "Failed to create external arraybuffer");
3020         return nullptr;
3021     }
3022     napi_value outputArray;
3023     status = napi_create_typedarray(env,
3024                                     napi_int8_array,
3025                                     parraySize,
3026                                     outputBuffer,
3027                                     0,
3028                                     &outputArray);
3029     if (status != napi_ok) {
3030         napi_throw_error(env, nullptr, "Failed to create typedarray");
3031         return nullptr;
3032     }
3033     return outputArray;
3034 }
3035 
DetachTest(napi_env env,napi_callback_info info)3036 static napi_value DetachTest(napi_env env, napi_callback_info info)
3037 {
3038     size_t argc = 1;
3039     napi_value args[1];
3040     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
3041     NAPI_ASSERT(env, argc == 1, "The number of arguments provided is incorrect.");
3042     void* data;
3043     size_t length;
3044     napi_typedarray_type type;
3045     napi_value arrayBuffer;
3046     NAPI_CALL(env, napi_get_typedarray_info(env, args[0], &type, &length, &data, &arrayBuffer, nullptr));
3047 
3048     NAPI_CALL(env, napi_detach_arraybuffer(env, arrayBuffer));
3049     return nullptr;
3050 }
3051 
IsDetachedTest(napi_env env,napi_callback_info info)3052 napi_value IsDetachedTest(napi_env env, napi_callback_info info)
3053 {
3054     size_t argc = 1;
3055     napi_value args[1];
3056     napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
3057     if (status != napi_ok || argc != 1) {
3058         napi_throw_error(env, nullptr, "Wrong number of arguments.");
3059         return nullptr;
3060     }
3061     bool isArraybuffer;
3062     status = napi_is_arraybuffer(env, args[0], &isArraybuffer);
3063     if (status != napi_ok || !isArraybuffer) {
3064         napi_throw_error(env, nullptr, "Wrong type of arguments. Expects an array buffer as first argument.");
3065         return nullptr;
3066     }
3067     bool isDetached;
3068     status = napi_is_detached_arraybuffer(env, args[0], &isDetached);
3069     if (status != napi_ok) {
3070         napi_throw_error(env, nullptr, "Failed to check if array buffer is detached.");
3071         return nullptr;
3072     }
3073     napi_value result;
3074     status = napi_get_boolean(env, isDetached, &result);
3075     if (status != napi_ok) {
3076         napi_throw_error(env, nullptr, "Failed to create boolean result.");
3077         return nullptr;
3078     }
3079     return result;
3080 }
3081 
AsyncDestroyCb(napi_env env,void * data,void * hint)3082 static void AsyncDestroyCb(napi_env env, void *data, void *hint)
3083 {
3084     napi_status status = napi_async_destroy(env, (napi_async_context) data);
3085     // We cannot use NAPI_ASSERT_RETURN_VOID because we need to have a JS
3086     // stack below in order to use exceptions.
3087     if (status != napi_ok) {
3088         napi_throw_error(env, nullptr, "napi_async_destroy is failed");
3089         return;
3090     }
3091 }
3092 
CreateAsyncResource(napi_env env,napi_callback_info info)3093 static napi_value CreateAsyncResource(napi_env env, napi_callback_info info)
3094 {
3095     napi_value asyncContextWrap;
3096     NAPI_CALL(env, napi_create_object(env, &asyncContextWrap));
3097 
3098     size_t argc = 2; // Number of parameters is 2
3099     napi_value args[2]; // Number of parameters is 2
3100     size_t parameterCount = 2; // Number of parameters is 2
3101     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
3102 
3103     napi_value resource = args[0];
3104     napi_value jsDestroyOnFinalizer = args[1];
3105     napi_valuetype resourceType;
3106     NAPI_CALL(env, napi_typeof(env, resource, &resourceType));
3107     if (resourceType != napi_object) {
3108         resource = nullptr;
3109     }
3110 
3111     napi_value resourceName;
3112     NAPI_CALL(env,
3113               napi_create_string_utf8(env, "test_async", NAPI_AUTO_LENGTH, &resourceName));
3114 
3115     napi_async_context context;
3116     NAPI_CALL(env, napi_async_init(env, resource, resourceName, &context));
3117 
3118     bool destroyOnFinalizer = true;
3119     if (argc == parameterCount) {
3120         NAPI_CALL(env, napi_get_value_bool(env, jsDestroyOnFinalizer, &destroyOnFinalizer));
3121     }
3122     if (resourceType == napi_object && destroyOnFinalizer) {
3123         NAPI_CALL(env,
3124             napi_add_finalizer(env, resource, reinterpret_cast<void*>(context), AsyncDestroyCb, nullptr, nullptr));
3125     }
3126     NAPI_CALL(env,
3127         napi_wrap(env, asyncContextWrap, context, [](napi_env env, void *data, void *hint) {}, nullptr, nullptr));
3128     return asyncContextWrap;
3129 }
3130 
DestroyAsyncResource(napi_env env,napi_callback_info info)3131 static napi_value DestroyAsyncResource(napi_env env, napi_callback_info info)
3132 {
3133     size_t argc = 1;
3134     napi_value args[1];
3135 
3136     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
3137     NAPI_ASSERT(env, argc == 1, "Wrong number of arguments");
3138 
3139     napi_value asyncContextWrap = args[0];
3140 
3141     napi_async_context asyncContext;
3142     NAPI_CALL(env, napi_remove_wrap(env, asyncContextWrap, (void **)&asyncContext));
3143     NAPI_CALL(env, napi_async_destroy(env, asyncContext));
3144 
3145     return asyncContextWrap;
3146 }
3147 
RunInCallbackScope(napi_env env,napi_callback_info info)3148 static napi_value RunInCallbackScope(napi_env env, napi_callback_info info)
3149 {
3150     size_t argc;
3151     constexpr size_t parameterCount = 3;
3152     napi_value args[parameterCount];
3153     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, nullptr, nullptr, nullptr));
3154     NAPI_ASSERT(env, argc == parameterCount, "Wrong number of arguments");
3155 
3156     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
3157 
3158     napi_valuetype valuetype;
3159     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype));
3160     NAPI_ASSERT(env, valuetype == napi_object,
3161                 "Wrong type of arguments. Expects an object as first argument.");
3162 
3163     NAPI_CALL(env, napi_typeof(env, args[1], &valuetype));
3164     NAPI_ASSERT(env, valuetype == napi_string,
3165                 "Wrong type of arguments. Expects a string as second argument.");
3166     constexpr size_t parameterTwo = 2;
3167     NAPI_CALL(env, napi_typeof(env, args[parameterTwo], &valuetype));
3168     NAPI_ASSERT(env, valuetype == napi_function,
3169                 "Wrong type of arguments. Expects a function as third argument.");
3170 
3171     napi_async_context context;
3172     NAPI_CALL(env, napi_async_init(env, args[0], args[1], &context));
3173 
3174     napi_callback_scope scope = nullptr;
3175     NAPI_CALL(env, napi_open_callback_scope(env, args[0], context, &scope));
3176 
3177     // If the function has an exception pending after the call that is ok
3178     // so we don't use NAPI_CALL as we must close the callback scope
3179     // regardless.
3180     napi_value result = nullptr;
3181     napi_status functionCallResult =
3182         napi_call_function(env, args[0], args[parameterTwo], 0, nullptr, &result);
3183     if (functionCallResult != napi_ok) {
3184         GET_AND_THROW_LAST_ERROR(env);
3185     }
3186 
3187     NAPI_CALL(env, napi_close_callback_scope(env, scope));
3188     NAPI_CALL(env, napi_async_destroy(env, context));
3189 
3190     return result;
3191 }
3192 
Callback(uv_work_t * req,int ignored)3193 static void Callback(uv_work_t *req, [[maybe_unused]] int ignored)
3194 {
3195     napi_env env = g_sharedEnv;
3196 
3197     napi_handle_scope handleScope = nullptr;
3198     NAPI_CALL_RETURN_VOID(env, napi_open_handle_scope(env, &handleScope));
3199 
3200     napi_value resourceName;
3201     NAPI_CALL_RETURN_VOID(env,
3202                           napi_create_string_utf8(env, "test", NAPI_AUTO_LENGTH, &resourceName));
3203     napi_async_context context;
3204     NAPI_CALL_RETURN_VOID(env,
3205                           napi_async_init(env, nullptr, resourceName, &context));
3206 
3207     napi_value resourceObject;
3208     NAPI_CALL_RETURN_VOID(env, napi_create_object(env, &resourceObject));
3209 
3210     napi_value undefinedValue;
3211     NAPI_CALL_RETURN_VOID(env, napi_get_undefined(env, &undefinedValue));
3212 
3213     napi_callback_scope scope = nullptr;
3214     NAPI_CALL_RETURN_VOID(env,
3215                           napi_open_callback_scope(env, resourceObject, context, &scope));
3216 
3217     NAPI_CALL_RETURN_VOID(env,
3218                           napi_resolve_deferred(env, g_deferred, undefinedValue));
3219 
3220     NAPI_CALL_RETURN_VOID(env, napi_close_callback_scope(env, scope));
3221 
3222     NAPI_CALL_RETURN_VOID(env, napi_close_handle_scope(env, handleScope));
3223     NAPI_CALL_RETURN_VOID(env, napi_async_destroy(env, context));
3224     free(req);
3225 }
3226 
NoopWork(uv_work_t * work)3227 static void NoopWork([[maybe_unused]] uv_work_t *work)
3228 {
3229     return;
3230 }
3231 
TestResolveAsync(napi_env env,napi_callback_info info)3232 static napi_value TestResolveAsync(napi_env env, napi_callback_info info)
3233 {
3234     napi_value promise = nullptr;
3235     if (g_deferred == nullptr) {
3236         g_sharedEnv = env;
3237         NAPI_CALL(env, napi_create_promise(env, &g_deferred, &promise));
3238 
3239         uv_loop_t *loop = nullptr;
3240         NAPI_CALL(env, napi_get_uv_event_loop(env, &loop));
3241 
3242         uv_work_t* req = reinterpret_cast<uv_work_t*>(malloc(sizeof(uv_work_t)));
3243         uv_queue_work(loop,
3244                       req,
3245                       NoopWork,
3246                       Callback);
3247     }
3248     return promise;
3249 }
3250 
CallCbAndDeleteRef(napi_env env,napi_ref * optionalRef)3251 static void CallCbAndDeleteRef(napi_env env, napi_ref *optionalRef)
3252 {
3253     napi_value jsCb;
3254     napi_value undefined;
3255 
3256     if (optionalRef == nullptr) {
3257         InstanceAddonData *data;
3258         napi_get_instance_data(env, (void **)&data);
3259         optionalRef = &data->jsCbRef;
3260     }
3261 
3262     napi_get_reference_value(env, *optionalRef, &jsCb);
3263     napi_get_undefined(env, &undefined);
3264     napi_call_function(env, undefined, jsCb, 0, nullptr, nullptr);
3265     napi_delete_reference(env, *optionalRef);
3266 
3267     *optionalRef = nullptr;
3268 }
3269 
EstablishCallbackRef(napi_env env,napi_callback_info info)3270 static bool EstablishCallbackRef(napi_env env, napi_callback_info info)
3271 {
3272     InstanceAddonData *data;
3273     size_t argc = 1;
3274     napi_value jsCb;
3275 
3276     napi_get_instance_data(env, (void **)&data);
3277 
3278     napi_get_cb_info(env, info, &argc, &jsCb, nullptr, nullptr);
3279     napi_create_reference(env, jsCb, 1, &data->jsCbRef);
3280 
3281     return true;
3282 }
3283 
AsyncWorkCbExecute(napi_env env,void * data)3284 static void AsyncWorkCbExecute([[maybe_unused]] napi_env env, [[maybe_unused]] void* data)
3285 {
3286     return;
3287 }
3288 
AsyncWorkCbComplete(napi_env env,napi_status status,void * data)3289 static void AsyncWorkCbComplete(napi_env env,
3290                                 [[maybe_unused]] napi_status status,
3291                                 [[maybe_unused]] void* data)
3292 {
3293     CallCbAndDeleteRef(env, nullptr);
3294 }
3295 
DeleteAddonData(napi_env env,void * rawData,void * hint)3296 static void DeleteAddonData(napi_env env, void* rawData, void* hint)
3297 {
3298     InstanceData* data = reinterpret_cast<InstanceData*>(rawData);
3299     if (data->print) {
3300         printf("deleting addon data\n");
3301     }
3302     if (data->jsCbRef != nullptr) {
3303         NAPI_CALL_RETURN_VOID(env, napi_delete_reference(env, data->jsCbRef));
3304     }
3305     free(data);
3306 }
3307 
NapiSetInstanceData(napi_env env,napi_callback_info info)3308 static napi_value NapiSetInstanceData(napi_env env, napi_callback_info info)
3309 {
3310     InstanceData* data = reinterpret_cast<InstanceData*>(malloc(sizeof(*data)));
3311     data->value = 1;
3312     data->print = true;
3313     data->jsCbRef = nullptr;
3314 
3315     NAPI_CALL(env, napi_set_instance_data(env, data, DeleteAddonData, nullptr));
3316 
3317     InstanceData* getData = nullptr;
3318     NAPI_CALL(env, napi_get_instance_data(env, (void**)&getData));
3319     ++getData->value;
3320     const size_t expectValue = 2;
3321 
3322     bool res = true;
3323     NAPI_ASSERT(env, getData->value == expectValue, "napi_get_instance_data failed");
3324 
3325     napi_value value;
3326     NAPI_CALL(env, napi_create_int32(env, res, &value));
3327 
3328     return value;
3329 }
3330 
AsyncWorkCallback(napi_env env,napi_callback_info info)3331 static napi_value AsyncWorkCallback(napi_env env, napi_callback_info info)
3332 {
3333     if (EstablishCallbackRef(env, info)) {
3334         napi_value resourceName;
3335         napi_async_work work;
3336 
3337         NAPI_CALL(env,
3338             napi_create_string_utf8(
3339                 env, "AsyncIncrement", NAPI_AUTO_LENGTH, &resourceName));
3340         NAPI_CALL(env,
3341             napi_create_async_work(
3342                 env, nullptr, resourceName, AsyncWorkCbExecute, AsyncWorkCbComplete,
3343                 nullptr, &work));
3344         NAPI_CALL(env, napi_queue_async_work(env, work));
3345     }
3346 
3347     return nullptr;
3348 }
3349 
MustNotCall(napi_async_cleanup_hook_handle hook,void * arg)3350 static void MustNotCall(napi_async_cleanup_hook_handle hook, void* arg)
3351 {
3352     return;
3353 }
3354 
CreateAsyncData()3355 static AsyncData* CreateAsyncData()
3356 {
3357     AsyncData* data = reinterpret_cast<AsyncData*>(malloc(sizeof(AsyncData)));
3358     data->handle = nullptr;
3359     return data;
3360 }
3361 
AfterCleanupHookTwo(uv_handle_t * handle)3362 static void AfterCleanupHookTwo(uv_handle_t* handle)
3363 {
3364     g_cleanupHookCount++;
3365     AsyncData* data = reinterpret_cast<AsyncData*>(handle->data);
3366     napi_status status = napi_remove_async_cleanup_hook(data->handle);
3367     if (status != napi_ok) {
3368         napi_throw_error(data->env, nullptr, "napi_remove_async_cleanup_hook is failed");
3369         return;
3370     }
3371     free(data);
3372 }
3373 
AfterCleanupHookOne(uv_async_t * async)3374 static void AfterCleanupHookOne(uv_async_t* async)
3375 {
3376     g_cleanupHookCount++;
3377     uv_close((uv_handle_t*)async, AfterCleanupHookTwo);
3378 }
3379 
AsyncCleanupHook(napi_async_cleanup_hook_handle handle,void * arg)3380 static void AsyncCleanupHook(napi_async_cleanup_hook_handle handle, void* arg)
3381 {
3382     g_cleanupHookCount++;
3383     AsyncData* data = reinterpret_cast<AsyncData*>(arg);
3384     uv_loop_t* loop = nullptr;
3385     napi_status status = napi_get_uv_event_loop(data->env, &loop);
3386     if (status != napi_ok) {
3387         napi_throw_error(data->env, nullptr, "napi_get_uv_event_loop is failed");
3388         return;
3389     }
3390     int err = uv_async_init(loop, &data->async, AfterCleanupHookOne);
3391     if (err != 0) {
3392         napi_throw_error(data->env, nullptr, "uv_async_init is failed");
3393         return;
3394     }
3395 
3396     data->async.data = data;
3397     data->handle = handle;
3398     uv_async_send(&data->async);
3399 }
3400 
ObjectFinalizer(napi_env env,void * data,void * hint)3401 static void ObjectFinalizer(napi_env env, void* data, void* hint)
3402 {
3403     const int cleanupHookCount = 6;
3404     if (g_cleanupHookCount != cleanupHookCount) {
3405         napi_throw_error(env, nullptr, "cleanup_hook_count is error");
3406         return;
3407     }
3408 
3409     napi_ref *ref = reinterpret_cast<napi_ref *>(data);
3410     NAPI_CALL_RETURN_VOID(env, napi_delete_reference(env, *ref));
3411     free(ref);
3412 }
3413 
CreateObjectWrap(napi_env env)3414 static void CreateObjectWrap(napi_env env)
3415 {
3416     napi_value jsObj;
3417     napi_ref *ref = reinterpret_cast<napi_ref *>(malloc(sizeof(napi_ref)));
3418     NAPI_CALL_RETURN_VOID(env, napi_create_object(env, &jsObj));
3419     NAPI_CALL_RETURN_VOID(
3420         env, napi_wrap(env, jsObj, ref, ObjectFinalizer, nullptr, ref));
3421     // create a strong reference so that the finalizer is called at shutdown.
3422     NAPI_CALL_RETURN_VOID(env, napi_reference_ref(env, *ref, nullptr));
3423 }
3424 
NapiAsyncCleanUpHook(napi_env env,napi_callback_info exports)3425 static napi_value NapiAsyncCleanUpHook(napi_env env, napi_callback_info exports)
3426 {
3427     // Reinitialize the static variable to be compatible with musl libc.
3428     g_cleanupHookCount = 0;
3429     // Create object wrap before cleanup hooks.
3430     CreateObjectWrap(env);
3431 
3432     {
3433         AsyncData* data = CreateAsyncData();
3434         data->env = env;
3435         napi_add_async_cleanup_hook(env, AsyncCleanupHook, data, &data->handle);
3436     }
3437 
3438     {
3439         AsyncData* data = CreateAsyncData();
3440         data->env = env;
3441         napi_add_async_cleanup_hook(env, AsyncCleanupHook, data, nullptr);
3442     }
3443 
3444     {
3445         napi_async_cleanup_hook_handle mustNotCallHandle;
3446         napi_add_async_cleanup_hook(
3447             env, MustNotCall, nullptr, &mustNotCallHandle);
3448         napi_remove_async_cleanup_hook(mustNotCallHandle);
3449     }
3450 
3451     // Create object wrap after cleanup hooks.
3452     CreateObjectWrap(env);
3453 
3454     return nullptr;
3455 }
3456 
Cleanup(void * arg)3457 static void Cleanup(void* arg)
3458 {
3459     g_cleanupHookCount++;
3460     printf("Cleanup(%d)\n", *reinterpret_cast<int*>(arg));
3461 }
3462 
CustomObjectFinalizer(napi_env env,void * data,void * hint)3463 static void CustomObjectFinalizer(napi_env env, void* data, void* hint)
3464 {
3465     // cleanup is called once.
3466     if (g_cleanupHookCount != 1) {
3467         napi_throw_error(env, nullptr, "cleanup_hook_count is error");
3468         return;
3469     }
3470 
3471     napi_ref *ref = reinterpret_cast<napi_ref *>(data);
3472     NAPI_CALL_RETURN_VOID(env, napi_delete_reference(env, *ref));
3473     free(ref);
3474 }
3475 
ObjectWrapper(napi_env env)3476 static void ObjectWrapper(napi_env env)
3477 {
3478     napi_value jsObj;
3479     napi_ref *ref = reinterpret_cast<napi_ref *>(malloc(sizeof(napi_ref)));
3480     NAPI_CALL_RETURN_VOID(env, napi_create_object(env, &jsObj));
3481     NAPI_CALL_RETURN_VOID(
3482         env, napi_wrap(env, jsObj, ref, CustomObjectFinalizer, nullptr, ref));
3483     // create a strong reference so that the finalizer is called at shutdown.
3484     NAPI_CALL_RETURN_VOID(env, napi_reference_ref(env, *ref, nullptr));
3485 }
3486 
NapiEnvCleanUpHook(napi_env env,napi_callback_info exports)3487 static napi_value NapiEnvCleanUpHook(napi_env env, napi_callback_info exports)
3488 {
3489     // Create object wrap before cleanup hooks.
3490     g_cleanupHookCount = 0;
3491     static int argValue = 42;
3492     static int argValueRemoved = 17;
3493     ObjectWrapper(env);
3494 
3495     napi_add_env_cleanup_hook(env, Cleanup, &argValueRemoved);
3496     napi_add_env_cleanup_hook(env, Cleanup, &argValue);
3497     napi_remove_env_cleanup_hook(env, Cleanup, &argValueRemoved);
3498 
3499     // Create object wrap after cleanup hooks.
3500     CreateObjectWrap(env);
3501 
3502     return nullptr;
3503 }
3504 
GetModuleFileName(napi_env env,napi_callback_info info)3505 static napi_value GetModuleFileName(napi_env env, napi_callback_info info)
3506 {
3507     const char *filename;
3508     napi_value result;
3509     node_api_get_module_file_name(env, &filename);
3510     napi_create_string_utf8(env, filename, NAPI_AUTO_LENGTH, &result);
3511     return result;
3512 }
3513 
AsyncWorkWithQos(napi_env env,napi_callback_info info)3514 static napi_value AsyncWorkWithQos(napi_env env, napi_callback_info info)
3515 {
3516     size_t argc = 2;
3517     napi_value args[2];
3518     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
3519 
3520     AddonData* addonData = reinterpret_cast<AddonData*>(malloc(sizeof(AddonData)));
3521     if (addonData == nullptr) {
3522         return nullptr;
3523     }
3524 
3525     NAPI_CALL(env, napi_get_value_double(env, args[0], &addonData->args));
3526     NAPI_CALL(env, napi_create_reference(env, args[1], 1, &addonData->callback));
3527 
3528     napi_value resourceName = nullptr;
3529     NAPI_CALL(env, napi_create_string_utf8(env, "AsyncWorkWithQosTest", NAPI_AUTO_LENGTH, &resourceName));
3530     NAPI_CALL(env, napi_create_async_work(env, nullptr, resourceName, AddExecuteCB, AddCallbackCompleteCB,
3531         (void *)addonData, &addonData->asyncWork));
3532 
3533     NAPI_CALL(env, napi_queue_async_work_with_qos(env, addonData->asyncWork, napi_qos_default));
3534 
3535     napi_value _value = 0;
3536     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
3537     return _value;
3538 }
3539 
TestDetachCallback(napi_env env,void * nativeObject,void * hint)3540 static void* TestDetachCallback(napi_env env, void* nativeObject, void* hint)
3541 {
3542     printf("this is detach callback");
3543     return nativeObject;
3544 }
3545 
TestAttachCallback(napi_env env,void * nativeObject,void * hint)3546 static napi_value TestAttachCallback(napi_env env, void* nativeObject, void* hint)
3547 {
3548     printf("this is attach callback");
3549     napi_value object = nullptr;
3550     napi_value number = nullptr;
3551     uint32_t data = 0;
3552     if (hint != nullptr) {
3553         object = reinterpret_cast<napi_value>(nativeObject);
3554         data = 2000; // 2000 : Is number.
3555         napi_create_uint32(env, data, &number);
3556     } else {
3557         napi_create_object(env, &object);
3558         data = 1000; // 1000 : Is number.
3559         napi_create_uint32(env, data, &number);
3560     }
3561     napi_set_named_property(env, object, "number", number);
3562     return object;
3563 }
3564 
CreateWithPropertiesTestGetter(napi_env env,napi_callback_info info)3565 static napi_value CreateWithPropertiesTestGetter(napi_env env, napi_callback_info info)
3566 {
3567     napi_value res;
3568     napi_get_boolean(env, false, &res);
3569     return res;
3570 }
3571 
CreateWithPropertiesTestSetter(napi_env env,napi_callback_info info)3572 static napi_value CreateWithPropertiesTestSetter(napi_env env, napi_callback_info info)
3573 {
3574     napi_value res;
3575     napi_get_boolean(env, true, &res);
3576     return res;
3577 }
3578 
CreateObjectWithProperties(napi_env env,napi_callback_info info)3579 static napi_value CreateObjectWithProperties(napi_env env, napi_callback_info info)
3580 {
3581     napi_value excep;
3582     NAPI_CALL(env, napi_get_and_clear_last_exception(env, &excep));
3583     napi_value val_false;
3584     napi_value val_true;
3585     NAPI_CALL(env, napi_get_boolean(env, false, &val_false));
3586     NAPI_CALL(env, napi_get_boolean(env, true, &val_true));
3587     napi_property_descriptor desc1[] = {
3588         DECLARE_NAPI_DEFAULT_PROPERTY("x", val_true),
3589     };
3590     napi_value obj1;
3591     NAPI_CALL(env, napi_create_object_with_properties(env, &obj1, 1, desc1));
3592     napi_valuetype valuetype1;
3593     NAPI_CALL(env, napi_typeof(env, obj1, &valuetype1));
3594     napi_value obj2;
3595     napi_property_descriptor desc2[] = {
3596         DECLARE_NAPI_DEFAULT_PROPERTY("a", val_false),
3597         DECLARE_NAPI_GETTER_SETTER("b", CreateWithPropertiesTestGetter, CreateWithPropertiesTestSetter),
3598         DECLARE_NAPI_DEFAULT_PROPERTY("c", obj1),
3599     };
3600     NAPI_CALL(env, napi_create_object_with_properties(env, &obj2, 3, desc2));  // 3 : The property count.
3601     napi_valuetype valuetype2;
3602     NAPI_CALL(env, napi_typeof(env, obj2, &valuetype2));
3603     NAPI_ASSERT(env, valuetype1 == napi_object, "Wrong type of argment. Expects a  object.");
3604     NAPI_ASSERT(env, valuetype2 == napi_object, "Wrong type of argment. Expects a  object.");
3605     auto checkPropertyEqualsTo = [env] (napi_value obj, const char *keyStr, napi_value expect) -> bool {
3606         napi_value result;
3607         napi_get_named_property(env, obj, keyStr, &result);
3608         bool equal = false;
3609         napi_strict_equals(env, result, expect, &equal);
3610         return equal;
3611     };
3612 
3613     bool equalRes = false;
3614     // get obj1.x == true
3615     equalRes = checkPropertyEqualsTo(obj1, "x", val_true);
3616     NAPI_ASSERT(env, equalRes == true, "equalRes is false.");
3617     // set obj1.x = false
3618     NAPI_CALL(env, napi_set_named_property(env, obj1, "x", val_false));
3619     // get obj1.x == false
3620     equalRes = checkPropertyEqualsTo(obj1, "x", val_false);
3621     NAPI_ASSERT(env, equalRes == true, "equalRes is false.");
3622     // get obj2.a == false
3623     equalRes = checkPropertyEqualsTo(obj2, "a", val_false);
3624     NAPI_ASSERT(env, equalRes == true, "equalRes is false.");
3625     // get obj2.b == false
3626     equalRes = checkPropertyEqualsTo(obj2, "b", val_false);
3627     NAPI_ASSERT(env, equalRes == true, "equalRes is false.");
3628     // set obj2.b = true (useless)
3629     NAPI_CALL(env, napi_set_named_property(env, obj2, "b", val_true));
3630     // get obj2.b == false
3631     equalRes = checkPropertyEqualsTo(obj2, "b", val_false);
3632     NAPI_ASSERT(env, equalRes == true, "equalRes is false.");
3633     // get obj2.c == obj1
3634     equalRes = checkPropertyEqualsTo(obj2, "c", obj1);
3635     NAPI_ASSERT(env, equalRes == true, "equalRes is false.");
3636     // get obj2.c.x == false
3637     napi_value val_res;
3638     NAPI_CALL(env, napi_get_named_property(env, obj2, "c", &val_res));
3639     equalRes = checkPropertyEqualsTo(val_res, "x", val_false);
3640     NAPI_ASSERT(env, equalRes == true, "equalRes is false.");
3641 
3642     napi_value _value = 0;
3643     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
3644     return _value;
3645 }
3646 
CreateObjectWithNamedProperties(napi_env env,napi_callback_info info)3647 static napi_value CreateObjectWithNamedProperties(napi_env env, napi_callback_info info)
3648 {
3649     napi_value excep;
3650     NAPI_CALL(env, napi_get_and_clear_last_exception(env, &excep));
3651     napi_value val_false;
3652     napi_value val_true;
3653     NAPI_CALL(env, napi_get_boolean(env, false, &val_false));
3654     NAPI_CALL(env, napi_get_boolean(env, true, &val_true));
3655     const char *keys1[] = {
3656         "x",
3657     };
3658     const napi_value values1[] = {
3659         val_true,
3660     };
3661     napi_value obj1;
3662     NAPI_CALL(env, napi_create_object_with_named_properties(env, &obj1, 1, keys1, values1));
3663     napi_value obj2;
3664     const char *keys2[] = {
3665         "a",
3666         "b",
3667     };
3668     const napi_value values2[] = {
3669         val_false,
3670         obj1,
3671     };
3672 
3673     NAPI_CALL(env, napi_create_object_with_named_properties(env, &obj2, 2, keys2, values2)); // 2 : The property count.
3674     napi_valuetype valuetype1;
3675     napi_valuetype valuetype2;
3676     NAPI_CALL(env, napi_typeof(env, obj1, &valuetype1));
3677     NAPI_CALL(env, napi_typeof(env, obj2, &valuetype2));
3678     NAPI_ASSERT(env, valuetype1 == napi_object, "Wrong type of argment. Expects a  object.");
3679     NAPI_ASSERT(env, valuetype2 == napi_object, "Wrong type of argment. Expects a  object.");
3680 
3681     auto checkPropertyEqualsTo = [env] (napi_value obj, const char *keyStr, napi_value expect) -> bool {
3682         napi_value result;
3683         napi_get_named_property(env, obj, keyStr, &result);
3684         bool equal = false;
3685         napi_strict_equals(env, result, expect, &equal);
3686         return equal;
3687     };
3688 
3689     bool equalRes = false;
3690     // get obj1.x == true
3691     equalRes = checkPropertyEqualsTo(obj1, "x", val_true);
3692     NAPI_ASSERT(env, equalRes == true, "equalRes is false.");
3693     // set obj1.x = false
3694     NAPI_CALL(env, napi_set_named_property(env, obj1, "x", val_false));
3695     // get obj1.x == false
3696     equalRes = checkPropertyEqualsTo(obj1, "x", val_false);
3697     NAPI_ASSERT(env, equalRes == true, "equalRes is false.");
3698     // get obj2.a == false
3699     equalRes = checkPropertyEqualsTo(obj2, "a", val_false);
3700     NAPI_ASSERT(env, equalRes == true, "equalRes is false.");
3701     // get obj2.b == obj1
3702     equalRes = checkPropertyEqualsTo(obj2, "b", obj1);
3703     NAPI_ASSERT(env, equalRes == true, "equalRes is false.");
3704     // get obj2.b.x == false
3705     napi_value val_res;
3706     NAPI_CALL(env, napi_get_named_property(env, obj2, "b", &val_res));
3707     equalRes = checkPropertyEqualsTo(val_res, "x", val_false);
3708     NAPI_ASSERT(env, equalRes == true, "equalRes is false.");
3709 
3710     napi_value _value = 0;
3711     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
3712     return _value;
3713 }
3714 
MakeCallback(napi_env env,napi_callback_info info)3715 static napi_value MakeCallback(napi_env env, napi_callback_info info)
3716 {
3717     size_t argc = 10; // 10 : max arguments.
3718     size_t n;
3719     napi_value args[10]; // 10 : max arguments.
3720     // NOLINTNEXTLINE (readability/null_usage)
3721     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
3722     NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
3723     napi_value async_context_wrap = args[0];
3724     napi_value recv = args[1];
3725     napi_value func = args[2]; // 2 : create async resouce arguments count.
3726     napi_value argv[7]; // 7 : remain arguments.
3727     for (n = 3; n < argc; n += 1) { // 3 : reserved arguments.
3728         argv[n - 3] = args[n]; // 3 : reserved arguments.
3729     }
3730     napi_valuetype func_type;
3731     NAPI_CALL(env, napi_typeof(env, func, &func_type));
3732     napi_async_context context;
3733     NAPI_CALL(env, napi_unwrap(env, async_context_wrap, (void **)&context));
3734     napi_value result;
3735     if (func_type == napi_function) {
3736         NAPI_CALL(env,
3737                   napi_make_callback(env, context, recv, func, argc - 3, argv, &result)); // 3 : reserved arguments.
3738     } else {
3739         NAPI_ASSERT(env, false, "Unexpected argument type");
3740     }
3741     return result;
3742 }
3743 
MakeCallbackOne(napi_env env,napi_callback_info info)3744 static napi_value MakeCallbackOne(napi_env env, napi_callback_info info)
3745 {
3746     size_t argc = 10; // 10 : max arguments.
3747     size_t n;
3748     napi_value args[10]; // 10 : max arguments.
3749     // NOLINTNEXTLINE (readability/null_usage)
3750     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
3751     NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
3752     napi_value resource = args[0];
3753     napi_value recv = args[1];
3754     napi_value func = args[2];
3755     napi_value argv[7]; // 7 : remain arguments.
3756     for (n = 3; n < argc; n += 1) { // 3 : reserved arguments.
3757         argv[n - 3] = args[n]; // 3 : reserved arguments.
3758     }
3759 
3760     napi_valuetype func_type;
3761     NAPI_CALL(env, napi_typeof(env, func, &func_type));
3762 
3763     napi_value resource_name;
3764     NAPI_CALL(env, napi_create_string_utf8(env, "test", NAPI_AUTO_LENGTH, &resource_name));
3765 
3766     napi_async_context context;
3767     NAPI_CALL(env, napi_async_init(env, resource, resource_name, &context));
3768 
3769     napi_value result;
3770     if (func_type == napi_function) {
3771         NAPI_CALL(env,
3772                   napi_make_callback(env, context, recv, func, argc - 3, argv, &result)); // 3 : reserved arguments.
3773     } else {
3774         NAPI_ASSERT(env, false, "Unexpected argument type");
3775     }
3776 
3777     NAPI_CALL(env, napi_async_destroy(env, context));
3778     return result;
3779 }
3780 
completeCb(napi_env env,napi_status status,void * data)3781 static void completeCb(napi_env env, napi_status status, void *data)
3782 {
3783     g_isTaskFinished = true;
3784     AsyncContext *callbackData = reinterpret_cast<AsyncContext *>(data);
3785     napi_delete_async_work(env, callbackData->asyncWork);
3786 }
3787 
AsyncCallTest(napi_env env,napi_callback_info info)3788 static napi_value AsyncCallTest(napi_env env, napi_callback_info info)
3789 {
3790     AsyncContext *context = new AsyncContext();
3791     context->env = env;
3792     napi_value resource = nullptr;
3793     napi_create_string_utf8(env, "add async task", NAPI_AUTO_LENGTH, &resource);
3794     napi_create_async_work(env, nullptr, resource, [](napi_env env, void *data) {}, completeCb,
3795         context, &context->asyncWork);
3796     napi_queue_async_work(env, context->asyncWork);
3797     return nullptr;
3798 }
3799 
NewThreadFunc(void * arg)3800 static void *NewThreadFunc(void *arg)
3801 {
3802     napi_env env = nullptr;
3803     auto ret = napi_create_ark_runtime(&env);
3804     NAPI_ASSERT(env, ret == napi_ok, "napi_create_ark_runtime failed");
3805     NAPI_ASSERT(env, env != nullptr, "napi_create_ark_runtime failed");
3806 
3807     napi_value objectUtils = nullptr;
3808     napi_status status =
3809         napi_load_module_with_info(env, "pages/ObjectUtils", "com.acts.ace.napitest/entry", &objectUtils);
3810     NAPI_ASSERT(env, status == napi_ok, "napi_load_module_with_info failed");
3811     NAPI_ASSERT(env, objectUtils != nullptr, "napi_load_module_with_info failed");
3812 
3813     auto str = reinterpret_cast<char *>(arg);
3814     if (strcmp(str, "NewThread1") == 0) {
3815         g_isTaskFinished = false;
3816         napi_value asyncCallTest = nullptr;
3817         napi_value args = nullptr;
3818         status = napi_get_named_property(env, objectUtils, "AsyncCallTest", &asyncCallTest);
3819         NAPI_ASSERT(env, status == napi_ok, "napi_get_named_property failed");
3820 
3821         status = napi_call_function(env, objectUtils, asyncCallTest, 0, &args, nullptr);
3822         NAPI_ASSERT(env, status == napi_ok, "napi_call_function failed");
3823         while (!g_isTaskFinished) {
3824             napi_run_event_loop(env, napi_event_mode_nowait);
3825         }
3826     } else if (strcmp(str, "NewThread2") == 0) {
3827         // timer
3828         napi_value SetTimeout;
3829         napi_value promise;
3830         status = napi_get_named_property(env, objectUtils, "SetTimeout", &SetTimeout);
3831         NAPI_ASSERT(env, status == napi_ok, "napi_get_named_property failed");
3832         status = napi_call_function(env, objectUtils, SetTimeout, 0, nullptr, &promise);
3833         NAPI_ASSERT(env, status == napi_ok, "napi_call_function failed");
3834         napi_value thenFunc = nullptr;
3835         if (napi_get_named_property(env, promise, "then", &thenFunc) != napi_ok) {
3836             return nullptr;
3837         }
3838         napi_value resolvedCallback;
3839         napi_value rejectedCallback;
3840         int32_t toStopTheLoop = 1;
3841         napi_create_function(env, "resolvedCallback", NAPI_AUTO_LENGTH, ResolvedCallback, &toStopTheLoop,
3842             &resolvedCallback);
3843         napi_create_function(env, "rejectedCallback", NAPI_AUTO_LENGTH, RejectedCallback, nullptr,
3844             &rejectedCallback);
3845         napi_value argv[PARAM_SIZE_TWO] = {resolvedCallback, rejectedCallback};
3846         status =  napi_call_function(env, promise, thenFunc, PARAM_SIZE_TWO, argv, nullptr);
3847         NAPI_ASSERT(env, status == napi_ok, "napi_call_function failed");
3848 
3849         napi_run_event_loop(env, napi_event_mode_default);
3850     } else if (strcmp(str, "NewThread3") == 0) {
3851         g_isTaskFinished = false;
3852         napi_value asyncCallTest = nullptr;
3853         napi_value args = nullptr;
3854         status = napi_get_named_property(env, objectUtils, "AsyncCallTest", &asyncCallTest);
3855         NAPI_ASSERT(env, status == napi_ok, "napi_get_named_property failed");
3856         status = napi_call_function(env, objectUtils, asyncCallTest, 0, &args, nullptr);
3857         NAPI_ASSERT(env, status == napi_ok, "napi_call_function failed");
3858         while (!g_isTaskFinished) {
3859             napi_run_event_loop(env, napi_event_mode_nowait);
3860         }
3861         napi_run_event_loop(env, napi_event_mode_nowait);
3862     } else if (strcmp(str, "NewThread4") == 0) {
3863         napi_value asyncCallTest = nullptr;
3864         napi_value args = nullptr;
3865 
3866         status = napi_get_named_property(env, objectUtils, "AsyncCallTest", &asyncCallTest);
3867         NAPI_ASSERT(env, status == napi_ok, "napi_get_named_property failed");
3868         status = napi_call_function(env, objectUtils, asyncCallTest, 0, &args, nullptr);
3869         NAPI_ASSERT(env, status == napi_ok, "napi_call_function failed");
3870     }
3871     free(str);
3872     return objectUtils;
3873 }
3874 
RunEventLoop(napi_env env,napi_callback_info info)3875 static napi_value RunEventLoop(napi_env env, napi_callback_info info)
3876 {
3877     size_t argc = 1;
3878     napi_value args[1];
3879     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
3880     NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
3881 
3882     int32_t value;
3883     NAPI_CALL(env, napi_get_value_int32(env, args[0], &value));
3884 
3885     char *testCaseName = (char *)malloc(sizeof(char) * THREAD_NAME_LENGTH);
3886     if (testCaseName == nullptr) {
3887         return nullptr;
3888     }
3889     memset_s(testCaseName, THREAD_NAME_LENGTH, 0, THREAD_NAME_LENGTH);
3890     pthread_t tid;
3891 
3892     napi_status status = napi_ok;
3893     if (value == INVALID_PARAM_WITH_NOWAIT || value == INVALID_PARAM_WITH_DEFAULT) {
3894         status= napi_run_event_loop(nullptr, static_cast<napi_event_mode>(value));
3895         NAPI_ASSERT(env, status == napi_invalid_arg, "stop event loop successfully");
3896     } else if (value == RUN_IN_MAIN_THREAD_WITH_NOWAIT || value == RUN_IN_MAIN_THREAD_WITH_DEFAULT) {
3897         status= napi_run_event_loop(env, static_cast<napi_event_mode>(value - DIFF_VALUE_ONE));
3898         NAPI_ASSERT(env, status == napi_generic_failure, "stop event loop successfully");
3899     } else if (value == RUN_IN_WORKER_THREAD_WITH_NOWAIT || value == RUN_IN_WORKER_THREAD_WITH_DEFAULT) {
3900         status= napi_run_event_loop(env, static_cast<napi_event_mode>(value - DIFF_VALUE_TWO));
3901         NAPI_ASSERT(env, status == napi_generic_failure, "stop event loop successfully");
3902         char16_t resStr[] = u"napi_generic_failure";
3903         napi_value resultValue = nullptr;
3904         napi_create_string_utf16(env, resStr, NAPI_AUTO_LENGTH, &resultValue);
3905         free(testCaseName);
3906         return resultValue;
3907     } else if (value == RUN_NAPI_LOOP_WITH_NOWAIT) {
3908         strcpy_s(testCaseName, THREAD_NAME_LENGTH, "NewThread1");
3909         pthread_create(&tid, nullptr, NewThreadFunc, testCaseName);
3910         pthread_detach(tid);
3911     } else if (value == RUN_NAPI_LOOP_WITH_DEFAULT) {
3912         strcpy_s(testCaseName, THREAD_NAME_LENGTH, "NewThread2");
3913         pthread_create(&tid, nullptr, NewThreadFunc, testCaseName);
3914         pthread_detach(tid);
3915     } else if (value == RUN_NAPI_LOOP_AFTER_RUN_FINISH) {
3916         strcpy_s(testCaseName, THREAD_NAME_LENGTH, "NewThread3");
3917         pthread_create(&tid, nullptr, NewThreadFunc, testCaseName);
3918         pthread_detach(tid);
3919     } else if (value == WITHOUT_RUN_NAPI_LOOP) {
3920         strcpy_s(testCaseName, THREAD_NAME_LENGTH, "NewThread4");
3921         pthread_create(&tid, nullptr, NewThreadFunc, testCaseName);
3922         pthread_detach(tid);
3923     }
3924     free(testCaseName);
3925     napi_value _value = 0;
3926     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
3927     return _value;
3928 }
3929 
CallBeforeRunningFunc(void * arg)3930 static void *CallBeforeRunningFunc(void *arg)
3931 {
3932     napi_env env = nullptr;
3933     auto ret = napi_create_ark_runtime(&env);
3934     NAPI_ASSERT(env, ret == napi_ok, "napi_create_ark_runtime failed");
3935     NAPI_ASSERT(env, env != nullptr, "napi_create_ark_runtime failed");
3936 
3937     napi_status res = napi_stop_event_loop(env);
3938     NAPI_ASSERT(env, res == napi_ok, "stop event loop failed");
3939     napi_destroy_ark_runtime(&env);
3940     return nullptr;
3941 }
3942 
CallAfterRunFunc(void * arg)3943 static void *CallAfterRunFunc(void *arg)
3944 {
3945     napi_env env;
3946     auto ret = napi_create_ark_runtime(&env);
3947     NAPI_ASSERT(env, ret == napi_ok, "napi_create_ark_runtime failed");
3948     NAPI_ASSERT(env, env != nullptr, "napi_create_ark_runtime failed");
3949 
3950     napi_value objectUtils = nullptr;
3951     napi_status status =
3952         napi_load_module_with_info(env, "pages/ObjectUtils", "com.acts.ace.napitest/entry", &objectUtils);
3953     NAPI_ASSERT(env, status == napi_ok, "napi_load_module_with_info successfully");
3954     NAPI_ASSERT(env, objectUtils != nullptr, "napi_load_module_with_info failed");
3955     g_isTaskFinished = false;
3956     napi_value asyncCallTest = nullptr;
3957     napi_value args = nullptr;
3958 
3959     status = napi_get_named_property(env, objectUtils, "AsyncCallTest", &asyncCallTest);
3960     NAPI_ASSERT(env, status == napi_ok, "napi_get_named_property failed");
3961     status = napi_call_function(env, objectUtils, asyncCallTest, 0, &args, nullptr);
3962     NAPI_ASSERT(env, status == napi_ok, "napi_call_function failed");
3963     while (!g_isTaskFinished) {
3964         napi_run_event_loop(env, napi_event_mode_nowait);
3965     }
3966 
3967     napi_status res = napi_stop_event_loop(env);
3968     NAPI_ASSERT(env, res == napi_ok, "napi_stop_event_loop failed");
3969     napi_destroy_ark_runtime(&env);
3970     return objectUtils;
3971 }
3972 
StopEventLoop(napi_env env,napi_callback_info info)3973 static napi_value StopEventLoop(napi_env env, napi_callback_info info)
3974 {
3975     size_t argc = 1;
3976     napi_value args[1];
3977     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
3978     NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
3979 
3980     int32_t value;
3981     NAPI_CALL(env, napi_get_value_int32(env, args[0], &value));
3982 
3983     if (value == INVALID_PARAM_WITH_STOP_LOOP) {
3984         napi_status status = napi_stop_event_loop(nullptr);
3985         NAPI_ASSERT(env, status == napi_invalid_arg, "stop event loop successfully");
3986     } else if (value == STOP_LOOP_IN_MAIN_THREAD || value == STOP_LOOP_IN_WORKER_THREAD) {
3987         napi_status status = napi_stop_event_loop(env);
3988         NAPI_ASSERT(env, status == napi_generic_failure, "stop event loop successfully");
3989     } else if (value == STOP_LOOP_BEFORE_RUN) {
3990         pthread_t tid;
3991         napi_value result = nullptr;
3992         pthread_create(&tid, nullptr, CallBeforeRunningFunc, &result);
3993         pthread_detach(tid);
3994     } else if (value == STOP_LOOP_AFTER_RUN) {
3995         pthread_t tid;
3996         napi_value result;
3997         pthread_create(&tid, nullptr, CallAfterRunFunc, &result);
3998         pthread_detach(tid);
3999     }
4000 
4001     napi_value _value = 0;
4002     NAPI_CALL(env, napi_create_int32(env, 0, &_value));
4003     return _value;
4004 }
4005 
NapiSerialize(napi_env env,napi_callback_info info)4006 static napi_value NapiSerialize(napi_env env, napi_callback_info info)
4007 {
4008     napi_value object = nullptr;
4009     napi_create_object(env, &object);
4010     napi_value num = nullptr;
4011     uint32_t value = 2000;
4012     napi_create_uint32(env, value, &num);
4013     napi_set_named_property(env, object, "numKey", num);
4014     napi_value obj = nullptr;
4015     napi_create_object(env, &obj);
4016     napi_set_named_property(env, object, "objKey", obj);
4017 
4018     napi_value undefined = nullptr;
4019     napi_get_undefined(env, &undefined);
4020     void* data = nullptr;
4021     napi_status status = napi_serialize(env, object, undefined, undefined, &data);
4022     NAPI_ASSERT(env, status == napi_ok, "napi_serialize fail");
4023     NAPI_ASSERT(env, data != nullptr, " The data is nullptr");
4024 
4025     napi_value result = nullptr;
4026     napi_deserialize(env, data, &result);
4027     napi_value number = nullptr;
4028     napi_get_named_property(env, result, "numKey", &number);
4029     napi_valuetype valuetype;
4030     NAPI_CALL(env, napi_typeof(env, number, &valuetype));
4031     NAPI_ASSERT(env, valuetype == napi_number, "Wrong type of argment. Expects a number.");
4032     napi_delete_serialization_data(env, data);
4033 
4034     return number;
4035 }
4036 
NapiDeSerialize(napi_env env,napi_callback_info info)4037 static napi_value NapiDeSerialize(napi_env env, napi_callback_info info)
4038 {
4039     napi_value undefined = nullptr;
4040     napi_get_undefined(env, &undefined);
4041 
4042     napi_value num = nullptr;
4043     uint32_t value = 2000;
4044     napi_create_uint32(env, value, &num);
4045     void* data = nullptr;
4046     napi_serialize(env, num, undefined, undefined, &data);
4047     NAPI_ASSERT(env, data != nullptr, " The data is nullptr");
4048 
4049     napi_value result1 = nullptr;
4050     napi_status status = napi_deserialize(env, data, &result1);
4051     NAPI_ASSERT(env, status == napi_ok, "napi_deserialize fail");
4052     napi_valuetype valuetype;
4053     NAPI_CALL(env, napi_typeof(env, result1, &valuetype));
4054     NAPI_ASSERT(env, valuetype == napi_number, "Wrong type of argment. Expects a number.");
4055 
4056     napi_value number = nullptr;
4057     status = napi_deserialize(env, data, &number);
4058     NAPI_ASSERT(env, status == napi_ok, "napi_deserialize fail");
4059     napi_delete_serialization_data(env, data);
4060 
4061     return number;
4062 }
4063 
NapiDeleteSerializationData(napi_env env,napi_callback_info info)4064 static napi_value NapiDeleteSerializationData(napi_env env, napi_callback_info info)
4065 {
4066     napi_value object = nullptr;
4067     napi_create_object(env, &object);
4068     napi_value num = nullptr;
4069     uint32_t value = 2000;
4070     napi_create_uint32(env, value, &num);
4071     napi_set_named_property(env, object, "numKey", num);
4072     napi_value obj = nullptr;
4073     napi_create_object(env, &obj);
4074     napi_set_named_property(env, object, "objKey", obj);
4075 
4076     napi_value undefined = nullptr;
4077     napi_get_undefined(env, &undefined);
4078     void* data = nullptr;
4079     napi_status status = napi_serialize(env, object, undefined, undefined, &data);
4080     NAPI_ASSERT(env, status == napi_ok, "napi_serialize fail");
4081     NAPI_ASSERT(env, data != nullptr, " The data is nullptr");
4082 
4083     napi_value result1 = nullptr;
4084     napi_deserialize(env, data, &result1);
4085     napi_value obj1 = nullptr;
4086     napi_get_named_property(env, result1, "objKey", &obj1);
4087     napi_valuetype valuetype1;
4088     NAPI_CALL(env, napi_typeof(env, obj1, &valuetype1));
4089     NAPI_ASSERT(env, valuetype1 == napi_object, "Wrong type of argment. Expects a object.");
4090 
4091     napi_value result2 = nullptr;
4092     napi_deserialize(env, data, &result2);
4093     napi_value number = nullptr;
4094     napi_get_named_property(env, result2, "numKey", &number);
4095     napi_valuetype valuetype2;
4096     NAPI_CALL(env, napi_typeof(env, number, &valuetype2));
4097     NAPI_ASSERT(env, valuetype2 == napi_number, "Wrong type of argment. Expects a number.");
4098     napi_delete_serialization_data(env, data);
4099 
4100     return number;
4101 }
4102 
NapiSerializeDate(napi_env env,napi_callback_info info)4103 static napi_value NapiSerializeDate(napi_env env, napi_callback_info info)
4104 {
4105     napi_value undefined = nullptr;
4106     napi_get_undefined(env, &undefined);
4107 
4108     napi_value num = nullptr;
4109     double time = 1679839496000; // 2023.3.17 12:34:56 UTC
4110     napi_create_date(env, time, &num);
4111 
4112     void* data = nullptr;
4113     napi_serialize(env, num, undefined, undefined, &data);
4114     NAPI_ASSERT(env, data != nullptr, " The data is nullptr");
4115 
4116     napi_value result1 = nullptr;
4117     napi_status status = napi_deserialize(env, data, &result1);
4118     NAPI_ASSERT(env, status == napi_ok, "napi_deserialize fail");
4119 
4120     bool isDateVal = false;
4121     napi_is_date(env, result1, &isDateVal);
4122     NAPI_ASSERT(env, isDateVal, "napi_is_Date fail");
4123     napi_delete_serialization_data(env, data);
4124 
4125     napi_value value = 0;
4126     NAPI_CALL(env, napi_create_int32(env, 0, &value));
4127     return value;
4128 }
4129 
NapiSerializeString(napi_env env,napi_callback_info info)4130 static napi_value NapiSerializeString(napi_env env, napi_callback_info info)
4131 {
4132     napi_value undefined = nullptr;
4133     napi_get_undefined(env, &undefined);
4134 
4135     napi_value num = nullptr;
4136     const char* str = "abc";
4137     napi_create_string_utf8(env, str, NAPI_AUTO_LENGTH, &num);
4138 
4139     void* data = nullptr;
4140     napi_serialize(env, num, undefined, undefined, &data);
4141     NAPI_ASSERT(env, data != nullptr, " The data is nullptr");
4142 
4143     napi_value result1 = nullptr;
4144     napi_status status = napi_deserialize(env, data, &result1);
4145     NAPI_ASSERT(env, status == napi_ok, "napi_deserialize fail");
4146     napi_valuetype valuetype;
4147     NAPI_CALL(env, napi_typeof(env, result1, &valuetype));
4148     NAPI_ASSERT(env, valuetype == napi_string, "Wrong type of argment. Expects a string.");
4149     napi_delete_serialization_data(env, data);
4150 
4151     napi_value value = 0;
4152     NAPI_CALL(env, napi_create_int32(env, 0, &value));
4153     return value;
4154 }
4155 
NapiSerializeArray(napi_env env,napi_callback_info info)4156 static napi_value NapiSerializeArray(napi_env env, napi_callback_info info)
4157 {
4158     napi_value undefined = nullptr;
4159     napi_get_undefined(env, &undefined);
4160 
4161     napi_value num = nullptr;
4162     napi_create_array(env, &num);
4163 
4164     void* data = nullptr;
4165     napi_serialize(env, num, undefined, undefined, &data);
4166     NAPI_ASSERT(env, data != nullptr, " The data is nullptr");
4167 
4168     napi_value result1 = nullptr;
4169     napi_status status = napi_deserialize(env, data, &result1);
4170     NAPI_ASSERT(env, status == napi_ok, "napi_deserialize fail");
4171 
4172     bool isArray = false;
4173     napi_is_array(env, result1, &isArray);
4174     NAPI_ASSERT(env, isArray, "napi_is_array fail");
4175     napi_delete_serialization_data(env, data);
4176 
4177     napi_value value = 0;
4178     NAPI_CALL(env, napi_create_int32(env, 0, &value));
4179     return value;
4180 }
4181 
NapiSerializeObject(napi_env env,napi_callback_info info)4182 static napi_value NapiSerializeObject(napi_env env, napi_callback_info info)
4183 {
4184     napi_value undefined = nullptr;
4185     napi_get_undefined(env, &undefined);
4186 
4187     napi_value result = nullptr;
4188     napi_create_object(env, &result);
4189 
4190     void* data = nullptr;
4191     napi_serialize(env, result, undefined, undefined, &data);
4192     NAPI_ASSERT(env, data != nullptr, " The data is nullptr");
4193 
4194     napi_value result1 = nullptr;
4195     napi_status status = napi_deserialize(env, data, &result1);
4196     NAPI_ASSERT(env, status == napi_ok, "napi_deserialize fail");
4197 
4198     napi_valuetype valuetype;
4199     NAPI_CALL(env, napi_typeof(env, result1, &valuetype));
4200     NAPI_ASSERT(env, valuetype == napi_object, "Wrong type of argment. Expects a object.");
4201     napi_delete_serialization_data(env, data);
4202 
4203     napi_value value = 0;
4204     NAPI_CALL(env, napi_create_int32(env, 0, &value));
4205     return value;
4206 }
4207 
NapiSerializeArraybuffer(napi_env env,napi_callback_info info)4208 static napi_value NapiSerializeArraybuffer(napi_env env, napi_callback_info info)
4209 {
4210     napi_value undefined = nullptr;
4211     napi_get_undefined(env, &undefined);
4212 
4213     napi_value result = nullptr;
4214     size_t byteLength = 1024;
4215     void *data = nullptr;
4216     napi_create_arraybuffer(env, byteLength, &data, &result);
4217 
4218     void *dataVal = nullptr;
4219     napi_serialize(env, result, undefined, undefined, &dataVal);
4220     NAPI_ASSERT(env, dataVal != nullptr, " The dataVal is nullptr");
4221 
4222     napi_value result1 = nullptr;
4223     napi_status status = napi_deserialize(env, dataVal, &result1);
4224     NAPI_ASSERT(env, status == napi_ok, "napi_deserialize fail");
4225 
4226     bool retIsArrayBuffer = false;
4227     napi_is_arraybuffer(env, result1, &retIsArrayBuffer);
4228     NAPI_ASSERT(env, retIsArrayBuffer, "napi_is_arraybuffer fail");
4229 
4230     napi_delete_serialization_data(env, dataVal);
4231     napi_value value = 0;
4232     NAPI_CALL(env, napi_create_int32(env, 0, &value));
4233     return value;
4234 }
4235 
NapiSerializeTypearray(napi_env env,napi_callback_info info)4236 static napi_value NapiSerializeTypearray(napi_env env, napi_callback_info info)
4237 {
4238     napi_value undefined = nullptr;
4239     napi_get_undefined(env, &undefined);
4240 
4241     napi_value arrayBuffer = nullptr;
4242     void* arrayBufferPtr = nullptr;
4243     size_t arrayBufferSize = 16;
4244     size_t typedArrayLength = 4;
4245     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
4246     NAPI_ASSERT(env, arrayBufferPtr != nullptr, "getTypedArrayInfo napi_create_arraybuffer fail");
4247     bool isArrayBuffer = false;
4248     napi_is_arraybuffer(env, arrayBuffer, &isArrayBuffer);
4249     NAPI_ASSERT(env, isArrayBuffer, "getTypedArrayInfo napi_is_arraybuffer fail");
4250     napi_value result;
4251     napi_create_typedarray(env, napi_int32_array, typedArrayLength, arrayBuffer, 0, &result);
4252 
4253     void* data = nullptr;
4254     napi_serialize(env, result, undefined, undefined, &data);
4255     NAPI_ASSERT(env, data != nullptr, " The data is nullptr");
4256 
4257     napi_value result1 = nullptr;
4258     napi_status status = napi_deserialize(env, data, &result1);
4259     NAPI_ASSERT(env, status == napi_ok, "napi_deserialize fail");
4260 
4261     bool retIsTypedarray = false;
4262     napi_is_typedarray(env, result1, &retIsTypedarray);
4263     NAPI_ASSERT(env, retIsTypedarray, "napi_is_typedarray fail");
4264     napi_delete_serialization_data(env, data);
4265 
4266     napi_value value = 0;
4267     NAPI_CALL(env, napi_create_int32(env, 0, &value));
4268     return value;
4269 }
4270 
NapiSerializeSharedarraybuffer(napi_env env,napi_callback_info info)4271 static napi_value NapiSerializeSharedarraybuffer(napi_env env, napi_callback_info info)
4272 {
4273     napi_value undefined = nullptr;
4274     napi_get_undefined(env, &undefined);
4275 
4276     size_t argc = 1;
4277     napi_value args;
4278     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, NULL, NULL));
4279     NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
4280 
4281     void* data = nullptr;
4282     napi_serialize(env, args, undefined, undefined, &data);
4283     NAPI_ASSERT(env, data != nullptr, " The data is nullptr");
4284     napi_value result1 = nullptr;
4285     napi_status status = napi_deserialize(env, data, &result1);
4286     NAPI_ASSERT(env, status == napi_ok, "napi_deserialize fail");
4287 
4288     napi_valuetype valuetype;
4289     NAPI_CALL(env, napi_typeof(env, result1, &valuetype));
4290     NAPI_ASSERT(env, valuetype == napi_object, "Wrong type of argment. Expects a object.");
4291     napi_delete_serialization_data(env, data);
4292 
4293     napi_value value = 0;
4294     NAPI_CALL(env, napi_create_int32(env, 0, &value));
4295     return value;
4296 }
4297 
NapiSerializeSet(napi_env env,napi_callback_info info)4298 static napi_value NapiSerializeSet(napi_env env, napi_callback_info info)
4299 {
4300     napi_value undefined = nullptr;
4301     napi_get_undefined(env, &undefined);
4302 
4303     size_t argc = 1;
4304     napi_value args;
4305     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, NULL, NULL));
4306     NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
4307 
4308     void* data = nullptr;
4309     napi_serialize(env, args, undefined, undefined, &data);
4310     NAPI_ASSERT(env, data != nullptr, " The data is nullptr");
4311     napi_value result1 = nullptr;
4312     napi_status status = napi_deserialize(env, data, &result1);
4313     NAPI_ASSERT(env, status == napi_ok, "napi_deserialize fail");
4314 
4315     napi_valuetype valuetype;
4316     NAPI_CALL(env, napi_typeof(env, result1, &valuetype));
4317     NAPI_ASSERT(env, valuetype == napi_object, "Wrong type of argment. Expects a object.");
4318     napi_delete_serialization_data(env, data);
4319 
4320     napi_value value = 0;
4321     NAPI_CALL(env, napi_create_int32(env, 0, &value));
4322     return value;
4323 }
4324 
NapiSerializeMap(napi_env env,napi_callback_info info)4325 static napi_value NapiSerializeMap(napi_env env, napi_callback_info info)
4326 {
4327     napi_value undefined = nullptr;
4328     napi_get_undefined(env, &undefined);
4329     size_t argc = 1;
4330     napi_value args;
4331     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, NULL, NULL));
4332     NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
4333 
4334     void* data = nullptr;
4335     napi_serialize(env, args, undefined, undefined, &data);
4336     NAPI_ASSERT(env, data != nullptr, " The data is nullptr");
4337     napi_value result1 = nullptr;
4338     napi_status status = napi_deserialize(env, data, &result1);
4339     NAPI_ASSERT(env, status == napi_ok, "napi_deserialize fail");
4340 
4341     napi_valuetype valuetype;
4342     NAPI_CALL(env, napi_typeof(env, result1, &valuetype));
4343     NAPI_ASSERT(env, valuetype == napi_object, "Wrong type of argment. Expects a object.");
4344     napi_delete_serialization_data(env, data);
4345 
4346     napi_value value = 0;
4347     NAPI_CALL(env, napi_create_int32(env, 0, &value));
4348     return value;
4349 }
4350 
NapiSerializeRegExp(napi_env env,napi_callback_info info)4351 static napi_value NapiSerializeRegExp(napi_env env, napi_callback_info info)
4352 {
4353     napi_value undefined = nullptr;
4354     napi_get_undefined(env, &undefined);
4355     size_t argc = 1;
4356     napi_value args;
4357     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &args, NULL, NULL));
4358     NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
4359 
4360     void* data = nullptr;
4361     napi_serialize(env, args, undefined, undefined, &data);
4362     NAPI_ASSERT(env, data != nullptr, " The data is nullptr");
4363     napi_value result1 = nullptr;
4364     napi_status status = napi_deserialize(env, data, &result1);
4365     NAPI_ASSERT(env, status == napi_ok, "napi_deserialize fail");
4366 
4367     napi_valuetype valuetype;
4368     NAPI_CALL(env, napi_typeof(env, result1, &valuetype));
4369     NAPI_ASSERT(env, valuetype == napi_object, "Wrong type of argment. Expects a object.");
4370     napi_delete_serialization_data(env, data);
4371 
4372     napi_value value = 0;
4373     NAPI_CALL(env, napi_create_int32(env, 0, &value));
4374     return value;
4375 }
4376 
NapiSetNamedProperty(napi_env env,napi_callback_info info)4377 static napi_value NapiSetNamedProperty(napi_env env, napi_callback_info info)
4378 {
4379     napi_value fn = nullptr;
4380     napi_value resultValue = nullptr;
4381     NAPI_CALL(env, napi_create_function(env, nullptr, NAPI_AUTO_LENGTH, SayHello, nullptr, &fn));
4382     if (fn == nullptr) {
4383         napi_throw_error(env, nullptr, "Napitest: napi_create_function fail");
4384         return nullptr;
4385     }
4386     napi_create_object(env, &resultValue);
4387     NAPI_CALL(env, napi_set_named_property(env, resultValue, "name", fn));
4388 
4389     napi_value retStrAttribute = nullptr;
4390     NAPI_CALL(env, napi_get_named_property(env, resultValue, "name", &retStrAttribute));
4391 
4392     napi_valuetype valuetype;
4393     napi_typeof(env, retStrAttribute, &valuetype);
4394     NAPI_ASSERT(env, valuetype == napi_function, "Napitest: wrong type of argment. Expects a function.");
4395 
4396     napi_value value = 0;
4397     napi_create_int32(env, 0, &value);
4398     return value;
4399 }
4400 
NapiGetNamedProperty(napi_env env,napi_callback_info info)4401 static napi_value NapiGetNamedProperty(napi_env env, napi_callback_info info)
4402 {
4403     napi_value resultValue = nullptr;
4404     napi_value undefined = nullptr;
4405     NAPI_CALL(env, napi_get_undefined(env, &undefined));
4406     NAPI_CALL(env, napi_create_object(env, &resultValue));
4407     NAPI_CALL(env, napi_set_named_property(env, resultValue, "undefined", undefined));
4408 
4409     napi_value retStrAttribute = nullptr;
4410     NAPI_CALL(env, napi_get_named_property(env, resultValue, "undefined", &retStrAttribute));
4411 
4412     napi_valuetype valuetype;
4413     napi_typeof(env, retStrAttribute, &valuetype);
4414     NAPI_ASSERT(env, valuetype == napi_undefined, "Napitest: wrong type of argment. Expects a undefined.");
4415 
4416     napi_value value = 0;
4417     NAPI_CALL(env, napi_create_int32(env, 0, &value));
4418     return value;
4419 }
4420 
CallAddNumFunction(napi_env env,napi_callback_info info)4421 static napi_value CallAddNumFunction(napi_env env, napi_callback_info info)
4422 {
4423     size_t argc = 2; // 2:Number of parameters
4424     napi_value args[2]; // 2:Number of parameters
4425     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
4426 
4427     napi_valuetype valuetype;
4428     napi_typeof(env, args[0], &valuetype);
4429     NAPI_ASSERT(env, valuetype == napi_object, "Napitest: wrong type of argment. Expects a object.");
4430 
4431     napi_valuetype valuetype2;
4432     napi_typeof(env, args[1], &valuetype2);
4433     NAPI_ASSERT(env, valuetype2 == napi_function, "Napitest: wrong type of argment. Expects a function.");
4434 
4435     napi_value para[2]; // 2:Number of parameters
4436     napi_create_int32(env, 6, &para[0]); // 6:numerical value
4437     napi_create_int32(env, 6, &para[1]); // 6:numerical value
4438 
4439     napi_value *argv = para;
4440     napi_value ret;
4441     napi_value callRst;
4442     NAPI_CALL(env, napi_get_named_property(env, args[0], "add", &callRst));
4443     NAPI_CALL(env, napi_call_function(env, args[0], callRst, argc, argv, &ret));
4444 
4445     return ret;
4446 }
4447 
NapiNewInstance(napi_env env,napi_callback_info info)4448 static napi_value NapiNewInstance(napi_env env, napi_callback_info info)
4449 {
4450     napi_value testWrapClass = nullptr;
4451     napi_define_class(
4452         env, "TestWrapClass", NAPI_AUTO_LENGTH,
4453         [](napi_env env, napi_callback_info info) -> napi_value {
4454             napi_value thisVar = nullptr;
4455             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
4456             return thisVar;
4457         },
4458         nullptr, 0, nullptr, &testWrapClass);
4459     napi_value arg;
4460     NAPI_CALL(env, napi_create_string_utf8(env, "hello", NAPI_AUTO_LENGTH, &arg));
4461 
4462     napi_value *argv = &arg;
4463     size_t argc = 1;
4464     napi_value instanceValue = nullptr;
4465     NAPI_CALL(env, napi_new_instance(env, testWrapClass, argc, argv, &instanceValue));
4466     if (!instanceValue) {
4467         napi_throw_error(env, nullptr, "Napitest: instanceValue is nullptr");
4468         return nullptr;
4469     }
4470 
4471     bool isInstanceOf = false;
4472     NAPI_CALL(env, napi_instanceof(env, instanceValue, testWrapClass, &isInstanceOf));
4473     NAPI_ASSERT(env, isInstanceOf, "Napitest: isInstanceOf fail");
4474 
4475     napi_value result;
4476     NAPI_CALL(env, napi_get_boolean(env, isInstanceOf, &result));
4477 
4478     return result;
4479 }
4480 
NapiCrateAndGetValueString(napi_env env,napi_callback_info info)4481 static napi_value NapiCrateAndGetValueString(napi_env env, napi_callback_info info)
4482 {
4483     size_t argc = 1;
4484     napi_value args[1];
4485     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
4486     if (argc != 1) {
4487         napi_throw_error(env, nullptr, "Napitest: wrong number of parameters");
4488         return nullptr;
4489     }
4490     napi_valuetype valuetype;
4491     napi_typeof(env, args[0], &valuetype);
4492     NAPI_ASSERT(env, valuetype == napi_string, "Napitest: wrong type of argment. Expects a string.");
4493 
4494     char buffer[256] = ""; // 256:length value
4495     size_t copied = 0;
4496     NAPI_CALL(env, napi_get_value_string_utf8(env, args[0], buffer, 255, &copied)); // 255:size of buffer
4497     napi_value output;
4498     NAPI_CALL(env, napi_create_string_utf8(env, buffer, copied, &output));
4499     return output;
4500 }
4501 
ExceptionalSetNamedProperty(napi_env env,napi_callback_info info)4502 static napi_value ExceptionalSetNamedProperty(napi_env env, napi_callback_info info)
4503 {
4504     napi_value fn = nullptr;
4505     NAPI_CALL(env, napi_create_function(env, nullptr, NAPI_AUTO_LENGTH, SayHello, nullptr, &fn));
4506     if (fn == nullptr) {
4507         napi_throw_error(env, nullptr, "Napitest: napi_create_function fail");
4508         return nullptr;
4509     }
4510     napi_value value = nullptr;
4511     napi_create_int32(env, 0, &value);
4512     NAPI_CALL(env, napi_set_named_property(env, value, "name", fn));
4513     napi_valuetype valuetype;
4514     napi_typeof(env, value, &valuetype);
4515     NAPI_ASSERT(env, valuetype == napi_function, "Napitest: wrong type of argment. Expects a function.");
4516     napi_value num = 0;
4517     napi_create_int32(env, 0, &num);
4518     return num;
4519 }
4520 
ExceptionalGetNamedProperty(napi_env env,napi_callback_info info)4521 static napi_value ExceptionalGetNamedProperty(napi_env env, napi_callback_info info)
4522 {
4523     napi_value resultValue = nullptr;
4524     napi_value undefined = nullptr;
4525     NAPI_CALL(env, napi_get_undefined(env, &undefined));
4526     NAPI_CALL(env, napi_create_object(env, &resultValue));
4527     NAPI_CALL(env, napi_set_named_property(env, resultValue, "undefined", undefined));
4528 
4529     napi_value retStrAttribute = nullptr;
4530     NAPI_CALL(env, napi_create_int32(env, 0, &resultValue));
4531     NAPI_CALL(env, napi_get_named_property(env, resultValue, "undefined", &retStrAttribute));
4532 
4533     napi_valuetype valuetype;
4534     napi_typeof(env, retStrAttribute, &valuetype);
4535     NAPI_ASSERT(env, valuetype == napi_undefined, "Napitest: wrong type of argment. Expects a undefined.");
4536 
4537     napi_value value = 0;
4538     NAPI_CALL(env, napi_create_int32(env, 0, &value));
4539     return value;
4540 }
4541 
ExceptionalCallAddNumFunction(napi_env env,napi_callback_info info)4542 static napi_value ExceptionalCallAddNumFunction(napi_env env, napi_callback_info info)
4543 {
4544     size_t argc = 2;    // 2:Number of parameters
4545     napi_value args[2]; // 2:Number of parameters
4546     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
4547 
4548     napi_valuetype valuetype;
4549     napi_typeof(env, args[0], &valuetype);
4550     NAPI_ASSERT(env, valuetype == napi_object, "Napitest: wrong type of argment. Expects a object.");
4551 
4552     napi_valuetype valuetype2;
4553     napi_typeof(env, args[1], &valuetype2);
4554     NAPI_ASSERT(env, valuetype2 == napi_function, "Napitest: wrong type of argment. Expects a function.");
4555 
4556     napi_value para[2];                  // 2:Number of parameters
4557     napi_create_int32(env, 6, &para[0]); // 6:numerical value
4558     napi_create_int32(env, 6, &para[1]); // 6:numerical value
4559 
4560     napi_value *argv = para;
4561     napi_value ret;
4562     napi_value callRst;
4563     NAPI_CALL(env, napi_get_named_property(env, args[0], "add", &callRst));
4564 
4565     NAPI_CALL(env, napi_call_function(env, args[0], nullptr, argc, argv, &ret));
4566     return ret;
4567 }
4568 
ExceptionalNapiNewInstance(napi_env env,napi_callback_info info)4569 static napi_value ExceptionalNapiNewInstance(napi_env env, napi_callback_info info)
4570 {
4571     napi_value testWrapClass = nullptr;
4572     napi_value arg;
4573     NAPI_CALL(env, napi_create_string_utf8(env, "hello", NAPI_AUTO_LENGTH, &arg));
4574     napi_value *argv = &arg;
4575     size_t argc = 1;
4576     napi_value instanceValue = nullptr;
4577     NAPI_CALL(env, napi_new_instance(env, testWrapClass, argc, argv, &instanceValue));
4578     if (!instanceValue) {
4579         napi_throw_error(env, nullptr, "Napitest: napi_new_instance fail");
4580         return nullptr;
4581     }
4582     bool isInstanceOf = false;
4583     NAPI_CALL(env, napi_instanceof(env, instanceValue, testWrapClass, &isInstanceOf));
4584     NAPI_ASSERT(env, isInstanceOf, "Napitest: isInstanceOf success");
4585     napi_value result;
4586     NAPI_CALL(env, napi_get_boolean(env, isInstanceOf, &result));
4587     return result;
4588 }
4589 
ExceptionalNapiCrateAndGetValueString(napi_env env,napi_callback_info info)4590 static napi_value ExceptionalNapiCrateAndGetValueString(napi_env env, napi_callback_info info)
4591 {
4592     size_t argc = 1;
4593     napi_value args[1];
4594     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
4595     if (argc != 1) {
4596         napi_throw_error(env, nullptr, "Napitest: wrong number of parameters");
4597         return nullptr;
4598     }
4599     napi_valuetype valuetype;
4600     napi_typeof(env, args[0], &valuetype);
4601     NAPI_ASSERT(env, valuetype == napi_string, "Napitest: wrong type of argment. Expects a string.");
4602     char buffer[1] = "";
4603     size_t copied = 0;
4604     NAPI_CALL(env, napi_get_value_string_utf8(env, args[0], buffer, 0, &copied));
4605     napi_value output;
4606     NAPI_CALL(env, napi_create_string_utf8(env, buffer, copied, &output));
4607     return output;
4608 }
4609 
CallJsFunc(napi_env env,napi_value jsCb,void * context,void * data)4610 static void CallJsFunc(napi_env env, napi_value jsCb, void *context, void *data)
4611 {
4612     if (env == nullptr) {
4613         return;
4614     }
4615     napi_value resultNumber = nullptr;
4616     napi_value undefined = nullptr;
4617     napi_get_undefined(env, &undefined);
4618     napi_value number1 = nullptr;
4619     napi_create_int32(env, 12, &number1); // 12:numerical value
4620     napi_value number2 = nullptr;
4621     napi_create_int32(env, 15, &number2); // 15:numerical value
4622     napi_value argv[2] = {number1, number2}; // 2:array size
4623     napi_call_function(env, undefined, jsCb, 2, argv, &resultNumber); // 2:number of parameters
4624     int32_t res = 0;
4625     napi_get_value_int32(env, resultNumber, &res);
4626     if (res != 27) { // 27: calculation result
4627         napi_throw_error(env, nullptr, "Napitest: Return result error");
4628         return;
4629     }
4630 }
4631 
ExecuteWork(napi_env env,void * data)4632 static void ExecuteWork(napi_env env, void *data)
4633 {
4634     CallbackData *callbackData = reinterpret_cast<CallbackData *>(data);
4635     // 执行任务为napi_priority_idle优先级,入队方式为队列尾部入队
4636     napi_call_threadsafe_function_with_priority(callbackData->tsfn, nullptr, napi_priority_idle, true);
4637     napi_call_threadsafe_function_with_priority(callbackData->tsfn, nullptr, napi_priority_low, true);
4638     napi_call_threadsafe_function_with_priority(callbackData->tsfn, nullptr, napi_priority_high, true);
4639     napi_call_threadsafe_function_with_priority(callbackData->tsfn, nullptr, napi_priority_immediate, true);
4640     // 执行任务为napi_priority_high优先级,入队方式为队列头部入队
4641     napi_call_threadsafe_function_with_priority(callbackData->tsfn, nullptr, napi_priority_high, false);
4642 }
4643 
WorkComplete(napi_env env,napi_status status,void * data)4644 static void WorkComplete(napi_env env, napi_status status, void *data)
4645 {
4646     CallbackData *callbackData = reinterpret_cast<CallbackData *>(data);
4647     napi_release_threadsafe_function(callbackData->tsfn, napi_tsfn_release);
4648     napi_delete_async_work(env, callbackData->work);
4649     callbackData->work = nullptr;
4650     callbackData->tsfn = nullptr;
4651 }
4652 
ThreadSafePriority(napi_env env,napi_callback_info info)4653 static napi_value ThreadSafePriority(napi_env env, napi_callback_info info)
4654 {
4655     size_t argc = 1;
4656     napi_value jsCb = nullptr;
4657     CallbackData *callbackData = nullptr;
4658     napi_get_cb_info(env, info, &argc, &jsCb, nullptr, reinterpret_cast<void **>(&callbackData));
4659     napi_value resourceName = nullptr;
4660     napi_create_string_utf8(env, "Thread-safe Function Demo", NAPI_AUTO_LENGTH, &resourceName);
4661     napi_create_threadsafe_function(env, jsCb, nullptr, resourceName, 0, 1, callbackData, nullptr, callbackData,
4662                                     CallJsFunc, &callbackData->tsfn);
4663     napi_create_async_work(env, nullptr, resourceName, ExecuteWork, WorkComplete, callbackData, &callbackData->work);
4664     napi_queue_async_work(env, callbackData->work);
4665 
4666     napi_value value = 0;
4667     NAPI_CALL(env, napi_create_int32(env, 0, &value));
4668     return value;
4669 }
4670 
ThreadSafePriorityWithInvalidParam(napi_env env,napi_callback_info info)4671 static napi_value ThreadSafePriorityWithInvalidParam(napi_env env, napi_callback_info info)
4672 {
4673     napi_status status = napi_call_threadsafe_function_with_priority(nullptr, nullptr, napi_priority_idle, true);
4674     NAPI_ASSERT(env, status == napi_invalid_arg, "call threadsafe with priority successfully");
4675     napi_value value = 0;
4676     NAPI_CALL(env, napi_create_int32(env, 0, &value));
4677     return value;
4678 }
4679 
CheckUnwrapFunc(napi_env env,napi_callback_info info)4680 static napi_value CheckUnwrapFunc(napi_env env, napi_callback_info info)
4681 {
4682     size_t argc = 1;
4683     napi_value argv[1] = {nullptr};
4684     napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr);
4685     const char *testStr = "test";
4686     napi_wrap(
4687         env, argv[0], (void*)testStr, [](napi_env env, void* data, void* hint) {}, nullptr, nullptr);
4688 
4689     char *tmpTestStr = nullptr;
4690     napi_unwrap(env, argv[0], (void **)&tmpTestStr);
4691     napi_value value = 0;
4692     NAPI_CALL(env, napi_create_int32(env, strcmp(tmpTestStr, testStr), &value));
4693     return value;
4694 }
4695 
CreateSendableArrayTest(napi_env env,napi_callback_info info)4696 static napi_value CreateSendableArrayTest(napi_env env, napi_callback_info info)
4697 {
4698     size_t argc = 1;
4699     napi_value args[1];
4700     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
4701     NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments");
4702 
4703     napi_valuetype valuetype0;
4704     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
4705 
4706     NAPI_ASSERT(env, valuetype0 == napi_object, "Wrong type of arguments. Expects an array as first argument.");
4707 
4708     napi_value ret;
4709     NAPI_CALL(env, napi_create_sendable_array(env, &ret));
4710 
4711     uint32_t length = 0;
4712     NAPI_CALL(env, napi_get_array_length(env, args[0], &length));
4713 
4714     for (uint32_t i = 0; i < length; i++) {
4715         napi_value e;
4716         NAPI_CALL(env, napi_get_element(env, args[0], i, &e));
4717         NAPI_CALL(env, napi_set_element(env, ret, i, e));
4718     }
4719     return ret;
4720 }
4721 
CreateSendableArrayWithLengthTest(napi_env env,napi_callback_info info)4722 static napi_value CreateSendableArrayWithLengthTest(napi_env env, napi_callback_info info)
4723 {
4724     size_t argc = 1;
4725     napi_value args[1];
4726     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
4727     NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments");
4728 
4729     napi_valuetype valuetype0;
4730     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
4731 
4732     NAPI_ASSERT(env, valuetype0 == napi_object, "Wrong type of arguments. Expects an array as first argument.");
4733 
4734     uint32_t length = 0;
4735     NAPI_CALL(env, napi_get_array_length(env, args[0], &length));
4736 
4737     napi_value result;
4738     NAPI_CALL(env, napi_create_sendable_array_with_length(env, length, &result));
4739 
4740     for (uint32_t i = 0; i < length; i++) {
4741         napi_value e;
4742         NAPI_CALL(env, napi_get_element(env, args[0], i, &e));
4743         NAPI_CALL(env, napi_set_element(env, result, i, e));
4744     }
4745 
4746     return result;
4747 }
4748 
CreateSendableArrayBufferTest(napi_env env,napi_callback_info info)4749 static napi_value CreateSendableArrayBufferTest(napi_env env, napi_callback_info info)
4750 {
4751     napi_value arrayBuffer = nullptr;
4752     void* arrayBufferPtr = nullptr;
4753     size_t arrayBufferSize = 1024;
4754     napi_status status = napi_create_sendable_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
4755     NAPI_ASSERT(env, status == napi_ok, "success to napi_create_sendable_arraybuffer");
4756     NAPI_ASSERT(env, arrayBuffer != nullptr, "success create_sendable_arrayBuffer");
4757 
4758     return arrayBuffer;
4759 }
4760 
CreateSendableTypedArrayTest(napi_env env,napi_callback_info info)4761 static napi_value CreateSendableTypedArrayTest(napi_env env, napi_callback_info info)
4762 {
4763     napi_value arrayBuffer = nullptr;
4764     void* arrayBufferPtr = nullptr;
4765     size_t arrayBufferSize = 16;
4766     size_t typedArrayLength = 4;
4767     napi_create_sendable_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
4768 
4769     void* tmpArrayBufferPtr = nullptr;
4770     size_t arrayBufferLength = 0;
4771     napi_get_arraybuffer_info(env, arrayBuffer, &tmpArrayBufferPtr, &arrayBufferLength);
4772 
4773     NAPI_ASSERT(env, arrayBufferPtr == tmpArrayBufferPtr, "napi_get_arraybuffer_info success");
4774     NAPI_ASSERT(env, arrayBufferSize ==  arrayBufferLength, "napi_create_arraybuffer success");
4775 
4776     napi_value result;
4777     napi_create_sendable_typedarray(env, napi_int32_array, typedArrayLength, arrayBuffer, 0, &result);
4778 
4779     return result;
4780 }
4781 
CreateSendableObjectWithProperties(napi_env env,napi_callback_info info)4782 static napi_value CreateSendableObjectWithProperties(napi_env env, napi_callback_info info)
4783 {
4784     napi_value excep;
4785     NAPI_CALL(env, napi_get_and_clear_last_exception(env, &excep));
4786     napi_value val_false;
4787     napi_value val_true;
4788     NAPI_CALL(env, napi_get_boolean(env, false, &val_false));
4789     NAPI_CALL(env, napi_get_boolean(env, true, &val_true));
4790     napi_property_descriptor desc1[] = {
4791         DECLARE_NAPI_DEFAULT_PROPERTY("x", val_true),
4792     };
4793     napi_value obj1;
4794     NAPI_CALL(env, napi_create_sendable_object_with_properties(env, 1, desc1, &obj1));
4795     napi_valuetype valuetype1;
4796     NAPI_CALL(env, napi_typeof(env, obj1, &valuetype1));
4797     napi_value obj2;
4798     napi_property_descriptor desc2[] = {
4799         DECLARE_NAPI_DEFAULT_PROPERTY("a", val_false),
4800         DECLARE_NAPI_GETTER_SETTER("b", CreateWithPropertiesTestGetter, CreateWithPropertiesTestSetter),
4801         DECLARE_NAPI_DEFAULT_PROPERTY("c", obj1),
4802     };
4803     NAPI_CALL(env, napi_create_sendable_object_with_properties(env, 3, desc2, &obj2));  // 3 : The property count.
4804     napi_valuetype valuetype2;
4805     NAPI_CALL(env, napi_typeof(env, obj2, &valuetype2));
4806     NAPI_ASSERT(env, valuetype1 == napi_object, "Wrong type of argment. Expects a  object.");
4807     NAPI_ASSERT(env, valuetype2 == napi_object, "Wrong type of argment. Expects a  object.");
4808     auto checkPropertyEqualsTo = [env] (napi_value obj, const char *keyStr, napi_value expect) -> bool {
4809         napi_value result;
4810         napi_get_named_property(env, obj, keyStr, &result);
4811         bool equal = false;
4812         napi_strict_equals(env, result, expect, &equal);
4813         return equal;
4814     };
4815 
4816     bool equalRes = false;
4817     // get obj1.x == true
4818     equalRes = checkPropertyEqualsTo(obj1, "x", val_true);
4819     NAPI_ASSERT(env, equalRes == true, "equalRes is false.");
4820     // set obj1.x = false
4821     NAPI_CALL(env, napi_set_named_property(env, obj1, "x", val_false));
4822     // get obj1.x == false
4823     equalRes = checkPropertyEqualsTo(obj1, "x", val_false);
4824     NAPI_ASSERT(env, equalRes == true, "equalRes is false.");
4825     // get obj2.a == false
4826     equalRes = checkPropertyEqualsTo(obj2, "a", val_false);
4827     NAPI_ASSERT(env, equalRes == true, "equalRes is false.");
4828     // get obj2.b == false
4829     equalRes = checkPropertyEqualsTo(obj2, "b", val_false);
4830     NAPI_ASSERT(env, equalRes == true, "equalRes is false.");
4831     // set obj2.b = true (useless)
4832     NAPI_CALL(env, napi_set_named_property(env, obj2, "b", val_true));
4833     // get obj2.b == false
4834     equalRes = checkPropertyEqualsTo(obj2, "b", val_false);
4835     NAPI_ASSERT(env, equalRes == true, "equalRes is false.");
4836 
4837     napi_value result = 0;
4838     NAPI_CALL(env, napi_create_int32(env, 0, &result));
4839     return result;
4840 }
4841 
NapiWrapSendableTest(napi_env env,napi_callback_info info)4842 static napi_value NapiWrapSendableTest(napi_env env, napi_callback_info info)
4843 {
4844     napi_value testClass = nullptr;
4845     napi_define_sendable_class(
4846         env, "WrapSendableTestClass", NAPI_AUTO_LENGTH,
4847         [](napi_env env, napi_callback_info info) -> napi_value {
4848             napi_value thisVar = nullptr;
4849             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
4850 
4851             return thisVar;
4852         },
4853         nullptr, 0, nullptr, nullptr, &testClass);
4854 
4855     napi_value instanceValue = nullptr;
4856     napi_new_instance(env, testClass, 0, nullptr, &instanceValue);
4857 
4858     const char* testStr = "wrap_sendable_test";
4859     napi_wrap_sendable(
4860         env, instanceValue, (void*)testStr, [](napi_env env, void* data, void* hint) {}, nullptr);
4861 
4862     napi_value result;
4863     NAPI_CALL(env, napi_create_int32(env, 0, &result));
4864     return result;
4865 }
4866 
NapiWrapSendableWithSizeTest(napi_env env,napi_callback_info info)4867 static napi_value NapiWrapSendableWithSizeTest(napi_env env, napi_callback_info info)
4868 {
4869     napi_value testClass = nullptr;
4870     napi_define_sendable_class(
4871         env, "WrapSendableWithSizeTestClass", NAPI_AUTO_LENGTH,
4872         [](napi_env env, napi_callback_info info) -> napi_value {
4873             napi_value thisVar = nullptr;
4874             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
4875 
4876             return thisVar;
4877         },
4878         nullptr, 0, nullptr, nullptr, &testClass);
4879 
4880     napi_value instanceValue = nullptr;
4881     napi_new_instance(env, testClass, 0, nullptr, &instanceValue);
4882 
4883     const char* testStr = "wrap_sendable_with_size_test";
4884     size_t size = sizeof(*testStr) / sizeof(char);
4885     napi_wrap_sendable_with_size(
4886         env, instanceValue, (void*)testStr, [](napi_env env, void* data, void* hint) {}, nullptr, size);
4887 
4888     napi_value result;
4889     NAPI_CALL(env, napi_create_int32(env, 0, &result));
4890     return result;
4891 }
4892 
NapiUnWrapSendableTest(napi_env env,napi_callback_info info)4893 static napi_value NapiUnWrapSendableTest(napi_env env, napi_callback_info info)
4894 {
4895     napi_value testClass = nullptr;
4896     napi_define_sendable_class(
4897         env, "UnWrapSendableTestClass", NAPI_AUTO_LENGTH,
4898         [](napi_env env, napi_callback_info info) -> napi_value {
4899             napi_value thisVar = nullptr;
4900             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
4901 
4902             return thisVar;
4903         },
4904         nullptr, 0, nullptr, nullptr, &testClass);
4905 
4906     napi_value instanceValue = nullptr;
4907     napi_new_instance(env, testClass, 0, nullptr, &instanceValue);
4908 
4909     const char* testStr = "unwrap_sendable_test";
4910     size_t size = sizeof(*testStr) / sizeof(char);
4911     napi_wrap_sendable_with_size(
4912         env, instanceValue, (void*)testStr, [](napi_env env, void* data, void* hint) {}, nullptr, size);
4913 
4914     const char* tmpTestStr = nullptr;
4915     NAPI_CALL(env, napi_unwrap_sendable(env, instanceValue, (void**)&tmpTestStr));
4916     NAPI_ASSERT(env, tmpTestStr == testStr, "napi_unwrap_sendable fail");
4917 
4918     napi_value result;
4919     NAPI_CALL(env, napi_create_int32(env, 0, &result));
4920     return result;
4921 }
4922 
NapiRemoveWrapSendableTest(napi_env env,napi_callback_info info)4923 static napi_value NapiRemoveWrapSendableTest(napi_env env, napi_callback_info info)
4924 {
4925     napi_value testClass = nullptr;
4926     napi_define_sendable_class(
4927         env, "RemoveWrapSendableTestClass", NAPI_AUTO_LENGTH,
4928         [](napi_env env, napi_callback_info info) -> napi_value {
4929             napi_value thisVar = nullptr;
4930             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
4931 
4932             return thisVar;
4933         },
4934         nullptr, 0, nullptr, nullptr, &testClass);
4935 
4936     napi_value instanceValue = nullptr;
4937     napi_new_instance(env, testClass, 0, nullptr, &instanceValue);
4938 
4939     const char* testStr = "remove_wrap_sendable_test";
4940     napi_wrap_sendable(
4941         env, instanceValue, (void*)testStr, [](napi_env env, void* data, void* hint) {}, nullptr);
4942 
4943     const char* tmpTestStr = nullptr;
4944     NAPI_CALL(env, napi_unwrap_sendable(env, instanceValue, (void**)&tmpTestStr));
4945     NAPI_ASSERT(env, tmpTestStr == testStr, "napi_unwrap fail");
4946 
4947     const char* tmpTestStr1 = nullptr;
4948     napi_remove_wrap_sendable(env, instanceValue, (void**)&tmpTestStr1);
4949     NAPI_ASSERT(env, tmpTestStr1 == testStr, "napi_remove_wrap_sendable fail 1");
4950 
4951     napi_value result;
4952     NAPI_CALL(env, napi_create_int32(env, 0, &result));
4953     return result;
4954 }
4955 
getLastErrorInfoNull(napi_env env,napi_callback_info info)4956 static napi_value getLastErrorInfoNull(napi_env env, napi_callback_info info)
4957 {
4958     napi_value value;
4959     NAPI_CALL(env, napi_create_string_utf8(env, "Error Info", NAPI_ERROR_LENGTH, &value));
4960     double doubleValue;
4961     napi_status status = napi_get_value_double(env, value, &doubleValue);
4962     NAPI_ASSERT(env, status != napi_ok, "Failed to produce error condition");
4963     status = napi_get_last_error_info(env, nullptr);
4964     bool bRet = (status == napi_invalid_arg);
4965     napi_value retValue;
4966     napi_create_int32(env, bRet, &retValue);
4967     return retValue;
4968 }
4969 
throwFunc(napi_env env,napi_callback_info info)4970 static napi_value throwFunc(napi_env env, napi_callback_info info)
4971 {
4972     napi_value value;
4973     NAPI_CALL(env, napi_create_int32(env, 0, &value));
4974     napi_status status = napi_throw(env, value);
4975     bool bRet = (status == napi_invalid_arg);
4976     napi_value retValue;
4977     napi_create_int32(env, bRet, &retValue);
4978     return retValue;
4979 }
4980 
throwFuncNull(napi_env env,napi_callback_info info)4981 static napi_value throwFuncNull(napi_env env, napi_callback_info info)
4982 {
4983     napi_value value;
4984     NAPI_CALL(env, napi_create_string_utf8(env, "xyz", NAPI_STRING_LENGTH, &value));
4985     napi_status status = napi_throw(env, nullptr);
4986     bool bRet = (status == napi_invalid_arg);
4987     napi_value retValue;
4988     napi_create_int32(env, bRet, &retValue);
4989     return retValue;
4990 }
4991 
isErrorValueNull(napi_env env,napi_callback_info info)4992 static napi_value isErrorValueNull(napi_env env, napi_callback_info info)
4993 {
4994     bool r;
4995     napi_status status = napi_is_error(env, nullptr, &r);
4996     bool bRet = (status == napi_invalid_arg);
4997     napi_value retValue;
4998     napi_create_int32(env, bRet, &retValue);
4999     return retValue;
5000 }
5001 
isErrorRstNull(napi_env env,napi_callback_info info)5002 static napi_value isErrorRstNull(napi_env env, napi_callback_info info)
5003 {
5004     size_t argc = 1;
5005     napi_value args[1];
5006     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
5007     napi_status status = napi_is_error(env, args[0], nullptr);
5008     bool bRet = (status == napi_invalid_arg);
5009     napi_value retValue;
5010     napi_create_int32(env, bRet, &retValue);
5011     return retValue;
5012 }
5013 
createStringUtf8(napi_env env,napi_callback_info info)5014 napi_value createStringUtf8(napi_env env, napi_callback_info info)
5015 {
5016     napi_status status;
5017     size_t argc = 1;
5018     napi_value argv[1];
5019     status = napi_get_cb_info(env, info, &argc, argv, nullptr, nullptr);
5020     if (status != napi_ok) {
5021         napi_throw_error(env, nullptr, "Failed to parse arguments");
5022         return nullptr;
5023     }
5024     if (argc < 1) {
5025         napi_throw_type_error(env, nullptr, "Wrong number of arguments");
5026         return nullptr;
5027     }
5028     napi_value strValue = argv[0];
5029     char str[NAPI_UTF8_LENGTH];
5030     size_t strLength;
5031     status = napi_get_value_string_utf8(env, strValue, str, NAPI_UTF8_LENGTH, &strLength);
5032     if (status != napi_ok) {
5033         napi_throw_type_error(env, nullptr, "Invalid string was passed as argument");
5034         return nullptr;
5035     }
5036     napi_value result;
5037     status = napi_create_string_utf8(env, str, strLength, &result);
5038     if (status != napi_ok) {
5039         napi_throw_error(env, nullptr, "Failed to create string");
5040         return nullptr;
5041     }
5042     return result;
5043 }
5044 
createErrorMsgNull(napi_env env,napi_callback_info info)5045 static napi_value createErrorMsgNull(napi_env env, napi_callback_info info)
5046 {
5047     napi_value code = nullptr;
5048     napi_value message = nullptr;
5049 
5050     napi_create_string_latin1(env, "500", NAPI_AUTO_LENGTH, &code);
5051     napi_create_string_latin1(env, "common error", NAPI_AUTO_LENGTH, &message);
5052 
5053     napi_value error = nullptr;
5054     napi_status status = napi_create_error(env, code, nullptr, &error);
5055     bool bRet = (status == napi_invalid_arg);
5056     napi_value retValue;
5057     napi_create_int32(env, bRet, &retValue);
5058     return retValue;
5059 }
5060 
createErrorRstNull(napi_env env,napi_callback_info info)5061 static napi_value createErrorRstNull(napi_env env, napi_callback_info info)
5062 {
5063     napi_value code = nullptr;
5064     napi_value message = nullptr;
5065     napi_create_string_latin1(env, "500", NAPI_AUTO_LENGTH, &code);
5066     napi_create_string_latin1(env, "common error", NAPI_AUTO_LENGTH, &message);
5067     napi_status status = napi_create_error(env, code, message, nullptr);
5068     bool bRet = (status == napi_invalid_arg);
5069     napi_value retValue;
5070     napi_create_int32(env, bRet, &retValue);
5071     return retValue;
5072 }
5073 
createTypeErrorMsgNull(napi_env env,napi_callback_info info)5074 static napi_value createTypeErrorMsgNull(napi_env env, napi_callback_info info)
5075 {
5076     napi_value code = nullptr;
5077     napi_value message = nullptr;
5078     napi_create_string_latin1(env, "500", NAPI_AUTO_LENGTH, &code);
5079     napi_create_string_latin1(env, "type error", NAPI_AUTO_LENGTH, &message);
5080     napi_value error = nullptr;
5081     napi_status status = napi_create_type_error(env, code, nullptr, &error);
5082     bool bRet = (status == napi_invalid_arg);
5083     napi_value retValue;
5084     napi_create_int32(env, bRet, &retValue);
5085     return retValue;
5086 }
5087 
createTypeErrorRstNull(napi_env env,napi_callback_info info)5088 static napi_value createTypeErrorRstNull(napi_env env, napi_callback_info info)
5089 {
5090     napi_value code = nullptr;
5091     napi_value message = nullptr;
5092     napi_create_string_latin1(env, "500", NAPI_AUTO_LENGTH, &code);
5093     napi_create_string_latin1(env, "type error", NAPI_AUTO_LENGTH, &message);
5094     napi_status status = napi_create_type_error(env, code, message, nullptr);
5095     bool bRet = (status == napi_invalid_arg);
5096     napi_value retValue;
5097     napi_create_int32(env, bRet, &retValue);
5098     return retValue;
5099 }
5100 
createRangeErrorRstNull(napi_env env,napi_callback_info info)5101 static napi_value createRangeErrorRstNull(napi_env env, napi_callback_info info)
5102 {
5103     napi_value code = nullptr;
5104     napi_value message = nullptr;
5105     napi_create_string_latin1(env, "500", NAPI_AUTO_LENGTH, &code);
5106     napi_create_string_latin1(env, "range error", NAPI_AUTO_LENGTH, &message);
5107     napi_status status = napi_create_range_error(env, code, message, nullptr);
5108     bool bRet = (status == napi_invalid_arg);
5109     napi_value retValue;
5110     napi_create_int32(env, bRet, &retValue);
5111     return retValue;
5112 }
5113 
getAndClearLastExceptionNull(napi_env env,napi_callback_info info)5114 static napi_value getAndClearLastExceptionNull(napi_env env, napi_callback_info info)
5115 {
5116     napi_value code = nullptr;
5117     napi_value message = nullptr;
5118     napi_create_string_latin1(env, "600", NAPI_AUTO_LENGTH, &code);
5119     napi_create_string_latin1(env, "tag range error", NAPI_AUTO_LENGTH, &message);
5120     napi_value error = nullptr;
5121     napi_create_range_error(env, code, message, &error);
5122     NAPI_ASSERT(env, error != nullptr, "tag error succes");
5123     bool isError = false;
5124     napi_is_error(env, error, &isError);
5125     NAPI_ASSERT(env, isError, "tag isError 1");
5126     napi_status status = napi_get_and_clear_last_exception(env, nullptr);
5127     bool bRet = (status == napi_invalid_arg);
5128     napi_value retValue;
5129     napi_create_int32(env, bRet, &retValue);
5130     return retValue;
5131 }
5132 
isExceptionPendingNull(napi_env env,napi_callback_info info)5133 static napi_value isExceptionPendingNull(napi_env env, napi_callback_info info)
5134 {
5135     napi_status status = napi_is_exception_pending(env, nullptr);
5136     bool bRet = (status == napi_invalid_arg);
5137     napi_value retValue;
5138     napi_create_int32(env, bRet, &retValue);
5139     return retValue;
5140 }
5141 
openAndCloseHandleScopeNull(napi_env env,napi_callback_info info)5142 static napi_value openAndCloseHandleScopeNull(napi_env env, napi_callback_info info)
5143 {
5144     napi_status status = napi_open_handle_scope(env, nullptr);
5145     bool bRet = (status == napi_invalid_arg);
5146     napi_value retValue;
5147     napi_create_int32(env, bRet, &retValue);
5148     return retValue;
5149 }
5150 
openAndCloseEscapableHandleScopeNull(napi_env env,napi_callback_info info)5151 static napi_value openAndCloseEscapableHandleScopeNull(napi_env env, napi_callback_info info)
5152 {
5153     napi_escapable_handle_scope scope;
5154     NAPI_CALL(env, napi_open_escapable_handle_scope(env, &scope));
5155     napi_value output = nullptr;
5156     napi_value escapee = nullptr;
5157     NAPI_CALL(env, napi_create_object(env, &output));
5158     NAPI_CALL(env, napi_escape_handle(env, scope, output, &escapee));
5159     napi_status status = napi_close_escapable_handle_scope(env, nullptr);
5160     bool bRet = (status == napi_invalid_arg);
5161     napi_value retValue;
5162     napi_create_int32(env, bRet, &retValue);
5163     return retValue;
5164 }
5165 
escapeHandle(napi_env env,napi_callback_info info)5166 static napi_value escapeHandle(napi_env env, napi_callback_info info)
5167 {
5168     napi_escapable_handle_scope scope;
5169     NAPI_CALL(env, napi_open_escapable_handle_scope(env, &scope));
5170     napi_value output = nullptr;
5171     napi_value escapee = nullptr;
5172     NAPI_CALL(env, napi_create_object(env, &output));
5173     NAPI_CALL(env, napi_escape_handle(env, scope, output, &escapee));
5174     return escapee;
5175 }
5176 
escapeHandleScopeNull(napi_env env,napi_callback_info info)5177 static napi_value escapeHandleScopeNull(napi_env env, napi_callback_info info)
5178 {
5179     napi_escapable_handle_scope scope;
5180     NAPI_CALL(env, napi_open_escapable_handle_scope(env, &scope));
5181     napi_value output = nullptr;
5182     napi_value escapee = nullptr;
5183     NAPI_CALL(env, napi_create_object(env, &output));
5184     napi_status status = napi_escape_handle(env, nullptr, output, &escapee);
5185     bool bRet = (status == napi_invalid_arg);
5186     napi_value retValue;
5187     napi_create_int32(env, bRet, &retValue);
5188     return retValue;
5189 }
5190 
escapeHandleOutputNull(napi_env env,napi_callback_info info)5191 static napi_value escapeHandleOutputNull(napi_env env, napi_callback_info info)
5192 {
5193     napi_escapable_handle_scope scope;
5194     NAPI_CALL(env, napi_open_escapable_handle_scope(env, &scope));
5195     napi_value output = nullptr;
5196     napi_value escapee = nullptr;
5197     NAPI_CALL(env, napi_create_object(env, &output));
5198     napi_status status = napi_escape_handle(env, scope, nullptr, &escapee);
5199     bool bRet = (status == napi_invalid_arg);
5200     napi_value retValue;
5201     napi_create_int32(env, bRet, &retValue);
5202     return retValue;
5203 }
5204 
escapeHandleRstNull(napi_env env,napi_callback_info info)5205 static napi_value escapeHandleRstNull(napi_env env, napi_callback_info info)
5206 {
5207     napi_escapable_handle_scope scope;
5208     NAPI_CALL(env, napi_open_escapable_handle_scope(env, &scope));
5209     napi_value output = nullptr;
5210     NAPI_CALL(env, napi_create_object(env, &output));
5211     napi_status status = napi_escape_handle(env, scope, output, nullptr);
5212     bool bRet = (status == napi_invalid_arg);
5213     napi_value retValue;
5214     napi_create_int32(env, bRet, &retValue);
5215     return retValue;
5216 }
5217 
createReferenceValueNull(napi_env env,napi_callback_info info)5218 static napi_value createReferenceValueNull(napi_env env, napi_callback_info info)
5219 {
5220     napi_value result = nullptr;
5221     napi_create_int32(env, TAG_NUMBER, &result);
5222     napi_status status = napi_create_reference(env, nullptr, 1, &test_reference);
5223     bool bRet = (status == napi_invalid_arg);
5224     napi_value retValue;
5225     napi_create_int32(env, bRet, &retValue);
5226     return retValue;
5227 }
5228 
getReferenceValue(napi_env env,napi_callback_info info)5229 static napi_value getReferenceValue(napi_env env, napi_callback_info info)
5230 {
5231     NAPI_ASSERT(env, test_reference != nullptr,
5232                 "A reference must have been created.");
5233     napi_value refValue = nullptr;
5234     napi_get_reference_value(env, test_reference, &refValue);
5235     return refValue;
5236 }
5237 
getReferenceValueRefNull(napi_env env,napi_callback_info info)5238 static napi_value getReferenceValueRefNull(napi_env env, napi_callback_info info)
5239 {
5240     NAPI_ASSERT(env, test_reference != nullptr,
5241                 "A reference must have been created.");
5242     napi_value refValue = nullptr;
5243     napi_status status = napi_get_reference_value(env, test_reference, &refValue);
5244     bool bRet = (status == napi_invalid_arg);
5245     napi_value retValue;
5246     napi_create_int32(env, bRet, &retValue);
5247     return retValue;
5248 }
5249 
getReferenceValueRstNull(napi_env env,napi_callback_info info)5250 static napi_value getReferenceValueRstNull(napi_env env, napi_callback_info info)
5251 {
5252     NAPI_ASSERT(env, test_reference != nullptr,
5253                 "A reference must have been created.");
5254     napi_value refValue = nullptr;
5255     napi_status status = napi_get_reference_value(env, test_reference, &refValue);
5256     bool bRet = (status == napi_invalid_arg);
5257     napi_value retValue;
5258     napi_create_int32(env, bRet, &retValue);
5259     return retValue;
5260 }
5261 
deleteReferenceNull(napi_env env,napi_callback_info info)5262 static napi_value deleteReferenceNull(napi_env env, napi_callback_info info)
5263 {
5264     napi_value refValue = nullptr;
5265     napi_get_reference_value(env, test_reference, &refValue);
5266     int32_t value = 0;
5267     napi_get_value_int32(env, refValue, &value);
5268     napi_status status = napi_delete_reference(env, nullptr);
5269     bool bRet = (status == napi_invalid_arg);
5270     napi_value retValue;
5271     napi_create_int32(env, bRet, &retValue);
5272     return retValue;
5273 }
5274 
referenceRef(napi_env env,napi_callback_info info)5275 static napi_value referenceRef(napi_env env, napi_callback_info info)
5276 {
5277     napi_value result = nullptr;
5278     napi_ref resultRef = nullptr;
5279     uint32_t resultRefCount = 0;
5280 
5281     napi_create_object(env, &result);
5282     napi_create_reference(env, result, 1, &resultRef);
5283 
5284     napi_reference_ref(env, resultRef, &resultRefCount);
5285     NAPI_ASSERT(env, resultRefCount == NAPI_REF_COUNT,
5286                 "resultRefCount expect equal to 2");
5287     napi_value retValue;
5288     NAPI_CALL(env, napi_create_int32(env, 0, &retValue));
5289 
5290     return retValue;
5291 }
5292 
referenceRefNull(napi_env env,napi_callback_info info)5293 static napi_value referenceRefNull(napi_env env, napi_callback_info info)
5294 {
5295     napi_value result = nullptr;
5296     napi_ref resultRef = nullptr;
5297     uint32_t resultRefCount = 0;
5298     napi_create_object(env, &result);
5299     napi_create_reference(env, result, 1, &resultRef);
5300     napi_status status = napi_reference_ref(env, nullptr, &resultRefCount);
5301     bool bRet = (status == napi_invalid_arg);
5302     napi_value retValue;
5303     napi_create_int32(env, bRet, &retValue);
5304     return retValue;
5305 }
5306 
referenceRefAndUnrefNull(napi_env env,napi_callback_info info)5307 static napi_value referenceRefAndUnrefNull(napi_env env, napi_callback_info info)
5308 {
5309     napi_value result = nullptr;
5310     napi_ref resultRef = nullptr;
5311     uint32_t resultRefCount = 0;
5312     napi_create_object(env, &result);
5313     napi_create_reference(env, result, 1, &resultRef);
5314     napi_reference_ref(env, resultRef, &resultRefCount);
5315     napi_status status = napi_reference_unref(env, nullptr, &resultRefCount);
5316     bool bRet = (status == napi_invalid_arg);
5317     napi_value retValue;
5318     napi_create_int32(env, bRet, &retValue);
5319     return retValue;
5320 }
5321 
createArrayNull(napi_env env,napi_callback_info info)5322 static napi_value createArrayNull(napi_env env, napi_callback_info info)
5323 {
5324     size_t argc = 1;
5325     napi_value args[1];
5326     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
5327     napi_valuetype valuetype0;
5328     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
5329     napi_status status = napi_create_array(env, nullptr);
5330     bool bRet = (status == napi_invalid_arg);
5331     napi_value retValue;
5332     napi_create_int32(env, bRet, &retValue);
5333     return retValue;
5334 }
5335 
napCreateArrayBufferNull(napi_env env,napi_callback_info info)5336 static napi_value napCreateArrayBufferNull(napi_env env, napi_callback_info info)
5337 {
5338     napi_value arrayBuffer = nullptr;
5339     size_t arrayBufferSize = 1024;
5340     napi_status status = napi_create_arraybuffer(env, arrayBufferSize, nullptr, &arrayBuffer);
5341     bool bRet = (status == napi_invalid_arg);
5342     napi_value retValue;
5343     napi_create_int32(env, bRet, &retValue);
5344     return retValue;
5345 }
5346 
createExternalNull(napi_env env,napi_callback_info info)5347 static napi_value createExternalNull(napi_env env, napi_callback_info info)
5348 {
5349     const char testStr[] = "test";
5350     napi_value external = nullptr;
5351     napi_status status = napi_create_external(
5352         env, (void*)testStr,
5353         [](napi_env env, void* data, void* hint) {},
5354         nullptr, &external);
5355     bool bRet = (status == napi_invalid_arg);
5356     napi_value retValue;
5357     napi_create_int32(env, bRet, &retValue);
5358     return retValue;
5359 }
5360 
createExternalArraybufferDataNull(napi_env env,napi_callback_info info)5361 static napi_value createExternalArraybufferDataNull(napi_env env, napi_callback_info info)
5362 {
5363     int* testInt = (int*)malloc(sizeof(int));
5364     if (testInt == nullptr) {
5365         printf("Memory allocation failed.\n");
5366         return nullptr;
5367     }
5368     *testInt = TAG_NUMBER;
5369     napi_value external = nullptr;
5370     size_t arrayBufferSize = 1024;
5371 
5372     napi_status status = napi_create_external_arraybuffer(
5373         env, nullptr, arrayBufferSize,
5374         [](napi_env env, void* data, void* hint) {
5375             int* temp = static_cast<int*>(data);
5376             free(temp);
5377             temp = nullptr;
5378         },
5379         nullptr, &external);
5380     bool bRet = (status == napi_invalid_arg);
5381     napi_value retValue;
5382     napi_create_int32(env, bRet, &retValue);
5383     return retValue;
5384 }
5385 
createObjectNull(napi_env env,napi_callback_info info)5386 static napi_value createObjectNull(napi_env env, napi_callback_info info)
5387 {
5388     napi_status status = napi_create_object(env, nullptr);
5389     bool bRet = (status == napi_invalid_arg);
5390     napi_value retValue;
5391     napi_create_int32(env, bRet, &retValue);
5392     return retValue;
5393 }
5394 
createSymbolNull(napi_env env,napi_callback_info info)5395 static napi_value createSymbolNull(napi_env env, napi_callback_info info)
5396 {
5397     size_t argc = 1;
5398     napi_value args[1];
5399     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
5400     napi_value description = args[0];
5401     napi_status status = napi_create_symbol(env, description, nullptr);
5402     bool bRet = (status == napi_invalid_arg);
5403     napi_value retValue;
5404     napi_create_int32(env, bRet, &retValue);
5405     return retValue;
5406 }
5407 
createSymbolDescriptionNull(napi_env env,napi_callback_info info)5408 static napi_value createSymbolDescriptionNull(napi_env env, napi_callback_info info)
5409 {
5410     size_t argc = 1;
5411     napi_value args[1];
5412     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
5413     napi_value symbol;
5414     napi_status status = napi_create_symbol(env, nullptr, &symbol);
5415     bool bRet = (status == napi_invalid_arg);
5416     napi_value retValue;
5417     napi_create_int32(env, bRet, &retValue);
5418     return retValue;
5419 }
5420 
createSymbolDescriptionNotString(napi_env env,napi_callback_info info)5421 static napi_value createSymbolDescriptionNotString(napi_env env, napi_callback_info info)
5422 {
5423     size_t argc = 1;
5424     napi_value args[1];
5425     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
5426     napi_value description;
5427     NAPI_CALL(env, napi_create_int32(env, 0, &description));
5428     napi_value symbol;
5429     napi_status status = napi_create_symbol(env, description, &symbol);
5430     bool bRet = (status == napi_invalid_arg);
5431     napi_value retValue;
5432     napi_create_int32(env, bRet, &retValue);
5433     return retValue;
5434 }
5435 
createTypeArrayBufferNull(napi_env env,napi_callback_info info)5436 static napi_value createTypeArrayBufferNull(napi_env env, napi_callback_info info)
5437 {
5438     napi_value arrayBuffer = nullptr;
5439     void* arrayBufferPtr = nullptr;
5440     size_t arrayBufferSize = 16;
5441     size_t typedArrayLength = 4;
5442     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
5443     void* tmpArrayBufferPtr = nullptr;
5444     size_t arrayBufferLength = 0;
5445     napi_get_arraybuffer_info(env, arrayBuffer, &tmpArrayBufferPtr, &arrayBufferLength);
5446     napi_value retValue;
5447     napi_status status = napi_create_typedarray(env, napi_int32_array, typedArrayLength, nullptr, 0, &retValue);
5448     bool bRet = (status == napi_invalid_arg);
5449     napi_create_int32(env, bRet, &retValue);
5450     return retValue;
5451 }
5452 
createTypeArrayResultNull(napi_env env,napi_callback_info info)5453 static napi_value createTypeArrayResultNull(napi_env env, napi_callback_info info)
5454 {
5455     napi_value arrayBuffer = nullptr;
5456     void* arrayBufferPtr = nullptr;
5457     size_t arrayBufferSize = 16;
5458     size_t typedArrayLength = 4;
5459     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
5460     void* tmpArrayBufferPtr = nullptr;
5461     size_t arrayBufferLength = 0;
5462     napi_get_arraybuffer_info(env, arrayBuffer, &tmpArrayBufferPtr, &arrayBufferLength);
5463     napi_status status = napi_create_typedarray(env, napi_int32_array, typedArrayLength, arrayBuffer, 0, nullptr);
5464     bool bRet = (status == napi_invalid_arg);
5465     napi_value retValue;
5466     napi_create_int32(env, bRet, &retValue);
5467     return retValue;
5468 }
5469 
createTypeArrayNotBufferObj(napi_env env,napi_callback_info info)5470 static napi_value createTypeArrayNotBufferObj(napi_env env, napi_callback_info info)
5471 {
5472     napi_value arrayBuffer;
5473     NAPI_CALL(env, napi_create_int32(env, 0, &arrayBuffer));
5474     void* arrayBufferPtr = nullptr;
5475     size_t arrayBufferSize = 16;
5476     size_t typedArrayLength = 4;
5477     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
5478     napi_value retValue;
5479     napi_status status = napi_create_typedarray(env, napi_int32_array, typedArrayLength, arrayBuffer, 0, &retValue);
5480     bool bRet = (status == napi_invalid_arg);
5481     napi_create_int32(env, bRet, &retValue);
5482     return retValue;
5483 }
5484 
createTypeArrayNotEnumValue(napi_env env,napi_callback_info info)5485 static napi_value createTypeArrayNotEnumValue(napi_env env, napi_callback_info info)
5486 {
5487     napi_value arrayBuffer = nullptr;
5488     void* arrayBufferPtr = nullptr;
5489     size_t arrayBufferSize = 16;
5490     size_t typedArrayLength = 4;
5491     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
5492     void* tmpArrayBufferPtr = nullptr;
5493     size_t arrayBufferLength = 0;
5494     napi_get_arraybuffer_info(env, arrayBuffer, &tmpArrayBufferPtr, &arrayBufferLength);
5495     napi_value retValue;
5496     napi_status status = napi_create_typedarray(env, napi_uint8_array, typedArrayLength, arrayBuffer, 0, &retValue);
5497     bool bRet = (status == napi_invalid_arg);
5498     napi_create_int32(env, bRet, &retValue);
5499     return retValue;
5500 }
5501 
createDataViewBufferNull(napi_env env,napi_callback_info info)5502 static napi_value createDataViewBufferNull(napi_env env, napi_callback_info info)
5503 {
5504     napi_value arrayBuffer = nullptr;
5505     void* arrayBufferPtr = nullptr;
5506     size_t arrayBufferSize = 16;
5507     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
5508     bool isArrayBuffer = false;
5509     napi_is_arraybuffer(env, arrayBuffer, &isArrayBuffer);
5510     napi_value result = nullptr;
5511     napi_status status = napi_create_dataview(env, arrayBufferSize, nullptr, 0, &result);
5512     bool bRet = (status == napi_invalid_arg);
5513     napi_value retValue;
5514     napi_create_int32(env, bRet, &retValue);
5515     return retValue;
5516 }
5517 
createDataViewResultNull(napi_env env,napi_callback_info info)5518 static napi_value createDataViewResultNull(napi_env env, napi_callback_info info)
5519 {
5520     napi_value arrayBuffer = nullptr;
5521     void* arrayBufferPtr = nullptr;
5522     size_t arrayBufferSize = 16;
5523     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
5524     bool isArrayBuffer = false;
5525     napi_is_arraybuffer(env, arrayBuffer, &isArrayBuffer);
5526     napi_status status = napi_create_dataview(env, arrayBufferSize, arrayBuffer, 0, nullptr);
5527     bool bRet = (status == napi_invalid_arg);
5528     napi_value retValue;
5529     napi_create_int32(env, bRet, &retValue);
5530     return retValue;
5531 }
5532 
createDataViewBufferNotObj(napi_env env,napi_callback_info info)5533 static napi_value createDataViewBufferNotObj(napi_env env, napi_callback_info info)
5534 {
5535     napi_value arrayBuffer;
5536     NAPI_CALL(env, napi_create_int32(env, 0, &arrayBuffer));
5537     size_t arrayBufferSize = 16;
5538     napi_value result = nullptr;
5539     napi_status status = napi_create_dataview(env, arrayBufferSize, arrayBuffer, 0, &result);
5540     bool bRet = (status == napi_invalid_arg);
5541     napi_value retValue;
5542     napi_create_int32(env, bRet, &retValue);
5543     return retValue;
5544 }
5545 
createInt32Null(napi_env env,napi_callback_info info)5546 static napi_value createInt32Null(napi_env env, napi_callback_info info)
5547 {
5548     int32_t value = 5;
5549     napi_status status = napi_create_int32(env, value, nullptr);
5550     bool bRet = (status == napi_invalid_arg);
5551     napi_value retValue;
5552     napi_create_int32(env, bRet, &retValue);
5553     return retValue;
5554 }
5555 
getValueInt32(napi_env env,napi_callback_info info)5556 static napi_value getValueInt32(napi_env env, napi_callback_info info)
5557 {
5558     size_t argc = 1;
5559     napi_value args[1];
5560     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
5561     int32_t value;
5562     NAPI_CALL(env, napi_get_value_int32(env, args[0], &value));
5563     napi_value output;
5564     NAPI_CALL(env, napi_create_int32(env, value, &output));
5565     return output;
5566 }
5567 
getValueInt32ValueNull(napi_env env,napi_callback_info info)5568 static napi_value getValueInt32ValueNull(napi_env env, napi_callback_info info)
5569 {
5570     size_t argc = 1;
5571     napi_value args[1];
5572     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
5573     int32_t value;
5574     napi_status status = napi_get_value_int32(env, nullptr, &value);
5575     bool bRet = (status == napi_invalid_arg);
5576     napi_value retValue;
5577     napi_create_int32(env, bRet, &retValue);
5578     return retValue;
5579 }
5580 
getValueInt32RstNull(napi_env env,napi_callback_info info)5581 static napi_value getValueInt32RstNull(napi_env env, napi_callback_info info)
5582 {
5583     size_t argc = 1;
5584     napi_value args[1];
5585     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
5586     napi_status status = napi_get_value_int32(env, args[0], nullptr);
5587     bool bRet = (status == napi_invalid_arg);
5588     napi_value retValue;
5589     napi_create_int32(env, bRet, &retValue);
5590     return retValue;
5591 }
5592 
getValueInt32NotNum(napi_env env,napi_callback_info info)5593 static napi_value getValueInt32NotNum(napi_env env, napi_callback_info info)
5594 {
5595     napi_value args = nullptr;
5596     void* arrayBufferPtr = nullptr;
5597     size_t arrayBufferSize = 16;
5598     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &args);
5599     int32_t value;
5600     napi_status status = napi_get_value_int32(env, args, &value);
5601     bool bRet = (status == napi_invalid_arg);
5602     napi_value retValue;
5603     napi_create_int32(env, bRet, &retValue);
5604     return retValue;
5605 }
5606 
getValueInt64(napi_env env,napi_callback_info info)5607 static napi_value getValueInt64(napi_env env, napi_callback_info info)
5608 {
5609     size_t argc = 1;
5610     napi_value args[1];
5611     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
5612     int64_t value;
5613     napi_status status = napi_get_value_int64(env, args[0], &value);
5614     bool bRet = (status == napi_invalid_arg);
5615     napi_value retValue;
5616     napi_create_int32(env, bRet, &retValue);
5617     return retValue;
5618 }
5619 
getValueInt64ValueNull(napi_env env,napi_callback_info info)5620 static napi_value getValueInt64ValueNull(napi_env env, napi_callback_info info)
5621 {
5622     int64_t value;
5623     napi_status status = napi_get_value_int64(env, nullptr, &value);
5624     bool bRet = (status == napi_invalid_arg);
5625     napi_value retValue;
5626     napi_create_int32(env, bRet, &retValue);
5627     return retValue;
5628 }
5629 
getValueInt64RstNull(napi_env env,napi_callback_info info)5630 static napi_value getValueInt64RstNull(napi_env env, napi_callback_info info)
5631 {
5632     size_t argc = 1;
5633     napi_value args[1];
5634     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
5635     napi_status status = napi_get_value_int64(env, args[0], nullptr);
5636     bool bRet = (status == napi_invalid_arg);
5637     napi_value retValue;
5638     napi_create_int32(env, bRet, &retValue);
5639     return retValue;
5640 }
5641 
getValueInt64NotNum(napi_env env,napi_callback_info info)5642 static napi_value getValueInt64NotNum(napi_env env, napi_callback_info info)
5643 {
5644     napi_value args = nullptr;
5645     void* arrayBufferPtr = nullptr;
5646     size_t arrayBufferSize = 16;
5647     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &args);
5648     int64_t value;
5649     napi_status status = napi_get_value_int64(env, args, &value);
5650     bool bRet = (status == napi_invalid_arg);
5651     napi_value retValue;
5652     napi_create_int32(env, bRet, &retValue);
5653     return retValue;
5654 }
5655 
createUInt32Null(napi_env env,napi_callback_info info)5656 static napi_value createUInt32Null(napi_env env, napi_callback_info info)
5657 {
5658     uint32_t value = 5;
5659     napi_status status = napi_create_uint32(env, value, nullptr);
5660     bool bRet = (status == napi_invalid_arg);
5661     napi_value retValue;
5662     napi_create_int32(env, bRet, &retValue);
5663     return retValue;
5664 }
5665 
createInt64Null(napi_env env,napi_callback_info info)5666 static napi_value createInt64Null(napi_env env, napi_callback_info info)
5667 {
5668     int64_t value = 100;
5669     napi_status status = napi_create_int64(env, (double)value, nullptr);
5670     bool bRet = (status == napi_invalid_arg);
5671     napi_value retValue;
5672     napi_create_int32(env, bRet, &retValue);
5673     return retValue;
5674 }
5675 
createDoubleNull(napi_env env,napi_callback_info info)5676 static napi_value createDoubleNull(napi_env env, napi_callback_info info)
5677 {
5678     double value = 100;
5679     napi_status status = napi_create_double(env, value, nullptr);
5680     bool bRet = (status == napi_invalid_arg);
5681     napi_value retValue;
5682     napi_create_int32(env, bRet, &retValue);
5683     return retValue;
5684 }
5685 
createAndGetStringLatin1BufferNull(napi_env env,napi_callback_info info)5686 static napi_value createAndGetStringLatin1BufferNull(napi_env env, napi_callback_info info)
5687 {
5688     size_t copied = 0;
5689     napi_value output;
5690     napi_status status = napi_create_string_latin1(env, nullptr, copied, &output);
5691     bool bRet = (status == napi_invalid_arg);
5692     napi_value retValue;
5693     napi_create_int32(env, bRet, &retValue);
5694     return retValue;
5695 }
5696 
createAndGetStringLatin1ResultNull(napi_env env,napi_callback_info info)5697 static napi_value createAndGetStringLatin1ResultNull(napi_env env, napi_callback_info info)
5698 {
5699     char buffer[128];
5700     size_t copied = 0;
5701     napi_status status = napi_create_string_latin1(env, buffer, copied, nullptr);
5702     bool bRet = (status == napi_invalid_arg);
5703     napi_value retValue;
5704     napi_create_int32(env, bRet, &retValue);
5705     return retValue;
5706 }
5707 
createAndGetStringUtf16BufferNull(napi_env env,napi_callback_info info)5708 static napi_value createAndGetStringUtf16BufferNull(napi_env env, napi_callback_info info)
5709 {
5710     size_t copied = 0;
5711     napi_value result;
5712     napi_status status = napi_create_string_utf16(env, nullptr, copied, &result);
5713     bool bRet = (status == napi_invalid_arg);
5714     napi_value retValue;
5715     napi_create_int32(env, bRet, &retValue);
5716     return retValue;
5717 }
5718 
createAndGetStringUtf16ResultNull(napi_env env,napi_callback_info info)5719 static napi_value createAndGetStringUtf16ResultNull(napi_env env, napi_callback_info info)
5720 {
5721     char16_t buffer[128]; // 128: char16_t type of element size
5722     size_t copied = 0;
5723     napi_status status = napi_create_string_utf16(env, buffer, copied, nullptr);
5724     bool bRet = (status == napi_invalid_arg);
5725     napi_value retValue;
5726     napi_create_int32(env, bRet, &retValue);
5727     return retValue;
5728 }
5729 
createAndGetStringUtf16Exceed(napi_env env,napi_callback_info info)5730 static napi_value createAndGetStringUtf16Exceed(napi_env env, napi_callback_info info)
5731 {
5732     char16_t buffer[128]; // 128: char16_t type of element size
5733     size_t length = -1;
5734     napi_value result;
5735     napi_status status = napi_create_string_utf16(env, buffer, length, &result);
5736     bool bRet = (status == napi_invalid_arg);
5737     napi_value retValue;
5738     napi_create_int32(env, bRet, &retValue);
5739     return retValue;
5740 }
5741 
getArrayLengthResultNull(napi_env env,napi_callback_info info)5742 static napi_value getArrayLengthResultNull(napi_env env, napi_callback_info info)
5743 {
5744     uint32_t length;
5745     napi_status status = napi_get_array_length(env, nullptr, &length);
5746     bool bRet = (status == napi_invalid_arg);
5747     napi_value retValue;
5748     napi_create_int32(env, bRet, &retValue);
5749     return retValue;
5750 }
5751 
getArrayLengthValueNull(napi_env env,napi_callback_info info)5752 static napi_value getArrayLengthValueNull(napi_env env, napi_callback_info info)
5753 {
5754     size_t argc = 1;
5755     napi_value args[1];
5756     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
5757     napi_valuetype valuetype0;
5758     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
5759     napi_status status = napi_get_array_length(env, args[0], nullptr);
5760     bool bRet = (status == napi_invalid_arg);
5761     napi_value retValue;
5762     napi_create_int32(env, bRet, &retValue);
5763     return retValue;
5764 }
5765 
getArrayLengthNotArray(napi_env env,napi_callback_info info)5766 static napi_value getArrayLengthNotArray(napi_env env, napi_callback_info info)
5767 {
5768     size_t argc = 1;
5769     napi_value args[1];
5770     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
5771     uint32_t length;
5772     napi_value args1;
5773     NAPI_CALL(env, napi_create_int32(env, 0, &args1));
5774     napi_status status = napi_get_array_length(env, args1, &length);
5775     bool bRet = (status == napi_invalid_arg);
5776     napi_value retValue;
5777     napi_create_int32(env, bRet, &retValue);
5778     return retValue;
5779 }
5780 
getArrayBufferInfoBufferNull(napi_env env,napi_callback_info info)5781 static napi_value getArrayBufferInfoBufferNull(napi_env env, napi_callback_info info)
5782 {
5783     napi_value arrayBuffer;
5784     napi_status status;
5785     void* yourPointer = nullptr;
5786     size_t arrayBufferSize = 1024;
5787     status = napi_create_arraybuffer(env, arrayBufferSize, &yourPointer, &arrayBuffer);
5788     NAPI_ASSERT(env, status == napi_ok, "success to napi_create_arraybuffer");
5789     void* tmpArrayBufferPtr = nullptr;
5790     size_t arrayBufferLength = 0;
5791     status = napi_get_arraybuffer_info(env, nullptr, &tmpArrayBufferPtr, &arrayBufferLength);
5792     bool bRet = (status == napi_invalid_arg);
5793     napi_value retValue;
5794     napi_create_int32(env, bRet, &retValue);
5795     return retValue;
5796 }
5797 
getArrayBufferInfoLengthNull(napi_env env,napi_callback_info info)5798 static napi_value getArrayBufferInfoLengthNull(napi_env env, napi_callback_info info)
5799 {
5800     napi_value arrayBuffer;
5801     napi_status status;
5802     void* yourPointer = nullptr;
5803     size_t arrayBufferSize = 1024;
5804     status = napi_create_arraybuffer(env, arrayBufferSize, &yourPointer, &arrayBuffer);
5805     NAPI_ASSERT(env, status == napi_ok, "success to napi_create_arraybuffer");
5806     void* tmpArrayBufferPtr = nullptr;
5807     status = napi_get_arraybuffer_info(env, arrayBuffer, &tmpArrayBufferPtr, nullptr);
5808     bool bRet = (status == napi_invalid_arg);
5809     napi_value retValue;
5810     napi_create_int32(env, bRet, &retValue);
5811     return retValue;
5812 }
5813 
getArrayBufferInfoNotObj(napi_env env,napi_callback_info info)5814 static napi_value getArrayBufferInfoNotObj(napi_env env, napi_callback_info info)
5815 {
5816     napi_value arrayBuffer;
5817     napi_status status;
5818     void* yourPointer = nullptr;
5819     size_t arrayBufferSize = 1024;
5820     status = napi_create_arraybuffer(env, arrayBufferSize, &yourPointer, &arrayBuffer);
5821     NAPI_ASSERT(env, status == napi_ok, "success to napi_create_arraybuffer");
5822     napi_value arrayBuffer1;
5823     NAPI_CALL(env, napi_create_int32(env, 0, &arrayBuffer1));
5824     void* tmpArrayBufferPtr = nullptr;
5825     size_t arrayBufferLength = 0;
5826     status = napi_get_arraybuffer_info(env, arrayBuffer1, &tmpArrayBufferPtr, &arrayBufferLength);
5827     bool bRet = (status == napi_invalid_arg);
5828     napi_value retValue;
5829     napi_create_int32(env, bRet, &retValue);
5830     return retValue;
5831 }
5832 
getPrototypeObjectNull(napi_env env,napi_callback_info info)5833 static napi_value getPrototypeObjectNull(napi_env env, napi_callback_info info)
5834 {
5835     napi_value testWrapClass = nullptr;
5836     napi_define_class(env, "TestWrapClass", NAPI_AUTO_LENGTH, [](napi_env env, napi_callback_info info) -> napi_value {
5837                   napi_value thisVar = nullptr;
5838                   napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
5839                   return thisVar;
5840               }, nullptr, 0, nullptr, &testWrapClass);
5841     napi_value customClassPrototype = nullptr;
5842     napi_status status = napi_get_prototype(env, nullptr, &customClassPrototype);
5843     bool bRet = (status == napi_invalid_arg);
5844     napi_value retValue;
5845     napi_create_int32(env, bRet, &retValue);
5846     return retValue;
5847 }
5848 
getPrototypeResultNull(napi_env env,napi_callback_info info)5849 static napi_value getPrototypeResultNull(napi_env env, napi_callback_info info)
5850 {
5851     napi_value testWrapClass = nullptr;
5852     napi_define_class(env, "TestWrapClass", NAPI_AUTO_LENGTH, [](napi_env env, napi_callback_info info) -> napi_value {
5853                   napi_value thisVar = nullptr;
5854                   napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
5855                   return thisVar;
5856               }, nullptr, 0, nullptr, &testWrapClass);
5857     napi_status status = napi_get_prototype(env, testWrapClass, nullptr);
5858     bool bRet = (status == napi_invalid_arg);
5859     napi_value retValue;
5860     napi_create_int32(env, bRet, &retValue);
5861     return retValue;
5862 }
5863 
getPrototypeNotObj(napi_env env,napi_callback_info info)5864 static napi_value getPrototypeNotObj(napi_env env, napi_callback_info info)
5865 {
5866     napi_value testWrapClass;
5867     NAPI_CALL(env, napi_create_int32(env, 0, &testWrapClass));
5868     napi_value customClassPrototype = nullptr;
5869     napi_status status = napi_get_prototype(env, testWrapClass, &customClassPrototype);
5870     bool bRet = (status == napi_invalid_arg);
5871     napi_value retValue;
5872     napi_create_int32(env, bRet, &retValue);
5873     return retValue;
5874 }
5875 
getTypedArrayInfoNull(napi_env env,napi_callback_info info)5876 static napi_value getTypedArrayInfoNull(napi_env env, napi_callback_info info)
5877 {
5878     napi_typedarray_type type;
5879     size_t length = 0;
5880     void* data = nullptr;
5881     napi_value retArrayBuffer;
5882     size_t byteOffset = -1;
5883     napi_status status = napi_get_typedarray_info(env, nullptr, &type, &length, &data, &retArrayBuffer, &byteOffset);
5884     bool bRet = (status == napi_invalid_arg);
5885     napi_value retValue;
5886     napi_create_int32(env, bRet, &retValue);
5887     return retValue;
5888 }
5889 
getDataViewInfoNull(napi_env env,napi_callback_info info)5890 static napi_value getDataViewInfoNull(napi_env env, napi_callback_info info)
5891 {
5892     napi_value retArrayBuffer = nullptr;
5893     void* data = nullptr;
5894     size_t byteLength = 0;
5895     size_t byteOffset = -1;
5896     napi_status status = napi_get_dataview_info(env, nullptr, &byteLength, &data, &retArrayBuffer, &byteOffset);
5897     bool bRet = (status == napi_invalid_arg);
5898     napi_value retValue;
5899     napi_create_int32(env, bRet, &retValue);
5900     return retValue;
5901 }
5902 
getDataViewInfoNotObj(napi_env env,napi_callback_info info)5903 static napi_value getDataViewInfoNotObj(napi_env env, napi_callback_info info)
5904 {
5905     napi_value result;
5906     NAPI_CALL(env, napi_create_int32(env, 0, &result));
5907     napi_value retArrayBuffer = nullptr;
5908     void* data = nullptr;
5909     size_t byteLength = 0;
5910     size_t byteOffset = -1;
5911     napi_status status = napi_get_dataview_info(env, result, &byteLength, &data, &retArrayBuffer, &byteOffset);
5912     bool bRet = (status == napi_invalid_arg);
5913     napi_value retValue;
5914     napi_create_int32(env, bRet, &retValue);
5915     return retValue;
5916 }
5917 
getValueBoolValueNull(napi_env env,napi_callback_info info)5918 static napi_value getValueBoolValueNull(napi_env env, napi_callback_info info)
5919 {
5920     size_t argc = 1;
5921     napi_value args[1];
5922     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
5923     bool value;
5924     napi_status status = napi_get_value_bool(env, nullptr, &value);
5925     bool bRet = (status == napi_invalid_arg);
5926     napi_value retValue;
5927     napi_create_int32(env, bRet, &retValue);
5928     return retValue;
5929 }
5930 
getValueBoolResultNull(napi_env env,napi_callback_info info)5931 static napi_value getValueBoolResultNull(napi_env env, napi_callback_info info)
5932 {
5933     size_t argc = 1;
5934     napi_value args[1];
5935     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
5936     napi_status status = napi_get_value_bool(env, args[0], nullptr);
5937     bool bRet = (status == napi_invalid_arg);
5938     napi_value retValue;
5939     napi_create_int32(env, bRet, &retValue);
5940     return retValue;
5941 }
5942 
getBoolean(napi_env env,napi_callback_info info)5943 static napi_value getBoolean(napi_env env, napi_callback_info info)
5944 {
5945     size_t argc = 1;
5946     napi_value args[1];
5947     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
5948     bool value;
5949     NAPI_CALL(env, napi_get_value_bool(env, args[0], &value));
5950     napi_value output;
5951     NAPI_CALL(env, napi_get_boolean(env, value, &output));
5952     return output;
5953 }
5954 
getBooleanNull(napi_env env,napi_callback_info info)5955 static napi_value getBooleanNull(napi_env env, napi_callback_info info)
5956 {
5957     bool value = false;
5958     napi_status status = napi_get_boolean(env, value, nullptr);
5959     bool bRet = (status == napi_invalid_arg);
5960     napi_value retValue;
5961     napi_create_int32(env, bRet, &retValue);
5962     return retValue;
5963 }
5964 
getValueNotBool(napi_env env,napi_callback_info info)5965 static napi_value getValueNotBool(napi_env env, napi_callback_info info)
5966 {
5967     size_t argc = 1;
5968     napi_value args[1];
5969     napi_value boolValue;
5970     NAPI_CALL(env, napi_create_int32(env, 0, &boolValue));
5971     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
5972     bool value;
5973     napi_status status = napi_get_value_bool(env, boolValue, &value);
5974     bool bRet = (status == napi_invalid_arg);
5975     napi_value retValue;
5976     napi_create_int32(env, bRet, &retValue);
5977     return retValue;
5978 }
5979 
getValueDoubleValueNull(napi_env env,napi_callback_info info)5980 static napi_value getValueDoubleValueNull(napi_env env, napi_callback_info info)
5981 {
5982     size_t argc = 1;
5983     napi_value args[1];
5984     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
5985     napi_status status = napi_get_value_double(env, args[0], nullptr);
5986     bool bRet = (status == napi_invalid_arg);
5987     napi_value retValue;
5988     napi_create_int32(env, bRet, &retValue);
5989     return retValue;
5990 }
5991 
getValueDoubleResultNull(napi_env env,napi_callback_info info)5992 static napi_value getValueDoubleResultNull(napi_env env, napi_callback_info info)
5993 {
5994     size_t argc = 1;
5995     napi_value args[1];
5996     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
5997     double value;
5998     napi_status status = napi_get_value_double(env, nullptr, &value);
5999     bool bRet = (status == napi_invalid_arg);
6000     napi_value retValue;
6001     napi_create_int32(env, bRet, &retValue);
6002     return retValue;
6003 }
6004 
getValueDoubleNotNum(napi_env env,napi_callback_info info)6005 static napi_value getValueDoubleNotNum(napi_env env, napi_callback_info info)
6006 {
6007     napi_value arrayBuffer = nullptr;
6008     void* arrayBufferPtr = nullptr;
6009     size_t arrayBufferSize = 16;
6010     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
6011     double value;
6012     napi_status status = napi_get_value_double(env, arrayBuffer, &value);
6013     bool bRet = (status == napi_invalid_arg);
6014     napi_value retValue;
6015     napi_create_int32(env, bRet, &retValue);
6016     return retValue;
6017 }
6018 
getValueExternalValueNull(napi_env env,napi_callback_info info)6019 static napi_value getValueExternalValueNull(napi_env env, napi_callback_info info)
6020 {
6021     const char testStr[] = "test";
6022     napi_value external = nullptr;
6023     napi_create_external(
6024         env, (void*)testStr,
6025         [](napi_env env, void* data, void* hint) {},
6026         (void*)testStr, &external);
6027     void* tempExternal = nullptr;
6028     napi_status status = napi_get_value_external(env, nullptr, &tempExternal);
6029     bool bRet = (status == napi_invalid_arg);
6030     napi_value retValue;
6031     napi_create_int32(env, bRet, &retValue);
6032     return retValue;
6033 }
6034 
getValueExternalResultNull(napi_env env,napi_callback_info info)6035 static napi_value getValueExternalResultNull(napi_env env, napi_callback_info info)
6036 {
6037     const char testStr[] = "test";
6038     napi_value external = nullptr;
6039     napi_create_external(
6040         env, (void*)testStr,
6041         [](napi_env env, void* data, void* hint) {},
6042         (void*)testStr, &external);
6043     napi_status status = napi_get_value_external(env, external, nullptr);
6044     bool bRet = (status == napi_invalid_arg);
6045     napi_value retValue;
6046     napi_create_int32(env, bRet, &retValue);
6047     return retValue;
6048 }
6049 
getValueExternalNotPtr(napi_env env,napi_callback_info info)6050 static napi_value getValueExternalNotPtr(napi_env env, napi_callback_info info)
6051 {
6052     const char testStr[] = "test";
6053     napi_value external;
6054     NAPI_CALL(env, napi_create_int32(env, 0, &external));
6055     napi_create_external(
6056         env, (void*)testStr,
6057         [](napi_env env, void* data, void* hint) {},
6058         (void*)testStr, &external);
6059     void* tempExternal = nullptr;
6060     napi_status status = napi_get_value_external(env, external, &tempExternal);
6061     bool bRet = (status == napi_invalid_arg);
6062     napi_value retValue;
6063     napi_create_int32(env, bRet, &retValue);
6064     return retValue;
6065 }
6066 
getValueStringLatin1(napi_env env,napi_callback_info info)6067 static napi_value getValueStringLatin1(napi_env env, napi_callback_info info)
6068 {
6069     size_t argc = 1;
6070     napi_value args[1];
6071     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
6072     NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments");
6073     napi_valuetype valuetype;
6074     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype));
6075     NAPI_ASSERT(env, valuetype == napi_string,
6076                 "Wrong type of argment. Expects a string.");
6077     char buffer[128];
6078     size_t bufferSize = 128;
6079     size_t copied = 0;
6080     NAPI_CALL(env,
6081         napi_get_value_string_latin1(env, args[0], buffer, bufferSize, &copied));
6082     NAPI_ASSERT(env, copied == NAPI_COPIED_VALUE, "napi_get_value_string_latin1 fail");
6083     napi_value output;
6084     NAPI_CALL(env, napi_create_string_latin1(env, buffer, copied, &output));
6085     return output;
6086 }
6087 
getValueStringLatin1Null(napi_env env,napi_callback_info info)6088 static napi_value getValueStringLatin1Null(napi_env env, napi_callback_info info)
6089 {
6090     char buffer[128];
6091     size_t bufferSize = 128;
6092     size_t copied = 0;
6093     napi_status status = napi_get_value_string_latin1(env, nullptr, buffer, bufferSize, &copied);
6094     bool bRet = (status == napi_invalid_arg);
6095     napi_value retValue;
6096     napi_create_int32(env, bRet, &retValue);
6097     return retValue;
6098 }
6099 
getValueStringUtf8(napi_env env,napi_callback_info info)6100 static napi_value getValueStringUtf8(napi_env env, napi_callback_info info)
6101 {
6102     size_t argc = 1;
6103     napi_value args[1];
6104     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
6105 
6106     NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments");
6107 
6108     napi_valuetype valuetype;
6109     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype));
6110 
6111     NAPI_ASSERT(env, valuetype == napi_string,
6112                 "Wrong type of argment. Expects a string.");
6113 
6114     char buffer[128];
6115     size_t bufferSize = 128;
6116     size_t copied = 0;
6117 
6118     NAPI_CALL(env,
6119         napi_get_value_string_utf8(env, args[0], buffer, bufferSize, &copied));
6120     NAPI_ASSERT(env, copied == NAPI_ARGC_LENGTH, "napi_get_value_string_utf8 fail");
6121 
6122     napi_value output;
6123     NAPI_CALL(env, napi_create_string_utf8(env, buffer, copied, &output));
6124 
6125     return output;
6126 }
6127 
getValueStringUtf8Null(napi_env env,napi_callback_info info)6128 static napi_value getValueStringUtf8Null(napi_env env, napi_callback_info info)
6129 {
6130     size_t argc = 1;
6131     napi_value args[1];
6132     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
6133     char buffer[128];
6134     size_t bufferSize = 128;
6135     size_t copied = 0;
6136     napi_status status = napi_get_value_string_utf8(env, nullptr, buffer, bufferSize, &copied);
6137     bool bRet = (status == napi_invalid_arg);
6138     napi_value retValue;
6139     napi_create_int32(env, bRet, &retValue);
6140     return retValue;
6141 }
6142 
getValueStringUtf8NotStr(napi_env env,napi_callback_info info)6143 static napi_value getValueStringUtf8NotStr(napi_env env, napi_callback_info info)
6144 {
6145     napi_value args;
6146     NAPI_CALL(env, napi_create_int32(env, 0, &args));
6147     char buffer[128];
6148     size_t bufferSize = 128;
6149     size_t copied = 0;
6150     napi_status status = napi_get_value_string_utf8(env, args, buffer, bufferSize, &copied);
6151     bool bRet = (status == napi_invalid_arg);
6152     napi_value retValue;
6153     napi_create_int32(env, bRet, &retValue);
6154     return retValue;
6155 }
6156 
getValueStringUtf16(napi_env env,napi_callback_info info)6157 static napi_value getValueStringUtf16(napi_env env, napi_callback_info info)
6158 {
6159     size_t argc = 1;
6160     napi_value args[1];
6161     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
6162     NAPI_ASSERT(env, argc >= 1, "Wrong number of arguments.");
6163     napi_valuetype valuetype;
6164     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype));
6165     NAPI_ASSERT(env, valuetype == napi_string, "Expect a string.");
6166     char16_t buffer[128]; // 128: char16_t type of element size
6167     size_t bufferSize = 128; // 128: char16_t type of element size
6168     size_t copied = 0;
6169     NAPI_CALL(env, napi_get_value_string_utf16(env, args[0], buffer, bufferSize, &copied));
6170     napi_value result;
6171     NAPI_CALL(env, napi_create_string_utf16(env, buffer, copied, &result));
6172     return result;
6173 }
6174 
getValueStringUtf16Null(napi_env env,napi_callback_info info)6175 static napi_value getValueStringUtf16Null(napi_env env, napi_callback_info info)
6176 {
6177     char16_t buffer[128]; // 128: char16_t type of element size
6178     size_t bufferSize = 128; // 128: char16_t type of element size
6179     size_t copied = 0;
6180     napi_status status = napi_get_value_string_utf16(env, nullptr, buffer, bufferSize, &copied);
6181     bool bRet = (status == napi_invalid_arg);
6182     napi_value retValue;
6183     napi_create_int32(env, bRet, &retValue);
6184     return retValue;
6185 }
6186 
getValueStringUtf16NotStr(napi_env env,napi_callback_info info)6187 static napi_value getValueStringUtf16NotStr(napi_env env, napi_callback_info info)
6188 {
6189     napi_value args;
6190     NAPI_CALL(env, napi_create_int32(env, 0, &args));
6191     char16_t buffer[128]; // 128: char16_t type of element size
6192     size_t bufferSize = 128; // 128: char16_t type of element size
6193     size_t copied = 0;
6194     napi_status status = napi_get_value_string_utf16(env, args, buffer, bufferSize, &copied);
6195     bool bRet = (status == napi_invalid_arg);
6196     napi_value retValue;
6197     napi_create_int32(env, bRet, &retValue);
6198     return retValue;
6199 }
6200 
getValueUint32(napi_env env,napi_callback_info info)6201 static napi_value getValueUint32(napi_env env, napi_callback_info info)
6202 {
6203     size_t argc = 1;
6204     napi_value args[1];
6205     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
6206 
6207     uint32_t value;
6208     NAPI_CALL(env, napi_get_value_uint32(env, args[0], &value));
6209 
6210     napi_value output;
6211     NAPI_CALL(env, napi_create_uint32(env, value, &output));
6212 
6213     return output;
6214 }
6215 
getValueUint32Null(napi_env env,napi_callback_info info)6216 static napi_value getValueUint32Null(napi_env env, napi_callback_info info)
6217 {
6218     size_t argc = 1;
6219     napi_value args[1];
6220     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
6221     uint32_t value;
6222     napi_status status = napi_get_value_uint32(env, args[0], &value);
6223     bool bRet = (status == napi_invalid_arg);
6224     napi_value retValue;
6225     napi_create_int32(env, bRet, &retValue);
6226     return retValue;
6227 }
6228 
getValueUint32NotNum(napi_env env,napi_callback_info info)6229 static napi_value getValueUint32NotNum(napi_env env, napi_callback_info info)
6230 {
6231     napi_value args = nullptr;
6232     void* arrayBufferPtr = nullptr;
6233     size_t arrayBufferSize = 16;
6234     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &args);
6235     uint32_t value;
6236     napi_status status = napi_get_value_uint32(env, args, &value);
6237     bool bRet = (status == napi_invalid_arg);
6238     napi_value retValue;
6239     napi_create_int32(env, bRet, &retValue);
6240     return retValue;
6241 }
6242 
coerceToBoolValueNull(napi_env env,napi_callback_info info)6243 static napi_value coerceToBoolValueNull(napi_env env, napi_callback_info info)
6244 {
6245     size_t argc = 1;
6246     napi_value args[1];
6247     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
6248     napi_value output;
6249     napi_status status = napi_coerce_to_bool(env, nullptr, &output);
6250     bool bRet = (status == napi_invalid_arg);
6251     napi_value retValue;
6252     napi_create_int32(env, bRet, &retValue);
6253     return retValue;
6254 }
6255 
coerceToBoolResultNull(napi_env env,napi_callback_info info)6256 static napi_value coerceToBoolResultNull(napi_env env, napi_callback_info info)
6257 {
6258     size_t argc = 1;
6259     napi_value args[1];
6260     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
6261     napi_status status = napi_coerce_to_bool(env, args[0], nullptr);
6262     bool bRet = (status == napi_invalid_arg);
6263     napi_value retValue;
6264     napi_create_int32(env, bRet, &retValue);
6265     return retValue;
6266 }
6267 
coerceToNumberValueNull(napi_env env,napi_callback_info info)6268 static napi_value coerceToNumberValueNull(napi_env env, napi_callback_info info)
6269 {
6270     napi_value output;
6271     napi_status status = napi_coerce_to_number(env, nullptr, &output);
6272     bool bRet = (status == napi_invalid_arg);
6273     napi_value retValue;
6274     napi_create_int32(env, bRet, &retValue);
6275     return retValue;
6276 }
6277 
coerceToNumberRstNull(napi_env env,napi_callback_info info)6278 static napi_value coerceToNumberRstNull(napi_env env, napi_callback_info info)
6279 {
6280     size_t argc = 1;
6281     napi_value args[1];
6282     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
6283     napi_status status = napi_coerce_to_number(env, args[0], nullptr);
6284     bool bRet = (status == napi_invalid_arg);
6285     napi_value retValue;
6286     napi_create_int32(env, bRet, &retValue);
6287     return retValue;
6288 }
6289 
typeOf(napi_env env,napi_callback_info info)6290 static napi_value typeOf(napi_env env, napi_callback_info info)
6291 {
6292     size_t argc = 1;
6293     napi_value args[1];
6294     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
6295     napi_valuetype valuetype;
6296     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype));
6297     napi_value ret;
6298     NAPI_CALL(env, napi_create_int32(env, 0, &ret));
6299     return ret;
6300 }
6301 
typeOfValueNull(napi_env env,napi_callback_info info)6302 static napi_value typeOfValueNull(napi_env env, napi_callback_info info)
6303 {
6304     napi_valuetype valuetype;
6305     napi_status status = napi_typeof(env, nullptr, &valuetype);
6306     bool bRet = (status == napi_invalid_arg);
6307     napi_value retValue;
6308     napi_create_int32(env, bRet, &retValue);
6309     return retValue;
6310 }
6311 
typeOfRstNull(napi_env env,napi_callback_info info)6312 static napi_value typeOfRstNull(napi_env env, napi_callback_info info)
6313 {
6314     size_t argc = 1;
6315     napi_value args[1];
6316     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
6317     napi_status status = napi_typeof(env, args[0], nullptr);
6318     bool bRet = (status == napi_invalid_arg);
6319     napi_value retValue;
6320     napi_create_int32(env, bRet, &retValue);
6321     return retValue;
6322 }
6323 
instanceOfObjectNull(napi_env env,napi_callback_info info)6324 static napi_value instanceOfObjectNull(napi_env env, napi_callback_info info)
6325 {
6326     napi_value customClass = nullptr;
6327     napi_define_class(env, "TestWrapClass", NAPI_AUTO_LENGTH,
6328         [](napi_env env, napi_callback_info info) -> napi_value {
6329             napi_value thisVar = nullptr;
6330             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
6331             return thisVar;
6332         }, nullptr, 0, nullptr, &customClass);
6333     napi_value customClassPrototype = nullptr;
6334     napi_get_prototype(env, customClass, &customClassPrototype);
6335     napi_value customInstance = nullptr;
6336     NAPI_CALL(env, napi_new_instance(env, customClass, 0, nullptr, &customInstance));
6337     bool isInstanceOf = false;
6338     napi_status status = napi_instanceof(env, nullptr, customClass, &isInstanceOf);
6339     bool bRet = (status == napi_invalid_arg);
6340     napi_value retValue;
6341     napi_create_int32(env, bRet, &retValue);
6342     return retValue;
6343 }
6344 
instanceOfConstructorNull(napi_env env,napi_callback_info info)6345 static napi_value instanceOfConstructorNull(napi_env env, napi_callback_info info)
6346 {
6347     napi_value customClass = nullptr;
6348     napi_define_class(env, "TestWrapClass", NAPI_AUTO_LENGTH,
6349         [](napi_env env, napi_callback_info info) -> napi_value {
6350             napi_value thisVar = nullptr;
6351             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
6352             return thisVar;
6353         }, nullptr, 0, nullptr, &customClass);
6354     napi_value customClassPrototype = nullptr;
6355     napi_get_prototype(env, customClass, &customClassPrototype);
6356     napi_value customInstance = nullptr;
6357     NAPI_CALL(env, napi_new_instance(env, customClass, 0, nullptr, &customInstance));
6358     bool isInstanceOf = false;
6359     napi_status status = napi_instanceof(env, customInstance, nullptr, &isInstanceOf);
6360     bool bRet = (status == napi_invalid_arg);
6361     napi_value retValue;
6362     napi_create_int32(env, bRet, &retValue);
6363     return retValue;
6364 }
6365 
instanceOfResultNull(napi_env env,napi_callback_info info)6366 static napi_value instanceOfResultNull(napi_env env, napi_callback_info info)
6367 {
6368     napi_value customClass = nullptr;
6369     napi_define_class(env, "TestWrapClass", NAPI_AUTO_LENGTH,
6370         [](napi_env env, napi_callback_info info) -> napi_value {
6371             napi_value thisVar = nullptr;
6372             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
6373             return thisVar;
6374         }, nullptr, 0, nullptr, &customClass);
6375     napi_value customClassPrototype = nullptr;
6376     napi_get_prototype(env, customClass, &customClassPrototype);
6377     napi_value customInstance = nullptr;
6378     NAPI_CALL(env, napi_new_instance(env, customClass, 0, nullptr, &customInstance));
6379     napi_status status = napi_instanceof(env, customInstance, customClass, nullptr);
6380     bool bRet = (status == napi_invalid_arg);
6381     napi_value retValue;
6382     napi_create_int32(env, bRet, &retValue);
6383     return retValue;
6384 }
6385 
isArrayValueNull(napi_env env,napi_callback_info info)6386 static napi_value isArrayValueNull(napi_env env, napi_callback_info info)
6387 {
6388     napi_value array = nullptr;
6389     napi_create_array(env, &array);
6390     NAPI_ASSERT(env, array != nullptr, "napi_get_undefined success");
6391     bool isArray = false;
6392     napi_status status = napi_is_array(env, nullptr, &isArray);
6393     bool bRet = (status == napi_invalid_arg);
6394     napi_value retValue;
6395     napi_create_int32(env, bRet, &retValue);
6396     return retValue;
6397 }
6398 
isArrayResultNull(napi_env env,napi_callback_info info)6399 static napi_value isArrayResultNull(napi_env env, napi_callback_info info)
6400 {
6401     napi_value array = nullptr;
6402     napi_create_array(env, &array);
6403     NAPI_ASSERT(env, array != nullptr, "napi_get_undefined success");
6404     napi_status status = napi_is_array(env, array, nullptr);
6405     bool bRet = (status == napi_invalid_arg);
6406     napi_value retValue;
6407     napi_create_int32(env, bRet, &retValue);
6408     return retValue;
6409 }
6410 
isDataView(napi_env env,napi_callback_info info)6411 static napi_value isDataView(napi_env env, napi_callback_info info)
6412 {
6413     napi_value arrayBuffer = nullptr;
6414     void* arrayBufferPtr = nullptr;
6415     size_t arrayBufferSize = 16;
6416     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
6417     NAPI_ASSERT(env, arrayBufferPtr != nullptr, "napi_create_arraybuffer success");
6418     bool isArrayBuffer = false;
6419     napi_is_arraybuffer(env, arrayBuffer, &isArrayBuffer);
6420     NAPI_ASSERT(env, isArrayBuffer, " napi_is_arraybuffer success");
6421 
6422     napi_value result = nullptr;
6423     NAPI_CALL(env, napi_create_dataview(env, arrayBufferSize, arrayBuffer, 0, &result));
6424 
6425     bool isDataView = false;
6426     napi_is_dataview(env, result, &isDataView);
6427     NAPI_ASSERT(env, isDataView, " napi_is_dataview success");
6428 
6429     return result;
6430 }
6431 
isDataViewValueNull(napi_env env,napi_callback_info info)6432 static napi_value isDataViewValueNull(napi_env env, napi_callback_info info)
6433 {
6434     napi_value arrayBuffer = nullptr;
6435     size_t arrayBufferSize = 16;
6436     void* arrayBufferPtr = nullptr;
6437     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
6438     napi_value result = nullptr;
6439     NAPI_CALL(env, napi_create_dataview(env, arrayBufferSize, arrayBuffer, 0, &result));
6440     bool isDataView = false;
6441     napi_status status = napi_is_dataview(env, nullptr, &isDataView);
6442     bool bRet = (status == napi_invalid_arg);
6443     napi_value retValue;
6444     napi_create_int32(env, bRet, &retValue);
6445     return retValue;
6446 }
6447 
isDataViewRstNull(napi_env env,napi_callback_info info)6448 static napi_value isDataViewRstNull(napi_env env, napi_callback_info info)
6449 {
6450     napi_value arrayBuffer = nullptr;
6451     size_t arrayBufferSize = 16;
6452     void* arrayBufferPtr = nullptr;
6453     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
6454     napi_value result = nullptr;
6455     NAPI_CALL(env, napi_create_dataview(env, arrayBufferSize, arrayBuffer, 0, &result));
6456     napi_status status = napi_is_dataview(env, result, nullptr);
6457     bool bRet = (status == napi_invalid_arg);
6458     napi_value retValue;
6459     napi_create_int32(env, bRet, &retValue);
6460     return retValue;
6461 }
6462 
isArrayBuffer(napi_env env,napi_callback_info info)6463 static napi_value isArrayBuffer(napi_env env, napi_callback_info info)
6464 {
6465     napi_value arrayBuffer = nullptr;
6466     void* arrayBufferPtr = nullptr;
6467     size_t arrayBufferSize = 16;
6468     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
6469     NAPI_ASSERT(env, arrayBufferPtr != nullptr, "napi_create_arraybuffer success");
6470     bool isArrayBuffer = false;
6471     napi_is_arraybuffer(env, arrayBuffer, &isArrayBuffer);
6472     NAPI_ASSERT(env, isArrayBuffer, " napi_is_arraybuffer success");
6473     napi_value ret;
6474     NAPI_CALL(env, napi_create_int32(env, 0, &ret));
6475     return ret;
6476 }
6477 
isArrayBufferValueNull(napi_env env,napi_callback_info info)6478 static napi_value isArrayBufferValueNull(napi_env env, napi_callback_info info)
6479 {
6480     bool isArrayBuffer = false;
6481     napi_status status = napi_is_arraybuffer(env, nullptr, &isArrayBuffer);
6482     bool bRet = (status == napi_invalid_arg);
6483     napi_value retValue;
6484     napi_create_int32(env, bRet, &retValue);
6485     return retValue;
6486 }
6487 
isArrayBufferRstNull(napi_env env,napi_callback_info info)6488 static napi_value isArrayBufferRstNull(napi_env env, napi_callback_info info)
6489 {
6490     napi_value arrayBuffer = nullptr;
6491     void* arrayBufferPtr = nullptr;
6492     size_t arrayBufferSize = 16;
6493     napi_create_arraybuffer(env, arrayBufferSize, &arrayBufferPtr, &arrayBuffer);
6494     NAPI_ASSERT(env, arrayBufferPtr != nullptr, "napi_create_arraybuffer success");
6495     napi_status status = napi_is_arraybuffer(env, arrayBuffer, nullptr);
6496     bool bRet = (status == napi_invalid_arg);
6497     napi_value retValue;
6498     napi_create_int32(env, bRet, &retValue);
6499     return retValue;
6500 }
6501 
isTypedArray(napi_env env,napi_callback_info info)6502 static napi_value isTypedArray(napi_env env, napi_callback_info info)
6503 {
6504     static size_t length = 10;
6505     static size_t offset = 0;
6506     void* data;
6507     napi_value arraybuffer = nullptr;
6508     napi_create_sendable_arraybuffer(env, length, &data, &arraybuffer);
6509 
6510     napi_value result = nullptr;
6511     napi_create_sendable_typedarray(env, napi_uint8_array, length, arraybuffer, offset, &result);
6512     bool isTypedArray = false;
6513     napi_is_typedarray(env, result, &isTypedArray);
6514     NAPI_ASSERT(env, isTypedArray, "napi_is_typedarray success");
6515     napi_value ret;
6516     NAPI_CALL(env, napi_create_int32(env, 0, &ret));
6517     return ret;
6518 }
6519 
isTypedArrayValueNull(napi_env env,napi_callback_info info)6520 static napi_value isTypedArrayValueNull(napi_env env, napi_callback_info info)
6521 {
6522     static size_t length = 1024;
6523     void* data;
6524     napi_value arraybuffer = nullptr;
6525     napi_create_sendable_arraybuffer(env, length, &data, &arraybuffer);
6526     bool isTypedArray = false;
6527     napi_status status = napi_is_typedarray(env, nullptr, &isTypedArray);
6528     bool bRet = (status == napi_invalid_arg);
6529     napi_value retValue;
6530     napi_create_int32(env, bRet, &retValue);
6531     return retValue;
6532 }
6533 
isTypedArrayRstNull(napi_env env,napi_callback_info info)6534 static napi_value isTypedArrayRstNull(napi_env env, napi_callback_info info)
6535 {
6536     static size_t length = 1024;
6537     static size_t offset = 0;
6538     void* data;
6539     napi_value arraybuffer = nullptr;
6540     napi_create_sendable_arraybuffer(env, length, &data, &arraybuffer);
6541     napi_value result = nullptr;
6542     napi_create_sendable_typedarray(env, napi_uint8_array, length, arraybuffer, offset, &result);
6543     napi_status status = napi_is_typedarray(env, result, nullptr);
6544     bool bRet = (status == napi_invalid_arg);
6545     napi_value retValue;
6546     napi_create_int32(env, bRet, &retValue);
6547     return retValue;
6548 }
6549 
isDateValueNull(napi_env env,napi_callback_info info)6550 static napi_value isDateValueNull(napi_env env, napi_callback_info info)
6551 {
6552     size_t argc = 1;
6553     napi_value date;
6554     bool isDate = false;
6555     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &date, nullptr, nullptr));
6556     napi_status status = napi_is_date(env, nullptr, &isDate);
6557     bool bRet = (status == napi_invalid_arg);
6558     napi_value retValue;
6559     napi_create_int32(env, bRet, &retValue);
6560     return retValue;
6561 }
6562 
isDateResultNull(napi_env env,napi_callback_info info)6563 static napi_value isDateResultNull(napi_env env, napi_callback_info info)
6564 {
6565     napi_value date;
6566     size_t argc = 1;
6567     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &date, nullptr, nullptr));
6568     napi_status status = napi_is_date(env, date, nullptr);
6569     bool bRet = (status == napi_invalid_arg);
6570     napi_value retValue;
6571     napi_create_int32(env, bRet, &retValue);
6572     return retValue;
6573 }
6574 
strictEqualsFirstValueNull(napi_env env,napi_callback_info info)6575 static napi_value strictEqualsFirstValueNull(napi_env env, napi_callback_info info)
6576 {
6577     const char* testStringStr = "test";
6578     napi_value testString = nullptr;
6579     napi_create_string_utf8(env, testStringStr, strlen(testStringStr), &testString);
6580     bool isStrictEquals = false;
6581     napi_status status = napi_strict_equals(env, nullptr, testString, &isStrictEquals);
6582     bool bRet = (status == napi_invalid_arg);
6583     napi_value retValue;
6584     napi_create_int32(env, bRet, &retValue);
6585     return retValue;
6586 }
6587 
strictEqualsSecondValueNull(napi_env env,napi_callback_info info)6588 static napi_value strictEqualsSecondValueNull(napi_env env, napi_callback_info info)
6589 {
6590     const char* testStringStr = "test";
6591     napi_value testString = nullptr;
6592     napi_create_string_utf8(env, testStringStr, strlen(testStringStr), &testString);
6593     bool isStrictEquals = false;
6594     napi_status status = napi_strict_equals(env, testString, nullptr, &isStrictEquals);
6595     bool bRet = (status == napi_invalid_arg);
6596     napi_value retValue;
6597     napi_create_int32(env, bRet, &retValue);
6598     return retValue;
6599 }
6600 
strictEqualsResultNull(napi_env env,napi_callback_info info)6601 static napi_value strictEqualsResultNull(napi_env env, napi_callback_info info)
6602 {
6603     const char* testStringStr = "test";
6604     napi_value testString = nullptr;
6605     napi_create_string_utf8(env, testStringStr, strlen(testStringStr), &testString);
6606     napi_status status = napi_strict_equals(env, testString, testString, nullptr);
6607     bool bRet = (status == napi_invalid_arg);
6608     napi_value retValue;
6609     napi_create_int32(env, bRet, &retValue);
6610     return retValue;
6611 }
6612 
strictEqualsNaN(napi_env env,napi_callback_info info)6613 static napi_value strictEqualsNaN(napi_env env, napi_callback_info info)
6614 {
6615     napi_value value1;
6616     NAPI_CALL(env, napi_create_int32(env, sqrt(NAPI_INVALID_NUM1), &value1));
6617     napi_value value2;
6618     NAPI_CALL(env, napi_create_int32(env, sqrt(NAPI_INVALID_NUM2), &value2));
6619     bool isStrictEquals = false;
6620     napi_status status = napi_strict_equals(env, value1, value2, &isStrictEquals);
6621     bool bRet = (status == napi_invalid_arg);
6622     napi_value retValue;
6623     napi_create_int32(env, bRet, &retValue);
6624     return retValue;
6625 }
6626 
getPropertyNamesObjectNull(napi_env env,napi_callback_info info)6627 static napi_value getPropertyNamesObjectNull(napi_env env, napi_callback_info info)
6628 {
6629     napi_value result = nullptr;
6630     NAPI_CALL(env, napi_create_object(env, &result));
6631     const char testStr[] = "1234567";
6632     napi_value strAttribute = nullptr;
6633     NAPI_CALL(env, napi_create_string_utf8(env, testStr, strlen(testStr), &strAttribute));
6634     NAPI_CALL(env, napi_set_named_property(env, result, "strAttribute", strAttribute));
6635     napi_value retStrAttribute = nullptr;
6636     napi_status status = napi_get_named_property(env, result, nullptr, &retStrAttribute);
6637     bool bRet = (status == napi_invalid_arg);
6638     napi_value retValue;
6639     napi_create_int32(env, bRet, &retValue);
6640     return retValue;
6641 }
6642 
getPropertyNamesResultNull(napi_env env,napi_callback_info info)6643 static napi_value getPropertyNamesResultNull(napi_env env, napi_callback_info info)
6644 {
6645     napi_value result = nullptr;
6646     NAPI_CALL(env, napi_create_object(env, &result));
6647     const char testStr[] = "1234567";
6648     napi_value strAttribute = nullptr;
6649     NAPI_CALL(env, napi_create_string_utf8(env, testStr, strlen(testStr), &strAttribute));
6650     NAPI_CALL(env, napi_set_named_property(env, result, "strAttribute", strAttribute));
6651     napi_status status = napi_get_named_property(env, result, "strAttribute", nullptr);
6652     bool bRet = (status == napi_invalid_arg);
6653     napi_value retValue;
6654     napi_create_int32(env, bRet, &retValue);
6655     return retValue;
6656 }
6657 
getPropertyNamesNotObject(napi_env env,napi_callback_info info)6658 static napi_value getPropertyNamesNotObject(napi_env env, napi_callback_info info)
6659 {
6660     napi_value result;
6661     NAPI_CALL(env, napi_create_int32(env, 0, &result));
6662     napi_value retStrAttribute = nullptr;
6663     napi_status status = napi_get_named_property(env, result, "strAttribute", &retStrAttribute);
6664     bool bRet = (status == napi_invalid_arg);
6665     napi_value retValue;
6666     napi_create_int32(env, bRet, &retValue);
6667     return retValue;
6668 }
6669 
setPropertyValueNull(napi_env env,napi_callback_info info)6670 static napi_value setPropertyValueNull(napi_env env,
6671                                        napi_callback_info info)
6672 {
6673     napi_status status;
6674     napi_value object, key, value;
6675     NAPI_CALL(env, napi_create_object(env, &object));
6676     NAPI_CALL(env, napi_create_string_utf8(env, "", NAPI_AUTO_LENGTH, &key));
6677     NAPI_CALL(env, napi_create_object(env, &value));
6678     status = napi_set_property(nullptr, object, key, value);
6679     bool bRet = (status == napi_invalid_arg);
6680     napi_value retValue;
6681     napi_create_int32(env, bRet, &retValue);
6682     return retValue;
6683 }
6684 
setPropertyResultNull(napi_env env,napi_callback_info info)6685 static napi_value setPropertyResultNull(napi_env env,
6686                                         napi_callback_info info)
6687 {
6688     napi_status status;
6689     napi_value object, key, value;
6690     NAPI_CALL(env, napi_create_object(env, &object));
6691     NAPI_CALL(env, napi_create_string_utf8(env, "", NAPI_AUTO_LENGTH, &key));
6692     NAPI_CALL(env, napi_create_object(env, &value));
6693     status = napi_set_property(nullptr, object, key, value);
6694     bool bRet = (status == napi_invalid_arg);
6695     napi_value retValue;
6696     napi_create_int32(env, bRet, &retValue);
6697     return retValue;
6698 }
6699 
setPropertyNoObject(napi_env env,napi_callback_info info)6700 static napi_value setPropertyNoObject(napi_env env,
6701                                       napi_callback_info info)
6702 {
6703     napi_status status;
6704     napi_value object, key, value;
6705     NAPI_CALL(env, napi_create_int32(env, 0, &object));
6706     NAPI_CALL(env, napi_create_string_utf8(env, "", NAPI_AUTO_LENGTH, &key));
6707     NAPI_CALL(env, napi_create_object(env, &value));
6708     status = napi_set_property(nullptr, object, key, value);
6709     bool bRet = (status == napi_invalid_arg);
6710     napi_value retValue;
6711     napi_create_int32(env, bRet, &retValue);
6712     return retValue;
6713 }
6714 
getPropertyObjectNull(napi_env env,napi_callback_info info)6715 static napi_value getPropertyObjectNull(napi_env env,
6716                                         napi_callback_info info)
6717 {
6718     napi_status status;
6719     napi_value object, key, result;
6720     NAPI_CALL(env, napi_create_object(env, &object));
6721     NAPI_CALL(env, napi_create_string_utf8(env, "", NAPI_AUTO_LENGTH, &key));
6722     NAPI_CALL(env, napi_create_object(env, &result));
6723     status = napi_get_property(nullptr, object, key, &result);
6724     bool bRet = (status == napi_invalid_arg);
6725     napi_value retValue;
6726     napi_create_int32(env, bRet, &retValue);
6727     return retValue;
6728 }
6729 
getPropertyKeyNull(napi_env env,napi_callback_info info)6730 static napi_value getPropertyKeyNull(napi_env env,
6731                                      napi_callback_info info)
6732 {
6733     napi_status status;
6734     napi_value object, key, result;
6735     NAPI_CALL(env, napi_create_object(env, &object));
6736     NAPI_CALL(env, napi_create_string_utf8(env, "", NAPI_AUTO_LENGTH, &key));
6737     NAPI_CALL(env, napi_create_object(env, &result));
6738     status = napi_get_property(nullptr, object, key, &result);
6739     bool bRet = (status == napi_invalid_arg);
6740     napi_value retValue;
6741     napi_create_int32(env, bRet, &retValue);
6742     return retValue;
6743 }
6744 
getPropertyResultNull(napi_env env,napi_callback_info info)6745 static napi_value getPropertyResultNull(napi_env env,
6746                                         napi_callback_info info)
6747 {
6748     napi_status status;
6749     napi_value object, key, result;
6750     NAPI_CALL(env, napi_create_object(env, &object));
6751     NAPI_CALL(env, napi_create_string_utf8(env, "", NAPI_AUTO_LENGTH, &key));
6752     NAPI_CALL(env, napi_create_object(env, &result));
6753     status = napi_get_property(nullptr, object, key, &result);
6754     bool bRet = (status == napi_invalid_arg);
6755     napi_value retValue;
6756     napi_create_int32(env, bRet, &retValue);
6757     return retValue;
6758 }
6759 
getPropertyNotObject(napi_env env,napi_callback_info info)6760 static napi_value getPropertyNotObject(napi_env env,
6761                                        napi_callback_info info)
6762 {
6763     napi_status status;
6764     napi_value object, key, result;
6765     NAPI_CALL(env, napi_create_int32(env, 0, &object));
6766     NAPI_CALL(env, napi_create_string_utf8(env, "", NAPI_AUTO_LENGTH, &key));
6767     NAPI_CALL(env, napi_create_object(env, &result));
6768     status = napi_get_property(nullptr, object, key, &result);
6769     bool bRet = (status == napi_invalid_arg);
6770     napi_value retValue;
6771     napi_create_int32(env, bRet, &retValue);
6772     return retValue;
6773 }
6774 
hasPropertyObjectNull(napi_env env,napi_callback_info info)6775 static napi_value hasPropertyObjectNull(napi_env env, napi_callback_info info)
6776 {
6777     napi_value args[2];
6778     const char testStr[] = "cKey";
6779     napi_value cKey;
6780     napi_value cValue;
6781     NAPI_CALL(env, napi_create_string_utf8(env, testStr, strlen(testStr), &cKey));
6782     NAPI_CALL(env, napi_create_int32(env, 3, &cValue));
6783     napi_set_property(env, args[0], cKey, cValue);
6784     bool hasProp = false;
6785     napi_status status = napi_has_property(env, nullptr, cKey, &hasProp);
6786     bool bRet = (status == napi_invalid_arg);
6787     napi_value retValue;
6788     napi_create_int32(env, bRet, &retValue);
6789     return retValue;
6790 }
6791 
hasPropertyKeyNull(napi_env env,napi_callback_info info)6792 static napi_value hasPropertyKeyNull(napi_env env, napi_callback_info info)
6793 {
6794     napi_value args[2];
6795     bool hasProp = false;
6796     napi_status status = napi_has_property(env, args[0], nullptr, &hasProp);
6797     bool bRet = (status == napi_invalid_arg);
6798     napi_value retValue;
6799     napi_create_int32(env, bRet, &retValue);
6800     return retValue;
6801 }
6802 
hasPropertyResultNull(napi_env env,napi_callback_info info)6803 static napi_value hasPropertyResultNull(napi_env env, napi_callback_info info)
6804 {
6805     napi_value args[2];
6806     const char testStr[] = "cKey";
6807     napi_value cKey;
6808     NAPI_CALL(env, napi_create_string_utf8(env, testStr, strlen(testStr), &cKey));
6809     napi_status status = napi_has_property(env, args[0], cKey, nullptr);
6810     bool bRet = (status == napi_invalid_arg);
6811     napi_value retValue;
6812     napi_create_int32(env, bRet, &retValue);
6813     return retValue;
6814 }
6815 
deletePropertyObjectNull(napi_env env,napi_callback_info info)6816 static napi_value deletePropertyObjectNull(napi_env env, napi_callback_info info)
6817 {
6818     const char testStr[] = "cKey";
6819     napi_value cKey;
6820     NAPI_CALL(env, napi_create_string_utf8(env, testStr, strlen(testStr), &cKey));
6821     bool result;
6822     napi_status status = napi_delete_property(env, nullptr, cKey, &result);
6823     bool bRet = (status == napi_invalid_arg);
6824     napi_value retValue;
6825     napi_create_int32(env, bRet, &retValue);
6826     return retValue;
6827 }
6828 
deletePropertyKeyNull(napi_env env,napi_callback_info info)6829 static napi_value deletePropertyKeyNull(napi_env env, napi_callback_info info)
6830 {
6831     napi_value args[2];
6832     bool result;
6833     napi_status status = napi_delete_property(env, args[0], nullptr, &result);
6834     bool bRet = (status == napi_invalid_arg);
6835     napi_value retValue;
6836     napi_create_int32(env, bRet, &retValue);
6837     return retValue;
6838 }
6839 
deletePropertyResultNull(napi_env env,napi_callback_info info)6840 static napi_value deletePropertyResultNull(napi_env env, napi_callback_info info)
6841 {
6842     napi_value args[2];
6843     const char testStr[] = "cKey";
6844     napi_value cKey;
6845     NAPI_CALL(env, napi_create_string_utf8(env, testStr, strlen(testStr), &cKey));
6846     napi_status status = napi_delete_property(env, args[0], cKey, nullptr);
6847     bool bRet = (status == napi_invalid_arg);
6848     napi_value retValue;
6849     napi_create_int32(env, bRet, &retValue);
6850     return retValue;
6851 }
6852 
hasOwnPropertyObjectNull(napi_env env,napi_callback_info info)6853 static napi_value hasOwnPropertyObjectNull(napi_env env, napi_callback_info info)
6854 {
6855     size_t argc = 2;
6856     napi_value args[2];
6857     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
6858     napi_valuetype valuetype0;
6859     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
6860     bool hasProperty;
6861     napi_status status = napi_has_own_property(env, nullptr, args[1], &hasProperty);
6862     bool bRet = (status == napi_invalid_arg);
6863     napi_value retValue;
6864     napi_create_int32(env, bRet, &retValue);
6865     return retValue;
6866 }
6867 
hasOwnPropertyKeytNull(napi_env env,napi_callback_info info)6868 static napi_value hasOwnPropertyKeytNull(napi_env env, napi_callback_info info)
6869 {
6870     size_t argc = 2;
6871     napi_value args[2];
6872     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
6873     napi_valuetype valuetype0;
6874     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
6875     bool hasProperty;
6876     napi_status status = napi_has_own_property(env, args[0], nullptr, &hasProperty);
6877     bool bRet = (status == napi_invalid_arg);
6878     napi_value retValue;
6879     napi_create_int32(env, bRet, &retValue);
6880     return retValue;
6881 }
6882 
hasOwnPropertyResultNull(napi_env env,napi_callback_info info)6883 static napi_value hasOwnPropertyResultNull(napi_env env, napi_callback_info info)
6884 {
6885     size_t argc = 2;
6886     napi_value args[2];
6887     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
6888     napi_valuetype valuetype0;
6889     NAPI_CALL(env, napi_typeof(env, args[0], &valuetype0));
6890     napi_status status = napi_has_own_property(env, args[0], args[1], nullptr);
6891     bool bRet = (status == napi_invalid_arg);
6892     napi_value retValue;
6893     napi_create_int32(env, bRet, &retValue);
6894     return retValue;
6895 }
6896 
setNamedPropertyObjectNull(napi_env env,napi_callback_info info)6897 static napi_value setNamedPropertyObjectNull(napi_env env, napi_callback_info info)
6898 {
6899     size_t argc = 3;
6900     napi_value args[3];
6901     char key[256] = "";
6902     size_t keyLength;
6903     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
6904     napi_valuetype value_type0;
6905     NAPI_CALL(env, napi_typeof(env, args[0], &value_type0));
6906     napi_valuetype value_type1;
6907     NAPI_CALL(env, napi_typeof(env, args[1], &value_type1));
6908     NAPI_CALL(env,
6909               napi_get_value_string_utf8(env, args[1], key, NAPI_UTF8_MAX, &keyLength));
6910     key[NAPI_UTF8_MAX] = 0;
6911     napi_status status = napi_set_named_property(env, nullptr, key, args[NAPI_ARGS_LENGTH]);
6912     bool bRet = (status == napi_invalid_arg);
6913     napi_value retValue;
6914     napi_create_int32(env, bRet, &retValue);
6915     return retValue;
6916 }
6917 
setNamedPropertyKeyNull(napi_env env,napi_callback_info info)6918 static napi_value setNamedPropertyKeyNull(napi_env env, napi_callback_info info)
6919 {
6920     size_t argc = 3;
6921     napi_value args[3];
6922     char key[256] = "";
6923     size_t keyLength;
6924     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
6925     napi_valuetype value_type0;
6926     NAPI_CALL(env, napi_typeof(env, args[0], &value_type0));
6927     napi_valuetype value_type1;
6928     NAPI_CALL(env, napi_typeof(env, args[1], &value_type1));
6929     NAPI_CALL(env,
6930               napi_get_value_string_utf8(env, args[1], key, NAPI_UTF8_MAX, &keyLength));
6931     key[NAPI_UTF8_MAX] = 0;
6932     napi_status status = napi_set_named_property(env, args[0], nullptr, args[NAPI_ARGS_LENGTH]);
6933     bool bRet = (status == napi_invalid_arg);
6934     napi_value retValue;
6935     napi_create_int32(env, bRet, &retValue);
6936     return retValue;
6937 }
6938 
setNamedPropertyResultNull(napi_env env,napi_callback_info info)6939 static napi_value setNamedPropertyResultNull(napi_env env, napi_callback_info info)
6940 {
6941     size_t argc = 3;
6942     napi_value args[3];
6943     char key[256] = "";
6944     size_t keyLength;
6945     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
6946     napi_valuetype value_type0;
6947     NAPI_CALL(env, napi_typeof(env, args[0], &value_type0));
6948     napi_valuetype value_type1;
6949     NAPI_CALL(env, napi_typeof(env, args[1], &value_type1));
6950     NAPI_CALL(env,
6951               napi_get_value_string_utf8(env, args[1], key, NAPI_UTF8_MAX, &keyLength));
6952     key[NAPI_UTF8_MAX] = 0;
6953     napi_status status = napi_set_named_property(env, args[0], key, nullptr);
6954     bool bRet = (status == napi_invalid_arg);
6955     napi_value retValue;
6956     napi_create_int32(env, bRet, &retValue);
6957     return retValue;
6958 }
6959 
getNamedPropertyObjectNull(napi_env env,napi_callback_info info)6960 static napi_value getNamedPropertyObjectNull(napi_env env, napi_callback_info info)
6961 {
6962     size_t argc = 2;
6963     napi_value args[2];
6964     char key[256] = "";
6965     size_t keyLength;
6966     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
6967     napi_valuetype value_type0;
6968     NAPI_CALL(env, napi_typeof(env, args[0], &value_type0));
6969     napi_valuetype value_type1;
6970     NAPI_CALL(env, napi_typeof(env, args[1], &value_type1));
6971     NAPI_CALL(env,
6972               napi_get_value_string_utf8(env, args[1], key, NAPI_UTF8_MAX, &keyLength));
6973     key[NAPI_UTF8_MAX] = 0;
6974     napi_value output;
6975     napi_status status = napi_get_named_property(env, nullptr, key, &output);
6976     bool bRet = (status == napi_invalid_arg);
6977     napi_value retValue;
6978     napi_create_int32(env, bRet, &retValue);
6979     return retValue;
6980 }
6981 
getNamedPropertyKeyNull(napi_env env,napi_callback_info info)6982 static napi_value getNamedPropertyKeyNull(napi_env env, napi_callback_info info)
6983 {
6984     napi_value args[2];
6985     napi_value object = args[0];
6986     napi_value output;
6987     napi_status status = napi_get_named_property(env, object, nullptr, &output);
6988     bool bRet = (status == napi_invalid_arg);
6989     napi_value retValue;
6990     napi_create_int32(env, bRet, &retValue);
6991     return retValue;
6992 }
6993 
getNamedPropertyResultNull(napi_env env,napi_callback_info info)6994 static napi_value getNamedPropertyResultNull(napi_env env, napi_callback_info info)
6995 {
6996     napi_value args[2];
6997     char key[256] = "";
6998     napi_value object = args[0];
6999     napi_status status = napi_get_named_property(env, object, key, nullptr);
7000     bool bRet = (status == napi_invalid_arg);
7001     napi_value retValue;
7002     napi_create_int32(env, bRet, &retValue);
7003     return retValue;
7004 }
7005 
hasNamedPropertyObjectNull(napi_env env,napi_callback_info info)7006 static napi_value hasNamedPropertyObjectNull(napi_env env, napi_callback_info info)
7007 {
7008     char key[256] = "";
7009     key[NAPI_UTF8_MAX] = 0;
7010     bool hasProperty;
7011     napi_status status = napi_has_named_property(env, nullptr, key, &hasProperty);
7012     bool bRet = (status == napi_invalid_arg);
7013     napi_value retValue;
7014     napi_create_int32(env, bRet, &retValue);
7015     return retValue;
7016 }
7017 
hasNamedPropertyKeyNull(napi_env env,napi_callback_info info)7018 static napi_value hasNamedPropertyKeyNull(napi_env env, napi_callback_info info)
7019 {
7020     napi_value args[2];
7021     bool hasProperty;
7022     napi_status status = napi_has_named_property(env, args[0], nullptr, &hasProperty);
7023     bool bRet = (status == napi_invalid_arg);
7024     napi_value retValue;
7025     napi_create_int32(env, bRet, &retValue);
7026     return retValue;
7027 }
7028 
hasNamedPropertyResultNull(napi_env env,napi_callback_info info)7029 static napi_value hasNamedPropertyResultNull(napi_env env, napi_callback_info info)
7030 {
7031     napi_value args[2];
7032     char key[256] = "";
7033     napi_status status = napi_has_named_property(env, args[0], key, nullptr);
7034     bool bRet = (status == napi_invalid_arg);
7035     napi_value retValue;
7036     napi_create_int32(env, bRet, &retValue);
7037     return retValue;
7038 }
7039 
setElementObjectNull(napi_env env,napi_callback_info info)7040 static napi_value setElementObjectNull(napi_env env, napi_callback_info info)
7041 {
7042     napi_value value;
7043     NAPI_CALL(env, napi_create_int32(env, 0, &value));
7044     napi_status status = napi_set_element(env, nullptr, 0, nullptr);
7045     bool bRet = (status == napi_invalid_arg);
7046     napi_value retValue;
7047     napi_create_int32(env, bRet, &retValue);
7048     return retValue;
7049 }
7050 
setElementRstNull(napi_env env,napi_callback_info info)7051 static napi_value setElementRstNull(napi_env env, napi_callback_info info)
7052 {
7053     napi_value value;
7054     NAPI_CALL(env, napi_create_int32(env, 0, &value));
7055     napi_status status = napi_set_element(env, nullptr, 0, nullptr);
7056     bool bRet = (status == napi_invalid_arg);
7057     napi_value retValue;
7058     napi_create_int32(env, bRet, &retValue);
7059     return retValue;
7060 }
7061 
setElementNotObj(napi_env env,napi_callback_info info)7062 static napi_value setElementNotObj(napi_env env, napi_callback_info info)
7063 {
7064     napi_value value;
7065     NAPI_CALL(env, napi_create_int32(env, 0, &value));
7066     napi_status status = napi_set_element(env, nullptr, 0, value);
7067     bool bRet = (status == napi_invalid_arg);
7068     napi_value retValue;
7069     napi_create_int32(env, bRet, &retValue);
7070     return retValue;
7071 }
7072 
getElementObjNull(napi_env env,napi_callback_info info)7073 static napi_value getElementObjNull(napi_env env, napi_callback_info info)
7074 {
7075     napi_value return_value, object, prop;
7076     NAPI_CALL(env, napi_create_object(env, &return_value));
7077     NAPI_CALL(env, napi_create_object(env, &object));
7078     napi_status status = napi_get_element(nullptr, nullptr, 0, &prop);
7079     bool bRet = (status == napi_invalid_arg);
7080     napi_value retValue;
7081     napi_create_int32(env, bRet, &retValue);
7082     return retValue;
7083 }
7084 
getElementRstNull(napi_env env,napi_callback_info info)7085 static napi_value getElementRstNull(napi_env env, napi_callback_info info)
7086 {
7087     napi_value return_value, object;
7088     NAPI_CALL(env, napi_create_object(env, &return_value));
7089     NAPI_CALL(env, napi_create_object(env, &object));
7090     napi_status status = napi_get_element(nullptr, object, 0, nullptr);
7091     bool bRet = (status == napi_invalid_arg);
7092     napi_value retValue;
7093     napi_create_int32(env, bRet, &retValue);
7094     return retValue;
7095 }
7096 
getElementNotObj(napi_env env,napi_callback_info info)7097 static napi_value getElementNotObj(napi_env env, napi_callback_info info)
7098 {
7099     napi_value return_value, prop;
7100     napi_value value;
7101     NAPI_CALL(env, napi_create_int32(env, 0, &value));
7102     NAPI_CALL(env, napi_create_object(env, &return_value));
7103     napi_status status = napi_get_element(nullptr, value, 0, &prop);
7104     bool bRet = (status == napi_invalid_arg);
7105     napi_value retValue;
7106     napi_create_int32(env, bRet, &retValue);
7107     return retValue;
7108 }
7109 
hasElementObjNull(napi_env env,napi_callback_info info)7110 static napi_value hasElementObjNull(napi_env env, napi_callback_info info)
7111 {
7112     napi_value result = nullptr;
7113     NAPI_CALL(env, napi_create_object(env, &result));
7114     napi_value propNames = nullptr;
7115     NAPI_CALL(env, napi_get_property_names(env, result, &propNames));
7116     bool isArray = false;
7117     NAPI_CALL(env, napi_is_array(env, propNames, &isArray));
7118     uint32_t arrayLength = 0;
7119     NAPI_CALL(env, napi_get_array_length(env, propNames, &arrayLength));
7120     bool deletion = false;
7121     NAPI_CALL(env, napi_delete_element(env, propNames, 1, &deletion));
7122     bool hasElement = true;
7123     napi_status status = napi_has_element(env, nullptr, 1, &hasElement);
7124     bool bRet = (status == napi_invalid_arg);
7125     napi_value retValue;
7126     napi_create_int32(env, bRet, &retValue);
7127     return retValue;
7128 }
7129 
hasElementRstNull(napi_env env,napi_callback_info info)7130 static napi_value hasElementRstNull(napi_env env, napi_callback_info info)
7131 {
7132     napi_value result = nullptr;
7133     NAPI_CALL(env, napi_create_object(env, &result));
7134     napi_value propNames = nullptr;
7135     NAPI_CALL(env, napi_get_property_names(env, result, &propNames));
7136     bool isArray = false;
7137     NAPI_CALL(env, napi_is_array(env, propNames, &isArray));
7138     uint32_t arrayLength = 0;
7139     NAPI_CALL(env, napi_get_array_length(env, propNames, &arrayLength));
7140     bool deletion = false;
7141     NAPI_CALL(env, napi_delete_element(env, propNames, 1, &deletion));
7142     napi_status status = napi_has_element(env, propNames, 1, nullptr);
7143     bool bRet = (status == napi_invalid_arg);
7144     napi_value retValue;
7145     napi_create_int32(env, bRet, &retValue);
7146     return retValue;
7147 }
7148 
deleteElementObjNull(napi_env env,napi_callback_info info)7149 static napi_value deleteElementObjNull(napi_env env, napi_callback_info info)
7150 {
7151     napi_value result = nullptr;
7152     NAPI_CALL(env, napi_create_object(env, &result));
7153     napi_value propNames = nullptr;
7154     NAPI_CALL(env, napi_get_property_names(env, result, &propNames));
7155     bool isArray = false;
7156     NAPI_CALL(env, napi_is_array(env, propNames, &isArray));
7157     uint32_t arrayLength = 0;
7158     NAPI_CALL(env, napi_get_array_length(env, propNames, &arrayLength));
7159     bool deletion = false;
7160     napi_status status = napi_delete_element(env, nullptr, 1, &deletion);
7161     bool bRet = (status == napi_invalid_arg);
7162     napi_value retValue;
7163     napi_create_int32(env, bRet, &retValue);
7164     return retValue;
7165 }
7166 
deleteElementRstNull(napi_env env,napi_callback_info info)7167 static napi_value deleteElementRstNull(napi_env env, napi_callback_info info)
7168 {
7169     napi_value result = nullptr;
7170     NAPI_CALL(env, napi_create_object(env, &result));
7171     napi_value propNames = nullptr;
7172     NAPI_CALL(env, napi_get_property_names(env, result, &propNames));
7173     bool isArray = false;
7174     NAPI_CALL(env, napi_is_array(env, propNames, &isArray));
7175     uint32_t arrayLength = 0;
7176     NAPI_CALL(env, napi_get_array_length(env, propNames, &arrayLength));
7177     napi_status status = napi_delete_element(env, propNames, 1, nullptr);
7178     bool bRet = (status == napi_invalid_arg);
7179     napi_value retValue;
7180     napi_create_int32(env, bRet, &retValue);
7181     return retValue;
7182 }
7183 
definePropertiesObjNull(napi_env env,napi_callback_info info)7184 static napi_value definePropertiesObjNull(napi_env env, napi_callback_info info)
7185 {
7186     napi_value object, return_value;
7187     NAPI_CALL(env, napi_create_object(env, &object));
7188     NAPI_CALL(env, napi_create_object(env, &return_value));
7189     napi_status status = napi_define_properties(env, nullptr, 1, nullptr);
7190     bool bRet = (status == napi_invalid_arg);
7191     napi_value retValue;
7192     napi_create_int32(env, bRet, &retValue);
7193     return retValue;
7194 }
7195 
typeTaggedObjNull(napi_env env,napi_callback_info info)7196 static napi_value typeTaggedObjNull(napi_env env, napi_callback_info info)
7197 {
7198     size_t argc = 1;
7199     uint32_t typeIndex = 0;
7200     napi_value whichType = nullptr;
7201     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, &whichType, nullptr, nullptr));
7202     napi_status status = napi_type_tag_object(env, nullptr, &typeTags[typeIndex]);
7203     bool bRet = (status == napi_invalid_arg);
7204     napi_value retValue;
7205     napi_create_int32(env, bRet, &retValue);
7206     return retValue;
7207 }
7208 
typeTaggedTagNull(napi_env env,napi_callback_info info)7209 static napi_value typeTaggedTagNull(napi_env env, napi_callback_info info)
7210 {
7211     napi_value instance = nullptr;
7212     NAPI_CALL(env, napi_create_object(env, &instance));
7213     napi_status status = napi_type_tag_object(env, instance, nullptr);
7214     bool bRet = (status == napi_invalid_arg);
7215     napi_value retValue;
7216     napi_create_int32(env, bRet, &retValue);
7217     return retValue;
7218 }
7219 
CheckTypeTagObjNull(napi_env env,napi_callback_info info)7220 static napi_value CheckTypeTagObjNull(napi_env env, napi_callback_info info)
7221 {
7222     bool result;
7223     uint32_t typeIndex = 0;
7224     napi_status status = napi_check_object_type_tag(env, nullptr, &typeTags[typeIndex], &result);
7225     bool bRet = (status == napi_invalid_arg);
7226     napi_value retValue;
7227     napi_create_int32(env, bRet, &retValue);
7228     return retValue;
7229 }
7230 
CheckTypeTagTagNull(napi_env env,napi_callback_info info)7231 static napi_value CheckTypeTagTagNull(napi_env env, napi_callback_info info)
7232 {
7233     bool result;
7234     napi_value argv[2];
7235     napi_status status = napi_check_object_type_tag(env, argv[1], nullptr, &result);
7236     bool bRet = (status == napi_invalid_arg);
7237     napi_value retValue;
7238     napi_create_int32(env, bRet, &retValue);
7239     return retValue;
7240 }
7241 
CheckTypeTagRstNull(napi_env env,napi_callback_info info)7242 static napi_value CheckTypeTagRstNull(napi_env env, napi_callback_info info)
7243 {
7244     napi_value argv[2];
7245     uint32_t typeIndex = 0;
7246     napi_status status = napi_check_object_type_tag(env, argv[1], &typeTags[typeIndex], nullptr);
7247     bool bRet = (status == napi_invalid_arg);
7248     napi_value retValue;
7249     napi_create_int32(env, bRet, &retValue);
7250     return retValue;
7251 }
7252 
callFunctionNull(napi_env env,napi_callback_info info)7253 static napi_value callFunctionNull(napi_env env, napi_callback_info info)
7254 {
7255     napi_value ret;
7256     napi_status status = napi_call_function(env, nullptr, nullptr, 0, nullptr, &ret);
7257     bool bRet = (status == napi_invalid_arg);
7258     napi_value retValue;
7259     napi_create_int32(env, bRet, &retValue);
7260     return retValue;
7261 }
7262 
napiCreateFunctionFuncNull(napi_env env,napi_callback_info info)7263 static napi_value napiCreateFunctionFuncNull(napi_env env, napi_callback_info info)
7264 {
7265     napi_value funcValue = nullptr;
7266     napi_status status = napi_create_function(env, nullptr, NAPI_AUTO_LENGTH, SayHello, nullptr, &funcValue);
7267     bool bRet = (status == napi_invalid_arg);
7268     napi_value retValue;
7269     napi_create_int32(env, bRet, &retValue);
7270     return retValue;
7271 }
7272 
napiCreateFunctionRstNull(napi_env env,napi_callback_info info)7273 static napi_value napiCreateFunctionRstNull(napi_env env, napi_callback_info info)
7274 {
7275     napi_status status = napi_create_function(env, "func", NAPI_AUTO_LENGTH, SayHello, nullptr, nullptr);
7276     bool bRet = (status == napi_invalid_arg);
7277     napi_value retValue;
7278     napi_create_int32(env, bRet, &retValue);
7279     return retValue;
7280 }
7281 
napiGetCbInfoNull(napi_env env,napi_callback_info info)7282 static napi_value napiGetCbInfoNull(napi_env env, napi_callback_info info)
7283 {
7284     size_t argc = 1;
7285     napi_value args[1];
7286     napi_status status = napi_get_cb_info(env, nullptr, &argc, args, nullptr, nullptr);
7287     bool bRet = (status == napi_invalid_arg);
7288     napi_value retValue;
7289     napi_create_int32(env, bRet, &retValue);
7290     return retValue;
7291 }
7292 
newTargetInfoNull(napi_env env,napi_callback_info info)7293 static napi_value newTargetInfoNull(napi_env env, napi_callback_info info)
7294 {
7295     bool isConstructor = true;
7296     napi_value constructor = nullptr;
7297     napi_get_new_target(env, nullptr, &constructor);
7298     if (constructor == nullptr) {
7299         napi_throw_error(env, nullptr, "is not new instance");
7300         isConstructor = false;
7301     }
7302     napi_value value;
7303     NAPI_CALL(env, napi_get_boolean(env, isConstructor, &value));
7304     return value;
7305 }
7306 
newTargetRstNull(napi_env env,napi_callback_info info)7307 static napi_value newTargetRstNull(napi_env env, napi_callback_info info)
7308 {
7309     bool isConstructor = true;
7310     napi_value constructor = nullptr;
7311     napi_get_new_target(env, info, nullptr);
7312     if (constructor == nullptr) {
7313         napi_throw_error(env, nullptr, "is not new instance");
7314         isConstructor = false;
7315     }
7316     napi_value value;
7317     NAPI_CALL(env, napi_get_boolean(env, isConstructor, &value));
7318     return value;
7319 }
7320 
newInstanceNull(napi_env env,napi_callback_info info)7321 static napi_value newInstanceNull(napi_env env, napi_callback_info info)
7322 {
7323     napi_value testWrapClass = nullptr;
7324     napi_define_class(
7325         env, "TestWrapClass", NAPI_AUTO_LENGTH,
7326         [](napi_env env, napi_callback_info info) -> napi_value {
7327             napi_value thisVar = nullptr;
7328             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
7329             return thisVar;
7330         },
7331         nullptr, 0, nullptr, &testWrapClass);
7332     napi_value arg;
7333     NAPI_CALL(env, napi_create_string_utf8(env, "hello", NAPI_AUTO_LENGTH, &arg));
7334 
7335     size_t argc = 1;
7336     napi_value instanceValue = nullptr;
7337     napi_status status = napi_new_instance(env, nullptr, argc, nullptr, &instanceValue);
7338     bool bRet = (status == napi_invalid_arg);
7339     napi_value retValue;
7340     napi_create_int32(env, bRet, &retValue);
7341     return retValue;
7342 }
7343 
newInstanceNotFunc(napi_env env,napi_callback_info info)7344 static napi_value newInstanceNotFunc(napi_env env, napi_callback_info info)
7345 {
7346     napi_value testWrapClass = nullptr;
7347     napi_value arg;
7348     NAPI_CALL(env, napi_create_string_utf8(env, "hello", NAPI_AUTO_LENGTH, &arg));
7349     napi_value *argv = &arg;
7350     size_t argc = 1;
7351     napi_value instanceValue = nullptr;
7352     NAPI_CALL(env, napi_new_instance(env, testWrapClass, argc, argv, &instanceValue));
7353     bool isInstanceOf = false;
7354     napi_status status = napi_instanceof(env, instanceValue, testWrapClass, &isInstanceOf);
7355     bool bRet = (status == napi_invalid_arg);
7356     napi_value retValue;
7357     napi_create_int32(env, bRet, &retValue);
7358     return retValue;
7359 }
7360 
defineClassUTFNull(napi_env env,napi_callback_info info)7361 static napi_value defineClassUTFNull(napi_env env, napi_callback_info info)
7362 {
7363     napi_value testWrapClass = nullptr;
7364     napi_status status = napi_define_class(env, nullptr, NAPI_AUTO_LENGTH,
7365                   [](napi_env env, napi_callback_info info) -> napi_value {
7366                   napi_value thisVar = nullptr;
7367                   napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
7368                   return thisVar;
7369               }, nullptr, 0, nullptr, &testWrapClass);
7370     bool bRet = (status == napi_invalid_arg);
7371     napi_value retValue;
7372     napi_create_int32(env, bRet, &retValue);
7373     return retValue;
7374 }
7375 
defineClassConstructorNull(napi_env env,napi_callback_info info)7376 static napi_value defineClassConstructorNull(napi_env env, napi_callback_info info)
7377 {
7378     napi_value testWrapClass = nullptr;
7379     napi_status status = napi_define_class(env, "TestWrapClass", NAPI_AUTO_LENGTH, nullptr,
7380                                            nullptr, 0, nullptr, &testWrapClass);
7381     bool bRet = (status == napi_invalid_arg);
7382     napi_value retValue;
7383     napi_create_int32(env, bRet, &retValue);
7384     return retValue;
7385 }
7386 
defineClassRstNull(napi_env env,napi_callback_info info)7387 static napi_value defineClassRstNull(napi_env env, napi_callback_info info)
7388 {
7389     napi_status status = napi_define_class(env, "TestWrapClass",
7390                                            NAPI_AUTO_LENGTH,
7391                                            [](napi_env env,
7392                                            napi_callback_info info) -> napi_value {
7393                                            napi_value thisVar = nullptr;
7394                   napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
7395                   return thisVar;
7396               }, nullptr, 0, nullptr, nullptr);
7397     bool bRet = (status == napi_invalid_arg);
7398     napi_value retValue;
7399     napi_create_int32(env, bRet, &retValue);
7400     return retValue;
7401 }
7402 
defineClassLengthExceed(napi_env env,napi_callback_info info)7403 static napi_value defineClassLengthExceed(napi_env env, napi_callback_info info)
7404 {
7405     size_t lengthValue = 4294967295;
7406     napi_value testWrapClass = nullptr;
7407     napi_status status = napi_define_class(env, "TestWrapClass", lengthValue,
7408                   [](napi_env env, napi_callback_info info) -> napi_value {
7409                   napi_value thisVar = nullptr;
7410                   napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
7411                   return thisVar;
7412               }, nullptr, 0, nullptr, &testWrapClass);
7413     bool bRet = (status == napi_invalid_arg);
7414     napi_value retValue;
7415     napi_create_int32(env, bRet, &retValue);
7416     return retValue;
7417 }
7418 
unwrapObjNull(napi_env env,napi_callback_info info)7419 static napi_value unwrapObjNull(napi_env env, napi_callback_info info)
7420 {
7421     napi_value testClass = nullptr;
7422     napi_define_class(
7423         env, "TestClass", NAPI_AUTO_LENGTH,
7424         [](napi_env env, napi_callback_info info) -> napi_value {
7425             napi_value thisVar = nullptr;
7426             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
7427 
7428             return thisVar;
7429         },
7430         nullptr, 0, nullptr, &testClass);
7431     const char* tmpTestStr = nullptr;
7432     napi_status status = napi_unwrap(env, nullptr, (void**)&tmpTestStr);
7433     bool bRet = (status == napi_invalid_arg);
7434     napi_value retValue;
7435     napi_create_int32(env, bRet, &retValue);
7436     return retValue;
7437 }
7438 
unwrapRstNull(napi_env env,napi_callback_info info)7439 static napi_value unwrapRstNull(napi_env env, napi_callback_info info)
7440 {
7441     napi_value testClass = nullptr;
7442     napi_define_class(
7443         env, "TestClass", NAPI_AUTO_LENGTH,
7444         [](napi_env env, napi_callback_info info) -> napi_value {
7445             napi_value thisVar = nullptr;
7446             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
7447             return thisVar;
7448         },
7449         nullptr, 0, nullptr, &testClass);
7450     napi_value instanceValue = nullptr;
7451     napi_new_instance(env, testClass, 0, nullptr, &instanceValue);
7452     const char* testStr = "test";
7453     napi_wrap(
7454         env, instanceValue, (void*)testStr, [](napi_env env, void* data, void* hint) {}, nullptr, nullptr);
7455     napi_status status = napi_unwrap(env, instanceValue, nullptr);
7456     bool bRet = (status == napi_invalid_arg);
7457     napi_value retValue;
7458     napi_create_int32(env, bRet, &retValue);
7459     return retValue;
7460 }
7461 
removeWrapObjNull(napi_env env,napi_callback_info info)7462 static napi_value removeWrapObjNull(napi_env env, napi_callback_info info)
7463 {
7464     napi_value testClass = nullptr;
7465     napi_define_class(
7466         env, "TestClass", NAPI_AUTO_LENGTH,
7467         [](napi_env env, napi_callback_info info) -> napi_value {
7468             napi_value thisVar = nullptr;
7469             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
7470 
7471             return thisVar;
7472         },
7473         nullptr, 0, nullptr, &testClass);
7474     const char* tmpTestStr1 = nullptr;
7475     napi_status status = napi_remove_wrap(env, nullptr, (void**)&tmpTestStr1);
7476     bool bRet = (status == napi_invalid_arg);
7477     napi_value retValue;
7478     napi_create_int32(env, bRet, &retValue);
7479     return retValue;
7480 }
7481 
removeWrapRstNull(napi_env env,napi_callback_info info)7482 static napi_value removeWrapRstNull(napi_env env, napi_callback_info info)
7483 {
7484     napi_value testClass = nullptr;
7485     napi_define_class(
7486         env, "TestClass", NAPI_AUTO_LENGTH,
7487         [](napi_env env, napi_callback_info info) -> napi_value {
7488             napi_value thisVar = nullptr;
7489             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
7490 
7491             return thisVar;
7492         },
7493         nullptr, 0, nullptr, &testClass);
7494     napi_value instanceValue = nullptr;
7495     napi_new_instance(env, testClass, 0, nullptr, &instanceValue);
7496     const char* testStr = "test";
7497     napi_wrap(
7498         env, instanceValue, (void*)testStr, [](napi_env env, void* data, void* hint) {}, nullptr, nullptr);
7499     const char* tmpTestStr = nullptr;
7500     NAPI_CALL(env, napi_unwrap(env, instanceValue, (void**)&tmpTestStr));
7501     NAPI_ASSERT(env, tmpTestStr == testStr, "napi_unwrap fail");
7502     napi_status status = napi_remove_wrap(env, instanceValue, nullptr);
7503     bool bRet = (status == napi_invalid_arg);
7504     napi_value retValue;
7505     napi_create_int32(env, bRet, &retValue);
7506     return retValue;
7507 }
7508 
cancelAsyncWorkNull(napi_env env,napi_callback_info info)7509 static napi_value cancelAsyncWorkNull(napi_env env, napi_callback_info info)
7510 {
7511     napi_status status = napi_cancel_async_work(env, nullptr);
7512     bool bRet = (status == napi_invalid_arg);
7513     napi_value retValue;
7514     napi_create_int32(env, bRet, &retValue);
7515     return retValue;
7516 }
7517 
queueAsyncWork(napi_env env,napi_callback_info info)7518 static napi_value queueAsyncWork(napi_env env, napi_callback_info info)
7519 {
7520     AsyncContext *context = new AsyncContext();
7521     context->env = env;
7522     napi_value resource = nullptr;
7523     napi_create_string_utf8(env, "add async task", NAPI_AUTO_LENGTH, &resource);
7524     napi_create_async_work(env, nullptr, resource, [](napi_env env, void *data) {}, completeCb,
7525         context, &context->asyncWork);
7526     napi_queue_async_work(env, context->asyncWork);
7527     return nullptr;
7528 }
7529 
queueAsyncWorkNull(napi_env env,napi_callback_info info)7530 static napi_value queueAsyncWorkNull(napi_env env, napi_callback_info info)
7531 {
7532     AsyncContext *context = new AsyncContext();
7533     context->env = env;
7534     napi_value resource = nullptr;
7535     napi_create_string_utf8(env, "add async task", NAPI_AUTO_LENGTH, &resource);
7536     napi_create_async_work(env, nullptr, resource, [](napi_env env, void *data) {}, completeCb,
7537         context, &context->asyncWork);
7538     napi_status status = napi_queue_async_work(env, nullptr);
7539     bool bRet = (status == napi_invalid_arg);
7540     napi_value retValue;
7541     napi_create_int32(env, bRet, &retValue);
7542     return retValue;
7543 }
7544 
deleteAsyncWorkNull(napi_env env,napi_callback_info info)7545 static napi_value deleteAsyncWorkNull(napi_env env, napi_callback_info info)
7546 {
7547     napi_status status = napi_delete_async_work(env, nullptr);
7548     bool bRet = (status == napi_invalid_arg);
7549     napi_value retValue;
7550     napi_create_int32(env, bRet, &retValue);
7551     return retValue;
7552 }
7553 
defineSendableClassEnvNull(napi_env env,napi_callback_info info)7554 static napi_value defineSendableClassEnvNull(napi_env env, napi_callback_info info)
7555 {
7556     napi_value str;
7557     napi_create_string_utf8(env, "static str", NAPI_AUTO_LENGTH, &str);
7558     napi_property_descriptor props[] = {
7559         {"staticStr", nullptr, nullptr, nullptr, nullptr, str,
7560          static_cast<napi_property_attributes>(napi_static | napi_writable), nullptr},
7561         {"staticFunc", nullptr,
7562          [](napi_env env, napi_callback_info info) -> napi_value {
7563              napi_value val;
7564              napi_create_string_utf8(env, "static func", NAPI_AUTO_LENGTH, &val);
7565              return val;
7566          },
7567          nullptr, nullptr, nullptr, napi_static, nullptr},
7568         {"str", nullptr, nullptr, nullptr, nullptr, str, static_cast<napi_property_attributes>(1 << 9 | napi_writable),
7569          nullptr},
7570         {"func", nullptr, nullptr, nullptr, nullptr, nullptr,
7571          static_cast<napi_property_attributes>(1 << 11 | napi_writable), nullptr},
7572     };
7573     napi_value sendableClass = nullptr;
7574     napi_status status = napi_define_sendable_class(
7575         nullptr, "SendableClass", NAPI_AUTO_LENGTH,
7576         [](napi_env env, napi_callback_info info) -> napi_value {
7577             napi_value thisVar = nullptr;
7578             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
7579             napi_value str;
7580             napi_create_string_utf8(env, "instance str", NAPI_AUTO_LENGTH, &str);
7581             napi_property_descriptor props[] = {
7582                 {"str", nullptr, nullptr, nullptr, nullptr, str, napi_default, nullptr},
7583                 {"func", nullptr,
7584                  [](napi_env env, napi_callback_info info) -> napi_value {
7585                      napi_value val;
7586                      napi_create_string_utf8(env, "instance func", NAPI_AUTO_LENGTH, &val);
7587                      return val;
7588                  },
7589                  nullptr, nullptr, nullptr, napi_default, nullptr},
7590             };
7591             napi_define_properties(env, thisVar, sizeof(props) / sizeof(props[0]), props);
7592             return thisVar;
7593         },
7594         nullptr, sizeof(props) / sizeof(props[0]), props, nullptr, &sendableClass);
7595     bool bRet = (status == napi_invalid_arg);
7596     napi_value retValue;
7597     napi_create_int32(env, bRet, &retValue);
7598     return retValue;
7599 }
7600 
defineSendableClassNameNull(napi_env env,napi_callback_info info)7601 static napi_value defineSendableClassNameNull(napi_env env, napi_callback_info info)
7602 {
7603     napi_value str;
7604     napi_create_string_utf8(env, "static str", NAPI_AUTO_LENGTH, &str);
7605     napi_property_descriptor props[] = {
7606         {"staticStr", nullptr, nullptr, nullptr, nullptr, str,
7607          static_cast<napi_property_attributes>(napi_static | napi_writable), nullptr},
7608         {"staticFunc", nullptr,
7609          [](napi_env env, napi_callback_info info) -> napi_value {
7610              napi_value val;
7611              napi_create_string_utf8(env, "static func", NAPI_AUTO_LENGTH, &val);
7612              return val;
7613          },
7614          nullptr, nullptr, nullptr, napi_static, nullptr},
7615         {"str", nullptr, nullptr, nullptr, nullptr, str, static_cast<napi_property_attributes>(1 << 9 | napi_writable),
7616          nullptr},
7617         {"func", nullptr, nullptr, nullptr, nullptr, nullptr,
7618          static_cast<napi_property_attributes>(1 << 11 | napi_writable), nullptr},
7619     };
7620     napi_value sendableClass = nullptr;
7621     napi_status status = napi_define_sendable_class(
7622         env, nullptr, NAPI_AUTO_LENGTH,
7623         [](napi_env env, napi_callback_info info) -> napi_value {
7624             napi_value thisVar = nullptr;
7625             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
7626             napi_value str;
7627             napi_create_string_utf8(env, "instance str", NAPI_AUTO_LENGTH, &str);
7628             napi_property_descriptor props[] = {
7629                 {"str", nullptr, nullptr, nullptr, nullptr, str, napi_default, nullptr},
7630                 {"func", nullptr,
7631                  [](napi_env env, napi_callback_info info) -> napi_value {
7632                      napi_value val;
7633                      napi_create_string_utf8(env, "instance func", NAPI_AUTO_LENGTH, &val);
7634                      return val;
7635                  },
7636                  nullptr, nullptr, nullptr, napi_default, nullptr},
7637             };
7638             napi_define_properties(env, thisVar, sizeof(props) / sizeof(props[0]), props);
7639             return thisVar;
7640         },
7641         nullptr, sizeof(props) / sizeof(props[0]), props, nullptr, &sendableClass);
7642     bool bRet = (status == napi_invalid_arg);
7643     napi_value retValue;
7644     napi_create_int32(env, bRet, &retValue);
7645     return retValue;
7646 }
7647 
defineSendableClassConstructorNull(napi_env env,napi_callback_info info)7648 static napi_value defineSendableClassConstructorNull(napi_env env, napi_callback_info info)
7649 {
7650     napi_value str;
7651     napi_create_string_utf8(env, "static str", NAPI_AUTO_LENGTH, &str);
7652     napi_property_descriptor props[] = {
7653         {"staticStr", nullptr, nullptr, nullptr, nullptr, str,
7654          static_cast<napi_property_attributes>(napi_static | napi_writable), nullptr},
7655         {"staticFunc", nullptr,
7656          [](napi_env env, napi_callback_info info) -> napi_value {
7657              napi_value val;
7658              napi_create_string_utf8(env, "static func", NAPI_AUTO_LENGTH, &val);
7659              return val;
7660          },
7661          nullptr, nullptr, nullptr, napi_static, nullptr},
7662         {"str", nullptr, nullptr, nullptr, nullptr, str, static_cast<napi_property_attributes>(1 << 9 | napi_writable),
7663          nullptr},
7664         {"func", nullptr, nullptr, nullptr, nullptr, nullptr,
7665          static_cast<napi_property_attributes>(1 << 11 | napi_writable), nullptr},
7666     };
7667     napi_value sendableClass = nullptr;
7668     napi_status status = napi_define_sendable_class(
7669         env, "SendableClass", NAPI_AUTO_LENGTH, nullptr,
7670         nullptr, sizeof(props) / sizeof(props[0]), props, nullptr, &sendableClass);
7671     bool bRet = (status == napi_invalid_arg);
7672     napi_value retValue;
7673     napi_create_int32(env, bRet, &retValue);
7674     return retValue;
7675 }
7676 
defineSendableClassRstNull(napi_env env,napi_callback_info info)7677 static napi_value defineSendableClassRstNull(napi_env env, napi_callback_info info)
7678 {
7679     napi_value str;
7680     napi_create_string_utf8(env, "static str", NAPI_AUTO_LENGTH, &str);
7681     napi_property_descriptor props[] = {
7682         {"staticStr", nullptr, nullptr, nullptr, nullptr, str,
7683          static_cast<napi_property_attributes>(napi_static | napi_writable), nullptr},
7684         {"staticFunc", nullptr,
7685          [](napi_env env, napi_callback_info info) -> napi_value {
7686              napi_value val;
7687              napi_create_string_utf8(env, "static func", NAPI_AUTO_LENGTH, &val);
7688              return val;
7689          },
7690          nullptr, nullptr, nullptr, napi_static, nullptr},
7691         {"str", nullptr, nullptr, nullptr, nullptr, str, static_cast<napi_property_attributes>(1 << 9 | napi_writable),
7692          nullptr},
7693         {"func", nullptr, nullptr, nullptr, nullptr, nullptr,
7694          static_cast<napi_property_attributes>(1 << 11 | napi_writable), nullptr},
7695     };
7696 
7697     napi_status status = napi_define_sendable_class(
7698         env, "SendableClass", NAPI_AUTO_LENGTH,
7699         [](napi_env env, napi_callback_info info) -> napi_value {
7700             napi_value thisVar = nullptr;
7701             napi_get_cb_info(env, info, nullptr, nullptr, &thisVar, nullptr);
7702             napi_value str;
7703             napi_create_string_utf8(env, "instance str", NAPI_AUTO_LENGTH, &str);
7704             napi_property_descriptor props[] = {
7705                 {"str", nullptr, nullptr, nullptr, nullptr, str, napi_default, nullptr},
7706                 {"func", nullptr,
7707                  [](napi_env env, napi_callback_info info) -> napi_value {
7708                      napi_value val;
7709                      napi_create_string_utf8(env, "instance func", NAPI_AUTO_LENGTH, &val);
7710                      return val;
7711                  },
7712                  nullptr, nullptr, nullptr, napi_default, nullptr},
7713             };
7714             napi_define_properties(env, thisVar, sizeof(props) / sizeof(props[0]), props);
7715             return thisVar;
7716         },
7717         nullptr, sizeof(props) / sizeof(props[0]), props, nullptr, nullptr);
7718     bool bRet = (status == napi_invalid_arg);
7719     napi_value retValue;
7720     napi_create_int32(env, bRet, &retValue);
7721     return retValue;
7722 }
7723 
createSendableObjectWithPropertiesEnvNull(napi_env env,napi_callback_info info)7724 static napi_value createSendableObjectWithPropertiesEnvNull(napi_env env, napi_callback_info info)
7725 {
7726     napi_value excep;
7727     NAPI_CALL(env, napi_get_and_clear_last_exception(env, &excep));
7728     napi_value val_false;
7729     napi_value val_true;
7730     NAPI_CALL(env, napi_get_boolean(env, false, &val_false));
7731     NAPI_CALL(env, napi_get_boolean(env, true, &val_true));
7732     napi_property_descriptor desc1[] = {
7733         DECLARE_NAPI_DEFAULT_PROPERTY("x", val_true),
7734     };
7735     napi_value obj1;
7736     napi_status status = napi_create_sendable_object_with_properties(nullptr, 1, desc1, &obj1);
7737     bool bRet = (status == napi_invalid_arg);
7738     napi_value retValue;
7739     napi_create_int32(env, bRet, &retValue);
7740     return retValue;
7741 }
7742 
createSendableObjectWithPropertiesRstNull(napi_env env,napi_callback_info info)7743 static napi_value createSendableObjectWithPropertiesRstNull(napi_env env, napi_callback_info info)
7744 {
7745     napi_value excep;
7746     NAPI_CALL(env, napi_get_and_clear_last_exception(env, &excep));
7747     napi_value val_false;
7748     napi_value val_true;
7749     NAPI_CALL(env, napi_get_boolean(env, false, &val_false));
7750     NAPI_CALL(env, napi_get_boolean(env, true, &val_true));
7751     napi_property_descriptor desc1[] = {
7752         DECLARE_NAPI_DEFAULT_PROPERTY("x", val_true),
7753     };
7754     napi_status status = napi_create_sendable_object_with_properties(env, 1, desc1, nullptr);
7755     bool bRet = (status == napi_invalid_arg);
7756     napi_value retValue;
7757     napi_create_int32(env, bRet, &retValue);
7758     return retValue;
7759 }
7760 
createSendableArrayEnvNull(napi_env env,napi_callback_info info)7761 static napi_value createSendableArrayEnvNull(napi_env env, napi_callback_info info)
7762 {
7763     napi_value result = nullptr;
7764     napi_status status = napi_create_sendable_array(nullptr, &result);
7765     bool bRet = (status == napi_invalid_arg);
7766     napi_value retValue;
7767     napi_create_int32(env, bRet, &retValue);
7768     return retValue;
7769 }
7770 
createSendableArrayRstNull(napi_env env,napi_callback_info info)7771 static napi_value createSendableArrayRstNull(napi_env env, napi_callback_info info)
7772 {
7773     napi_status status = napi_create_sendable_array(env, nullptr);
7774     bool bRet = (status == napi_invalid_arg);
7775     napi_value retValue;
7776     napi_create_int32(env, bRet, &retValue);
7777     return retValue;
7778 }
7779 
createSendableArrayWithLengthEnvNull(napi_env env,napi_callback_info info)7780 static napi_value createSendableArrayWithLengthEnvNull(napi_env env, napi_callback_info info)
7781 {
7782     napi_value result = nullptr;
7783     napi_status status = napi_create_sendable_array_with_length(nullptr, 1, &result);
7784     bool bRet = (status == napi_invalid_arg);
7785     napi_value retValue;
7786     napi_create_int32(env, bRet, &retValue);
7787     return retValue;
7788 }
7789 
createSendableArrayWithLengthRstNull(napi_env env,napi_callback_info info)7790 static napi_value createSendableArrayWithLengthRstNull(napi_env env, napi_callback_info info)
7791 {
7792     napi_status status = napi_create_sendable_array_with_length(env, 1, nullptr);
7793     bool bRet = (status == napi_invalid_arg);
7794     napi_value retValue;
7795     napi_create_int32(env, bRet, &retValue);
7796     return retValue;
7797 }
7798 
createSendableArrayBufferEnvNull(napi_env env,napi_callback_info info)7799 static napi_value createSendableArrayBufferEnvNull(napi_env env, napi_callback_info info)
7800 {
7801     static size_t length = 1024;
7802     void* data;
7803     napi_value result = nullptr;
7804     napi_status status = napi_create_sendable_arraybuffer(nullptr, length, &data, &result);
7805     bool bRet = (status == napi_invalid_arg);
7806     napi_value retValue;
7807     napi_create_int32(env, bRet, &retValue);
7808     return retValue;
7809 }
7810 
createSendableArrayBufferDataNull(napi_env env,napi_callback_info info)7811 static napi_value createSendableArrayBufferDataNull(napi_env env, napi_callback_info info)
7812 {
7813     static size_t length = 1024;
7814     napi_value result = nullptr;
7815     napi_status status = napi_create_sendable_arraybuffer(env, length, nullptr, &result);
7816     bool bRet = (status == napi_invalid_arg);
7817     napi_value retValue;
7818     napi_create_int32(env, bRet, &retValue);
7819     return retValue;
7820 }
7821 
createSendableArrayBufferRstNull(napi_env env,napi_callback_info info)7822 static napi_value createSendableArrayBufferRstNull(napi_env env, napi_callback_info info)
7823 {
7824     static size_t length = 1024;
7825     void* data;
7826     napi_status status = napi_create_sendable_arraybuffer(env, length, &data, nullptr);
7827     bool bRet = (status == napi_invalid_arg);
7828     napi_value retValue;
7829     napi_create_int32(env, bRet, &retValue);
7830     return retValue;
7831 }
7832 
createSendableTypedArrayEnvNull(napi_env env,napi_callback_info info)7833 static napi_value createSendableTypedArrayEnvNull(napi_env env, napi_callback_info info)
7834 {
7835     static size_t length = 10;
7836     static size_t offset = 0;
7837     void* data;
7838     napi_value arraybuffer = nullptr;
7839     napi_create_sendable_arraybuffer(env, length, &data, &arraybuffer);
7840     napi_value result = nullptr;
7841     napi_status status = napi_create_sendable_typedarray(nullptr, napi_uint8_array, length,
7842                                                          arraybuffer, offset, &result);
7843     bool bRet = (status == napi_invalid_arg);
7844     napi_value retValue;
7845     napi_create_int32(env, bRet, &retValue);
7846     return retValue;
7847 }
7848 
createSendableTypedArraRstNull(napi_env env,napi_callback_info info)7849 static napi_value createSendableTypedArraRstNull(napi_env env, napi_callback_info info)
7850 {
7851     static size_t length = 10;
7852     static size_t offset = 0;
7853     void* data;
7854     napi_value arraybuffer = nullptr;
7855     napi_create_sendable_arraybuffer(env, length, &data, &arraybuffer);
7856     napi_status status = napi_create_sendable_typedarray(env, napi_uint8_array, length,
7857                                                          arraybuffer, offset, nullptr);
7858     bool bRet = (status == napi_invalid_arg);
7859     napi_value retValue;
7860     napi_create_int32(env, bRet, &retValue);
7861     return retValue;
7862 }
7863 
createSendableTypedArraBufferNull(napi_env env,napi_callback_info info)7864 static napi_value createSendableTypedArraBufferNull(napi_env env, napi_callback_info info)
7865 {
7866     static size_t length = 10;
7867     static size_t offset = 0;
7868     void* data;
7869     napi_value arraybuffer = nullptr;
7870     napi_create_sendable_arraybuffer(env, length, &data, &arraybuffer);
7871     napi_value result = nullptr;
7872     napi_status status = napi_create_sendable_typedarray(env, napi_uint8_array, length,
7873                                                          nullptr, offset, &result);
7874     bool bRet = (status == napi_invalid_arg);
7875     napi_value retValue;
7876     napi_create_int32(env, bRet, &retValue);
7877     return retValue;
7878 }
7879 
createSendableTypedArrayNotType(napi_env env,napi_callback_info info)7880 static napi_value createSendableTypedArrayNotType(napi_env env, napi_callback_info info)
7881 {
7882     static size_t length = 10;
7883     static size_t offset = 0;
7884     void* data;
7885     napi_value arraybuffer = nullptr;
7886     napi_create_sendable_arraybuffer(env, length, &data, &arraybuffer);
7887 
7888     napi_value result = nullptr;
7889     napi_status status = napi_create_sendable_typedarray(env, napi_float64_array, length,
7890                                                          arraybuffer, offset, &result);
7891     bool bRet = (status == napi_invalid_arg);
7892     napi_value retValue;
7893     napi_create_int32(env, bRet, &retValue);
7894     return retValue;
7895 }
7896 
createSendableTypedArrayNotBuffer(napi_env env,napi_callback_info info)7897 static napi_value createSendableTypedArrayNotBuffer(napi_env env, napi_callback_info info)
7898 {
7899     static size_t length = 10;
7900     static size_t offset = 0;
7901     void* data;
7902     napi_value arraybuffer;
7903     NAPI_CALL(env, napi_create_int32(env, 0, &arraybuffer));
7904     napi_create_sendable_arraybuffer(env, length, &data, &arraybuffer);
7905     napi_value result = nullptr;
7906     napi_status status = napi_create_sendable_typedarray(env, napi_uint8_array, length,
7907                                                          arraybuffer, offset, &result);
7908     bool bRet = (status == napi_invalid_arg);
7909     napi_value retValue;
7910     napi_create_int32(env, bRet, &retValue);
7911     return retValue;
7912 }
7913 
wrapSendableEnvNull(napi_env env,napi_callback_info info)7914 static napi_value wrapSendableEnvNull(napi_env env, napi_callback_info info)
7915 {
7916     size_t argc = 2;
7917     napi_value args[2];
7918     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
7919     static size_t length = 256;
7920     char* data = new char[length];
7921     size_t size = 0;
7922     napi_get_value_string_utf8(env, args[1], data, length - 1, &size);
7923     napi_status status = napi_wrap_sendable(
7924         nullptr, args[0], (void*)data,
7925         [](napi_env env, void* data, void* hint) {
7926             char* tmp = reinterpret_cast<char*>(data);
7927             delete[] tmp;
7928         },
7929         nullptr);
7930     bool bRet = (status == napi_invalid_arg);
7931     napi_value retValue;
7932     napi_create_int32(env, bRet, &retValue);
7933     return retValue;
7934 }
7935 
NapiWrapSendableObj1Null(napi_env env,napi_callback_info info)7936 static napi_value NapiWrapSendableObj1Null(napi_env env, napi_callback_info info)
7937 {
7938     size_t argc = 2;
7939     napi_value args[2];
7940     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
7941 
7942     static size_t length = 256;
7943     char* data = new char[length];
7944     size_t size = 0;
7945     napi_get_value_string_utf8(env, args[1], data, length - 1, &size);
7946 
7947     napi_status status = napi_wrap_sendable(
7948         env, nullptr, (void*)data,
7949         [](napi_env env, void* data, void* hint) {
7950             char* tmp = reinterpret_cast<char*>(data);
7951             delete[] tmp;
7952         },
7953         nullptr);
7954     bool bRet = (status == napi_invalid_arg);
7955     napi_value retValue;
7956     napi_create_int32(env, bRet, &retValue);
7957     return retValue;
7958 }
7959 
NapiWrapSendableObj2Null(napi_env env,napi_callback_info info)7960 static napi_value NapiWrapSendableObj2Null(napi_env env, napi_callback_info info)
7961 {
7962     size_t argc = 2;
7963     napi_value args[2];
7964     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
7965 
7966     static size_t length = 256;
7967     char* data = new char[length];
7968     size_t size = 0;
7969     napi_get_value_string_utf8(env, args[1], data, length - 1, &size);
7970 
7971     napi_status status = napi_wrap_sendable(
7972         env, args[0], nullptr,
7973         [](napi_env env, void* data, void* hint) {
7974             char* tmp = reinterpret_cast<char*>(data);
7975             delete[] tmp;
7976         },
7977         nullptr);
7978     bool bRet = (status == napi_invalid_arg);
7979     napi_value retValue;
7980     napi_create_int32(env, bRet, &retValue);
7981     return retValue;
7982 }
7983 
wrapSendableWithSizeEnvNull(napi_env env,napi_callback_info info)7984 static napi_value wrapSendableWithSizeEnvNull(napi_env env, napi_callback_info info)
7985 {
7986     size_t argc = 2;
7987     napi_value args[2];
7988     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
7989     static size_t length = 256;
7990     char* data = new char[length];
7991     size_t size = 0;
7992     napi_get_value_string_utf8(env, args[1], data, length - 1, &size);
7993     static size_t nativeBindingSize = 1024;
7994     napi_status status = napi_wrap_sendable_with_size(
7995         nullptr, args[0], (void*)data,
7996         [](napi_env env, void* data, void* hint) {
7997             char* tmp = reinterpret_cast<char*>(data);
7998             delete[] tmp;
7999         },
8000         nullptr, nativeBindingSize);
8001     bool bRet = (status == napi_invalid_arg);
8002     napi_value retValue;
8003     napi_create_int32(env, bRet, &retValue);
8004     return retValue;
8005 }
8006 
wrapSendableWithSizeObj1Null(napi_env env,napi_callback_info info)8007 static napi_value wrapSendableWithSizeObj1Null(napi_env env, napi_callback_info info)
8008 {
8009     size_t argc = 2;
8010     napi_value args[2];
8011     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
8012     static size_t length = 256;
8013     char* data = new char[length];
8014     size_t size = 0;
8015     napi_get_value_string_utf8(env, args[1], data, length - 1, &size);
8016     static size_t nativeBindingSize = 1024;
8017     napi_status status = napi_wrap_sendable_with_size(
8018         env, nullptr, (void*)data,
8019         [](napi_env env, void* data, void* hint) {
8020             char* tmp = reinterpret_cast<char*>(data);
8021             delete[] tmp;
8022         },
8023         nullptr, nativeBindingSize);
8024     bool bRet = (status == napi_invalid_arg);
8025     napi_value retValue;
8026     napi_create_int32(env, bRet, &retValue);
8027     return retValue;
8028 }
8029 
wrapSendableWithSizeObj2Null(napi_env env,napi_callback_info info)8030 static napi_value wrapSendableWithSizeObj2Null(napi_env env, napi_callback_info info)
8031 {
8032     size_t argc = 2;
8033     napi_value args[2];
8034     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
8035     static size_t length = 256;
8036     char* data = new char[length];
8037     size_t size = 0;
8038     napi_get_value_string_utf8(env, args[1], data, length - 1, &size);
8039     static size_t nativeBindingSize = 1024;
8040     napi_status status = napi_wrap_sendable_with_size(
8041         env, args[0], nullptr,
8042         [](napi_env env, void* data, void* hint) {
8043             char* tmp = reinterpret_cast<char*>(data);
8044             delete[] tmp;
8045         },
8046         nullptr, nativeBindingSize);
8047     bool bRet = (status == napi_invalid_arg);
8048     napi_value retValue;
8049     napi_create_int32(env, bRet, &retValue);
8050     return retValue;
8051 }
8052 
removeWrapSendableEnvNull(napi_env env,napi_callback_info info)8053 static napi_value removeWrapSendableEnvNull(napi_env env, napi_callback_info info)
8054 {
8055     size_t argc = 1;
8056     napi_value args[1];
8057     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
8058     char* data = nullptr;
8059     napi_status status = napi_remove_wrap_sendable(nullptr, args[0], (void**)&data);
8060     bool bRet = (status == napi_invalid_arg);
8061     napi_value retValue;
8062     napi_create_int32(env, bRet, &retValue);
8063     return retValue;
8064 }
8065 
removeWrapSendableObjNull(napi_env env,napi_callback_info info)8066 static napi_value removeWrapSendableObjNull(napi_env env, napi_callback_info info)
8067 {
8068     size_t argc = 1;
8069     napi_value args[1];
8070     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
8071     char* data = nullptr;
8072     napi_status status = napi_remove_wrap_sendable(env, nullptr, (void**)&data);
8073     bool bRet = (status == napi_invalid_arg);
8074     napi_value retValue;
8075     napi_create_int32(env, bRet, &retValue);
8076     return retValue;
8077 }
8078 
removeWrapSendableRstNull(napi_env env,napi_callback_info info)8079 static napi_value removeWrapSendableRstNull(napi_env env, napi_callback_info info)
8080 {
8081     size_t argc = 1;
8082     napi_value args[1];
8083     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
8084     napi_status status = napi_remove_wrap_sendable(env, args[0], nullptr);
8085     bool bRet = (status == napi_invalid_arg);
8086     napi_value retValue;
8087     napi_create_int32(env, bRet, &retValue);
8088     return retValue;
8089 }
8090 
getNodeVersionEnvNull(napi_env env,napi_callback_info info)8091 static napi_value getNodeVersionEnvNull(napi_env env, napi_callback_info info)
8092 {
8093     const napi_node_version* version;
8094     napi_status status = napi_get_node_version(nullptr, &version);
8095     bool bRet = (status == napi_invalid_arg);
8096     napi_value retValue;
8097     napi_create_int32(env, bRet, &retValue);
8098     return retValue;
8099 }
8100 
getNodeVersionRstNull(napi_env env,napi_callback_info info)8101 static napi_value getNodeVersionRstNull(napi_env env, napi_callback_info info)
8102 {
8103     napi_status status = napi_get_node_version(env, nullptr);
8104     bool bRet = (status == napi_invalid_arg);
8105     napi_value retValue;
8106     napi_create_int32(env, bRet, &retValue);
8107     return retValue;
8108 }
8109 
releaseThreadsafeFunction(napi_env env,napi_callback_info info)8110 static napi_value releaseThreadsafeFunction(napi_env env, napi_callback_info info)
8111 {
8112     void* data = nullptr;
8113     napi_threadsafe_function func = (napi_threadsafe_function)data;
8114     napi_threadsafe_function_call_mode blockMode = napi_tsfn_nonblocking;
8115     void* context = nullptr;
8116     napi_status status = napi_get_threadsafe_function_context(func, &context);
8117     NAPI_ASSERT(env, status != napi_ok, "napi_get_threadsafe_function_context fail");
8118     static int32_t gSendData = 0;
8119     napi_call_threadsafe_function(func, &gSendData, blockMode);
8120     status = napi_call_threadsafe_function(func, &gSendData, blockMode);
8121     NAPI_ASSERT(env, status != napi_ok, "napi_call_threadsafe_function fail");
8122     status = napi_release_threadsafe_function(func, napi_tsfn_release);
8123     bool bRet = (status == napi_invalid_arg);
8124     napi_value retValue;
8125     napi_create_int32(env, bRet, &retValue);
8126     return retValue;
8127 }
8128 
releaseThreadsafeFunctionNull(napi_env env,napi_callback_info info)8129 static napi_value releaseThreadsafeFunctionNull(napi_env env, napi_callback_info info)
8130 {
8131     napi_status status = napi_release_threadsafe_function(nullptr, napi_tsfn_release);
8132     bool bRet = (status == napi_invalid_arg);
8133     napi_value retValue;
8134     napi_create_int32(env, bRet, &retValue);
8135     return retValue;
8136 }
8137 
createThreadsafeFunctionInitialThreadCountNegative(napi_env env,napi_callback_info info)8138 static napi_value createThreadsafeFunctionInitialThreadCountNegative(napi_env env, napi_callback_info info)
8139 {
8140     napi_threadsafe_function tsFunc = nullptr;
8141     napi_value resourceName = 0;
8142     napi_create_string_latin1(env, __func__, NAPI_AUTO_LENGTH, &resourceName);
8143     int32_t  callJstCbDataTestId = 101;
8144     int32_t  finalCbtDataTestID = 1001;
8145     napi_status status = napi_create_threadsafe_function(env, nullptr, nullptr, resourceName,
8146                                                          0, -1, &callJstCbDataTestId, nullptr,
8147                                                          &finalCbtDataTestID, nullptr, &tsFunc);
8148     bool bRet = (status == napi_invalid_arg);
8149     napi_value retValue;
8150     napi_create_int32(env, bRet, &retValue);
8151     return retValue;
8152 }
8153 
getVersionRstNull(napi_env env,napi_callback_info info)8154 static napi_value getVersionRstNull(napi_env env, napi_callback_info info)
8155 {
8156     napi_status status = napi_get_version(env, nullptr);
8157     bool bRet = (status == napi_invalid_arg);
8158     napi_value retValue;
8159     napi_create_int32(env, bRet, &retValue);
8160     return retValue;
8161 }
8162 
getVersionEnvNull(napi_env env,napi_callback_info info)8163 static napi_value getVersionEnvNull(napi_env env, napi_callback_info info)
8164 {
8165     uint32_t version;
8166     napi_status status = napi_get_version(nullptr, &version);
8167     bool bRet = (status == napi_invalid_arg);
8168     napi_value retValue;
8169     napi_create_int32(env, bRet, &retValue);
8170     return retValue;
8171 }
8172 
createPromiseEnvNull(napi_env env,napi_callback_info info)8173 static napi_value createPromiseEnvNull(napi_env env, napi_callback_info info)
8174 {
8175     napi_deferred deferred = nullptr;
8176     napi_value promise = nullptr;
8177     napi_status status = napi_create_promise(nullptr, &deferred, &promise);
8178     bool bRet = (status == napi_invalid_arg);
8179     napi_value retValue;
8180     napi_create_int32(env, bRet, &retValue);
8181     return retValue;
8182 }
8183 
createPromiseDeferredNull(napi_env env,napi_callback_info info)8184 static napi_value createPromiseDeferredNull(napi_env env, napi_callback_info info)
8185 {
8186     napi_value promise = nullptr;
8187     napi_status status = napi_create_promise(env, nullptr, &promise);
8188     bool bRet = (status == napi_invalid_arg);
8189     napi_value retValue;
8190     napi_create_int32(env, bRet, &retValue);
8191     return retValue;
8192 }
8193 
createPromisePromiseNull(napi_env env,napi_callback_info info)8194 static napi_value createPromisePromiseNull(napi_env env, napi_callback_info info)
8195 {
8196     napi_deferred deferred = nullptr;
8197     napi_status status = napi_create_promise(env, &deferred, nullptr);
8198     bool bRet = (status == napi_invalid_arg);
8199     napi_value retValue;
8200     napi_create_int32(env, bRet, &retValue);
8201     return retValue;
8202 }
8203 
resolveDeferredEnvNull(napi_env env,napi_callback_info info)8204 static napi_value resolveDeferredEnvNull(napi_env env, napi_callback_info info)
8205 {
8206     napi_deferred deferred = nullptr;
8207     napi_value undefined = nullptr;
8208     napi_status status = napi_resolve_deferred(nullptr, deferred, undefined);
8209     bool bRet = (status == napi_invalid_arg);
8210     napi_value retValue;
8211     napi_create_int32(env, bRet, &retValue);
8212     return retValue;
8213 }
8214 
resolveDeferredNull(napi_env env,napi_callback_info info)8215 static napi_value resolveDeferredNull(napi_env env, napi_callback_info info)
8216 {
8217     napi_value promise = nullptr;
8218     bool isPromise = false;
8219     napi_is_promise(env, promise, &isPromise);
8220     napi_value undefined = nullptr;
8221     napi_get_undefined(env, &undefined);
8222     napi_status status = napi_resolve_deferred(env, nullptr, undefined);
8223     bool bRet = (status == napi_invalid_arg);
8224     napi_value retValue;
8225     napi_create_int32(env, bRet, &retValue);
8226     return retValue;
8227 }
8228 
isPromiseEnvNull(napi_env env,napi_callback_info info)8229 static napi_value isPromiseEnvNull(napi_env env, napi_callback_info info)
8230 {
8231     napi_value promise = nullptr;
8232     bool isPromise = false;
8233     napi_status status = napi_is_promise(nullptr, promise, &isPromise);
8234     bool bRet = (status == napi_invalid_arg);
8235     napi_value retValue;
8236     napi_create_int32(env, bRet, &retValue);
8237     return retValue;
8238 }
8239 
isPromiseValueNull(napi_env env,napi_callback_info info)8240 static napi_value isPromiseValueNull(napi_env env, napi_callback_info info)
8241 {
8242     napi_deferred deferred = nullptr;
8243     NAPI_CALL(env, napi_create_promise(env, &deferred, nullptr));
8244     bool isPromise = false;
8245     napi_status status = napi_is_promise(env, nullptr, &isPromise);
8246     bool bRet = (status == napi_invalid_arg);
8247     napi_value retValue;
8248     napi_create_int32(env, bRet, &retValue);
8249     return retValue;
8250 }
8251 
isPromiseRstNull(napi_env env,napi_callback_info info)8252 static napi_value isPromiseRstNull(napi_env env, napi_callback_info info)
8253 {
8254     napi_deferred deferred = nullptr;
8255     napi_value promise = nullptr;
8256     NAPI_CALL(env, napi_create_promise(env, &deferred, nullptr));
8257     napi_status status = napi_is_promise(env, promise, nullptr);
8258     bool bRet = (status == napi_invalid_arg);
8259     napi_value retValue;
8260     napi_create_int32(env, bRet, &retValue);
8261     return retValue;
8262 }
8263 
getUvEventLoopEnvNull(napi_env env,napi_callback_info info)8264 static napi_value getUvEventLoopEnvNull(napi_env env, napi_callback_info info)
8265 {
8266     struct uv_loop_s* loop = nullptr;
8267     napi_status status = napi_get_uv_event_loop(nullptr, &loop);
8268     bool bRet = (status == napi_invalid_arg);
8269     napi_value retValue;
8270     napi_create_int32(env, bRet, &retValue);
8271     return retValue;
8272 }
8273 
getUvEventLoopRstNull(napi_env env,napi_callback_info info)8274 static napi_value getUvEventLoopRstNull(napi_env env, napi_callback_info info)
8275 {
8276     napi_status status = napi_get_uv_event_loop(env, nullptr);
8277     bool bRet = (status == napi_invalid_arg);
8278     napi_value retValue;
8279     napi_create_int32(env, bRet, &retValue);
8280     return retValue;
8281 }
8282 
createThreadsafeFunctionEnvNull(napi_env env,napi_callback_info info)8283 static napi_value createThreadsafeFunctionEnvNull(napi_env env, napi_callback_info info)
8284 {
8285     napi_threadsafe_function tsFunc = nullptr;
8286     napi_value resourceName = 0;
8287     int32_t  callJstCbDataTestId = 101;
8288     napi_create_string_latin1(env, __func__, NAPI_AUTO_LENGTH, &resourceName);
8289     int32_t  finalCbtDataTestID = 1001;
8290     napi_status status = napi_create_threadsafe_function(nullptr, nullptr, nullptr, resourceName,
8291                                                          0, 1, &callJstCbDataTestId, nullptr,
8292                                                          &finalCbtDataTestID, nullptr, &tsFunc);
8293     bool bRet = (status == napi_invalid_arg);
8294     napi_value retValue;
8295     napi_create_int32(env, bRet, &retValue);
8296     return retValue;
8297 }
8298 
createThreadsafeFunctionNameNull(napi_env env,napi_callback_info info)8299 static napi_value createThreadsafeFunctionNameNull(napi_env env, napi_callback_info info)
8300 {
8301     napi_threadsafe_function tsFunc = nullptr;
8302     int32_t  callJstCbDataTestId = 101;
8303     int32_t  finalCbtDataTestID = 1001;
8304     napi_status status = napi_create_threadsafe_function(env, nullptr, nullptr, nullptr,
8305                                                          0, 1, &callJstCbDataTestId, nullptr,
8306                                                          &finalCbtDataTestID, nullptr, &tsFunc);
8307     bool bRet = (status == napi_invalid_arg);
8308     napi_value retValue;
8309     napi_create_int32(env, bRet, &retValue);
8310     return retValue;
8311 }
8312 
napiCallThreadsafeFunctionNull(napi_env env,napi_callback_info info)8313 static napi_value napiCallThreadsafeFunctionNull(napi_env env, napi_callback_info info)
8314 {
8315     void* data = nullptr;
8316     napi_threadsafe_function func = (napi_threadsafe_function)data;
8317     napi_threadsafe_function_call_mode blockMode = napi_tsfn_nonblocking;
8318     void* context = nullptr;
8319     napi_get_threadsafe_function_context(func, &context);
8320     static int32_t gSendData = 0;
8321     napi_status status = napi_call_threadsafe_function(func, &gSendData, blockMode);
8322     bool bRet = (status == napi_invalid_arg);
8323     napi_value retValue;
8324     napi_create_int32(env, bRet, &retValue);
8325     return retValue;
8326 }
8327 
refThreadSafeFunctionEnvNull(napi_env env,napi_callback_info info)8328 static napi_value refThreadSafeFunctionEnvNull(napi_env env, napi_callback_info info)
8329 {
8330     napi_threadsafe_function tsFunc = nullptr;
8331     napi_value resourceName = 0;
8332     napi_create_string_latin1(env, __func__, NAPI_AUTO_LENGTH, &resourceName);
8333     int32_t callJsCbDataTestId = 101;
8334     int32_t finalCbDataTestId = 1001;
8335     napi_create_threadsafe_function(env, nullptr, nullptr, resourceName,
8336                                                          0, 1, &callJsCbDataTestId,
8337                                                          nullptr, &finalCbDataTestId, nullptr, &tsFunc);
8338     napi_status status = napi_ref_threadsafe_function(nullptr, tsFunc);
8339     bool bRet = (status == napi_invalid_arg);
8340     napi_value retValue;
8341     napi_create_int32(env, bRet, &retValue);
8342     return retValue;
8343 }
8344 
refThreadSafeFunctionFuncNull(napi_env env,napi_callback_info info)8345 static napi_value refThreadSafeFunctionFuncNull(napi_env env, napi_callback_info info)
8346 {
8347     napi_status status = napi_ref_threadsafe_function(env, nullptr);
8348     bool bRet = (status == napi_invalid_arg);
8349     napi_value retValue;
8350     napi_create_int32(env, bRet, &retValue);
8351     return retValue;
8352 }
8353 
createDateEnvNull(napi_env env,napi_callback_info info)8354 static napi_value createDateEnvNull(napi_env env, napi_callback_info info)
8355 {
8356     napi_value createResult = nullptr;
8357     double time = 202110181203150;
8358     napi_status status = napi_create_date(nullptr, time, &createResult);
8359     bool bRet = (status == napi_invalid_arg);
8360     napi_value retValue;
8361     napi_create_int32(env, bRet, &retValue);
8362     return retValue;
8363 }
8364 
createDateRstNull(napi_env env,napi_callback_info info)8365 static napi_value createDateRstNull(napi_env env, napi_callback_info info)
8366 {
8367     double time = 202110181203150;
8368     napi_status status = napi_create_date(env, time, nullptr);
8369     bool bRet = (status == napi_invalid_arg);
8370     napi_value retValue;
8371     napi_create_int32(env, bRet, &retValue);
8372     return retValue;
8373 }
8374 
getValueBigintUint64EnvNull(napi_env env,napi_callback_info info)8375 static napi_value getValueBigintUint64EnvNull(napi_env env, napi_callback_info info)
8376 {
8377     uint64_t testValue = UINT64_MAX;
8378     napi_value result = nullptr;
8379     napi_create_bigint_uint64(env, testValue, &result);
8380     uint64_t resultValue = 0;
8381     bool flag = false;
8382     napi_status status = napi_get_value_bigint_uint64(nullptr, result, &resultValue, &flag);
8383     bool bRet = (status == napi_invalid_arg);
8384     napi_value retValue;
8385     napi_create_int32(env, bRet, &retValue);
8386     return retValue;
8387 }
8388 
getValueBigintUint64ValueNull(napi_env env,napi_callback_info info)8389 static napi_value getValueBigintUint64ValueNull(napi_env env, napi_callback_info info)
8390 {
8391     uint64_t resultValue = 0;
8392     bool flag = false;
8393     napi_status status = napi_get_value_bigint_uint64(env, nullptr, &resultValue, &flag);
8394     bool bRet = (status == napi_invalid_arg);
8395     napi_value retValue;
8396     napi_create_int32(env, bRet, &retValue);
8397     return retValue;
8398 }
8399 
getValueBigintUint64RstNull(napi_env env,napi_callback_info info)8400 static napi_value getValueBigintUint64RstNull(napi_env env, napi_callback_info info)
8401 {
8402     uint64_t testValue = UINT64_MAX;
8403     napi_value result = nullptr;
8404     napi_create_bigint_uint64(env, testValue, &result);
8405     bool flag = false;
8406     napi_status status = napi_get_value_bigint_uint64(env, result, nullptr, &flag);
8407     bool bRet = (status == napi_invalid_arg);
8408     napi_value retValue;
8409     napi_create_int32(env, bRet, &retValue);
8410     return retValue;
8411 }
8412 
getValueBigintUint64LossNull(napi_env env,napi_callback_info info)8413 static napi_value getValueBigintUint64LossNull(napi_env env, napi_callback_info info)
8414 {
8415     uint64_t testValue = UINT64_MAX;
8416     napi_value result = nullptr;
8417     napi_create_bigint_uint64(env, testValue, &result);
8418     uint64_t resultValue = 0;
8419     napi_status status = napi_get_value_bigint_uint64(env, result, &resultValue, nullptr);
8420     bool bRet = (status == napi_invalid_arg);
8421     napi_value retValue;
8422     napi_create_int32(env, bRet, &retValue);
8423     return retValue;
8424 }
8425 
getValueBigintInt64EnvNull(napi_env env,napi_callback_info info)8426 static napi_value getValueBigintInt64EnvNull(napi_env env, napi_callback_info info)
8427 {
8428     int64_t testValue = INT64_MAX;
8429     napi_value result = nullptr;
8430     napi_create_bigint_int64(env, testValue, &result);
8431     int64_t resultValue = 0;
8432     bool flag = false;
8433     napi_status status = napi_get_value_bigint_int64(nullptr, result, &resultValue, &flag);
8434     bool bRet = (status == napi_invalid_arg);
8435     napi_value retValue;
8436     napi_create_int32(env, bRet, &retValue);
8437     return retValue;
8438 }
8439 
getValueBigintInt64ValueNull(napi_env env,napi_callback_info info)8440 static napi_value getValueBigintInt64ValueNull(napi_env env, napi_callback_info info)
8441 {
8442     int64_t resultValue = 0;
8443     bool flag = false;
8444     napi_status status = napi_get_value_bigint_int64(env, nullptr, &resultValue, &flag);
8445     bool bRet = (status == napi_invalid_arg);
8446     napi_value retValue;
8447     napi_create_int32(env, bRet, &retValue);
8448     return retValue;
8449 }
8450 
getValueBigintInt64RstNull(napi_env env,napi_callback_info info)8451 static napi_value getValueBigintInt64RstNull(napi_env env, napi_callback_info info)
8452 {
8453     int64_t testValue = INT64_MAX;
8454     napi_value result = nullptr;
8455     napi_create_bigint_int64(env, testValue, &result);
8456     bool flag = false;
8457     napi_status status = napi_get_value_bigint_int64(env, result, nullptr, &flag);
8458     bool bRet = (status == napi_invalid_arg);
8459     napi_value retValue;
8460     napi_create_int32(env, bRet, &retValue);
8461     return retValue;
8462 }
8463 
getValueBigintInt64LossNull(napi_env env,napi_callback_info info)8464 static napi_value getValueBigintInt64LossNull(napi_env env, napi_callback_info info)
8465 {
8466     int64_t testValue = INT64_MAX;
8467     napi_value result = nullptr;
8468     napi_create_bigint_int64(env, testValue, &result);
8469     int64_t resultValue = 0;
8470     napi_status status = napi_get_value_bigint_int64(env, result, &resultValue, nullptr);
8471     bool bRet = (status == napi_invalid_arg);
8472     napi_value retValue;
8473     napi_create_int32(env, bRet, &retValue);
8474     return retValue;
8475 }
8476 
getValueBigintWords(napi_env env,napi_callback_info info)8477 static napi_value getValueBigintWords(napi_env env, napi_callback_info info)
8478 {
8479     int signBit = 0;
8480     size_t wordCount = 4;
8481     uint64_t words[] = {0ULL, 34ULL, 56ULL, 2ULL};
8482     uint64_t wordsOut[] = {0ULL, 0ULL, 0ULL, 0ULL};
8483     napi_value result = nullptr;
8484     NAPI_CALL(env, napi_create_bigint_words(env, signBit, wordCount, words, &result));
8485     int retSignBit = -1;
8486     size_t retWordCount = 4;
8487     NAPI_CALL(env, napi_get_value_bigint_words(env, result, &retSignBit, &retWordCount, wordsOut));
8488     bool testResult = true;
8489     if (retSignBit != signBit || retWordCount != wordCount) {
8490         testResult = false;
8491     }
8492     for (size_t i = 0; i < wordCount; i++) {
8493         if (wordsOut[i] != words[i]) {
8494             testResult = false;
8495             break;
8496         }
8497     }
8498     napi_value value;
8499     NAPI_CALL(env, napi_create_int32(env, testResult, &value));
8500     return value;
8501 }
8502 
getValueBigintWordsEnvNull(napi_env env,napi_callback_info info)8503 static napi_value getValueBigintWordsEnvNull(napi_env env, napi_callback_info info)
8504 {
8505     int signBit = 0;
8506     size_t wordCount = 4;
8507     uint64_t words[] = {0ULL, 34ULL, 56ULL, 2ULL};
8508     uint64_t wordsOut[] = {0ULL, 0ULL, 0ULL, 0ULL};
8509     napi_value result = nullptr;
8510     NAPI_CALL(env, napi_create_bigint_words(env, signBit, wordCount, words, &result));
8511     int retSignBit = -1;
8512     size_t retWordCount = 4;
8513     napi_status status = napi_get_value_bigint_words(nullptr, result, &retSignBit, &retWordCount, wordsOut);
8514     bool bRet = (status == napi_invalid_arg);
8515     napi_value retValue;
8516     napi_create_int32(env, bRet, &retValue);
8517     return retValue;
8518 }
8519 
getValueBigintWordsValueNull(napi_env env,napi_callback_info info)8520 static napi_value getValueBigintWordsValueNull(napi_env env, napi_callback_info info)
8521 {
8522     uint64_t wordsOut[] = {0ULL, 0ULL, 0ULL, 0ULL};
8523     int retSignBit = -1;
8524     size_t retWordCount = 4;
8525     napi_status status = napi_get_value_bigint_words(env, nullptr, &retSignBit, &retWordCount, wordsOut);
8526     bool bRet = (status == napi_invalid_arg);
8527     napi_value retValue;
8528     napi_create_int32(env, bRet, &retValue);
8529     return retValue;
8530 }
8531 
getValueBigintWordsSignNull(napi_env env,napi_callback_info info)8532 static napi_value getValueBigintWordsSignNull(napi_env env, napi_callback_info info)
8533 {
8534     int signBit = 0;
8535     size_t wordCount = 4;
8536     uint64_t words[] = {0ULL, 34ULL, 56ULL, 2ULL};
8537     uint64_t wordsOut[] = {0ULL, 0ULL, 0ULL, 0ULL};
8538     napi_value result = nullptr;
8539     NAPI_CALL(env, napi_create_bigint_words(env, signBit, wordCount, words, &result));
8540     size_t retWordCount = 4;
8541     napi_status status = napi_get_value_bigint_words(env, result, nullptr, &retWordCount, wordsOut);
8542     bool bRet = (status == napi_invalid_arg);
8543     napi_value retValue;
8544     napi_create_int32(env, bRet, &retValue);
8545     return retValue;
8546 }
8547 
getValueBigintWordsCountNull(napi_env env,napi_callback_info info)8548 static napi_value getValueBigintWordsCountNull(napi_env env, napi_callback_info info)
8549 {
8550     int signBit = 0;
8551     size_t wordCount = 4;
8552     uint64_t words[] = {0ULL, 34ULL, 56ULL, 2ULL};
8553     uint64_t wordsOut[] = {0ULL, 0ULL, 0ULL, 0ULL};
8554     napi_value result = nullptr;
8555     NAPI_CALL(env, napi_create_bigint_words(env, signBit, wordCount, words, &result));
8556     int retSignBit = -1;
8557     napi_status status = napi_get_value_bigint_words(env, result, &retSignBit, nullptr, wordsOut);
8558     bool bRet = (status == napi_invalid_arg);
8559     napi_value retValue;
8560     napi_create_int32(env, bRet, &retValue);
8561     return retValue;
8562 }
8563 
getValueBigintWordsWordsNull(napi_env env,napi_callback_info info)8564 static napi_value getValueBigintWordsWordsNull(napi_env env, napi_callback_info info)
8565 {
8566     int signBit = 0;
8567     size_t wordCount = 4;
8568     uint64_t words[] = {0ULL, 34ULL, 56ULL, 2ULL};
8569     napi_value result = nullptr;
8570     NAPI_CALL(env, napi_create_bigint_words(env, signBit, wordCount, words, &result));
8571     int retSignBit = -1;
8572     size_t retWordCount = 4;
8573     napi_status status = napi_get_value_bigint_words(env, result, &retSignBit, &retWordCount, nullptr);
8574     bool bRet = (status == napi_invalid_arg);
8575     napi_value retValue;
8576     napi_create_int32(env, bRet, &retValue);
8577     return retValue;
8578 }
8579 
createBigintInt64EnvNull(napi_env env,napi_callback_info info)8580 static napi_value createBigintInt64EnvNull(napi_env env, napi_callback_info info)
8581 {
8582     int64_t testValue = INT64_MAX;
8583     napi_value result = nullptr;
8584     napi_status status = napi_create_bigint_int64(nullptr, testValue, &result);
8585     bool bRet = (status == napi_invalid_arg);
8586     napi_value retValue;
8587     napi_create_int32(env, bRet, &retValue);
8588     return retValue;
8589 }
8590 
createBigintInt64RstNull(napi_env env,napi_callback_info info)8591 static napi_value createBigintInt64RstNull(napi_env env, napi_callback_info info)
8592 {
8593     int64_t testValue = INT64_MAX;
8594     napi_status status = napi_create_bigint_int64(env, testValue, nullptr);
8595     bool bRet = (status == napi_invalid_arg);
8596     napi_value retValue;
8597     napi_create_int32(env, bRet, &retValue);
8598     return retValue;
8599 }
8600 
createBigintUint64EnvNull(napi_env env,napi_callback_info info)8601 static napi_value createBigintUint64EnvNull(napi_env env, napi_callback_info info)
8602 {
8603     uint64_t testValue = UINT64_MAX;
8604     napi_value result = nullptr;
8605     napi_status status = napi_create_bigint_uint64(nullptr, testValue, &result);
8606     bool bRet = (status == napi_invalid_arg);
8607     napi_value retValue;
8608     napi_create_int32(env, bRet, &retValue);
8609     return retValue;
8610 }
8611 
createBigintUint64RstNull(napi_env env,napi_callback_info info)8612 static napi_value createBigintUint64RstNull(napi_env env, napi_callback_info info)
8613 {
8614     uint64_t testValue = UINT64_MAX;
8615     napi_status status = napi_create_bigint_uint64(env, testValue, nullptr);
8616     bool bRet = (status == napi_invalid_arg);
8617     napi_value retValue;
8618     napi_create_int32(env, bRet, &retValue);
8619     return retValue;
8620 }
8621 
createBigintWordsEnvNull(napi_env env,napi_callback_info info)8622 static napi_value createBigintWordsEnvNull(napi_env env, napi_callback_info info)
8623 {
8624     int signBit = 0;
8625     size_t wordCount = 4;
8626     uint64_t words[] = {0ULL, 34ULL, 56ULL, 2ULL};
8627     napi_value result = nullptr;
8628     napi_status status = napi_create_bigint_words(nullptr, signBit, wordCount, words, &result);
8629     bool bRet = (status == napi_invalid_arg);
8630     napi_value retValue;
8631     napi_create_int32(env, bRet, &retValue);
8632     return retValue;
8633 }
8634 
createBigintWordsNull(napi_env env,napi_callback_info info)8635 static napi_value createBigintWordsNull(napi_env env, napi_callback_info info)
8636 {
8637     int signBit = 0;
8638     size_t wordCount = 4;
8639     napi_value result = nullptr;
8640     napi_status status = napi_create_bigint_words(env, signBit, wordCount, nullptr, &result);
8641     bool bRet = (status == napi_invalid_arg);
8642     napi_value retValue;
8643     napi_create_int32(env, bRet, &retValue);
8644     return retValue;
8645 }
8646 
createBigintWordsRstNull(napi_env env,napi_callback_info info)8647 static napi_value createBigintWordsRstNull(napi_env env, napi_callback_info info)
8648 {
8649     int signBit = 0;
8650     size_t wordCount = 4;
8651     uint64_t words[] = {0ULL, 34ULL, 56ULL, 2ULL};
8652     napi_status status = napi_create_bigint_words(env, signBit, wordCount, words, nullptr);
8653     bool bRet = (status == napi_invalid_arg);
8654     napi_value retValue;
8655     napi_create_int32(env, bRet, &retValue);
8656     return retValue;
8657 }
8658 
createBufferEnvNull(napi_env env,napi_callback_info info)8659 static napi_value createBufferEnvNull(napi_env env, napi_callback_info info)
8660 {
8661     const unsigned int bufferSize = sizeof(TEST_STR);
8662     char* copyPtr;
8663     napi_value napiBuffer;
8664     napi_status status = napi_create_buffer(nullptr, bufferSize, (void**)(&copyPtr), &napiBuffer);
8665     bool bRet = (status == napi_invalid_arg);
8666     napi_value retValue;
8667     napi_create_int32(env, bRet, &retValue);
8668     return retValue;
8669 }
8670 
createBufferDataNull(napi_env env,napi_callback_info info)8671 static napi_value createBufferDataNull(napi_env env, napi_callback_info info)
8672 {
8673     const unsigned int bufferSize = sizeof(TEST_STR);
8674     napi_value napiBuffer;
8675     napi_status status = napi_create_buffer(env, bufferSize, nullptr, &napiBuffer);
8676     bool bRet = (status == napi_invalid_arg);
8677     napi_value retValue;
8678     napi_create_int32(env, bRet, &retValue);
8679     return retValue;
8680 }
8681 
createBufferRstNull(napi_env env,napi_callback_info info)8682 static napi_value createBufferRstNull(napi_env env, napi_callback_info info)
8683 {
8684     const unsigned int bufferSize = sizeof(TEST_STR);
8685     char* copyPtr;
8686     napi_status status = napi_create_buffer(env, bufferSize, (void**)(&copyPtr), nullptr);
8687     bool bRet = (status == napi_invalid_arg);
8688     napi_value retValue;
8689     napi_create_int32(env, bRet, &retValue);
8690     return retValue;
8691 }
8692 
createBufferCopyEnvNull(napi_env env,napi_callback_info info)8693 static napi_value createBufferCopyEnvNull(napi_env env, napi_callback_info info)
8694 {
8695     const unsigned int bufferSize = sizeof(TEST_STR);
8696     napi_value napiBuffer;
8697     void* dataPtr = nullptr;
8698     napi_status status = napi_create_buffer_copy(nullptr, bufferSize, TEST_STR, &dataPtr, &napiBuffer);
8699     bool bRet = (status == napi_invalid_arg);
8700     napi_value retValue;
8701     napi_create_int32(env, bRet, &retValue);
8702     return retValue;
8703 }
8704 
createBufferCopyDataNull(napi_env env,napi_callback_info info)8705 static napi_value createBufferCopyDataNull(napi_env env, napi_callback_info info)
8706 {
8707     const unsigned int bufferSize = sizeof(TEST_STR);
8708     napi_value napiBuffer;
8709     void* dataPtr = nullptr;
8710     napi_status status = napi_create_buffer_copy(env, bufferSize, TEST_STR, &dataPtr, &napiBuffer);
8711     bool bRet = (status == napi_invalid_arg);
8712     napi_value retValue;
8713     napi_create_int32(env, bRet, &retValue);
8714     return retValue;
8715 }
8716 
createBufferCopyRstDataNull(napi_env env,napi_callback_info info)8717 static napi_value createBufferCopyRstDataNull(napi_env env, napi_callback_info info)
8718 {
8719     const unsigned int bufferSize = sizeof(TEST_STR);
8720     napi_value napiBuffer;
8721     void* dataPtr = nullptr;
8722     napi_status status = napi_create_buffer_copy(env, bufferSize, TEST_STR, &dataPtr, &napiBuffer);
8723     bool bRet = (status == napi_invalid_arg);
8724     napi_value retValue;
8725     napi_create_int32(env, bRet, &retValue);
8726     return retValue;
8727 }
8728 
createBufferCopyRstNull(napi_env env,napi_callback_info info)8729 static napi_value createBufferCopyRstNull(napi_env env, napi_callback_info info)
8730 {
8731     const unsigned int bufferSize = sizeof(TEST_STR);
8732     napi_value napiBuffer;
8733     void* dataPtr = nullptr;
8734     napi_status status = napi_create_buffer_copy(env, bufferSize, TEST_STR, &dataPtr, &napiBuffer);
8735     bool bRet = (status == napi_invalid_arg);
8736     napi_value retValue;
8737     napi_create_int32(env, bRet, &retValue);
8738     return retValue;
8739 }
8740 
createExternalBuffereEnvNull(napi_env env,napi_callback_info info)8741 static napi_value createExternalBuffereEnvNull(napi_env env, napi_callback_info info)
8742 {
8743     char* copyPtr = strdup(TEST_STR);
8744     napi_value napiBuffer;
8745     const unsigned int bufferSize = sizeof(TEST_STR);
8746     napi_status status = napi_create_external_buffer(nullptr,
8747                                                      bufferSize,
8748                                                      copyPtr,
8749                                                      DelTest,
8750                                                      nullptr,
8751                                                      &napiBuffer);
8752     bool bRet = (status == napi_invalid_arg);
8753     napi_value retValue;
8754     napi_create_int32(env, bRet, &retValue);
8755     return retValue;
8756 }
8757 
createExternalBuffereDataNull(napi_env env,napi_callback_info info)8758 static napi_value createExternalBuffereDataNull(napi_env env, napi_callback_info info)
8759 {
8760     napi_value napiBuffer;
8761     const unsigned int bufferSize = sizeof(TEST_STR);
8762     napi_status status = napi_create_external_buffer(env,
8763                                                      bufferSize,
8764                                                      nullptr,
8765                                                      DelTest,
8766                                                      nullptr,
8767                                                      &napiBuffer);
8768     bool bRet = (status == napi_invalid_arg);
8769     napi_value retValue;
8770     napi_create_int32(env, bRet, &retValue);
8771     return retValue;
8772 }
8773 
getBufferInfoEnvNull(napi_env env,napi_callback_info info)8774 static napi_value getBufferInfoEnvNull(napi_env env, napi_callback_info info)
8775 {
8776     size_t argc = 1;
8777     napi_value args[1];
8778     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
8779     napi_value napiBuffer = args[0];
8780     char *bufferData;
8781     size_t bufferLength;
8782     napi_status status = napi_get_buffer_info(nullptr, napiBuffer, (void**)(&bufferData), &bufferLength);
8783     bool bRet = (status == napi_invalid_arg);
8784     napi_value retValue;
8785     napi_create_int32(env, bRet, &retValue);
8786     return retValue;
8787 }
8788 
getBufferInfoValueNull(napi_env env,napi_callback_info info)8789 static napi_value getBufferInfoValueNull(napi_env env, napi_callback_info info)
8790 {
8791     size_t argc = 1;
8792     napi_value args[1];
8793     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
8794     char *bufferData;
8795     size_t bufferLength;
8796     napi_status status = napi_get_buffer_info(env, nullptr, (void**)(&bufferData), &bufferLength);
8797     bool bRet = (status == napi_invalid_arg);
8798     napi_value retValue;
8799     napi_create_int32(env, bRet, &retValue);
8800     return retValue;
8801 }
8802 
IsBufferEnvNull(napi_env env,napi_callback_info info)8803 static napi_value IsBufferEnvNull(napi_env env, napi_callback_info info)
8804 {
8805     napi_value args[1];
8806     napi_value napiBuffer = args[0];
8807     bool result;
8808     napi_status status = napi_is_buffer(nullptr, napiBuffer, &result);
8809     bool bRet = (status == napi_invalid_arg);
8810     napi_value retValue;
8811     napi_create_int32(env, bRet, &retValue);
8812     return retValue;
8813 }
8814 
IsBufferValueNull(napi_env env,napi_callback_info info)8815 static napi_value IsBufferValueNull(napi_env env, napi_callback_info info)
8816 {
8817     bool result;
8818     napi_status status = napi_is_buffer(env, nullptr, &result);
8819     bool bRet = (status == napi_invalid_arg);
8820     napi_value retValue;
8821     napi_create_int32(env, bRet, &retValue);
8822     return retValue;
8823 }
8824 
IsBufferRstNull(napi_env env,napi_callback_info info)8825 static napi_value IsBufferRstNull(napi_env env, napi_callback_info info)
8826 {
8827     napi_value args[1];
8828     size_t argc = 1;
8829     if (napi_get_cb_info(env, info, &argc, args, nullptr, nullptr) != napi_ok) {
8830         napi_throw_error(env, nullptr, "Failed to parse arguments");
8831         return nullptr;
8832     }
8833     napi_value napiBuffer = args[0];
8834     napi_status status = napi_is_buffer(env, napiBuffer, nullptr);
8835     bool bRet = (status == napi_invalid_arg);
8836     napi_value retValue;
8837     napi_create_int32(env, bRet, &retValue);
8838     return retValue;
8839 }
8840 
objectFreezeEnvNull(napi_env env,napi_callback_info info)8841 static napi_value objectFreezeEnvNull(napi_env env, napi_callback_info info)
8842 {
8843     napi_value args[1];
8844     napi_value object = args[0];
8845     napi_status status = napi_object_freeze(nullptr, object);
8846     bool bRet = (status == napi_invalid_arg);
8847     napi_value retValue;
8848     napi_create_int32(env, bRet, &retValue);
8849     return retValue;
8850 }
8851 
objectFreezeObjNull(napi_env env,napi_callback_info info)8852 static napi_value objectFreezeObjNull(napi_env env, napi_callback_info info)
8853 {
8854     napi_status status = napi_object_freeze(env, nullptr);
8855     bool bRet = (status == napi_invalid_arg);
8856     napi_value retValue;
8857     napi_create_int32(env, bRet, &retValue);
8858     return retValue;
8859 }
8860 
objectSealEnvNull(napi_env env,napi_callback_info info)8861 static napi_value objectSealEnvNull(napi_env env, napi_callback_info info)
8862 {
8863     size_t argc = 1;
8864     napi_value args[1];
8865     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, nullptr, nullptr));
8866     napi_value objectConstructor;
8867     napi_get_named_property(env, args[0], "Object", &objectConstructor);
8868     napi_value object = args[0];
8869     napi_status status =  napi_object_seal(nullptr, object);
8870     bool bRet = (status == napi_invalid_arg);
8871     napi_value retValue;
8872     napi_create_int32(env, bRet, &retValue);
8873     return retValue;
8874 }
8875 
objectSealObjNull(napi_env env,napi_callback_info info)8876 static napi_value objectSealObjNull(napi_env env, napi_callback_info info)
8877 {
8878     napi_status status = napi_object_seal(env, nullptr);
8879     bool bRet = (status == napi_invalid_arg);
8880     napi_value retValue;
8881     napi_create_int32(env, bRet, &retValue);
8882     return retValue;
8883 }
8884 
GetAllPropertyNamesEnvNull(napi_env env,napi_callback_info info)8885 static napi_value GetAllPropertyNamesEnvNull(napi_env env, napi_callback_info info)
8886 {
8887     napi_value returnValue, props;
8888     NAPI_CALL(env, napi_create_object(env, &returnValue));
8889     napi_status status = napi_get_all_property_names(nullptr,
8890                                                      returnValue,
8891                                                      napi_key_own_only,
8892                                                      napi_key_writable,
8893                                                      napi_key_keep_numbers,
8894                                                      &props);
8895     bool bRet = (status == napi_invalid_arg);
8896     napi_value retValue;
8897     napi_create_int32(env, bRet, &retValue);
8898     return retValue;
8899 }
8900 
GetAllPropertyNamesObjNull(napi_env env,napi_callback_info info)8901 static napi_value GetAllPropertyNamesObjNull(napi_env env, napi_callback_info info)
8902 {
8903     napi_value returnValue, props;
8904     NAPI_CALL(env, napi_create_object(env, &returnValue));
8905     napi_status status = napi_get_all_property_names(env,
8906                                                      nullptr,
8907                                                      napi_key_own_only,
8908                                                      napi_key_writable,
8909                                                      napi_key_keep_numbers,
8910                                                      &props);
8911     bool bRet = (status == napi_invalid_arg);
8912     napi_value retValue;
8913     napi_create_int32(env, bRet, &retValue);
8914     return retValue;
8915 }
8916 
GetAllPropertyNamesResNull(napi_env env,napi_callback_info info)8917 static napi_value GetAllPropertyNamesResNull(napi_env env, napi_callback_info info)
8918 {
8919     napi_value returnValue;
8920     NAPI_CALL(env, napi_create_object(env, &returnValue));
8921     napi_status status = napi_get_all_property_names(env,
8922                                                      returnValue,
8923                                                      napi_key_own_only,
8924                                                      napi_key_writable,
8925                                                      napi_key_keep_numbers,
8926                                                      nullptr);
8927     bool bRet = (status == napi_invalid_arg);
8928     napi_value retValue;
8929     napi_create_int32(env, bRet, &retValue);
8930     return retValue;
8931 }
8932 
DetachEnvNull(napi_env env,napi_callback_info info)8933 static napi_value DetachEnvNull(napi_env env, napi_callback_info info)
8934 {
8935     napi_value arrayBuffer;
8936     NAPI_CALL(env, napi_create_int32(env, 0, &arrayBuffer));
8937     napi_status status = napi_detach_arraybuffer(nullptr, arrayBuffer);
8938     bool bRet = (status == napi_invalid_arg);
8939     napi_value retValue;
8940     napi_create_int32(env, bRet, &retValue);
8941     return retValue;
8942 }
8943 
DetachArrNull(napi_env env,napi_callback_info info)8944 static napi_value DetachArrNull(napi_env env, napi_callback_info info)
8945 {
8946     napi_status status = napi_detach_arraybuffer(env, nullptr);
8947     bool bRet = (status == napi_invalid_arg);
8948     napi_value retValue;
8949     napi_create_int32(env, bRet, &retValue);
8950     return retValue;
8951 }
8952 
IsDetachedEnvNull(napi_env env,napi_callback_info info)8953 napi_value IsDetachedEnvNull(napi_env env, napi_callback_info info)
8954 {
8955     size_t argc = 1;
8956     napi_value args[1];
8957     napi_status status = napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
8958     bool isArraybuffer;
8959     status = napi_is_arraybuffer(env, args[0], &isArraybuffer);
8960     bool isDetached;
8961     status = napi_is_detached_arraybuffer(nullptr, args[0], &isDetached);
8962     bool bRet = (status == napi_invalid_arg);
8963     napi_value retValue;
8964     napi_create_int32(env, bRet, &retValue);
8965     return retValue;
8966 }
8967 
IsDetachedArrNull(napi_env env,napi_callback_info info)8968 napi_value IsDetachedArrNull(napi_env env, napi_callback_info info)
8969 {
8970     bool isDetached;
8971     napi_status status = napi_is_detached_arraybuffer(env, nullptr, &isDetached);
8972     bool bRet = (status == napi_invalid_arg);
8973     napi_value retValue;
8974     napi_create_int32(env, bRet, &retValue);
8975     return retValue;
8976 }
8977 
IsDetachedResNull(napi_env env,napi_callback_info info)8978 napi_value IsDetachedResNull(napi_env env, napi_callback_info info)
8979 {
8980     napi_value args[1];
8981     napi_status status = napi_is_detached_arraybuffer(env, args[0], nullptr);
8982     bool bRet = (status == napi_invalid_arg);
8983     napi_value retValue;
8984     napi_create_int32(env, bRet, &retValue);
8985     return retValue;
8986 }
8987 
NapiSetInstanceDataEnvNull(napi_env env,napi_callback_info info)8988 static napi_value NapiSetInstanceDataEnvNull(napi_env env, napi_callback_info info)
8989 {
8990     InstanceData* data = reinterpret_cast<InstanceData*>(malloc(sizeof(*data)));
8991     data->value = 1;
8992     data->print = true;
8993     data->jsCbRef = nullptr;
8994     napi_status status = napi_set_instance_data(nullptr, data, DeleteAddonData, nullptr);
8995     bool bRet = (status == napi_invalid_arg);
8996     napi_value retValue;
8997     napi_create_int32(env, bRet, &retValue);
8998     return retValue;
8999 }
9000 
NapiGetInstanceDataDataNull(napi_env env,napi_callback_info info)9001 static napi_value NapiGetInstanceDataDataNull(napi_env env, napi_callback_info info)
9002 {
9003     InstanceData* data = reinterpret_cast<InstanceData*>(malloc(sizeof(*data)));
9004     data->value = 1;
9005     data->print = true;
9006     data->jsCbRef = nullptr;
9007     NAPI_CALL(env, napi_set_instance_data(env, data, DeleteAddonData, nullptr));
9008     napi_status status = napi_get_instance_data(env, nullptr);
9009     bool bRet = (status == napi_invalid_arg);
9010     napi_value retValue;
9011     napi_create_int32(env, bRet, &retValue);
9012     return retValue;
9013 }
9014 
NapiEnvCleanUpHookEnvNull(napi_env env,napi_callback_info exports)9015 static napi_value NapiEnvCleanUpHookEnvNull(napi_env env, napi_callback_info exports)
9016 {
9017     static int argValue = 42;
9018     ObjectWrapper(env);
9019     napi_status status = napi_add_env_cleanup_hook(env, Cleanup, &argValue);
9020     bool bRet = (status == napi_invalid_arg);
9021     napi_value retValue;
9022     napi_create_int32(env, bRet, &retValue);
9023     return retValue;
9024 }
9025 
NapiEnvCleanUpHookFuncNull(napi_env env,napi_callback_info exports)9026 static napi_value NapiEnvCleanUpHookFuncNull(napi_env env, napi_callback_info exports)
9027 {
9028     // Create object wrap before cleanup hooks.
9029     g_cleanupHookCount = 0;
9030     static int argValueRemoved = 17;
9031     ObjectWrapper(env);
9032     napi_status status = napi_add_env_cleanup_hook(env, nullptr, &argValueRemoved);
9033     bool bRet = (status == napi_invalid_arg);
9034     napi_value retValue;
9035     napi_create_int32(env, bRet, &retValue);
9036     return retValue;
9037 }
9038 
NapiRemoveEnvCleanUpHookEnvNull(napi_env env,napi_callback_info exports)9039 static napi_value NapiRemoveEnvCleanUpHookEnvNull(napi_env env, napi_callback_info exports)
9040 {
9041     // Create object wrap before cleanup hooks.
9042     g_cleanupHookCount = 0;
9043     static int argValue = 42;
9044     static int argValueRemoved = 17;
9045     ObjectWrapper(env);
9046 
9047     napi_add_env_cleanup_hook(env, Cleanup, &argValueRemoved);
9048     napi_add_env_cleanup_hook(env, Cleanup, &argValue);
9049     napi_status status = napi_remove_env_cleanup_hook(nullptr, Cleanup, &argValueRemoved);
9050     bool bRet = (status == napi_invalid_arg);
9051     napi_value retValue;
9052     napi_create_int32(env, bRet, &retValue);
9053     return retValue;
9054 }
9055 
NapiRemoveEnvCleanUpHookFuncNull(napi_env env,napi_callback_info exports)9056 static napi_value NapiRemoveEnvCleanUpHookFuncNull(napi_env env, napi_callback_info exports)
9057 {
9058     // Create object wrap before cleanup hooks.
9059     g_cleanupHookCount = 0;
9060     static int argValue = 42;
9061     static int argValueRemoved = 17;
9062     ObjectWrapper(env);
9063 
9064     napi_add_env_cleanup_hook(env, Cleanup, &argValueRemoved);
9065     napi_add_env_cleanup_hook(env, Cleanup, &argValue);
9066     napi_status status = napi_remove_env_cleanup_hook(env, nullptr, &argValueRemoved);
9067     bool bRet = (status == napi_invalid_arg);
9068     napi_value retValue;
9069     napi_create_int32(env, bRet, &retValue);
9070     return retValue;
9071 }
9072 
GetModuleFileNameEnvNull(napi_env env,napi_callback_info info)9073 static napi_value GetModuleFileNameEnvNull(napi_env env, napi_callback_info info)
9074 {
9075     const char *filename;
9076     napi_status status = node_api_get_module_file_name(nullptr, &filename);
9077     bool bRet = (status == napi_invalid_arg);
9078     napi_value retValue;
9079     napi_create_int32(env, bRet, &retValue);
9080     return retValue;
9081 }
9082 
GetModuleFileNameResNull(napi_env env,napi_callback_info info)9083 static napi_value GetModuleFileNameResNull(napi_env env, napi_callback_info info)
9084 {
9085     napi_status status = node_api_get_module_file_name(env, nullptr);
9086     bool bRet = (status == napi_invalid_arg);
9087     napi_value retValue;
9088     napi_create_int32(env, bRet, &retValue);
9089     return retValue;
9090 }
9091 
createAsyncResourceEnvNull(napi_env env,napi_callback_info info)9092 static napi_value createAsyncResourceEnvNull(napi_env env, napi_callback_info info)
9093 {
9094     napi_value args[1];
9095     napi_value resource = args[0];
9096     napi_value resourceName;
9097     NAPI_CALL(env,
9098               napi_create_string_utf8(env, "test_async", NAPI_AUTO_LENGTH, &resourceName));
9099     napi_async_context context;
9100     NAPI_CALL(env, napi_async_init(env, resource, resourceName, &context));
9101     napi_status status = napi_add_finalizer(nullptr, resource, reinterpret_cast<void*>(context),
9102                                             AsyncDestroyCb, nullptr, nullptr);
9103     bool bRet = (status == napi_invalid_arg);
9104     napi_value retValue;
9105     napi_create_int32(env, bRet, &retValue);
9106     return retValue;
9107 }
9108 
createAsyncResourceObjNull(napi_env env,napi_callback_info info)9109 static napi_value createAsyncResourceObjNull(napi_env env, napi_callback_info info)
9110 {
9111     napi_value args[1];
9112     napi_value resourceName;
9113     napi_value resource = args[0];
9114     NAPI_CALL(env,
9115               napi_create_string_utf8(env, "test_async", NAPI_AUTO_LENGTH, &resourceName));
9116     napi_async_context context;
9117     NAPI_CALL(env, napi_async_init(env, resource, resourceName, &context));
9118     napi_status status = napi_add_finalizer(env, nullptr, reinterpret_cast<void*>(context), AsyncDestroyCb,
9119                                             nullptr, nullptr);
9120     bool bRet = (status == napi_invalid_arg);
9121     napi_value retValue;
9122     napi_create_int32(env, bRet, &retValue);
9123     return retValue;
9124 }
9125 
createAsyncResourceCbNull(napi_env env,napi_callback_info info)9126 static napi_value createAsyncResourceCbNull(napi_env env, napi_callback_info info)
9127 {
9128     napi_value args[1];
9129     napi_value resource = args[0];
9130     napi_value resourceName;
9131     NAPI_CALL(env,
9132               napi_create_string_utf8(env, "test_async", NAPI_AUTO_LENGTH, &resourceName));
9133     napi_async_context context;
9134     NAPI_CALL(env, napi_async_init(env, resource, resourceName, &context));
9135     napi_status status = napi_add_finalizer(env, resource, reinterpret_cast<void*>(context),
9136                                             nullptr, nullptr, nullptr);
9137     bool bRet = (status == napi_invalid_arg);
9138     napi_value retValue;
9139     napi_create_int32(env, bRet, &retValue);
9140     return retValue;
9141 }
9142 
asyncWorkWithQosEnvNull(napi_env env,napi_callback_info info)9143 static napi_value asyncWorkWithQosEnvNull(napi_env env, napi_callback_info info)
9144 {
9145     AddonData* addonData = reinterpret_cast<AddonData*>(malloc(sizeof(AddonData)));
9146     napi_status status = napi_queue_async_work_with_qos(nullptr, addonData->asyncWork, napi_qos_default);
9147     bool bRet = (status == napi_invalid_arg);
9148     napi_value retValue;
9149     napi_create_int32(env, bRet, &retValue);
9150     return retValue;
9151 }
9152 
asyncWorkWithQosWorkNull(napi_env env,napi_callback_info info)9153 static napi_value asyncWorkWithQosWorkNull(napi_env env, napi_callback_info info)
9154 {
9155     napi_status status = napi_queue_async_work_with_qos(env, nullptr, napi_qos_default);
9156     bool bRet = (status == napi_invalid_arg);
9157     napi_value retValue;
9158     napi_create_int32(env, bRet, &retValue);
9159     return retValue;
9160 }
9161 
napiRunScriptPathEnvNull(napi_env env,napi_callback_info info)9162 static napi_value napiRunScriptPathEnvNull(napi_env env, napi_callback_info info)
9163 {
9164     napi_value value;
9165     const char* path =  "pages/index.ets";
9166     napi_status status = napi_run_script_path(nullptr, path, &value);
9167     bool bRet = (status == napi_invalid_arg);
9168     napi_value retValue;
9169     napi_create_int32(env, bRet, &retValue);
9170     return retValue;
9171 }
9172 
napiRunScriptPathResNull(napi_env env,napi_callback_info info)9173 static napi_value napiRunScriptPathResNull(napi_env env, napi_callback_info info)
9174 {
9175     const char* path =  "pages/index.ets";
9176     napi_status status = napi_run_script_path(env, path, nullptr);
9177     bool bRet = (status == napi_invalid_arg);
9178     napi_value retValue;
9179     napi_create_int32(env, bRet, &retValue);
9180     return retValue;
9181 }
9182 
napiLoadModuleEnvNull(napi_env env,napi_callback_info info)9183 static napi_value napiLoadModuleEnvNull(napi_env env, napi_callback_info info)
9184 {
9185     napi_value value;
9186     const char* path =  "@ohos.hilog";
9187     napi_status status = napi_load_module(nullptr, path, &value);
9188     bool bRet = (status == napi_invalid_arg);
9189     napi_value retValue;
9190     napi_create_int32(env, bRet, &retValue);
9191     return retValue;
9192 }
9193 
napiLoadModuleResNull(napi_env env,napi_callback_info info)9194 static napi_value napiLoadModuleResNull(napi_env env, napi_callback_info info)
9195 {
9196     const char* path =  "@ohos.hilog";
9197     napi_status status = napi_load_module(env, path, nullptr);
9198     bool bRet = (status == napi_invalid_arg);
9199     napi_value retValue;
9200     napi_create_int32(env, bRet, &retValue);
9201     return retValue;
9202 }
9203 
createObjectWithPropertiesEnvNull(napi_env env,napi_callback_info info)9204 static napi_value createObjectWithPropertiesEnvNull(napi_env env, napi_callback_info info)
9205 {
9206     napi_value val_true;
9207     NAPI_CALL(env, napi_get_boolean(env, true, &val_true));
9208     napi_property_descriptor desc1[] = {
9209         DECLARE_NAPI_DEFAULT_PROPERTY("x", val_true),
9210     };
9211     napi_value obj1;
9212     napi_status status = napi_create_object_with_properties(nullptr, &obj1, 1, desc1);
9213     bool bRet = (status == napi_invalid_arg);
9214     napi_value retValue;
9215     napi_create_int32(env, bRet, &retValue);
9216     return retValue;
9217 }
9218 
createObjectWithPropertiesResNull(napi_env env,napi_callback_info info)9219 static napi_value createObjectWithPropertiesResNull(napi_env env, napi_callback_info info)
9220 {
9221     napi_value obj1;
9222     napi_status status = napi_create_object_with_properties(env, &obj1, 1, nullptr);
9223     bool bRet = (status == napi_invalid_arg);
9224     napi_value retValue;
9225     napi_create_int32(env, bRet, &retValue);
9226     return retValue;
9227 }
9228 
createObjectWithPropertiesEnvResNull(napi_env env,napi_callback_info info)9229 static napi_value createObjectWithPropertiesEnvResNull(napi_env env, napi_callback_info info)
9230 {
9231     napi_value obj1;
9232     napi_status status = napi_create_object_with_properties(nullptr, &obj1, 1, nullptr);
9233     bool bRet = (status == napi_invalid_arg);
9234     napi_value retValue;
9235     napi_create_int32(env, bRet, &retValue);
9236     return retValue;
9237 }
9238 
getDateValue(napi_env env,napi_callback_info info)9239 static napi_value getDateValue(napi_env env, napi_callback_info info)
9240 {
9241     napi_value createResult = nullptr;
9242     double time = 202110181203150;
9243     napi_status status = napi_create_date(env, time, &createResult);
9244     NAPI_ASSERT(env, status == napi_ok, "napi_create_date success");
9245     double getTime = false;
9246     napi_get_date_value(env, createResult, &getTime);
9247     bool result = false;
9248     if (time == getTime) {
9249         result = true;
9250     }
9251     napi_value value;
9252     NAPI_CALL(env, napi_create_int32(env, result, &value));
9253     return value;
9254 }
9255 
getDateValueNotDateObj(napi_env env,napi_callback_info info)9256 static napi_value getDateValueNotDateObj(napi_env env, napi_callback_info info)
9257 {
9258     napi_value createResult = nullptr;
9259     int time = 2147483647;
9260     napi_create_date(env, time, &createResult);
9261     double getTime = false;
9262     napi_status status = napi_get_date_value(env, createResult, &getTime);
9263     bool bRet = (status == napi_invalid_arg);
9264     napi_value retValue;
9265     napi_create_int32(env, bRet, &retValue);
9266     return retValue;
9267 }
9268 
getDateValueEnvNull(napi_env env,napi_callback_info info)9269 static napi_value getDateValueEnvNull(napi_env env, napi_callback_info info)
9270 {
9271     napi_value createResult = nullptr;
9272     double time = 202110181203150;
9273     napi_create_date(env, time, &createResult);
9274     double getTime = false;
9275     napi_status status = napi_get_date_value(nullptr, createResult, &getTime);
9276     bool bRet = (status == napi_invalid_arg);
9277     napi_value retValue;
9278     napi_create_int32(env, bRet, &retValue);
9279     return retValue;
9280 }
9281 
getDateValueNull(napi_env env,napi_callback_info info)9282 static napi_value getDateValueNull(napi_env env, napi_callback_info info)
9283 {
9284     napi_value createResult = nullptr;
9285     double time = 202110181203150;
9286     napi_create_date(env, time, &createResult);
9287     double getTime = false;
9288     napi_status status = napi_get_date_value(env, nullptr, &getTime);
9289     bool bRet = (status == napi_invalid_arg);
9290     napi_value retValue;
9291     napi_create_int32(env, bRet, &retValue);
9292     return retValue;
9293 }
9294 
getDateValueRstNull(napi_env env,napi_callback_info info)9295 static napi_value getDateValueRstNull(napi_env env, napi_callback_info info)
9296 {
9297     napi_value createResult = nullptr;
9298     double time = 202110181203150;
9299     napi_create_date(env, time, &createResult);
9300     napi_status status = napi_get_date_value(env, createResult, nullptr);
9301     bool bRet = (status == napi_invalid_arg);
9302     napi_value retValue;
9303     napi_create_int32(env, bRet, &retValue);
9304     return retValue;
9305 }
9306 
createBigintInt64ValueNotJS(napi_env env,napi_callback_info info)9307 static napi_value createBigintInt64ValueNotJS(napi_env env, napi_callback_info info)
9308 {
9309     uint64_t testValue = INT32_MAX;
9310     napi_value result = nullptr;
9311     napi_status status = napi_create_bigint_uint64(env, testValue, &result);
9312     bool bRet = (status == napi_invalid_arg);
9313     napi_value retValue;
9314     napi_create_int32(env, bRet, &retValue);
9315     return retValue;
9316 }
9317 
createBigintUint64ValueNotJS(napi_env env,napi_callback_info info)9318 static napi_value createBigintUint64ValueNotJS(napi_env env, napi_callback_info info)
9319 {
9320     uint64_t testValue = INT32_MAX;
9321     napi_value result = nullptr;
9322     napi_status status = napi_create_bigint_uint64(env, testValue, &result);
9323     bool bRet = (status == napi_invalid_arg);
9324     napi_value retValue;
9325     napi_create_int32(env, bRet, &retValue);
9326     return retValue;
9327 }
9328 
getValueBiginWordsNotBigInt(napi_env env,napi_callback_info info)9329 static napi_value getValueBiginWordsNotBigInt(napi_env env, napi_callback_info info)
9330 {
9331     uint64_t testValue = INT32_MAX;
9332     napi_value result = nullptr;
9333     napi_create_bigint_uint64(env, testValue, &result);
9334     bool flag = false;
9335     napi_status status = napi_get_value_bigint_uint64(env, result, nullptr, &flag);
9336     bool bRet = (status == napi_invalid_arg);
9337     napi_value retValue;
9338     napi_create_int32(env, bRet, &retValue);
9339     return retValue;
9340 }
9341 
createBufferSizeZero(napi_env env,napi_callback_info info)9342 static napi_value createBufferSizeZero(napi_env env, napi_callback_info info)
9343 {
9344     const unsigned int bufferSize = 0;
9345     char* copyPtr;
9346     napi_value napiBuffer;
9347     napi_status status = napi_create_buffer(env, bufferSize, (void**)(&copyPtr), &napiBuffer);
9348     bool bRet = (status == napi_invalid_arg);
9349     napi_value retValue;
9350     napi_create_int32(env, bRet, &retValue);
9351     return retValue;
9352 }
9353 
createBufferCopyLengthZero(napi_env env,napi_callback_info info)9354 static napi_value createBufferCopyLengthZero(napi_env env, napi_callback_info info)
9355 {
9356     const unsigned int bufferSize = 0;
9357     napi_value napiBuffer;
9358     void* dataPtr = nullptr;
9359     napi_status status = napi_create_buffer_copy(env, bufferSize, TEST_STR, &dataPtr, &napiBuffer);
9360     bool bRet = (status == napi_invalid_arg);
9361     napi_value retValue;
9362     napi_create_int32(env, bRet, &retValue);
9363     return retValue;
9364 }
9365 
createExternalBufferLengthZero(napi_env env,napi_callback_info info)9366 static napi_value createExternalBufferLengthZero(napi_env env, napi_callback_info info)
9367 {
9368     char* copyPtr = strdup(TEST_STR);
9369     napi_value napiBuffer;
9370     const unsigned int bufferSize = 0;
9371     napi_status status = napi_create_external_buffer(env,
9372                                                      bufferSize,
9373                                                      copyPtr,
9374                                                      DelTest,
9375                                                      nullptr,
9376                                                      &napiBuffer);
9377     bool bRet = (status == napi_invalid_arg);
9378     napi_value retValue;
9379     napi_create_int32(env, bRet, &retValue);
9380     return retValue;
9381 }
9382 
createExternalBufferLengthMax(napi_env env,napi_callback_info info)9383 static napi_value createExternalBufferLengthMax(napi_env env, napi_callback_info info)
9384 {
9385     char* copyPtr = strdup(TEST_STR);
9386     napi_value napiBuffer;
9387     const unsigned int bufferSize = 2097153;
9388     napi_status status = napi_create_external_buffer(env,
9389                                                      bufferSize,
9390                                                      copyPtr,
9391                                                      DelTest,
9392                                                      nullptr,
9393                                                      &napiBuffer);
9394     bool bRet = (status == napi_invalid_arg);
9395     napi_value retValue;
9396     napi_create_int32(env, bRet, &retValue);
9397     return retValue;
9398 }
9399 
getBufferInfoValueNotBuffer(napi_env env,napi_callback_info info)9400 static napi_value getBufferInfoValueNotBuffer(napi_env env, napi_callback_info info)
9401 {
9402     napi_value arrayBuffer;
9403     NAPI_CALL(env, napi_create_int32(env, 0, &arrayBuffer));
9404     char *bufferData;
9405     size_t bufferLength;
9406     napi_status status = napi_get_buffer_info(env, arrayBuffer, (void**)(&bufferData), &bufferLength);
9407     bool bRet = (status == napi_invalid_arg);
9408     napi_value retValue;
9409     napi_create_int32(env, bRet, &retValue);
9410     return retValue;
9411 }
9412 
objectSealNotObj(napi_env env,napi_callback_info info)9413 static napi_value objectSealNotObj(napi_env env, napi_callback_info info)
9414 {
9415     napi_value object;
9416     NAPI_CALL(env, napi_create_int32(env, 0, &object));
9417     napi_status status = napi_object_seal(env, object);
9418     bool bRet = (status == napi_invalid_arg);
9419     napi_value retValue;
9420     napi_create_int32(env, bRet, &retValue);
9421     return retValue;
9422 }
9423 
objectFreezeNotObj(napi_env env,napi_callback_info info)9424 static napi_value objectFreezeNotObj(napi_env env, napi_callback_info info)
9425 {
9426     napi_value object;
9427     NAPI_CALL(env, napi_create_int32(env, 0, &object));
9428     napi_status status = napi_object_freeze(env, object);
9429     bool bRet = (status == napi_invalid_arg);
9430     napi_value retValue;
9431     napi_create_int32(env, bRet, &retValue);
9432     return retValue;
9433 }
9434 
detachArraybufferNotObj(napi_env env,napi_callback_info info)9435 static napi_value detachArraybufferNotObj(napi_env env, napi_callback_info info)
9436 {
9437     napi_value arrayBuffer;
9438     NAPI_CALL(env, napi_create_int32(env, 0, &arrayBuffer));
9439     napi_status status = napi_detach_arraybuffer(env, arrayBuffer);
9440     bool bRet = (status == napi_invalid_arg);
9441     napi_value retValue;
9442     napi_create_int32(env, bRet, &retValue);
9443     return retValue;
9444 }
9445 
isSendableEnvNull(napi_env env,napi_callback_info info)9446 static napi_value isSendableEnvNull(napi_env env, napi_callback_info info)
9447 {
9448     size_t argc = 1;
9449     napi_value args[1] = {nullptr};
9450     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
9451     bool isSendable = false;
9452     napi_status status = napi_is_sendable(env, args[0], &isSendable);
9453     bool bRet = (status == napi_invalid_arg);
9454     napi_value retValue;
9455     napi_create_int32(env, bRet, &retValue);
9456     return retValue;
9457 }
9458 
isSendableValueNull(napi_env env,napi_callback_info info)9459 static napi_value isSendableValueNull(napi_env env, napi_callback_info info)
9460 {
9461     size_t argc = 1;
9462     napi_value args[1] = {nullptr};
9463     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
9464     bool isSendable = false;
9465     napi_status status = napi_is_sendable(env, args[0], &isSendable);
9466     bool bRet = (status == napi_invalid_arg);
9467     napi_value retValue;
9468     napi_create_int32(env, bRet, &retValue);
9469     return retValue;
9470 }
9471 
isSendableRstNull(napi_env env,napi_callback_info info)9472 static napi_value isSendableRstNull(napi_env env, napi_callback_info info)
9473 {
9474     size_t argc = 1;
9475     napi_value args[1] = {nullptr};
9476     napi_get_cb_info(env, info, &argc, args, nullptr, nullptr);
9477     bool isSendable = false;
9478     napi_status status = napi_is_sendable(env, args[0], &isSendable);
9479     bool bRet = (status == napi_invalid_arg);
9480     napi_value retValue;
9481     napi_create_int32(env, bRet, &retValue);
9482     return retValue;
9483 }
9484 
deserializeEnvNull(napi_env env,napi_callback_info info)9485 static napi_value deserializeEnvNull(napi_env env, napi_callback_info info)
9486 {
9487     napi_value undefined = nullptr;
9488     napi_get_undefined(env, &undefined);
9489     napi_value num = nullptr;
9490     uint32_t value = 2000;
9491     napi_create_uint32(env, value, &num);
9492     void* data = nullptr;
9493     napi_serialize(env, num, undefined, undefined, &data);
9494     NAPI_ASSERT(env, data != nullptr, " The data is nullptr");
9495     napi_value result1 = nullptr;
9496     napi_status status = napi_deserialize(nullptr, data, &result1);
9497     bool bRet = (status == napi_invalid_arg);
9498     napi_value retValue;
9499     napi_create_int32(env, bRet, &retValue);
9500     return retValue;
9501 }
9502 
deserializeDataNull(napi_env env,napi_callback_info info)9503 static napi_value deserializeDataNull(napi_env env, napi_callback_info info)
9504 {
9505     napi_value undefined = nullptr;
9506     napi_get_undefined(env, &undefined);
9507     napi_value num = nullptr;
9508     uint32_t value = 2000;
9509     napi_create_uint32(env, value, &num);
9510     napi_value result1 = nullptr;
9511     napi_status status = napi_deserialize(env, nullptr, &result1);
9512     bool bRet = (status == napi_invalid_arg);
9513     napi_value retValue;
9514     napi_create_int32(env, bRet, &retValue);
9515     return retValue;
9516 }
9517 
deserializeRstNull(napi_env env,napi_callback_info info)9518 static napi_value deserializeRstNull(napi_env env, napi_callback_info info)
9519 {
9520     napi_value undefined = nullptr;
9521     napi_get_undefined(env, &undefined);
9522     napi_value num = nullptr;
9523     uint32_t value = 2000;
9524     napi_create_uint32(env, value, &num);
9525     void* data = nullptr;
9526     napi_serialize(env, num, undefined, undefined, &data);
9527     NAPI_ASSERT(env, data != nullptr, " The data is nullptr");
9528     napi_status status = napi_deserialize(env, data, nullptr);
9529     bool bRet = (status == napi_invalid_arg);
9530     napi_value retValue;
9531     napi_create_int32(env, bRet, &retValue);
9532     return retValue;
9533 }
9534 
serializeEnvNull(napi_env env,napi_callback_info info)9535 static napi_value serializeEnvNull(napi_env env, napi_callback_info info)
9536 {
9537     napi_value object = nullptr;
9538     napi_create_object(env, &object);
9539     napi_value num = nullptr;
9540     uint32_t value = 2000;
9541     napi_create_uint32(env, value, &num);
9542     napi_set_named_property(env, object, "numKey", num);
9543     napi_value obj = nullptr;
9544     napi_create_object(env, &obj);
9545     napi_set_named_property(env, object, "objKey", obj);
9546     napi_value undefined = nullptr;
9547     napi_get_undefined(env, &undefined);
9548     void* data = nullptr;
9549     napi_status status = napi_serialize(nullptr, object, undefined, undefined, &data);
9550     bool bRet = (status == napi_invalid_arg);
9551     napi_value retValue;
9552     napi_create_int32(env, bRet, &retValue);
9553     return retValue;
9554 }
9555 
serializeObjNull(napi_env env,napi_callback_info info)9556 static napi_value serializeObjNull(napi_env env, napi_callback_info info)
9557 {
9558     napi_value undefined = nullptr;
9559     napi_get_undefined(env, &undefined);
9560     void* data = nullptr;
9561     napi_status status = napi_serialize(env, nullptr, undefined, undefined, &data);
9562     bool bRet = (status == napi_invalid_arg);
9563     napi_value retValue;
9564     napi_create_int32(env, bRet, &retValue);
9565     return retValue;
9566 }
9567 
serializeDataNull(napi_env env,napi_callback_info info)9568 static napi_value serializeDataNull(napi_env env, napi_callback_info info)
9569 {
9570     napi_value object = nullptr;
9571     napi_create_object(env, &object);
9572     napi_value num = nullptr;
9573     uint32_t value = 2000;
9574     napi_create_uint32(env, value, &num);
9575     napi_set_named_property(env, object, "numKey", num);
9576     napi_value obj = nullptr;
9577     napi_create_object(env, &obj);
9578     napi_set_named_property(env, object, "objKey", obj);
9579     napi_value undefined = nullptr;
9580     napi_get_undefined(env, &undefined);
9581     napi_status status = napi_serialize(env, object, undefined, undefined, nullptr);
9582     bool bRet = (status == napi_invalid_arg);
9583     napi_value retValue;
9584     napi_create_int32(env, bRet, &retValue);
9585     return retValue;
9586 }
9587 
createObjectWithNamePropertiesEnvNull(napi_env env,napi_callback_info info)9588 static napi_value createObjectWithNamePropertiesEnvNull(napi_env env, napi_callback_info info)
9589 {
9590     napi_value excep;
9591     NAPI_CALL(env, napi_get_and_clear_last_exception(env, &excep));
9592     napi_value val_false;
9593     napi_value val_true;
9594     NAPI_CALL(env, napi_get_boolean(env, false, &val_false));
9595     NAPI_CALL(env, napi_get_boolean(env, true, &val_true));
9596     const char *keys1[] = {
9597         "x",
9598     };
9599     const napi_value values1[] = {
9600         val_true,
9601     };
9602     napi_value obj1;
9603     napi_status status = napi_create_object_with_named_properties(nullptr, &obj1, 1, keys1, values1);
9604     bool bRet = (status == napi_invalid_arg);
9605     napi_value retValue;
9606     napi_create_int32(env, bRet, &retValue);
9607     return retValue;
9608 }
9609 
coerceToNativeBindingObjectEnvNull(napi_env env,napi_callback_info info)9610 static napi_value coerceToNativeBindingObjectEnvNull(napi_env env, napi_callback_info info)
9611 {
9612     napi_value object = nullptr;
9613     napi_create_object(env, &object);
9614     napi_value hint = nullptr;
9615     napi_create_object(env, &hint);
9616     napi_status status = napi_coerce_to_native_binding_object(nullptr, object,
9617         TestDetachCallback, TestAttachCallback, reinterpret_cast<void*>(object), reinterpret_cast<void*>(hint));
9618     bool bRet = (status == napi_invalid_arg);
9619     napi_value retValue;
9620     napi_create_int32(env, bRet, &retValue);
9621     return retValue;
9622 }
9623 
coerceToNativeBindingObjectObjNull(napi_env env,napi_callback_info info)9624 static napi_value coerceToNativeBindingObjectObjNull(napi_env env, napi_callback_info info)
9625 {
9626     napi_value object = nullptr;
9627     napi_create_object(env, &object);
9628     napi_value hint = nullptr;
9629     napi_create_object(env, &hint);
9630     napi_status status = napi_coerce_to_native_binding_object(env, nullptr,
9631         TestDetachCallback, TestAttachCallback, reinterpret_cast<void*>(object), reinterpret_cast<void*>(hint));
9632     bool bRet = (status == napi_invalid_arg);
9633     napi_value retValue;
9634     napi_create_int32(env, bRet, &retValue);
9635     return retValue;
9636 }
9637 
coerceToNativeBindingObjectDetachNull(napi_env env,napi_callback_info info)9638 static napi_value coerceToNativeBindingObjectDetachNull(napi_env env, napi_callback_info info)
9639 {
9640     napi_value object = nullptr;
9641     napi_create_object(env, &object);
9642     napi_value hint = nullptr;
9643     napi_create_object(env, &hint);
9644     napi_status status = napi_coerce_to_native_binding_object(env, object,
9645         nullptr, TestAttachCallback, reinterpret_cast<void*>(object), reinterpret_cast<void*>(hint));
9646     bool bRet = (status == napi_invalid_arg);
9647     napi_value retValue;
9648     napi_create_int32(env, bRet, &retValue);
9649     return retValue;
9650 }
9651 
coerceToNativeBindingObjectAttachNull(napi_env env,napi_callback_info info)9652 static napi_value coerceToNativeBindingObjectAttachNull(napi_env env, napi_callback_info info)
9653 {
9654     napi_value object = nullptr;
9655     napi_create_object(env, &object);
9656     napi_value hint = nullptr;
9657     napi_create_object(env, &hint);
9658     napi_status status = napi_coerce_to_native_binding_object(env, object,
9659         TestDetachCallback, nullptr, reinterpret_cast<void*>(object), reinterpret_cast<void*>(hint));
9660     bool bRet = (status == napi_invalid_arg);
9661     napi_value retValue;
9662     napi_create_int32(env, bRet, &retValue);
9663     return retValue;
9664 }
9665 
coerceToNativeBindingObjectNativeNull(napi_env env,napi_callback_info info)9666 static napi_value coerceToNativeBindingObjectNativeNull(napi_env env, napi_callback_info info)
9667 {
9668     napi_value object = nullptr;
9669     napi_create_object(env, &object);
9670     napi_value hint = nullptr;
9671     napi_create_object(env, &hint);
9672     napi_status status = napi_coerce_to_native_binding_object(env, object,
9673         TestDetachCallback, TestAttachCallback, nullptr, reinterpret_cast<void*>(hint));
9674     bool bRet = (status == napi_invalid_arg);
9675     napi_value retValue;
9676     napi_create_int32(env, bRet, &retValue);
9677     return retValue;
9678 }
9679 
deleteAsyncWork(napi_env env,napi_callback_info info)9680 static napi_value deleteAsyncWork(napi_env env, napi_callback_info info)
9681 {
9682     napi_async_work work = nullptr;
9683     napi_value resourceName = nullptr;
9684     napi_create_string_utf8(env, "AsyncWorkTest", NAPI_AUTO_LENGTH, &resourceName);
9685     napi_create_async_work(env, nullptr, resourceName, [](napi_env value, void* data) {},
9686                            [](napi_env env, napi_status status, void* data) {}, nullptr, &work);
9687     napi_delete_async_work(env, work);
9688     napi_value value;
9689     NAPI_CALL(env, napi_create_int32(env, 0, &value));
9690 
9691     return value;
9692 }
9693 
deleteSerializationEnvNull(napi_env env,napi_callback_info info)9694 static napi_value deleteSerializationEnvNull(napi_env env, napi_callback_info info)
9695 {
9696     napi_value undefined = nullptr;
9697     napi_get_undefined(env, &undefined);
9698     napi_value num = nullptr;
9699     uint32_t value = 1;
9700     napi_create_uint32(env, value, &num);
9701     void* data = nullptr;
9702     napi_serialize(env, num, undefined, undefined, &data);
9703     napi_status status = napi_delete_serialization_data(nullptr, data);
9704     bool bRet = (status == napi_invalid_arg);
9705     napi_value retValue;
9706     napi_create_int32(env, bRet, &retValue);
9707     return retValue;
9708 }
9709 
deleteSerializationDataNull(napi_env env,napi_callback_info info)9710 static napi_value deleteSerializationDataNull(napi_env env, napi_callback_info info)
9711 {
9712     napi_status status = napi_delete_serialization_data(env, nullptr);
9713     bool bRet = (status == napi_invalid_arg);
9714     napi_value retValue;
9715     napi_create_int32(env, bRet, &retValue);
9716     return retValue;
9717 }
9718 
createBigintWordsCountIntMax(napi_env env,napi_callback_info info)9719 static napi_value createBigintWordsCountIntMax(napi_env env, napi_callback_info info)
9720 {
9721     int signBit = 0;
9722     int wordCount = 2147483647;
9723     uint64_t words[] = {0ULL, 34ULL, 56ULL, 2ULL};
9724     napi_value result = nullptr;
9725     napi_status status = napi_create_bigint_words(env, signBit, wordCount, words, &result);
9726     bool bRet = (status == napi_invalid_arg);
9727     napi_value retValue;
9728     napi_create_int32(env, bRet, &retValue);
9729     return retValue;
9730 }
9731 
makeCallbackTextNull(napi_env env,napi_callback_info info)9732 static napi_value makeCallbackTextNull(napi_env env, napi_callback_info info)
9733 {
9734     size_t argc = 10;
9735     size_t n;
9736     napi_value args[10];
9737     NAPI_CALL(env, napi_get_cb_info(env, info, &argc, args, NULL, NULL));
9738     NAPI_ASSERT(env, argc > 0, "Wrong number of arguments");
9739     napi_value async_context_wrap = args[0];
9740     napi_value recv = args[1];
9741     napi_value func = args[2];
9742     napi_value argv[7];
9743     for (n = 3; n < argc; n += 1) {
9744         argv[n - 3] = args[n];
9745     }
9746     napi_valuetype func_type;
9747     NAPI_CALL(env, napi_typeof(env, func, &func_type));
9748     napi_async_context context;
9749     NAPI_CALL(env, napi_unwrap(env, async_context_wrap, (void **)&context));
9750     napi_value result;
9751     if (func_type == napi_function) {
9752         NAPI_CALL(env,
9753                   napi_make_callback(env, nullptr, recv, func, argc - 3, argv, &result)); // 3 : reserved arguments.
9754     } else {
9755         NAPI_ASSERT(env, false, "Unexpected argument type");
9756     }
9757     return result;
9758 }
9759 
getValueBigintUint64(napi_env env,napi_callback_info info)9760 static napi_value getValueBigintUint64(napi_env env, napi_callback_info info)
9761 {
9762     uint64_t testValue = UINT64_MAX;
9763     napi_value result = nullptr;
9764     napi_create_bigint_uint64(env, testValue, &result);
9765     uint64_t resultValue = 0;
9766     bool flag = false;
9767     napi_get_value_bigint_uint64(env, result, &resultValue, &flag);
9768     NAPI_ASSERT(env, resultValue == testValue, "napi_get_value_bigint_int64 failed");
9769     napi_value value;
9770     NAPI_CALL(env, napi_create_int32(env, flag, &value));
9771     return value;
9772 }
9773 
getValueBigintInt64(napi_env env,napi_callback_info info)9774 static napi_value getValueBigintInt64(napi_env env, napi_callback_info info)
9775 {
9776     int64_t testValue = INT64_MAX;
9777     napi_value result = nullptr;
9778     napi_create_bigint_int64(env, testValue, &result);
9779     int64_t resultValue = 0;
9780     bool flag = false;
9781     napi_get_value_bigint_int64(env, result, &resultValue, &flag);
9782     NAPI_ASSERT(env, resultValue == testValue, "napi_get_value_bigint_int64 failed");
9783     napi_value value;
9784     NAPI_CALL(env, napi_create_int32(env, flag, &value));
9785     return value;
9786 }
9787 
NapiGetInstanceDataEnvNull(napi_env env,napi_callback_info info)9788 static napi_value NapiGetInstanceDataEnvNull(napi_env env, napi_callback_info info)
9789 {
9790     InstanceData* data = reinterpret_cast<InstanceData*>(malloc(sizeof(*data)));
9791     data->value = 1;
9792     data->print = true;
9793     data->jsCbRef = nullptr;
9794     NAPI_CALL(env, napi_set_instance_data(env, data, DeleteAddonData, nullptr));
9795     InstanceData* getData = nullptr;
9796     napi_status status = napi_get_instance_data(nullptr, (void**)&getData);
9797     bool bRet = (status == napi_invalid_arg);
9798     napi_value retValue;
9799     napi_create_int32(env, bRet, &retValue);
9800     return retValue;
9801 }
9802 
createThreadsafeFunctionMaxQueueSizeNegative(napi_env env,napi_callback_info info)9803 static napi_value createThreadsafeFunctionMaxQueueSizeNegative(napi_env env, napi_callback_info info)
9804 {
9805     napi_threadsafe_function tsFunc = nullptr;
9806     napi_value resourceName = 0;
9807     napi_create_string_latin1(env, __func__, NAPI_AUTO_LENGTH, &resourceName);
9808     int32_t  callJstCbDataTestId = 101;
9809     int32_t  finalCbtDataTestID = 1001;
9810     napi_status status = napi_create_threadsafe_function(env, nullptr, nullptr, resourceName,
9811                                                          -1, 1, &callJstCbDataTestId, nullptr,
9812                                                          &finalCbtDataTestID, nullptr, &tsFunc);
9813     bool bRet = (status == napi_invalid_arg);
9814     napi_value retValue;
9815     napi_create_int32(env, bRet, &retValue);
9816     return retValue;
9817 }
9818 
ThreadSafeTestNull(napi_env env,napi_callback_info info)9819 static napi_value ThreadSafeTestNull(napi_env env, napi_callback_info info)
9820 {
9821     void* retContext = nullptr;
9822     napi_status status = napi_get_threadsafe_function_context(nullptr, &retContext);
9823     bool bRet = (status == napi_invalid_arg);
9824     napi_value retValue;
9825     napi_create_int32(env, bRet, &retValue);
9826     return retValue;
9827 }
9828 
9829 
9830 EXTERN_C_START
9831 
Init(napi_env env,napi_value exports)9832 static napi_value Init(napi_env env, napi_value exports)
9833 {
9834     napi_value theValue;
9835     CallbackData *callbackData = new CallbackData();
9836     NAPI_CALL(env, napi_create_string_utf8(env, TEST_STR, sizeof(TEST_STR), &theValue));
9837     NAPI_CALL(env, napi_set_named_property(env, exports, "testStr", theValue));
9838     napi_property_descriptor properties[] = {
9839         DECLARE_NAPI_FUNCTION("getLastErrorInfo", getLastErrorInfo),
9840         DECLARE_NAPI_FUNCTION("cleanUpErrorInfo", cleanUpErrorInfo),
9841         DECLARE_NAPI_FUNCTION("throwExistingError", throwExistingError),
9842         DECLARE_NAPI_FUNCTION("throwError", throwError),
9843         DECLARE_NAPI_FUNCTION("throwTypeError", throwTypeError),
9844         DECLARE_NAPI_FUNCTION("throwRangeError", throwRangeError),
9845         DECLARE_NAPI_FUNCTION("isError", isError),
9846         DECLARE_NAPI_FUNCTION("createError", createError),
9847         DECLARE_NAPI_FUNCTION("createTypeError", createTypeError),
9848         DECLARE_NAPI_FUNCTION("createRangeError", createRangeError),
9849         DECLARE_NAPI_FUNCTION("getAndClearLastException", getAndClearLastException),
9850         DECLARE_NAPI_FUNCTION("isExceptionPending", isExceptionPending),
9851         DECLARE_NAPI_FUNCTION("openAndCloseHandleScope", openAndCloseHandleScope),
9852         DECLARE_NAPI_FUNCTION("openAndCloseEscapableHandleScope", openAndCloseEscapableHandleScope),
9853         DECLARE_NAPI_FUNCTION("createReference", createReference),
9854         DECLARE_NAPI_FUNCTION("getAndDeleteReference", getAndDeleteReference),
9855         DECLARE_NAPI_FUNCTION("referenceRefAndUnref", referenceRefAndUnref),
9856         DECLARE_NAPI_FUNCTION("createArrayAndGetLength", createArrayAndGetLength),
9857         DECLARE_NAPI_FUNCTION("getArrayWithLength", getArrayWithLength),
9858         DECLARE_NAPI_FUNCTION("createExternal", createExternal),
9859         DECLARE_NAPI_FUNCTION("createExternalArraybuffer", createExternalArraybuffer),
9860         DECLARE_NAPI_FUNCTION("createObject", createObject),
9861         DECLARE_NAPI_FUNCTION("createSymbol", createSymbol),
9862         DECLARE_NAPI_FUNCTION("createTypeArray", createTypeArray),
9863         DECLARE_NAPI_FUNCTION("createDataView", createDataView),
9864         DECLARE_NAPI_FUNCTION("createAndGetInt32", createAndGetInt32),
9865         DECLARE_NAPI_FUNCTION("createAndGetUInt32", createAndGetUInt32),
9866         DECLARE_NAPI_FUNCTION("createAndGetInt64", createAndGetInt64),
9867         DECLARE_NAPI_FUNCTION("createDouble", createDouble),
9868         DECLARE_NAPI_FUNCTION("createAndGetStringLatin1", createAndGetStringLatin1),
9869         DECLARE_NAPI_FUNCTION("createAndGetStringUtf8", createAndGetStringUtf8),
9870         DECLARE_NAPI_FUNCTION("getPrototype", getPrototype),
9871         DECLARE_NAPI_FUNCTION("getPrototype2", getPrototype2),
9872         DECLARE_NAPI_FUNCTION("getTypedArrayInfo", getTypedArrayInfo),
9873         DECLARE_NAPI_FUNCTION("getDataViewInfo", getDataViewInfo),
9874         DECLARE_NAPI_FUNCTION("getValueBool", getValueBool),
9875         DECLARE_NAPI_FUNCTION("getValueDouble", getValueDouble),
9876         DECLARE_NAPI_FUNCTION("getValueExternal", getValueExternal),
9877         DECLARE_NAPI_FUNCTION("getNull", getNull),
9878         DECLARE_NAPI_FUNCTION("getUndefined", getUndefined),
9879         DECLARE_NAPI_FUNCTION("coerceToBool", coerceToBool),
9880         DECLARE_NAPI_FUNCTION("coerceToNumber", coerceToNumber),
9881         DECLARE_NAPI_FUNCTION("coerceToObject", coerceToObject),
9882         DECLARE_NAPI_FUNCTION("coerceToString", coerceToString),
9883         DECLARE_NAPI_FUNCTION("instanceOf", instanceOf),
9884         DECLARE_NAPI_FUNCTION("NapiIsSendable", NapiIsSendable),
9885         DECLARE_NAPI_FUNCTION("NapiDefineSendableClass", NapiDefineSendableClass),
9886         DECLARE_NAPI_FUNCTION("NapiCreateSendableObject", NapiCreateSendableObject),
9887         DECLARE_NAPI_FUNCTION("NapiCreateSendableArray", NapiCreateSendableArray),
9888         DECLARE_NAPI_FUNCTION("NapiCreateSendableArrayWithLength", NapiCreateSendableArrayWithLength),
9889         DECLARE_NAPI_FUNCTION("NapiCreateSendableArrayBuffer", NapiCreateSendableArrayBuffer),
9890         DECLARE_NAPI_FUNCTION("NapiCreateSendableTypedArray", NapiCreateSendableTypedArray),
9891         DECLARE_NAPI_FUNCTION("NapiWrapSendable", NapiWrapSendable),
9892         DECLARE_NAPI_FUNCTION("NapiWrapSendableWithSize", NapiWrapSendableWithSize),
9893         DECLARE_NAPI_FUNCTION("NapiUnwrapSendable", NapiUnwrapSendable),
9894         DECLARE_NAPI_FUNCTION("NapiRemoveWrapSendable", NapiRemoveWrapSendable),
9895         DECLARE_NAPI_FUNCTION("isArray", isArray),
9896         DECLARE_NAPI_FUNCTION("isDate", isDate),
9897         DECLARE_NAPI_FUNCTION("strictEquals", strictEquals),
9898         DECLARE_NAPI_FUNCTION("getPropertyNames", getPropertyNames),
9899         DECLARE_NAPI_FUNCTION("setProperty", setProperty),
9900         DECLARE_NAPI_FUNCTION("getProperty", getProperty),
9901         DECLARE_NAPI_FUNCTION("hasProperty", hasProperty),
9902         DECLARE_NAPI_FUNCTION("setAndDeleteProperty", setAndDeleteProperty),
9903         DECLARE_NAPI_FUNCTION("hasOwnProperty", hasOwnProperty),
9904         DECLARE_NAPI_FUNCTION("setNamedProperty", setNamedProperty),
9905         DECLARE_NAPI_FUNCTION("getNamedProperty", getNamedProperty),
9906         DECLARE_NAPI_FUNCTION("hasNamedProperty", hasNamedProperty),
9907         DECLARE_NAPI_FUNCTION("setElement", setElement),
9908         DECLARE_NAPI_FUNCTION("getElement", getElement),
9909         DECLARE_NAPI_FUNCTION("hasElement", hasElement),
9910         DECLARE_NAPI_FUNCTION("deleteElement", deleteElement),
9911         DECLARE_NAPI_FUNCTION("defineProperties", defineProperties),
9912         DECLARE_NAPI_FUNCTION("wrap", wrap),
9913         DECLARE_NAPI_FUNCTION("unwrap", unwrap),
9914         DECLARE_NAPI_FUNCTION("removeWrap", removeWrap),
9915         DECLARE_NAPI_FUNCTION("getVersion", getVersion),
9916         DECLARE_NAPI_FUNCTION("createPromise", createPromise),
9917         DECLARE_NAPI_FUNCTION("resolveAndRejectDeferred", resolveAndRejectDeferred),
9918         DECLARE_NAPI_FUNCTION("isPromise", isPromise),
9919         DECLARE_NAPI_FUNCTION("TestLatin1", TestLatin1),
9920         DECLARE_NAPI_FUNCTION("TestUtf16", TestUtf16),
9921         DECLARE_NAPI_FUNCTION("TestUtf8", TestUtf8),
9922         DECLARE_NAPI_FUNCTION("runScript", runScript),
9923         DECLARE_NAPI_FUNCTION("getUvEventLoop", getUvEventLoop),
9924         DECLARE_NAPI_FUNCTION("napCreateArrayBuffer", napCreateArrayBuffer),
9925         DECLARE_NAPI_FUNCTION("naiGetArrayBufferInfo", naiGetArrayBufferInfo),
9926         DECLARE_NAPI_FUNCTION("napiDefineClass", napiDefineClass),
9927         DECLARE_NAPI_FUNCTION("napiRunScriptPath", napiRunScriptPath),
9928         DECLARE_NAPI_FUNCTION("napiGetNodeVersion", napiGetNodeVersion),
9929         DECLARE_NAPI_FUNCTION("napiCallThreadsafeFunction", napiCallThreadsafeFunction),
9930         DECLARE_NAPI_FUNCTION("napiCreateThreadsafeFunction", napiCreateThreadsafeFunction),
9931         DECLARE_NAPI_FUNCTION("napiRefthreadSafeFunction", napiRefthreadSafeFunction),
9932         DECLARE_NAPI_FUNCTION("napiCreateDate", napiCreateDate),
9933         DECLARE_NAPI_FUNCTION("napiCreateBigintUint64", napiCreateBigintUint64),
9934         DECLARE_NAPI_FUNCTION("napiCreateBigintInt64", napiCreateBigintInt64),
9935         DECLARE_NAPI_FUNCTION("napiCreateBigintWords", napiCreateBigintWords),
9936         DECLARE_NAPI_FUNCTION("napiGetCbInfo", napiGetCbInfo),
9937         DECLARE_NAPI_FUNCTION("checkTypeTag", CheckTypeTag),
9938         DECLARE_NAPI_FUNCTION("typeTaggedInstance", TypeTaggedInstance),
9939         DECLARE_NAPI_FUNCTION("stringUtf16OfCase", StringUtf16OfCase),
9940         DECLARE_NAPI_FUNCTION("createAndGetStringUtf16", CreateAndGetStringUtf16),
9941         { "napiCancelAsyncWork", nullptr, napiCancelAsyncWork, nullptr, nullptr, nullptr, napi_default, nullptr },
9942         { "testAsyncWork", nullptr, testAsyncWork, nullptr, nullptr, nullptr, napi_default, nullptr },
9943         { "testPromise", nullptr, testPromise, nullptr, nullptr, nullptr, napi_default, nullptr },
9944         { "napiCreateFunction", nullptr, napiCreateFunction, nullptr, nullptr, nullptr, napi_default, nullptr },
9945         { "NapiCreateFunctionTwo", nullptr, NapiCreateFunctionTwo, nullptr, nullptr, nullptr, napi_default, nullptr },
9946         DECLARE_NAPI_FUNCTION("getGlobal", getGlobal),
9947         DECLARE_NAPI_FUNCTION("callFunction", callFunction),
9948         DECLARE_NAPI_FUNCTION("ThreadSafeTest", ThreadSafeTest),
9949         DECLARE_NAPI_FUNCTION("CreateBuffer", CreateBuffer),
9950         DECLARE_NAPI_FUNCTION("CreateExternalBuffer", CreateExternalBuffer),
9951         DECLARE_NAPI_FUNCTION("BufferCopy", BufferCopy),
9952         DECLARE_NAPI_FUNCTION("IsBuffer", IsBuffer),
9953         DECLARE_NAPI_FUNCTION("GetBufferInfo", GetBufferInfo),
9954         DECLARE_NAPI_FUNCTION("GetAllPropertyNames", GetAllPropertyNames),
9955         DECLARE_NAPI_FUNCTION("GetSymbolNames", GetSymbolNames),
9956         DECLARE_NAPI_FUNCTION("GetEnumerableWritableNames", GetEnumerableWritableNames),
9957         DECLARE_NAPI_FUNCTION("GetOwnWritableNames", GetOwnWritableNames),
9958         DECLARE_NAPI_FUNCTION("GetEnumerableConfigurableNames", GetEnumerableConfigurableNames),
9959         DECLARE_NAPI_FUNCTION("GetOwnConfigurableNames", GetOwnConfigurableNames),
9960         DECLARE_NAPI_FUNCTION("FreezeTest", FreezeTest),
9961         DECLARE_NAPI_FUNCTION("SealTest", SealTest),
9962         DECLARE_NAPI_FUNCTION("StaticBuffer", StaticBuffer),
9963         DECLARE_NAPI_FUNCTION("External", External),
9964         DECLARE_NAPI_FUNCTION("DetachTest", DetachTest),
9965         DECLARE_NAPI_FUNCTION("IsDetachedTest", IsDetachedTest),
9966         DECLARE_NAPI_FUNCTION("stringUtf16OfLengthLeZero", StringUtf16OfLengthLeZero),
9967         DECLARE_NAPI_FUNCTION("stringUtf16OfLengthEqOne", StringUtf16OfLengthEqOne),
9968         DECLARE_NAPI_FUNCTION("stringUtf8OfLengthLeZero", StringUtf8OfLengthLeZero),
9969         DECLARE_NAPI_FUNCTION("NewTargetTest", NewTargetTest),
9970         DECLARE_NAPI_FUNCTION("napiLoadModule", napiLoadModule),
9971         DECLARE_NAPI_FUNCTION("createAsyncResource", CreateAsyncResource),
9972         DECLARE_NAPI_FUNCTION("destroyAsyncResource", DestroyAsyncResource),
9973         DECLARE_NAPI_FUNCTION("runInCallbackScope", RunInCallbackScope),
9974         DECLARE_NAPI_FUNCTION("testResolveAsync", TestResolveAsync),
9975         DECLARE_NAPI_FUNCTION("napiSetInstanceData", NapiSetInstanceData),
9976         DECLARE_NAPI_FUNCTION("asyncWorkCallback", AsyncWorkCallback),
9977         DECLARE_NAPI_FUNCTION("napiAsyncCleanUpHook", NapiAsyncCleanUpHook),
9978         DECLARE_NAPI_FUNCTION("napiEnvCleanUpHook", NapiEnvCleanUpHook),
9979         DECLARE_NAPI_FUNCTION("getModuleFileName", GetModuleFileName),
9980         DECLARE_NAPI_FUNCTION("asyncWorkWithQos", AsyncWorkWithQos),
9981         DECLARE_NAPI_FUNCTION("createObjectWithProperties", CreateObjectWithProperties),
9982         DECLARE_NAPI_FUNCTION("createObjectWithNamedProperties", CreateObjectWithNamedProperties),
9983         DECLARE_NAPI_FUNCTION("makeCallback", MakeCallback),
9984         DECLARE_NAPI_FUNCTION("makeCallbackOne", MakeCallbackOne),
9985         DECLARE_NAPI_FUNCTION("runEventLoop", RunEventLoop),
9986         DECLARE_NAPI_FUNCTION("stopEventLoop", StopEventLoop),
9987         DECLARE_NAPI_FUNCTION("napiSerialize", NapiSerialize),
9988         DECLARE_NAPI_FUNCTION("napiDeSerialize", NapiDeSerialize),
9989         DECLARE_NAPI_FUNCTION("napiDeleteSerializationData", NapiDeleteSerializationData),
9990         DECLARE_NAPI_FUNCTION("napiSerializeDate", NapiSerializeDate),
9991         DECLARE_NAPI_FUNCTION("napiSerializeString", NapiSerializeString),
9992         DECLARE_NAPI_FUNCTION("napiSerializeArray", NapiSerializeArray),
9993         DECLARE_NAPI_FUNCTION("napiSerializeObject", NapiSerializeObject),
9994         DECLARE_NAPI_FUNCTION("napiSerializeArraybuffer", NapiSerializeArraybuffer),
9995         DECLARE_NAPI_FUNCTION("napiSerializeTypearray", NapiSerializeTypearray),
9996         DECLARE_NAPI_FUNCTION("napiSerializeSharedarraybuffer", NapiSerializeSharedarraybuffer),
9997         DECLARE_NAPI_FUNCTION("napiSerializeSet", NapiSerializeSet),
9998         DECLARE_NAPI_FUNCTION("napiSerializeMap", NapiSerializeMap),
9999         DECLARE_NAPI_FUNCTION("napiSerializeRegExp", NapiSerializeRegExp),
10000         DECLARE_NAPI_FUNCTION("asyncCallTest", AsyncCallTest),
10001         {"napiSetNamedProperty", nullptr, NapiSetNamedProperty, nullptr, nullptr, nullptr, napi_default, nullptr},
10002         {"napiGetNamedProperty", nullptr, NapiGetNamedProperty, nullptr, nullptr, nullptr, napi_default, nullptr},
10003         {"callAddNumFunction", nullptr, CallAddNumFunction, nullptr, nullptr, nullptr, napi_default, nullptr},
10004         {"napiNewInstance", nullptr, NapiNewInstance, nullptr, nullptr, nullptr, napi_default, nullptr},
10005         DECLARE_NAPI_FUNCTION("napiCrateAndGetValueString", NapiCrateAndGetValueString),
10006         DECLARE_NAPI_FUNCTION("exceptionalSetNamedProperty", ExceptionalSetNamedProperty),
10007         DECLARE_NAPI_FUNCTION("exceptionalGetNamedProperty", ExceptionalGetNamedProperty),
10008         DECLARE_NAPI_FUNCTION("exceptionalCallAddNumFunction", ExceptionalCallAddNumFunction),
10009         DECLARE_NAPI_FUNCTION("exceptionalNapiNewInstance", ExceptionalNapiNewInstance),
10010         DECLARE_NAPI_FUNCTION("exceptionalNapiCrateAndGetValueString", ExceptionalNapiCrateAndGetValueString),
10011         {"threadSafePriority", nullptr, ThreadSafePriority, nullptr, nullptr, nullptr, napi_default, callbackData},
10012         {"threadSafePriorityWithInvalidParam", nullptr, ThreadSafePriorityWithInvalidParam, nullptr, nullptr, nullptr,
10013             napi_default, nullptr},
10014         DECLARE_NAPI_FUNCTION("checkUnwrapFunc", CheckUnwrapFunc),
10015         DECLARE_NAPI_FUNCTION("createSendableArrayTest", CreateSendableArrayTest),
10016         DECLARE_NAPI_FUNCTION("createSendableArrayWithLengthTest", CreateSendableArrayWithLengthTest),
10017         DECLARE_NAPI_FUNCTION("createSendableArrayBufferTest", CreateSendableArrayBufferTest),
10018         DECLARE_NAPI_FUNCTION("createSendableTypedArrayTest", CreateSendableTypedArrayTest),
10019         DECLARE_NAPI_FUNCTION("createSendableObjectWithProperties", CreateSendableObjectWithProperties),
10020         DECLARE_NAPI_FUNCTION("napiWrapSendableWithSizeTest", NapiWrapSendableWithSizeTest),
10021         DECLARE_NAPI_FUNCTION("napiWrapSendableTest", NapiWrapSendableTest),
10022         DECLARE_NAPI_FUNCTION("napiUnWrapSendableTest", NapiUnWrapSendableTest),
10023         DECLARE_NAPI_FUNCTION("napiRemoveWrapSendableTest", NapiRemoveWrapSendableTest),
10024         DECLARE_NAPI_FUNCTION("getLastErrorInfoNull", getLastErrorInfoNull),
10025         DECLARE_NAPI_FUNCTION("throwFunc", throwFunc),
10026         DECLARE_NAPI_FUNCTION("throwFuncNull", throwFuncNull),
10027         DECLARE_NAPI_FUNCTION("isErrorValueNull", isErrorValueNull),
10028         DECLARE_NAPI_FUNCTION("isErrorRstNull", isErrorRstNull),
10029         DECLARE_NAPI_FUNCTION("createStringUtf8", createStringUtf8),
10030         DECLARE_NAPI_FUNCTION("createErrorMsgNull", createErrorMsgNull),
10031         DECLARE_NAPI_FUNCTION("createErrorRstNull", createErrorRstNull),
10032         DECLARE_NAPI_FUNCTION("createTypeErrorMsgNull", createTypeErrorMsgNull),
10033         DECLARE_NAPI_FUNCTION("createTypeErrorRstNull", createTypeErrorRstNull),
10034         DECLARE_NAPI_FUNCTION("createRangeErrorRstNull", createRangeErrorRstNull),
10035         DECLARE_NAPI_FUNCTION("getAndClearLastExceptionNull", getAndClearLastExceptionNull),
10036         DECLARE_NAPI_FUNCTION("isExceptionPendingNull", isExceptionPendingNull),
10037         DECLARE_NAPI_FUNCTION("openAndCloseHandleScopeNull", openAndCloseHandleScopeNull),
10038         DECLARE_NAPI_FUNCTION("openAndCloseEscapableHandleScopeNull", openAndCloseEscapableHandleScopeNull),
10039         DECLARE_NAPI_FUNCTION("escapeHandle", escapeHandle),
10040         DECLARE_NAPI_FUNCTION("escapeHandleScopeNull", escapeHandleScopeNull),
10041         DECLARE_NAPI_FUNCTION("escapeHandleOutputNull", escapeHandleOutputNull),
10042         DECLARE_NAPI_FUNCTION("escapeHandleRstNull", escapeHandleRstNull),
10043         DECLARE_NAPI_FUNCTION("createReferenceValueNull", createReferenceValueNull),
10044         DECLARE_NAPI_FUNCTION("getReferenceValue", getReferenceValue),
10045         DECLARE_NAPI_FUNCTION("getReferenceValueRefNull", getReferenceValueRefNull),
10046         DECLARE_NAPI_FUNCTION("getReferenceValueRstNull", getReferenceValueRstNull),
10047         DECLARE_NAPI_FUNCTION("deleteReferenceNull", deleteReferenceNull),
10048         DECLARE_NAPI_FUNCTION("referenceRef", referenceRef),
10049         DECLARE_NAPI_FUNCTION("referenceRefNull", referenceRefNull),
10050         DECLARE_NAPI_FUNCTION("referenceRefAndUnrefNull", referenceRefAndUnrefNull),
10051         DECLARE_NAPI_FUNCTION("createArrayNull", createArrayNull),
10052         DECLARE_NAPI_FUNCTION("napCreateArrayBufferNull", napCreateArrayBufferNull),
10053         DECLARE_NAPI_FUNCTION("createExternalNull", createExternalNull),
10054         DECLARE_NAPI_FUNCTION("createExternalArraybufferDataNull", createExternalArraybufferDataNull),
10055         DECLARE_NAPI_FUNCTION("createObjectNull", createObjectNull),
10056         DECLARE_NAPI_FUNCTION("createSymbolNull", createSymbolNull),
10057         DECLARE_NAPI_FUNCTION("createSymbolDescriptionNull", createSymbolDescriptionNull),
10058         DECLARE_NAPI_FUNCTION("createSymbolDescriptionNotString", createSymbolDescriptionNotString),
10059         DECLARE_NAPI_FUNCTION("createTypeArrayBufferNull", createTypeArrayBufferNull),
10060         DECLARE_NAPI_FUNCTION("createTypeArrayResultNull", createTypeArrayResultNull),
10061         DECLARE_NAPI_FUNCTION("createTypeArrayNotBufferObj", createTypeArrayNotBufferObj),
10062         DECLARE_NAPI_FUNCTION("createTypeArrayNotEnumValue", createTypeArrayNotEnumValue),
10063         DECLARE_NAPI_FUNCTION("createDataViewBufferNull", createDataViewBufferNull),
10064         DECLARE_NAPI_FUNCTION("createDataViewResultNull", createDataViewResultNull),
10065         DECLARE_NAPI_FUNCTION("createDataViewBufferNotObj", createDataViewBufferNotObj),
10066         DECLARE_NAPI_FUNCTION("createInt32Null", createInt32Null),
10067         DECLARE_NAPI_FUNCTION("getValueInt32", getValueInt32),
10068         DECLARE_NAPI_FUNCTION("getValueInt32ValueNull", getValueInt32ValueNull),
10069         DECLARE_NAPI_FUNCTION("getValueInt32RstNull", getValueInt32RstNull),
10070         DECLARE_NAPI_FUNCTION("getValueInt32NotNum", getValueInt32NotNum),
10071         DECLARE_NAPI_FUNCTION("getValueInt64", getValueInt64),
10072         DECLARE_NAPI_FUNCTION("getValueInt64ValueNull", getValueInt64ValueNull),
10073         DECLARE_NAPI_FUNCTION("getValueInt64RstNull", getValueInt64RstNull),
10074         DECLARE_NAPI_FUNCTION("getValueInt64NotNum", getValueInt64NotNum),
10075         DECLARE_NAPI_FUNCTION("createUInt32Null", createUInt32Null),
10076         DECLARE_NAPI_FUNCTION("createInt64Null", createInt64Null),
10077         DECLARE_NAPI_FUNCTION("createDoubleNull", createDoubleNull),
10078         DECLARE_NAPI_FUNCTION("createAndGetStringLatin1BufferNull", createAndGetStringLatin1BufferNull),
10079         DECLARE_NAPI_FUNCTION("createAndGetStringLatin1ResultNull", createAndGetStringLatin1ResultNull),
10080         DECLARE_NAPI_FUNCTION("createAndGetStringUtf16BufferNull", createAndGetStringUtf16BufferNull),
10081         DECLARE_NAPI_FUNCTION("createAndGetStringUtf16ResultNull", createAndGetStringUtf16ResultNull),
10082         DECLARE_NAPI_FUNCTION("createAndGetStringUtf16Exceed", createAndGetStringUtf16Exceed),
10083         DECLARE_NAPI_FUNCTION("getArrayLengthResultNull", getArrayLengthResultNull),
10084         DECLARE_NAPI_FUNCTION("getArrayLengthValueNull", getArrayLengthValueNull),
10085         DECLARE_NAPI_FUNCTION("getArrayLengthNotArray", getArrayLengthNotArray),
10086         DECLARE_NAPI_FUNCTION("getArrayBufferInfoBufferNull", getArrayBufferInfoBufferNull),
10087         DECLARE_NAPI_FUNCTION("getArrayBufferInfoLengthNull", getArrayBufferInfoLengthNull),
10088         DECLARE_NAPI_FUNCTION("getArrayBufferInfoNotObj", getArrayBufferInfoNotObj),
10089         DECLARE_NAPI_FUNCTION("getPrototypeObjectNull", getPrototypeObjectNull),
10090         DECLARE_NAPI_FUNCTION("getPrototypeResultNull", getPrototypeResultNull),
10091         DECLARE_NAPI_FUNCTION("getPrototypeNotObj", getPrototypeNotObj),
10092         DECLARE_NAPI_FUNCTION("getTypedArrayInfoNull", getTypedArrayInfoNull),
10093         DECLARE_NAPI_FUNCTION("getDataViewInfoNull", getDataViewInfoNull),
10094         DECLARE_NAPI_FUNCTION("getDataViewInfoNotObj", getDataViewInfoNotObj),
10095         DECLARE_NAPI_FUNCTION("getValueBoolValueNull", getValueBoolValueNull),
10096         DECLARE_NAPI_FUNCTION("getValueBoolResultNull", getValueBoolResultNull),
10097         DECLARE_NAPI_FUNCTION("getBoolean", getBoolean),
10098         DECLARE_NAPI_FUNCTION("getBooleanNull", getBooleanNull),
10099         DECLARE_NAPI_FUNCTION("getValueNotBool", getValueNotBool),
10100         DECLARE_NAPI_FUNCTION("getValueDoubleValueNull", getValueDoubleValueNull),
10101         DECLARE_NAPI_FUNCTION("getValueDoubleResultNull", getValueDoubleResultNull),
10102         DECLARE_NAPI_FUNCTION("getValueDoubleNotNum", getValueDoubleNotNum),
10103         DECLARE_NAPI_FUNCTION("getValueExternalValueNull", getValueExternalValueNull),
10104         DECLARE_NAPI_FUNCTION("getValueExternalResultNull", getValueExternalResultNull),
10105         DECLARE_NAPI_FUNCTION("getValueExternalNotPtr", getValueExternalNotPtr),
10106         DECLARE_NAPI_FUNCTION("getValueStringLatin1", getValueStringLatin1),
10107         DECLARE_NAPI_FUNCTION("getValueStringLatin1Null", getValueStringLatin1Null),
10108         DECLARE_NAPI_FUNCTION("getValueStringUtf8", getValueStringUtf8),
10109         DECLARE_NAPI_FUNCTION("getValueStringUtf8Null", getValueStringUtf8Null),
10110         DECLARE_NAPI_FUNCTION("getValueStringUtf8NotStr", getValueStringUtf8NotStr),
10111         DECLARE_NAPI_FUNCTION("getValueStringUtf16", getValueStringUtf16),
10112         DECLARE_NAPI_FUNCTION("getValueStringUtf16Null", getValueStringUtf16Null),
10113         DECLARE_NAPI_FUNCTION("getValueStringUtf16NotStr", getValueStringUtf16NotStr),
10114         DECLARE_NAPI_FUNCTION("getValueUint32", getValueUint32),
10115         DECLARE_NAPI_FUNCTION("getValueUint32Null", getValueUint32Null),
10116         DECLARE_NAPI_FUNCTION("getValueUint32NotNum", getValueUint32NotNum),
10117         DECLARE_NAPI_FUNCTION("coerceToBoolValueNull", coerceToBoolValueNull),
10118         DECLARE_NAPI_FUNCTION("coerceToBoolResultNull", coerceToBoolResultNull),
10119         DECLARE_NAPI_FUNCTION("coerceToNumberValueNull", coerceToNumberValueNull),
10120         DECLARE_NAPI_FUNCTION("coerceToNumberRstNull", coerceToNumberRstNull),
10121         DECLARE_NAPI_FUNCTION("typeOf", typeOf),
10122         DECLARE_NAPI_FUNCTION("typeOfValueNull", typeOfValueNull),
10123         DECLARE_NAPI_FUNCTION("typeOfRstNull", typeOfRstNull),
10124         DECLARE_NAPI_FUNCTION("instanceOfObjectNull", instanceOfObjectNull),
10125         DECLARE_NAPI_FUNCTION("instanceOfConstructorNull", instanceOfConstructorNull),
10126         DECLARE_NAPI_FUNCTION("instanceOfResultNull", instanceOfResultNull),
10127         DECLARE_NAPI_FUNCTION("isArrayValueNull", isArrayValueNull),
10128         DECLARE_NAPI_FUNCTION("isArrayResultNull", isArrayResultNull),
10129         DECLARE_NAPI_FUNCTION("isDataView", isDataView),
10130         DECLARE_NAPI_FUNCTION("isDataViewValueNull", isDataViewValueNull),
10131         DECLARE_NAPI_FUNCTION("isDataViewRstNull", isDataViewRstNull),
10132         DECLARE_NAPI_FUNCTION("isArrayBuffer", isArrayBuffer),
10133         DECLARE_NAPI_FUNCTION("isArrayBufferValueNull", isArrayBufferValueNull),
10134         DECLARE_NAPI_FUNCTION("isArrayBufferRstNull", isArrayBufferRstNull),
10135         DECLARE_NAPI_FUNCTION("isTypedArray", isTypedArray),
10136         DECLARE_NAPI_FUNCTION("isTypedArrayValueNull", isTypedArrayValueNull),
10137         DECLARE_NAPI_FUNCTION("isTypedArrayRstNull", isTypedArrayRstNull),
10138         DECLARE_NAPI_FUNCTION("isDateValueNull", isDateValueNull),
10139         DECLARE_NAPI_FUNCTION("isDateResultNull", isDateResultNull),
10140         DECLARE_NAPI_FUNCTION("strictEqualsFirstValueNull", strictEqualsFirstValueNull),
10141         DECLARE_NAPI_FUNCTION("strictEqualsSecondValueNull", strictEqualsSecondValueNull),
10142         DECLARE_NAPI_FUNCTION("strictEqualsResultNull", strictEqualsResultNull),
10143         DECLARE_NAPI_FUNCTION("strictEqualsNaN", strictEqualsNaN),
10144         DECLARE_NAPI_FUNCTION("getPropertyNamesObjectNull", getPropertyNamesObjectNull),
10145         DECLARE_NAPI_FUNCTION("getPropertyNamesResultNull", getPropertyNamesResultNull),
10146         DECLARE_NAPI_FUNCTION("getPropertyNamesNotObject", getPropertyNamesNotObject),
10147         DECLARE_NAPI_FUNCTION("setPropertyValueNull", setPropertyValueNull),
10148         DECLARE_NAPI_FUNCTION("setPropertyResultNull", setPropertyResultNull),
10149         DECLARE_NAPI_FUNCTION("setPropertyNoObject", setPropertyNoObject),
10150         DECLARE_NAPI_FUNCTION("getPropertyObjectNull", getPropertyObjectNull),
10151         DECLARE_NAPI_FUNCTION("getPropertyKeyNull", getPropertyKeyNull),
10152         DECLARE_NAPI_FUNCTION("getPropertyResultNull", getPropertyResultNull),
10153         DECLARE_NAPI_FUNCTION("getPropertyNotObject", getPropertyNotObject),
10154         DECLARE_NAPI_FUNCTION("hasPropertyObjectNull", hasPropertyObjectNull),
10155         DECLARE_NAPI_FUNCTION("hasPropertyKeyNull", hasPropertyKeyNull),
10156         DECLARE_NAPI_FUNCTION("hasPropertyResultNull", hasPropertyResultNull),
10157         DECLARE_NAPI_FUNCTION("deletePropertyObjectNull", deletePropertyObjectNull),
10158         DECLARE_NAPI_FUNCTION("deletePropertyKeyNull", deletePropertyKeyNull),
10159         DECLARE_NAPI_FUNCTION("deletePropertyResultNull", deletePropertyResultNull),
10160         DECLARE_NAPI_FUNCTION("hasOwnPropertyObjectNull", hasOwnPropertyObjectNull),
10161         DECLARE_NAPI_FUNCTION("hasOwnPropertyKeytNull", hasOwnPropertyKeytNull),
10162         DECLARE_NAPI_FUNCTION("hasOwnPropertyResultNull", hasOwnPropertyResultNull),
10163         DECLARE_NAPI_FUNCTION("setNamedPropertyObjectNull", setNamedPropertyObjectNull),
10164         DECLARE_NAPI_FUNCTION("setNamedPropertyKeyNull", setNamedPropertyKeyNull),
10165         DECLARE_NAPI_FUNCTION("setNamedPropertyResultNull", setNamedPropertyResultNull),
10166         DECLARE_NAPI_FUNCTION("getNamedPropertyObjectNull", getNamedPropertyObjectNull),
10167         DECLARE_NAPI_FUNCTION("getNamedPropertyKeyNull", getNamedPropertyKeyNull),
10168         DECLARE_NAPI_FUNCTION("getNamedPropertyResultNull", getNamedPropertyResultNull),
10169         DECLARE_NAPI_FUNCTION("hasNamedPropertyObjectNull", hasNamedPropertyObjectNull),
10170         DECLARE_NAPI_FUNCTION("hasNamedPropertyKeyNull", hasNamedPropertyKeyNull),
10171         DECLARE_NAPI_FUNCTION("hasNamedPropertyResultNull", hasNamedPropertyResultNull),
10172         DECLARE_NAPI_FUNCTION("setElementObjectNull", setElementObjectNull),
10173         DECLARE_NAPI_FUNCTION("setElementRstNull", setElementRstNull),
10174         DECLARE_NAPI_FUNCTION("setElementNotObj", setElementNotObj),
10175         DECLARE_NAPI_FUNCTION("getElementObjNull", getElementObjNull),
10176         DECLARE_NAPI_FUNCTION("getElementRstNull", getElementRstNull),
10177         DECLARE_NAPI_FUNCTION("getElementNotObj", getElementNotObj),
10178         DECLARE_NAPI_FUNCTION("hasElementObjNull", hasElementObjNull),
10179         DECLARE_NAPI_FUNCTION("hasElementRstNull", hasElementRstNull),
10180         DECLARE_NAPI_FUNCTION("deleteElementObjNull", deleteElementObjNull),
10181         DECLARE_NAPI_FUNCTION("deleteElementRstNull", deleteElementRstNull),
10182         DECLARE_NAPI_FUNCTION("definePropertiesObjNull", definePropertiesObjNull),
10183         DECLARE_NAPI_FUNCTION("typeTaggedObjNull", typeTaggedObjNull),
10184         DECLARE_NAPI_FUNCTION("typeTaggedTagNull", typeTaggedTagNull),
10185         DECLARE_NAPI_FUNCTION("CheckTypeTagObjNull", CheckTypeTagObjNull),
10186         DECLARE_NAPI_FUNCTION("CheckTypeTagTagNull", CheckTypeTagTagNull),
10187         DECLARE_NAPI_FUNCTION("CheckTypeTagRstNull", CheckTypeTagRstNull),
10188         DECLARE_NAPI_FUNCTION("callFunctionNull", callFunctionNull),
10189         DECLARE_NAPI_FUNCTION("napiCreateFunctionFuncNull", napiCreateFunctionFuncNull),
10190         DECLARE_NAPI_FUNCTION("napiCreateFunctionRstNull", napiCreateFunctionRstNull),
10191         DECLARE_NAPI_FUNCTION("napiGetCbInfoNull", napiGetCbInfoNull),
10192         DECLARE_NAPI_FUNCTION("newTargetInfoNull", newTargetInfoNull),
10193         DECLARE_NAPI_FUNCTION("newTargetRstNull", newTargetRstNull),
10194         DECLARE_NAPI_FUNCTION("newInstanceNull", newInstanceNull),
10195         DECLARE_NAPI_FUNCTION("newInstanceNotFunc", newInstanceNotFunc),
10196         DECLARE_NAPI_FUNCTION("defineClassUTFNull", defineClassUTFNull),
10197         DECLARE_NAPI_FUNCTION("defineClassConstructorNull", defineClassConstructorNull),
10198         DECLARE_NAPI_FUNCTION("defineClassRstNull", defineClassRstNull),
10199         DECLARE_NAPI_FUNCTION("defineClassLengthExceed", defineClassLengthExceed),
10200         DECLARE_NAPI_FUNCTION("unwrapObjNull", unwrapObjNull),
10201         DECLARE_NAPI_FUNCTION("unwrapRstNull", unwrapRstNull),
10202         DECLARE_NAPI_FUNCTION("removeWrapObjNull", removeWrapObjNull),
10203         DECLARE_NAPI_FUNCTION("removeWrapRstNull", removeWrapRstNull),
10204         DECLARE_NAPI_FUNCTION("cancelAsyncWorkNull", cancelAsyncWorkNull),
10205         DECLARE_NAPI_FUNCTION("queueAsyncWork", queueAsyncWork),
10206         DECLARE_NAPI_FUNCTION("queueAsyncWorkNull", queueAsyncWorkNull),
10207         DECLARE_NAPI_FUNCTION("deleteAsyncWorkNull", deleteAsyncWorkNull),
10208         DECLARE_NAPI_FUNCTION("defineSendableClassEnvNull", defineSendableClassEnvNull),
10209         DECLARE_NAPI_FUNCTION("defineSendableClassNameNull", defineSendableClassNameNull),
10210         DECLARE_NAPI_FUNCTION("defineSendableClassConstructorNull", defineSendableClassConstructorNull),
10211         DECLARE_NAPI_FUNCTION("defineSendableClassRstNull", defineSendableClassRstNull),
10212         DECLARE_NAPI_FUNCTION("createSendableObjectWithPropertiesEnvNull", createSendableObjectWithPropertiesEnvNull),
10213         DECLARE_NAPI_FUNCTION("createSendableObjectWithPropertiesRstNull", createSendableObjectWithPropertiesRstNull),
10214         DECLARE_NAPI_FUNCTION("createSendableArrayEnvNull", createSendableArrayEnvNull),
10215         DECLARE_NAPI_FUNCTION("createSendableArrayRstNull", createSendableArrayRstNull),
10216         DECLARE_NAPI_FUNCTION("createSendableArrayWithLengthEnvNull", createSendableArrayWithLengthEnvNull),
10217         DECLARE_NAPI_FUNCTION("createSendableArrayWithLengthRstNull", createSendableArrayWithLengthRstNull),
10218         DECLARE_NAPI_FUNCTION("createSendableArrayBufferEnvNull", createSendableArrayBufferEnvNull),
10219         DECLARE_NAPI_FUNCTION("createSendableArrayBufferDataNull", createSendableArrayBufferDataNull),
10220         DECLARE_NAPI_FUNCTION("createSendableArrayBufferRstNull", createSendableArrayBufferRstNull),
10221         DECLARE_NAPI_FUNCTION("createSendableTypedArrayEnvNull", createSendableTypedArrayEnvNull),
10222         DECLARE_NAPI_FUNCTION("createSendableTypedArraRstNull", createSendableTypedArraRstNull),
10223         DECLARE_NAPI_FUNCTION("createSendableTypedArraBufferNull", createSendableTypedArraBufferNull),
10224         DECLARE_NAPI_FUNCTION("createSendableTypedArrayNotType", createSendableTypedArrayNotType),
10225         DECLARE_NAPI_FUNCTION("createSendableTypedArrayNotBuffer", createSendableTypedArrayNotBuffer),
10226         DECLARE_NAPI_FUNCTION("wrapSendableEnvNull", wrapSendableEnvNull),
10227         DECLARE_NAPI_FUNCTION("NapiWrapSendableObj1Null", NapiWrapSendableObj1Null),
10228         DECLARE_NAPI_FUNCTION("NapiWrapSendableObj2Null", NapiWrapSendableObj2Null),
10229         DECLARE_NAPI_FUNCTION("wrapSendableWithSizeEnvNull", wrapSendableWithSizeEnvNull),
10230         DECLARE_NAPI_FUNCTION("wrapSendableWithSizeObj1Null", wrapSendableWithSizeObj1Null),
10231         DECLARE_NAPI_FUNCTION("wrapSendableWithSizeObj2Null", wrapSendableWithSizeObj2Null),
10232         DECLARE_NAPI_FUNCTION("removeWrapSendableEnvNull", removeWrapSendableEnvNull),
10233         DECLARE_NAPI_FUNCTION("removeWrapSendableObjNull", removeWrapSendableObjNull),
10234         DECLARE_NAPI_FUNCTION("removeWrapSendableRstNull", removeWrapSendableRstNull),
10235         DECLARE_NAPI_FUNCTION("getNodeVersionEnvNull", getNodeVersionEnvNull),
10236         DECLARE_NAPI_FUNCTION("getNodeVersionRstNull", getNodeVersionRstNull),
10237         DECLARE_NAPI_FUNCTION("releaseThreadsafeFunction", releaseThreadsafeFunction),
10238         DECLARE_NAPI_FUNCTION("releaseThreadsafeFunctionNull", releaseThreadsafeFunctionNull),
10239         DECLARE_NAPI_FUNCTION("createThreadsafeFunctionInitialThreadCountNegative", createThreadsafeFunctionInitialThreadCountNegative),
10240         DECLARE_NAPI_FUNCTION("getVersionRstNull", getVersionRstNull),
10241         DECLARE_NAPI_FUNCTION("getVersionEnvNull", getVersionEnvNull),
10242         DECLARE_NAPI_FUNCTION("createPromiseEnvNull", createPromiseEnvNull),
10243         DECLARE_NAPI_FUNCTION("createPromiseDeferredNull", createPromiseDeferredNull),
10244         DECLARE_NAPI_FUNCTION("createPromisePromiseNull", createPromisePromiseNull),
10245         DECLARE_NAPI_FUNCTION("resolveDeferredEnvNull", resolveDeferredEnvNull),
10246         DECLARE_NAPI_FUNCTION("resolveDeferredNull", resolveDeferredNull),
10247         DECLARE_NAPI_FUNCTION("isPromiseEnvNull", isPromiseEnvNull),
10248         DECLARE_NAPI_FUNCTION("isPromiseValueNull", isPromiseValueNull),
10249         DECLARE_NAPI_FUNCTION("isPromiseRstNull", isPromiseRstNull),
10250         DECLARE_NAPI_FUNCTION("getUvEventLoopEnvNull", getUvEventLoopEnvNull),
10251         DECLARE_NAPI_FUNCTION("getUvEventLoopRstNull", getUvEventLoopRstNull),
10252         DECLARE_NAPI_FUNCTION("createThreadsafeFunctionEnvNull", createThreadsafeFunctionEnvNull),
10253         DECLARE_NAPI_FUNCTION("createThreadsafeFunctionNameNull", createThreadsafeFunctionNameNull),
10254         DECLARE_NAPI_FUNCTION("napiCallThreadsafeFunctionNull", napiCallThreadsafeFunctionNull),
10255         DECLARE_NAPI_FUNCTION("refThreadSafeFunctionEnvNull", refThreadSafeFunctionEnvNull),
10256         DECLARE_NAPI_FUNCTION("refThreadSafeFunctionFuncNull", refThreadSafeFunctionFuncNull),
10257         DECLARE_NAPI_FUNCTION("createDateEnvNull", createDateEnvNull),
10258         DECLARE_NAPI_FUNCTION("createDateRstNull", createDateRstNull),
10259         DECLARE_NAPI_FUNCTION("getValueBigintUint64EnvNull", getValueBigintUint64EnvNull),
10260         DECLARE_NAPI_FUNCTION("getValueBigintUint64ValueNull", getValueBigintUint64ValueNull),
10261         DECLARE_NAPI_FUNCTION("getValueBigintUint64RstNull", getValueBigintUint64RstNull),
10262         DECLARE_NAPI_FUNCTION("getValueBigintUint64LossNull", getValueBigintUint64LossNull),
10263         DECLARE_NAPI_FUNCTION("getValueBigintInt64EnvNull", getValueBigintInt64EnvNull),
10264         DECLARE_NAPI_FUNCTION("getValueBigintInt64ValueNull", getValueBigintInt64ValueNull),
10265         DECLARE_NAPI_FUNCTION("getValueBigintInt64RstNull", getValueBigintInt64RstNull),
10266         DECLARE_NAPI_FUNCTION("getValueBigintInt64LossNull", getValueBigintInt64LossNull),
10267         DECLARE_NAPI_FUNCTION("getValueBigintWords", getValueBigintWords),
10268         DECLARE_NAPI_FUNCTION("getValueBigintWordsEnvNull", getValueBigintWordsEnvNull),
10269         DECLARE_NAPI_FUNCTION("getValueBigintWordsValueNull", getValueBigintWordsValueNull),
10270         DECLARE_NAPI_FUNCTION("getValueBigintWordsSignNull", getValueBigintWordsSignNull),
10271         DECLARE_NAPI_FUNCTION("getValueBigintWordsCountNull", getValueBigintWordsCountNull),
10272         DECLARE_NAPI_FUNCTION("getValueBigintWordsWordsNull", getValueBigintWordsWordsNull),
10273         DECLARE_NAPI_FUNCTION("createBigintInt64EnvNull", createBigintInt64EnvNull),
10274         DECLARE_NAPI_FUNCTION("createBigintInt64RstNull", createBigintInt64RstNull),
10275         DECLARE_NAPI_FUNCTION("createBigintUint64EnvNull", createBigintUint64EnvNull),
10276         DECLARE_NAPI_FUNCTION("createBigintUint64RstNull", createBigintUint64RstNull),
10277         DECLARE_NAPI_FUNCTION("createBigintWordsEnvNull", createBigintWordsEnvNull),
10278         DECLARE_NAPI_FUNCTION("createBigintWordsNull", createBigintWordsNull),
10279         DECLARE_NAPI_FUNCTION("createBigintWordsRstNull", createBigintWordsRstNull),
10280         DECLARE_NAPI_FUNCTION("createBufferEnvNull", createBufferEnvNull),
10281         DECLARE_NAPI_FUNCTION("createBufferDataNull", createBufferDataNull),
10282         DECLARE_NAPI_FUNCTION("createBufferRstNull", createBufferRstNull),
10283         DECLARE_NAPI_FUNCTION("createBufferCopyEnvNull", createBufferCopyEnvNull),
10284         DECLARE_NAPI_FUNCTION("createBufferCopyDataNull", createBufferCopyDataNull),
10285         DECLARE_NAPI_FUNCTION("createBufferCopyRstDataNull", createBufferCopyRstDataNull),
10286         DECLARE_NAPI_FUNCTION("createBufferCopyRstNull", createBufferCopyRstNull),
10287         DECLARE_NAPI_FUNCTION("createExternalBuffereEnvNull", createExternalBuffereEnvNull),
10288         DECLARE_NAPI_FUNCTION("createExternalBuffereDataNull", createExternalBuffereDataNull),
10289         DECLARE_NAPI_FUNCTION("getBufferInfoEnvNull", getBufferInfoEnvNull),
10290         DECLARE_NAPI_FUNCTION("getBufferInfoValueNull", getBufferInfoValueNull),
10291         DECLARE_NAPI_FUNCTION("IsBufferEnvNull", IsBufferEnvNull),
10292         DECLARE_NAPI_FUNCTION("IsBufferValueNull", IsBufferValueNull),
10293         DECLARE_NAPI_FUNCTION("IsBufferRstNull", IsBufferRstNull),
10294         DECLARE_NAPI_FUNCTION("objectFreezeEnvNull", objectFreezeEnvNull),
10295         DECLARE_NAPI_FUNCTION("objectFreezeObjNull", objectFreezeObjNull),
10296         DECLARE_NAPI_FUNCTION("objectSealEnvNull", objectSealEnvNull),
10297         DECLARE_NAPI_FUNCTION("objectSealObjNull", objectSealObjNull),
10298         DECLARE_NAPI_FUNCTION("GetAllPropertyNamesEnvNull", GetAllPropertyNamesEnvNull),
10299         DECLARE_NAPI_FUNCTION("GetAllPropertyNamesObjNull", GetAllPropertyNamesObjNull),
10300         DECLARE_NAPI_FUNCTION("GetAllPropertyNamesResNull", GetAllPropertyNamesResNull),
10301         DECLARE_NAPI_FUNCTION("DetachEnvNull", DetachEnvNull),
10302         DECLARE_NAPI_FUNCTION("DetachArrNull", DetachArrNull),
10303         DECLARE_NAPI_FUNCTION("IsDetachedEnvNull", IsDetachedEnvNull),
10304         DECLARE_NAPI_FUNCTION("IsDetachedArrNull", IsDetachedArrNull),
10305         DECLARE_NAPI_FUNCTION("IsDetachedResNull", IsDetachedResNull),
10306         DECLARE_NAPI_FUNCTION("NapiSetInstanceDataEnvNull", NapiSetInstanceDataEnvNull),
10307         DECLARE_NAPI_FUNCTION("NapiGetInstanceDataDataNull", NapiGetInstanceDataDataNull),
10308         DECLARE_NAPI_FUNCTION("NapiEnvCleanUpHookEnvNull", NapiEnvCleanUpHookEnvNull),
10309         DECLARE_NAPI_FUNCTION("NapiEnvCleanUpHookFuncNull", NapiEnvCleanUpHookFuncNull),
10310         DECLARE_NAPI_FUNCTION("NapiRemoveEnvCleanUpHookEnvNull", NapiRemoveEnvCleanUpHookEnvNull),
10311         DECLARE_NAPI_FUNCTION("NapiRemoveEnvCleanUpHookFuncNull", NapiRemoveEnvCleanUpHookFuncNull),
10312         DECLARE_NAPI_FUNCTION("GetModuleFileNameEnvNull", GetModuleFileNameEnvNull),
10313         DECLARE_NAPI_FUNCTION("GetModuleFileNameResNull", GetModuleFileNameResNull),
10314         DECLARE_NAPI_FUNCTION("createAsyncResourceEnvNull", createAsyncResourceEnvNull),
10315         DECLARE_NAPI_FUNCTION("createAsyncResourceObjNull", createAsyncResourceObjNull),
10316         DECLARE_NAPI_FUNCTION("createAsyncResourceCbNull", createAsyncResourceCbNull),
10317         DECLARE_NAPI_FUNCTION("asyncWorkWithQosEnvNull", asyncWorkWithQosEnvNull),
10318         DECLARE_NAPI_FUNCTION("asyncWorkWithQosWorkNull", asyncWorkWithQosWorkNull),
10319         DECLARE_NAPI_FUNCTION("napiRunScriptPathEnvNull", napiRunScriptPathEnvNull),
10320         DECLARE_NAPI_FUNCTION("napiRunScriptPathResNull", napiRunScriptPathResNull),
10321         DECLARE_NAPI_FUNCTION("napiLoadModuleEnvNull", napiLoadModuleEnvNull),
10322         DECLARE_NAPI_FUNCTION("napiLoadModuleResNull", napiLoadModuleResNull),
10323         DECLARE_NAPI_FUNCTION("createObjectWithPropertiesEnvNull", createObjectWithPropertiesEnvNull),
10324         DECLARE_NAPI_FUNCTION("createObjectWithPropertiesResNull", createObjectWithPropertiesResNull),
10325         DECLARE_NAPI_FUNCTION("createObjectWithPropertiesEnvResNull", createObjectWithPropertiesEnvResNull),
10326         DECLARE_NAPI_FUNCTION("getDateValueNotDateObj", getDateValueNotDateObj),
10327         DECLARE_NAPI_FUNCTION("getDateValue", getDateValue),
10328         DECLARE_NAPI_FUNCTION("getDateValueEnvNull", getDateValueEnvNull),
10329         DECLARE_NAPI_FUNCTION("getDateValueNull", getDateValueNull),
10330         DECLARE_NAPI_FUNCTION("getDateValueRstNull", getDateValueRstNull),
10331         DECLARE_NAPI_FUNCTION("createBigintInt64ValueNotJS", createBigintInt64ValueNotJS),
10332         DECLARE_NAPI_FUNCTION("createBigintUint64ValueNotJS", createBigintUint64ValueNotJS),
10333         DECLARE_NAPI_FUNCTION("getValueBiginWordsNotBigInt", getValueBiginWordsNotBigInt),
10334         DECLARE_NAPI_FUNCTION("createBufferSizeZero", createBufferSizeZero),
10335         DECLARE_NAPI_FUNCTION("createBufferCopyLengthZero", createBufferCopyLengthZero),
10336         DECLARE_NAPI_FUNCTION("createExternalBufferLengthMax", createExternalBufferLengthMax),
10337         DECLARE_NAPI_FUNCTION("getBufferInfoValueNotBuffer", getBufferInfoValueNotBuffer),
10338         DECLARE_NAPI_FUNCTION("objectSealNotObj", objectSealNotObj),
10339         DECLARE_NAPI_FUNCTION("objectFreezeNotObj", objectFreezeNotObj),
10340         DECLARE_NAPI_FUNCTION("detachArraybufferNotObj", detachArraybufferNotObj),
10341         DECLARE_NAPI_FUNCTION("isSendableEnvNull", isSendableEnvNull),
10342         DECLARE_NAPI_FUNCTION("isSendableValueNull", isSendableValueNull),
10343         DECLARE_NAPI_FUNCTION("isSendableRstNull", isSendableRstNull),
10344         DECLARE_NAPI_FUNCTION("deserializeEnvNull", deserializeEnvNull),
10345         DECLARE_NAPI_FUNCTION("deserializeDataNull", deserializeDataNull),
10346         DECLARE_NAPI_FUNCTION("deserializeRstNull", deserializeRstNull),
10347         DECLARE_NAPI_FUNCTION("serializeEnvNull", serializeEnvNull),
10348         DECLARE_NAPI_FUNCTION("serializeObjNull", serializeObjNull),
10349         DECLARE_NAPI_FUNCTION("serializeDataNull", serializeDataNull),
10350         DECLARE_NAPI_FUNCTION("createObjectWithNamePropertiesEnvNull", createObjectWithNamePropertiesEnvNull),
10351         DECLARE_NAPI_FUNCTION("coerceToNativeBindingObjectEnvNull", coerceToNativeBindingObjectEnvNull),
10352         DECLARE_NAPI_FUNCTION("coerceToNativeBindingObjectObjNull", coerceToNativeBindingObjectObjNull),
10353         DECLARE_NAPI_FUNCTION("coerceToNativeBindingObjectDetachNull", coerceToNativeBindingObjectDetachNull),
10354         DECLARE_NAPI_FUNCTION("coerceToNativeBindingObjectAttachNull", coerceToNativeBindingObjectAttachNull),
10355         DECLARE_NAPI_FUNCTION("coerceToNativeBindingObjectNativeNull", coerceToNativeBindingObjectNativeNull),
10356         DECLARE_NAPI_FUNCTION("deleteSerializationEnvNull", deleteSerializationEnvNull),
10357         DECLARE_NAPI_FUNCTION("deleteSerializationDataNull", deleteSerializationDataNull),
10358         DECLARE_NAPI_FUNCTION("createBigintWordsCountIntMax", createBigintWordsCountIntMax),
10359         DECLARE_NAPI_FUNCTION("makeCallbackTextNull", makeCallbackTextNull),
10360         DECLARE_NAPI_FUNCTION("getValueBigintUint64", getValueBigintUint64),
10361         DECLARE_NAPI_FUNCTION("getValueBigintInt64", getValueBigintInt64),
10362         DECLARE_NAPI_FUNCTION("napiGetInstanceDataEnvNull", NapiGetInstanceDataEnvNull),
10363         DECLARE_NAPI_FUNCTION("deleteAsyncWork", deleteAsyncWork),
10364         DECLARE_NAPI_FUNCTION("createThreadsafeFunctionMaxQueueSizeNegative", createThreadsafeFunctionMaxQueueSizeNegative),
10365         DECLARE_NAPI_FUNCTION("ThreadSafeTestNull", ThreadSafeTestNull),
10366         DECLARE_NAPI_FUNCTION("createExternalBufferLengthZero", createExternalBufferLengthZero),
10367     };
10368     NAPI_CALL(env, napi_define_properties(env, exports, sizeof(properties) / sizeof(properties[0]), properties));
10369 
10370     napi_property_descriptor descClass[] = {
10371         DECLARE_NAPI_FUNCTION("sayHello", SayHello),
10372     };
10373     napi_value myClass;
10374     napi_define_class(env, "myClass", NAPI_AUTO_LENGTH, MyConstructor, nullptr,
10375                       sizeof(descClass) / sizeof(descClass[0]), descClass, &myClass);
10376     napi_set_named_property(env, exports, "myClass", myClass);
10377     return exports;
10378 }
10379 
10380 EXTERN_C_END
10381 
10382 static napi_module demoModule = {
10383     .nm_version = 1,
10384     .nm_flags = 0,
10385     .nm_filename = nullptr,
10386     .nm_register_func = Init,
10387     .nm_modname = "napitest",
10388     .nm_priv = ((void *)0),
10389     .reserved = {0},
10390 };
10391 
RegisterModule(void)10392 extern "C" __attribute__((constructor)) void RegisterModule(void)
10393 {
10394     napi_module_register(&demoModule);
10395 }
10396