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**)(©Ptr), &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, ¶[0]); // 6:numerical value
4437 napi_create_int32(env, 6, ¶[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, ¶[0]); // 6:numerical value
4558 napi_create_int32(env, 6, ¶[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**)(©Ptr), &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**)(©Ptr), 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**)(©Ptr), &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