1 /*
2 * Copyright (c) 2023 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/napi_helper.cpp"
17 #include "common/native_common.h"
18 #include "napi/native_api.h"
19 #include <cerrno>
20 #include <cfloat>
21 #include <clocale>
22 #include <cmath>
23 #include <cstdio>
24 #include <cstdlib>
25 #include <cstring>
26 #include <ctime>
27 #include <cwchar>
28 #include <fcntl.h>
29 #include <memory.h>
30 #include <unistd.h>
31
32 #define PARAM_0 0
33 #define PARAM_1 1
34 #define MPARAM_1 (-1)
35 #define PARAM_2 2
36 #define PARAM_3 3
37 #define PARAM_314 3.14
38 #define PARAM_4 4
39 #define PARAM_25 25
40 #define PARAM_31 31
41 #define PARAM_32 32
42 #define PARAM_6 6
43 #define PARAM_7 7
44 #define PARAM_10 10
45 #define PARAM_13 13
46 #define PARAM_16 16
47 #define PARAM_17 17
48 #define PARAM_5 5
49 #define PARAM_80 80
50 #define PARAM_0777 0777
51 #define PARAM_250068492 250068492
52 #define PARAM_2064035584 2064035584
53 #define PARAM_208622688 208622688
54 #define PARAM_7340031 7340031
55 #define PARAM_1856892505 1856892505
56 #define PARAM_6358606123 6358606123
57 #define MPARAM_208340076 (-208340076)
58 #define PARAM_2001 2001
59 #define PARAM_6340800 6340800
60 #define MPARAM_36242240 (-3624224)
61 #define SIZE_100 100
62 #define ARRY_MAX 128
63 #define ZERO 0x0
64 #define PARAM_11 11
65 #define PARAM_20 20
66 #define PARAM_14 14
67 #define PARAM_18 18
68 #define ERRON_0 0
69 #define MINUSONE (-1)
70 #define SUCCESS 1
71 #define FAILD (-1)
72 #define SIZE_256 256
73 #define PARAM_12 12
74
75 #define SIZEOF_WCHAR(x) (sizeof(x) / sizeof(wchar_t))
76 static const char *TEMP_FILE = "/data/storage/el2/base/files/fzl.txt";
77
Btowc_One(napi_env env,napi_callback_info info)78 static napi_value Btowc_One(napi_env env, napi_callback_info info)
79 {
80 wint_t ret = btowc('6');
81 NAPI_ASSERT(env, ret == L'6', "btowc Error");
82 ret = btowc('A');
83 NAPI_ASSERT(env, ret == L'A', "btowc Error");
84 ret = btowc('&');
85 NAPI_ASSERT(env, ret == L'&', "btowc Error");
86 napi_value result = nullptr;
87 napi_create_int32(env, SUCCESS, &result);
88 return result;
89 }
90
Btowc_Two(napi_env env,napi_callback_info info)91 static napi_value Btowc_Two(napi_env env, napi_callback_info info)
92 {
93 wint_t ret = btowc(EOF);
94 napi_value result = nullptr;
95 napi_create_int32(env, ret == WEOF, &result);
96 return result;
97 }
98
Mbtowc_One(napi_env env,napi_callback_info info)99 static napi_value Mbtowc_One(napi_env env, napi_callback_info info)
100 {
101 const char *test = "musl";
102 wchar_t wc[ARRY_MAX];
103 size_t ret = mbtowc(wc, test, PARAM_1);
104 napi_value result = nullptr;
105 napi_create_int32(env, ret == SUCCESS && wc[PARAM_0] == L'm', &result);
106 return result;
107 }
108
Mbtowc_Two(napi_env env,napi_callback_info info)109 static napi_value Mbtowc_Two(napi_env env, napi_callback_info info)
110 {
111 wchar_t wc[ARRY_MAX];
112 errno = 0;
113 int ret = mbtowc(wc, nullptr, MINUSONE);
114 napi_value result = nullptr;
115 napi_create_int32(env, ret == SUCCESS && errno == EBADF, &result);
116 return result;
117 }
118
Fputwc_One(napi_env env,napi_callback_info info)119 static napi_value Fputwc_One(napi_env env, napi_callback_info info)
120 {
121 wchar_t mb_one_bytes = L'h';
122 FILE *fp = fopen(TEMP_FILE, "w");
123 NAPI_ASSERT(env, fp != nullptr, "Fputwc_One fopen Error");
124 int ret = PARAM_0;
125 if (fp) {
126 ret = fputwc(mb_one_bytes, fp);
127 fclose(fp);
128 remove(TEMP_FILE);
129 }
130 napi_value result = nullptr;
131 napi_create_int32(env, static_cast<wchar_t>(ret) == mb_one_bytes, &result);
132 return result;
133 }
134
Fputws_One(napi_env env,napi_callback_info info)135 static napi_value Fputws_One(napi_env env, napi_callback_info info)
136 {
137 char wstr[SIZE_100] = {PARAM_0};
138 FILE *fp = fopen(TEMP_FILE, "w+");
139 NAPI_ASSERT(env, fp != nullptr, "Fputws_One fopen Error");
140 int ret = PARAM_0;
141 int rsize = PARAM_0;
142 if (fp) {
143 ret = fputws(L"This is a test", fp);
144 fseek(fp, PARAM_0, SEEK_SET);
145 rsize = fread(wstr, sizeof(char), SIZE_100, fp);
146 fclose(fp);
147 remove(TEMP_FILE);
148 }
149 napi_value result = nullptr;
150 napi_create_int32(env, rsize == ret, &result);
151 return result;
152 }
153
Fwide_One(napi_env env,napi_callback_info info)154 static napi_value Fwide_One(napi_env env, napi_callback_info info)
155 {
156 errno = PARAM_0;
157 FILE *fp = fopen(TEMP_FILE, "w+");
158 NAPI_ASSERT(env, fp != nullptr, "Fwide_One fopen Error");
159 int ret = PARAM_0;
160 if (fp) {
161 ret = fwide(fp, PARAM_5);
162 fclose(fp);
163 remove(TEMP_FILE);
164 }
165 napi_value result = nullptr;
166 napi_create_int32(env, ret > PARAM_0 && errno == ERRON_0, &result);
167 return result;
168 }
169
Fwide_Two(napi_env env,napi_callback_info info)170 static napi_value Fwide_Two(napi_env env, napi_callback_info info)
171 {
172 errno = PARAM_0;
173 FILE *fp = fopen(TEMP_FILE, "w+");
174 NAPI_ASSERT(env, fp != nullptr, "Fwide_Two fopen Error");
175 int ret = PARAM_0;
176 if (fp) {
177 ret = fwide(fp, PARAM_0);
178 fclose(fp);
179 remove(TEMP_FILE);
180 }
181 napi_value result = nullptr;
182 napi_create_int32(env, ret == ERRON_0 && errno == ERRON_0, &result);
183 return result;
184 }
185
Fwprintf_One(napi_env env,napi_callback_info info)186 static napi_value Fwprintf_One(napi_env env, napi_callback_info info)
187 {
188 setlocale(LC_ALL, "en_US.UTF-8");
189 int ret = fwprintf(stdout, L"This is a test\n");
190 napi_value result = nullptr;
191 napi_create_int32(env, ret == wcslen(L"This is a test\n"), &result);
192 return result;
193 }
194
Fwprintf_Two(napi_env env,napi_callback_info info)195 static napi_value Fwprintf_Two(napi_env env, napi_callback_info info)
196 {
197 setlocale(LC_ALL, "en_US.UTF-8");
198 int ret = fwprintf(stderr, L"This is a test\n");
199 napi_value result = nullptr;
200 napi_create_int32(env, ret == wcslen(L"This is a test\n"), &result);
201 return result;
202 }
203
Wprintf_One(napi_env env,napi_callback_info info)204 static napi_value Wprintf_One(napi_env env, napi_callback_info info)
205 {
206 int ret = wprintf(L"%ls", L"This is a test");
207 napi_value result = nullptr;
208 napi_create_int32(env, ret == wcslen(L"This is a test"), &result);
209 return result;
210 }
211
Wprintf_Two(napi_env env,napi_callback_info info)212 static napi_value Wprintf_Two(napi_env env, napi_callback_info info)
213 {
214 int ret = wprintf(L"%lc", L'a');
215 napi_value result = nullptr;
216 napi_create_int32(env, ret == SUCCESS, &result);
217 return result;
218 }
219
Fwscanf_One(napi_env env,napi_callback_info info)220 static napi_value Fwscanf_One(napi_env env, napi_callback_info info)
221 {
222 int fd = open(TEMP_FILE, O_CREAT | O_RDWR, PARAM_0777);
223 int ret = PARAM_0;
224 FILE *fp = fdopen(fd, "w+");
225 if (fp) {
226 wchar_t wstr[PARAM_10] = {PARAM_0};
227 setlocale(LC_ALL, "en_US.UTF-8");
228 fwprintf(fp, L"%ls", L"test");
229 rewind(fp);
230 ret = fwscanf(fp, L"%ls", wstr);
231 fclose(fp);
232 remove(TEMP_FILE);
233 }
234 close(fd);
235 napi_value result = nullptr;
236 napi_create_int32(env, ret == SUCCESS, &result);
237 return result;
238 }
239
Fwscanf_Two(napi_env env,napi_callback_info info)240 static napi_value Fwscanf_Two(napi_env env, napi_callback_info info)
241 {
242 int fd = open(TEMP_FILE, O_CREAT | O_RDWR, PARAM_0777);
243 int ret = PARAM_0;
244 FILE *fp = fdopen(fd, "w+");
245 if (fp) {
246 wchar_t wstr[50] = {PARAM_0};
247 fwprintf(fp, L"%ls", L"Summation");
248 rewind(fp);
249 ret = fwscanf(fp, L"%ls %lc", wstr);
250 fclose(fp);
251 remove(TEMP_FILE);
252 }
253 close(fd);
254 napi_value result = nullptr;
255 napi_create_int32(env, ret == SUCCESS, &result);
256 return result;
257 }
258
Swprintf_One(napi_env env,napi_callback_info info)259 static napi_value Swprintf_One(napi_env env, napi_callback_info info)
260 {
261 wchar_t wbuf[SIZE_100] = {PARAM_0};
262 int ret = swprintf(wbuf, SIZE_100, L"%ls", L"This is test");
263 napi_value result = nullptr;
264 napi_create_int32(env, ret == wcslen(L"This is test"), &result);
265 return result;
266 }
267
Swprintf_Two(napi_env env,napi_callback_info info)268 static napi_value Swprintf_Two(napi_env env, napi_callback_info info)
269 {
270 wchar_t wbuf[SIZE_100] = {PARAM_0};
271 int ret = swprintf(wbuf, SIZE_100, L"%s", "xyz");
272 napi_value result = nullptr;
273 napi_create_int32(env, ret == strlen("xyz"), &result);
274 return result;
275 }
276
Swscanf_One(napi_env env,napi_callback_info info)277 static napi_value Swscanf_One(napi_env env, napi_callback_info info)
278 {
279 wchar_t wstr[] = L"swscanf 123";
280 wchar_t wtmp[PARAM_20];
281 setlocale(LC_ALL, "en_US.UTF-8");
282 int ret = swscanf(wstr, L"%ls", wtmp);
283 napi_value result = nullptr;
284 napi_create_int32(env, ret == SUCCESS, &result);
285 return result;
286 }
287
Swscanf_Two(napi_env env,napi_callback_info info)288 static napi_value Swscanf_Two(napi_env env, napi_callback_info info)
289 {
290 wchar_t buffer[SIZE_100] = L"Theta \u03b8";
291 wchar_t symbol, desc[PARAM_10];
292 setlocale(LC_ALL, "en_US.UTF-8");
293 int ret = swscanf(buffer, L"%ls %lc", desc, &symbol);
294 napi_value result = nullptr;
295 napi_create_int32(env, ret == PARAM_2, &result);
296 return result;
297 }
298
Mbrtowc_One(napi_env env,napi_callback_info info)299 static napi_value Mbrtowc_One(napi_env env, napi_callback_info info)
300 {
301 const char pt[] = "mbrtowc example";
302 wchar_t dest;
303 mbstate_t mbs;
304 mbrlen(nullptr, PARAM_0, &mbs);
305 int length = mbrtowc(&dest, pt, sizeof(pt), &mbs);
306 napi_value result = nullptr;
307 napi_create_int32(env, length == SUCCESS, &result);
308 return result;
309 }
310
Mbsinit_One(napi_env env,napi_callback_info info)311 static napi_value Mbsinit_One(napi_env env, napi_callback_info info)
312 {
313 char buffer[PARAM_80];
314 mbstate_t mbst;
315 const wchar_t wcs[] = L"mbsinit";
316 const wchar_t *p = nullptr;
317 p = wcs;
318 int ret = mbsinit(&mbst);
319 memset(&mbst, PARAM_0, sizeof(mbst));
320 wcsrtombs(buffer, &p, PARAM_80, &mbst);
321 napi_value result = nullptr;
322 napi_create_int32(env, ret == SUCCESS, &result);
323 return result;
324 }
325
Mbstowcs_One(napi_env env,napi_callback_info info)326 static napi_value Mbstowcs_One(napi_env env, napi_callback_info info)
327 {
328 const int TEST_BUFFER_SIZE = ARRY_MAX;
329 const char *src = "mbstowcs_One";
330 wchar_t dst[TEST_BUFFER_SIZE];
331 memset(dst, ZERO, sizeof(wchar_t) * TEST_BUFFER_SIZE);
332 size_t ret = mbstowcs(dst, src, strlen(src));
333 napi_value result = nullptr;
334 napi_create_int32(env, ret == strlen(src), &result);
335 return result;
336 }
337
Mbsrtowcs_One(napi_env env,napi_callback_info info)338 static napi_value Mbsrtowcs_One(napi_env env, napi_callback_info info)
339 {
340 setlocale(LC_ALL, "en_US.utf8");
341 const char *src = "\u0763\u0757";
342 wchar_t dest[PARAM_20];
343 mbstate_t ps = mbstate_t();
344 int max = PARAM_10;
345 int ret = mbsrtowcs(dest, &src, max, &ps);
346 napi_value result = nullptr;
347 napi_create_int32(env, ret == PARAM_2, &result);
348 return result;
349 }
350
Mbsnrtowcs_One(napi_env env,napi_callback_info info)351 static napi_value Mbsnrtowcs_One(napi_env env, napi_callback_info info)
352 {
353 setlocale(LC_ALL, "en_US.utf8");
354 const char *src = "\u0763\u0757";
355 wchar_t dest[PARAM_20];
356 mbstate_t ps = mbstate_t();
357 int max = PARAM_10;
358 int ret = mbsnrtowcs(dest, &src, max, max, &ps);
359 napi_value result = nullptr;
360 napi_create_int32(env, ret == PARAM_2, &result);
361 return result;
362 }
363
OpenWmemstream_One(napi_env env,napi_callback_info info)364 static napi_value OpenWmemstream_One(napi_env env, napi_callback_info info)
365 {
366 size_t len = PARAM_0;
367 wchar_t *ptr = nullptr;
368 FILE *fp = open_wmemstream(&ptr, &len);
369 if (fp) {
370 fputws(L"hello, world!", fp);
371 fclose(fp);
372 }
373 free(ptr);
374 ptr = nullptr;
375 napi_value result = nullptr;
376 napi_create_int32(env, wcslen(L"hello, world!") == len, &result);
377 return result;
378 }
379
Putwc_One(napi_env env,napi_callback_info info)380 static napi_value Putwc_One(napi_env env, napi_callback_info info)
381 {
382 wint_t ret = MINUSONE;
383 FILE *fp = fopen(TEMP_FILE, "w");
384 NAPI_ASSERT(env, fp != nullptr, "Putwc_One fopen Error");
385 wchar_t wc = L'p';
386 ret = putwc(wc, fp);
387 fclose(fp);
388 remove(TEMP_FILE);
389 napi_value result = nullptr;
390 napi_create_int32(env, static_cast<wchar_t>(ret) == L'p', &result);
391 return result;
392 }
393
PutWChar_One(napi_env env,napi_callback_info info)394 static napi_value PutWChar_One(napi_env env, napi_callback_info info)
395 {
396 wint_t ret = MINUSONE;
397 wchar_t wch[] = L"this is putwchar_0100 test case, std output success!";
398 int length = SIZEOF_WCHAR(wch);
399 for (int nLoop = PARAM_0; nLoop < length; nLoop++) {
400 ret = putwchar(wch[nLoop]);
401 NAPI_ASSERT(env, static_cast<wchar_t>(ret) == wch[nLoop], "putwchar Error");
402 }
403 napi_value result = nullptr;
404 napi_create_int32(env, SUCCESS, &result);
405 return result;
406 }
407
Towlower_One(napi_env env,napi_callback_info info)408 static napi_value Towlower_One(napi_env env, napi_callback_info info)
409 {
410 wchar_t wc = L'A';
411 wint_t wt = PARAM_0;
412 wt = towlower(wc);
413 napi_value result = nullptr;
414 napi_create_int32(env, wt == L'a', &result);
415 return result;
416 }
417
Towupper_One(napi_env env,napi_callback_info info)418 static napi_value Towupper_One(napi_env env, napi_callback_info info)
419 {
420 wchar_t wc = L'a';
421 wint_t wt = PARAM_0;
422 wt = towupper(wc);
423 napi_value result = nullptr;
424 napi_create_int32(env, wt == L'A', &result);
425 return result;
426 }
427
Ungetwc_One(napi_env env,napi_callback_info info)428 static napi_value Ungetwc_One(napi_env env, napi_callback_info info)
429 {
430 FILE *fp = fopen(TEMP_FILE, "w+");
431 NAPI_ASSERT(env, fp != nullptr, "ungetwc fopen Error");
432 wint_t wc = L'a';
433 putwc(wc, fp);
434 fseek(fp, PARAM_0, SEEK_SET);
435 wint_t ret = ungetwc(wc, fp);
436 ret = getwc(fp);
437 fclose(fp);
438 remove(TEMP_FILE);
439 napi_value result = nullptr;
440 napi_create_int32(env, static_cast<wchar_t>(ret) == L'a', &result);
441 return result;
442 }
443
Wcpcpy_One(napi_env env,napi_callback_info info)444 static napi_value Wcpcpy_One(napi_env env, napi_callback_info info)
445 {
446 wchar_t src[] = L"Source string";
447 wchar_t dst[PARAM_14] = {PARAM_0};
448 wcpcpy(dst, src);
449 napi_value result = nullptr;
450 napi_create_int32(env, wcscmp(src, dst) == ERRON_0, &result);
451 return result;
452 }
453
Wcpncpy_One(napi_env env,napi_callback_info info)454 static napi_value Wcpncpy_One(napi_env env, napi_callback_info info)
455 {
456 wchar_t src[] = L"Source string";
457 wchar_t dst[PARAM_18] = {PARAM_0};
458 size_t src_len = PARAM_13;
459 wcpncpy(dst, src, src_len + PARAM_1);
460 napi_value result = nullptr;
461 napi_create_int32(env, wcscmp(src, dst) == ERRON_0, &result);
462 return result;
463 }
464
Wcrtomb_One(napi_env env,napi_callback_info info)465 static napi_value Wcrtomb_One(napi_env env, napi_callback_info info)
466 {
467 wchar_t wcs = L'A';
468 char s[PARAM_20];
469 mbstate_t pr;
470 memset(&pr, PARAM_0, sizeof(pr));
471 int ret = MINUSONE;
472 ret = wcrtomb(s, wcs, &pr);
473 NAPI_ASSERT(env, ret == SUCCESS, "wcrtomb Error");
474 napi_value result = nullptr;
475 napi_create_int32(env, strcmp(s, "A") == ERRON_0, &result);
476
477 return result;
478 }
479
Wcscasecmp_One(napi_env env,napi_callback_info info)480 static napi_value Wcscasecmp_One(napi_env env, napi_callback_info info)
481 {
482 int ret = MINUSONE;
483 ret = wcscasecmp(L"hello1", L"HELLO2");
484 NAPI_ASSERT(env, ret < PARAM_0, "wcscasecmp Error");
485 ret = wcscasecmp(L"hello2", L"HELLO1");
486 NAPI_ASSERT(env, ret > PARAM_0, "wcscasecmp Error");
487 ret = wcscasecmp(L"hello", L"HELLO");
488 NAPI_ASSERT(env, ret == ERRON_0, "wcscasecmp Error");
489 napi_value result = nullptr;
490 napi_create_int32(env, ret == ERRON_0, &result);
491 return result;
492 }
493
Wcscasecmpl_One(napi_env env,napi_callback_info info)494 static napi_value Wcscasecmpl_One(napi_env env, napi_callback_info info)
495 {
496 int ret = MINUSONE;
497 locale_t localInfo = nullptr;
498 ret = wcscasecmp_l(L"hello1", L"HELLO2", localInfo);
499 NAPI_ASSERT(env, ret < PARAM_0, "wcscasecmp_l Error");
500 ret = wcscasecmp_l(L"hello2", L"HELLO1", localInfo);
501 NAPI_ASSERT(env, ret > PARAM_0, "wcscasecmp_l Error");
502 ret = wcscasecmp_l(L"hello", L"HELLO", localInfo);
503 NAPI_ASSERT(env, ret == ERRON_0, "wcscasecmp_l Error");
504 napi_value result = nullptr;
505 napi_create_int32(env, ret == ERRON_0, &result);
506 return result;
507 }
508
Wcscat_One(napi_env env,napi_callback_info info)509 static napi_value Wcscat_One(napi_env env, napi_callback_info info)
510 {
511 wchar_t wcs[PARAM_80];
512 wcscpy(wcs, L"these ");
513 wcscat(wcs, L"wide strings ");
514 wcscat(wcs, L"are ");
515 wcscat(wcs, L"concatenated.");
516 napi_value result = nullptr;
517 napi_create_int32(env, wcscmp(wcs, L"these wide strings are concatenated.") == ERRON_0, &result);
518 return result;
519 }
520
Wcschr_One(napi_env env,napi_callback_info info)521 static napi_value Wcschr_One(napi_env env, napi_callback_info info)
522 {
523 wchar_t wcs[] = L"This is a sample wide string";
524 wchar_t *pwc = nullptr;
525 pwc = wcschr(wcs, L's');
526 napi_value result = nullptr;
527 napi_create_int32(env, pwc - wcs + PARAM_1 == PARAM_4, &result);
528 return result;
529 }
530
Wcscmp_One(napi_env env,napi_callback_info info)531 static napi_value Wcscmp_One(napi_env env, napi_callback_info info)
532 {
533 int ret = MINUSONE;
534 ret = wcscmp(L"ABCD", L"ABCE");
535 NAPI_ASSERT(env, ret < PARAM_0, "wcscmp Error");
536 ret = wcscmp(L"ABCE", L"ABCD");
537 NAPI_ASSERT(env, ret > PARAM_0, "wcscmp Error");
538 ret = wcscmp(L"test wcscmp", L"test wcscmp");
539 NAPI_ASSERT(env, ret == ERRON_0, "wcscmp Error");
540 napi_value result = nullptr;
541 napi_create_int32(env, ret == ERRON_0, &result);
542 return result;
543 }
544
Wcscoll_One(napi_env env,napi_callback_info info)545 static napi_value Wcscoll_One(napi_env env, napi_callback_info info)
546 {
547 setlocale(LC_COLLATE, "en_US.utf8");
548 int ret = wcscoll(L"år", L"ängel");
549 napi_value result = nullptr;
550 napi_create_int32(env, ret == SUCCESS, &result);
551 return result;
552 }
553
Wcscolll_One(napi_env env,napi_callback_info info)554 static napi_value Wcscolll_One(napi_env env, napi_callback_info info)
555 {
556 int ret = MINUSONE;
557 locale_t localInfo = nullptr;
558 ret = wcscoll_l(L"abcdefg", L"abcdef", localInfo);
559 NAPI_ASSERT(env, ret > PARAM_0, "wcscoll_l Error");
560 ret = wcscoll_l(L"abcde", L"abcdef", localInfo);
561 NAPI_ASSERT(env, ret < PARAM_0, "wcscoll_l Error");
562 ret = wcscoll_l(L"abcdef", L"abcdef", localInfo);
563 napi_value result = nullptr;
564 napi_create_int32(env, ret == ERRON_0, &result);
565 return result;
566 }
567
Wcscpy_One(napi_env env,napi_callback_info info)568 static napi_value Wcscpy_One(napi_env env, napi_callback_info info)
569 {
570 wchar_t wcs[] = L"wcscpy test";
571 wchar_t des[40];
572 wcscpy(des, wcs);
573 napi_value result = nullptr;
574 napi_create_int32(env, wcscmp(wcs, des) == ERRON_0, &result);
575 return result;
576 }
577
Wcscspn_One(napi_env env,napi_callback_info info)578 static napi_value Wcscspn_One(napi_env env, napi_callback_info info)
579 {
580 wchar_t wcs[] = L"fcba73";
581 wchar_t keys[] = L"1234567890";
582 int ret = MINUSONE;
583 ret = wcscspn(wcs, keys);
584 napi_value result = nullptr;
585 napi_create_int32(env, ret == PARAM_4, &result);
586 return result;
587 }
588
Wcsdup_One(napi_env env,napi_callback_info info)589 static napi_value Wcsdup_One(napi_env env, napi_callback_info info)
590 {
591 wchar_t src[] = L"wcsdup";
592 wchar_t *ret = wcsdup(src);
593 NAPI_ASSERT(env, ret != nullptr, "wcsdup Error");
594 napi_value result = nullptr;
595 napi_create_int32(env, wcscmp(src, ret) == ERRON_0, &result);
596 return result;
597 }
598
Wcsftime_One(napi_env env,napi_callback_info info)599 static napi_value Wcsftime_One(napi_env env, napi_callback_info info)
600 {
601 int ret = MINUSONE;
602 time_t rawtime;
603 struct tm *timeinfo;
604 wchar_t buffer[PARAM_80];
605 time(&rawtime);
606 timeinfo = localtime(&rawtime);
607 ret = wcsftime(buffer, PARAM_80, L"Now it's %I:%M%p.", timeinfo);
608 napi_value result = nullptr;
609 napi_create_int32(env, ret == PARAM_17, &result);
610 return result;
611 }
612
Wcsftimel_One(napi_env env,napi_callback_info info)613 static napi_value Wcsftimel_One(napi_env env, napi_callback_info info)
614 {
615 int ret = MINUSONE;
616 time_t rtime;
617 struct tm *timeinfo;
618 wchar_t buffer[PARAM_80];
619 time(&rtime);
620 timeinfo = localtime(&rtime);
621 locale_t newlocale_ = newlocale(LC_ALL_MASK, "en_US", nullptr);
622 ret = wcsftime_l(buffer, PARAM_80, L"%I:%M%p", timeinfo, newlocale_);
623 if (newlocale_) {
624 freelocale(newlocale_);
625 newlocale_ = nullptr;
626 }
627 napi_value result = nullptr;
628 napi_create_int32(env, ret == PARAM_7, &result);
629 return result;
630 }
631
Wcslen_One(napi_env env,napi_callback_info info)632 static napi_value Wcslen_One(napi_env env, napi_callback_info info)
633 {
634 wchar_t str[] = L"wcslen";
635 size_t ret = PARAM_6;
636 napi_value result = nullptr;
637 napi_create_int32(env, ret == wcslen(str), &result);
638 return result;
639 }
640
Wcsncasecmp_One(napi_env env,napi_callback_info info)641 static napi_value Wcsncasecmp_One(napi_env env, napi_callback_info info)
642 {
643 int ret = MINUSONE;
644 ret = wcsncasecmp(L"hello1", L"HELLO2", PARAM_6);
645 NAPI_ASSERT(env, ret < PARAM_0, "wcsncasecmp Error");
646 ret = wcsncasecmp(L"hello2", L"HELLO1", PARAM_6);
647 NAPI_ASSERT(env, ret > PARAM_0, "wcsncasecmp Error");
648 ret = wcsncasecmp(L"hello1", L"HELLO2", PARAM_5);
649 napi_value result = nullptr;
650 napi_create_int32(env, ret == ERRON_0, &result);
651 return result;
652 }
653
Wcsncasecmpl_One(napi_env env,napi_callback_info info)654 static napi_value Wcsncasecmpl_One(napi_env env, napi_callback_info info)
655 {
656 int ret = MINUSONE;
657 ret = wcsncasecmp_l(L"hello1", L"HELLO2", PARAM_6, nullptr);
658 NAPI_ASSERT(env, ret < PARAM_0, "wcsncasecmp_l Error");
659 ret = wcsncasecmp_l(L"hello2", L"HELLO1", PARAM_6, nullptr);
660 NAPI_ASSERT(env, ret > PARAM_0, "wcsncasecmp_l Error");
661 ret = wcsncasecmp_l(L"hello1", L"HELLO2", PARAM_5, nullptr);
662 napi_value result = nullptr;
663 napi_create_int32(env, ret == ERRON_0, &result);
664 return result;
665 }
666
Wcsncat_One(napi_env env,napi_callback_info info)667 static napi_value Wcsncat_One(napi_env env, napi_callback_info info)
668 {
669 wchar_t dst[PARAM_32] = {PARAM_0};
670 wchar_t *ret = wcsncat(dst, L"hello, world!", PARAM_5);
671 napi_value result = nullptr;
672 napi_create_int32(env, wcscmp(dst, ret) == ERRON_0, &result);
673 return result;
674 }
675
Wcsncmp_One(napi_env env,napi_callback_info info)676 static napi_value Wcsncmp_One(napi_env env, napi_callback_info info)
677 {
678 int ret = MINUSONE;
679 ret = wcsncmp(L"aaaa", L"aaab", PARAM_4);
680 NAPI_ASSERT(env, ret < PARAM_0, "wcsncmp Error");
681 ret = wcsncmp(L"aaab", L"aaaa", PARAM_4);
682 NAPI_ASSERT(env, ret > PARAM_0, "wcsncmp Error");
683 ret = wcsncmp(L"aaaa", L"aaab", PARAM_3);
684 NAPI_ASSERT(env, ret == ERRON_0, "wcsncmp Error");
685 napi_value result = nullptr;
686 napi_create_int32(env, ret == ERRON_0, &result);
687 return result;
688 }
689
Wcsncpy_One(napi_env env,napi_callback_info info)690 static napi_value Wcsncpy_One(napi_env env, napi_callback_info info)
691 {
692 const wchar_t src[] = L"Hello";
693 wchar_t buf[SIZEOF_WCHAR(src) + PARAM_1];
694 wmemset(buf, L'A', SIZEOF_WCHAR(buf));
695 wchar_t *ret = static_cast<wchar_t *>(buf);
696
697 napi_value result = nullptr;
698 napi_create_int32(env, ret == wcsncpy(ret, src, SIZEOF_WCHAR(src)), &result);
699 return result;
700 }
701
Wcsnlen_One(napi_env env,napi_callback_info info)702 static napi_value Wcsnlen_One(napi_env env, napi_callback_info info)
703 {
704 const wchar_t *wc = L"ABCDEF";
705 size_t want = PARAM_6;
706 size_t ret = wcsnlen(wc, PARAM_6);
707 napi_value result = nullptr;
708 napi_create_int32(env, ret == want, &result);
709 return result;
710 }
711
Wcsnrtombs_One(napi_env env,napi_callback_info info)712 static napi_value Wcsnrtombs_One(napi_env env, napi_callback_info info)
713 {
714 const wchar_t src[] = L"test wcsnrtombs";
715 const wchar_t *p;
716 mbstate_t mbs;
717 char buffer[PARAM_32];
718 int wn = PARAM_4;
719 int n = PARAM_4;
720 mbrlen(nullptr, PARAM_0, &mbs);
721 memset(buffer, PARAM_0, sizeof(buffer));
722 p = src;
723 int ret = wcsnrtombs(buffer, &p, wn, n, &mbs);
724 NAPI_ASSERT(env, ret > PARAM_0, "wcsnrtombs Error");
725 napi_value result = nullptr;
726 napi_create_int32(env, strcmp(buffer, "test") == ERRON_0, &result);
727 return result;
728 }
729
Wcspbrk_One(napi_env env,napi_callback_info info)730 static napi_value Wcspbrk_One(napi_env env, napi_callback_info info)
731 {
732 wchar_t s[] = L"hello, world!";
733 wchar_t *ret = wcspbrk(s, L"abch");
734 NAPI_ASSERT(env, ret != nullptr, "wcspbrk Error");
735 napi_value result = nullptr;
736 napi_create_int32(env, wcscmp(ret, s) == ERRON_0, &result);
737 return result;
738 }
739
Wcsrchr_One(napi_env env,napi_callback_info info)740 static napi_value Wcsrchr_One(napi_env env, napi_callback_info info)
741 {
742 wchar_t ch[] = L"hello, world";
743 wchar_t *ret = wcsrchr(ch, L'h');
744 NAPI_ASSERT(env, ret != nullptr, "wcsrchr Error");
745 napi_value result = nullptr;
746 napi_create_int32(env, wcscmp(ret, ch) == ERRON_0, &result);
747 return result;
748 }
749
Wcsrtombs_One(napi_env env,napi_callback_info info)750 static napi_value Wcsrtombs_One(napi_env env, napi_callback_info info)
751 {
752 char str[SIZE_256] = {PARAM_0};
753 size_t want = PARAM_6;
754 const wchar_t *src = L"ABCDEF";
755 size_t ret = wcsrtombs(str, &src, PARAM_10, nullptr);
756 napi_value result = nullptr;
757 napi_create_int32(env, ret == want, &result);
758 return result;
759 }
760
Wcsspn_One(napi_env env,napi_callback_info info)761 static napi_value Wcsspn_One(napi_env env, napi_callback_info info)
762 {
763 size_t ret = wcsspn(L"hello world", L"abcdefghijklmnopqrstuvwxyz");
764 size_t want = 5U;
765 napi_value result = nullptr;
766 napi_create_int32(env, ret == want, &result);
767 return result;
768 }
769
Wcsstr_One(napi_env env,napi_callback_info info)770 static napi_value Wcsstr_One(napi_env env, napi_callback_info info)
771 {
772 wchar_t wcs[] = L"This is a simple string";
773 wchar_t *ret = nullptr;
774 ret = wcsstr(wcs, L"simple");
775 NAPI_ASSERT(env, ret != nullptr, "wcsstr Error");
776 wcsncpy(ret, L"sample", PARAM_6);
777 napi_value result = nullptr;
778 napi_create_int32(env, wcscmp(ret, L"sample string") == ERRON_0, &result);
779 return result;
780 }
781
Wcstod_One(napi_env env,napi_callback_info info)782 static napi_value Wcstod_One(napi_env env, napi_callback_info info)
783 {
784 wchar_t str0[] = L"3.14wcstod";
785 wchar_t *end = nullptr;
786 wchar_t str1[] = L"wcstod";
787 double ret = wcstod(str0, &end);
788 NAPI_ASSERT(env, (fabs(ret - PARAM_314) < DBL_EPSILON), "wcstod Error");
789 napi_value result = nullptr;
790 napi_create_int32(env, wcscmp(end, str1) == ERRON_0, &result);
791 return result;
792 }
793
Wcstof_One(napi_env env,napi_callback_info info)794 static napi_value Wcstof_One(napi_env env, napi_callback_info info)
795 {
796 wchar_t str0[] = L"3.14wcstof";
797 wchar_t *end = nullptr;
798 wchar_t str1[] = L"wcstof";
799 float ret = wcstof(str0, &end);
800 NAPI_ASSERT(env, (fabsf(ret - 3.14f) < FLT_EPSILON), "wcstof Error");
801 napi_value result = nullptr;
802 napi_create_int32(env, wcscmp(end, str1) == ERRON_0, &result);
803 return result;
804 }
805
Wcstok_One(napi_env env,napi_callback_info info)806 static napi_value Wcstok_One(napi_env env, napi_callback_info info)
807 {
808 wchar_t str[] = L"parrot,owl.sparrow,pigeon,crow";
809 wchar_t delim[] = L",.";
810 wchar_t *ptr;
811 wchar_t *ret = wcstok(str, delim, &ptr);
812 NAPI_ASSERT(env, ret != nullptr, "wcstok Error");
813 napi_value result = nullptr;
814 napi_create_int32(env, wcscmp(ret, L"parrot") == ERRON_0, &result);
815 return result;
816 }
817
Wcstol_One(napi_env env,napi_callback_info info)818 static napi_value Wcstol_One(napi_env env, napi_callback_info info)
819 {
820 wchar_t wsNumbers[] = L"2001 60c0c0 -1101110100110100100000 0x6fffff";
821 wchar_t *pEnd = nullptr;
822 long int li1 = wcstol(wsNumbers, &pEnd, PARAM_10);
823 long int li2 = wcstol(pEnd, &pEnd, PARAM_16);
824 long int li3 = wcstol(pEnd, &pEnd, PARAM_2);
825 long int li4 = wcstol(pEnd, nullptr, PARAM_0);
826 napi_value result = nullptr;
827 napi_create_int32(env, li1 == PARAM_2001 && li2 == PARAM_6340800 && li3 == MPARAM_36242240 && li4 == PARAM_7340031,
828 &result);
829 return result;
830 }
831
Wcstold_One(napi_env env,napi_callback_info info)832 static napi_value Wcstold_One(napi_env env, napi_callback_info info)
833 {
834 wchar_t str0[] = L"3.14wcstold";
835 wchar_t *end = nullptr;
836 wchar_t str1[] = L"wcstold";
837 long double ret = wcstold(str0, &end);
838 NAPI_ASSERT(env, (fabsl(ret - 3.14L) < LDBL_EPSILON), "wcstold Error");
839 napi_value result = nullptr;
840 napi_create_int32(env, wcscmp(end, str1) == ERRON_0, &result);
841 return result;
842 }
843
Wcstoll_One(napi_env env,napi_callback_info info)844 static napi_value Wcstoll_One(napi_env env, napi_callback_info info)
845 {
846 wchar_t wsNumbers[] = L"1856892505 17b00a12b -01100011010110000010001101100 0x6fffff";
847 wchar_t *pEnd = nullptr;
848 long long int lli1 = wcstoll(wsNumbers, &pEnd, PARAM_10);
849 long long int lli2 = wcstoll(pEnd, &pEnd, PARAM_16);
850 long long int lli3 = wcstoll(pEnd, &pEnd, PARAM_2);
851 long long int lli4 = wcstoll(pEnd, nullptr, PARAM_0);
852 napi_value result = nullptr;
853 napi_create_int32(
854 env, lli1 == PARAM_1856892505 && lli2 == PARAM_6358606123 && lli3 == MPARAM_208340076 && lli4 == PARAM_7340031,
855 &result);
856 return result;
857 }
858
Wcstombs_One(napi_env env,napi_callback_info info)859 static napi_value Wcstombs_One(napi_env env, napi_callback_info info)
860 {
861 const wchar_t str[] = L"wcstombs example";
862 char buffer[PARAM_32];
863 int ret = wcstombs(buffer, str, sizeof(buffer));
864 napi_value result = nullptr;
865 napi_create_int32(env, ret == wcslen(L"wcstombs example"), &result);
866 return result;
867 }
868
Wcstoul_One(napi_env env,napi_callback_info info)869 static napi_value Wcstoul_One(napi_env env, napi_callback_info info)
870 {
871 unsigned long want = PARAM_25;
872 unsigned long ret = wcstoul(L"25", nullptr, PARAM_0);
873 napi_value result = nullptr;
874 napi_create_int32(env, ret == want, &result);
875 return result;
876 }
877
Wcstoull_One(napi_env env,napi_callback_info info)878 static napi_value Wcstoull_One(napi_env env, napi_callback_info info)
879 {
880 wchar_t wsNumbers[] = L"250068492 7b06af00 1100011011110101010001100000 0x6fffff";
881 wchar_t *pEnd;
882 unsigned long long int ulli1 = wcstoull(wsNumbers, &pEnd, PARAM_10);
883 unsigned long long int ulli2 = wcstoull(pEnd, &pEnd, PARAM_16);
884 unsigned long long int ulli3 = wcstoull(pEnd, &pEnd, PARAM_2);
885 unsigned long long int ulli4 = wcstoull(pEnd, nullptr, PARAM_0);
886 napi_value result = nullptr;
887 napi_create_int32(env,
888 ulli1 == PARAM_250068492 && ulli2 == PARAM_2064035584 && ulli3 == PARAM_208622688 &&
889 ulli4 == PARAM_7340031,
890 &result);
891 return result;
892 }
893
Wcswcs_One(napi_env env,napi_callback_info info)894 static napi_value Wcswcs_One(napi_env env, napi_callback_info info)
895 {
896 wchar_t wstr[] = L"abcd";
897 wchar_t wch[] = L"a";
898 wchar_t *q = wcswcs(wstr, wch);
899 napi_value result = nullptr;
900 napi_create_int32(env, q - wstr == ERRON_0, &result);
901 return result;
902 }
903
Wcswidth_One(napi_env env,napi_callback_info info)904 static napi_value Wcswidth_One(napi_env env, napi_callback_info info)
905 {
906 int want = PARAM_2;
907 int ret = wcswidth(L"abc", want);
908 napi_value result = nullptr;
909 napi_create_int32(env, ret == want, &result);
910 return result;
911 }
912
Wcsxfrm_One(napi_env env,napi_callback_info info)913 static napi_value Wcsxfrm_One(napi_env env, napi_callback_info info)
914 {
915 wchar_t wc[] = L"ABCD";
916 wchar_t src[PARAM_20] = {PARAM_0};
917 size_t ret = wcsxfrm(src, wc, PARAM_5);
918 napi_value result = nullptr;
919 napi_create_int32(env, ret == wcslen(wc), &result);
920 return result;
921 }
922
Wcsxfrml_One(napi_env env,napi_callback_info info)923 static napi_value Wcsxfrml_One(napi_env env, napi_callback_info info)
924 {
925 locale_t localInfo = nullptr;
926 wchar_t wc[] = L"ABCD";
927 wchar_t src[PARAM_20] = {PARAM_0};
928 size_t ret = wcsxfrm_l(src, wc, PARAM_5, localInfo);
929 napi_value result = nullptr;
930 napi_create_int32(env, ret == wcslen(wc), &result);
931 return result;
932 }
933
Wctob_One(napi_env env,napi_callback_info info)934 static napi_value Wctob_One(napi_env env, napi_callback_info info)
935 {
936 wchar_t c = L'A';
937 int ret = wctob(c);
938 napi_value result = nullptr;
939 napi_create_int32(env, ret == 'A', &result);
940 return result;
941 }
942
Wctomb_One(napi_env env,napi_callback_info info)943 static napi_value Wctomb_One(napi_env env, napi_callback_info info)
944 {
945 char byte[SIZE_256] = {PARAM_0};
946 int ret = wctomb(byte, L'h');
947 napi_value result = nullptr;
948 napi_create_int32(env, ret == SUCCESS, &result);
949 return result;
950 }
951
Wcwidth_One(napi_env env,napi_callback_info info)952 static napi_value Wcwidth_One(napi_env env, napi_callback_info info)
953 {
954 int ret = MINUSONE;
955 const int INPUT_VALUE[PARAM_12] = {0x0300, 0x20dd, 0x00ad, 0x200b, 0x4e00, 0x9fff,
956 0x3400, 0x4dbf, 0x20000, 0x2a6df, 0xac00, 0xd7a3};
957 ret = wcwidth(INPUT_VALUE[PARAM_0]);
958 NAPI_ASSERT(env, ret == ERRON_0, "wcwidth Error");
959 ret = wcwidth(INPUT_VALUE[PARAM_1]);
960 NAPI_ASSERT(env, ret == ERRON_0, "wcwidth Error");
961 ret = wcwidth(INPUT_VALUE[PARAM_2]);
962 NAPI_ASSERT(env, ret == SUCCESS, "wcwidth Error");
963 ret = wcwidth(INPUT_VALUE[PARAM_3]);
964 NAPI_ASSERT(env, ret == ERRON_0, "wcwidth Error");
965 ret = wcwidth(INPUT_VALUE[PARAM_4]);
966 NAPI_ASSERT(env, ret == PARAM_2, "wcwidth Error");
967 ret = wcwidth(INPUT_VALUE[PARAM_11]);
968 NAPI_ASSERT(env, ret == PARAM_2, "wcwidth Error");
969 napi_value result = nullptr;
970 napi_create_int32(env, ret == PARAM_2, &result);
971 return result;
972 }
973
Wmemchr_One(napi_env env,napi_callback_info info)974 static napi_value Wmemchr_One(napi_env env, napi_callback_info info)
975 {
976 wchar_t wcs[] = L"Example wide string";
977 wchar_t *ret = wmemchr(wcs, L'p', wcslen(wcs));
978 NAPI_ASSERT(env, ret != nullptr, "wcwidth Error");
979 napi_value result = nullptr;
980 napi_create_int32(env, wcscmp(ret, L"ple wide string") == ERRON_0, &result);
981 return result;
982 }
983
Wmemcmp_One(napi_env env,napi_callback_info info)984 static napi_value Wmemcmp_One(napi_env env, napi_callback_info info)
985 {
986 int ret = MINUSONE;
987 wchar_t str[] = L"ABCDEFG";
988 wchar_t tar[] = L"ABCDEFF";
989 ret = wmemcmp(str, tar, wcslen(str));
990 NAPI_ASSERT(env, ret == SUCCESS, "wmemcmp Error");
991 ret = wmemcmp(tar, str, wcslen(str));
992 NAPI_ASSERT(env, ret == MPARAM_1, "wmemcmp Error");
993 ret = wmemcmp(str, str, wcslen(str));
994 NAPI_ASSERT(env, ret == ERRON_0, "wmemcmp Error");
995 napi_value result = nullptr;
996 napi_create_int32(env, ret == ERRON_0, &result);
997 return result;
998 }
999
Wmemcpy_One(napi_env env,napi_callback_info info)1000 static napi_value Wmemcpy_One(napi_env env, napi_callback_info info)
1001 {
1002 wchar_t dest[PARAM_3];
1003 wchar_t src[] = L"aaa";
1004 wchar_t *ret = wmemcpy(dest, src, PARAM_3);
1005 NAPI_ASSERT(env, ret != nullptr, "wmemcpy Error");
1006 napi_value result = nullptr;
1007 napi_create_int32(env, wcsncmp(dest, src, PARAM_3) == ERRON_0, &result);
1008 return result;
1009 }
1010
Wmemmove_One(napi_env env,napi_callback_info info)1011 static napi_value Wmemmove_One(napi_env env, napi_callback_info info)
1012 {
1013 wchar_t src[] = L"This is a c test for wmemmove function";
1014 wchar_t *dest = &src[PARAM_0];
1015 wchar_t *ret = wmemmove(dest, src, PARAM_5);
1016 NAPI_ASSERT(env, ret != nullptr, "wmemmove Error");
1017 napi_value result = nullptr;
1018 napi_create_int32(env, ret == dest, &result);
1019 return result;
1020 }
1021
Wmemset_One(napi_env env,napi_callback_info info)1022 static napi_value Wmemset_One(napi_env env, napi_callback_info info)
1023 {
1024 wchar_t wcs[] = L"almost every programmer should know wmemset!";
1025 wchar_t *ret = wmemset(wcs, L'-', PARAM_6);
1026 NAPI_ASSERT(env, ret != nullptr, "wmemset Error");
1027 napi_value result = nullptr;
1028 napi_create_int32(env, wcscmp(ret, L"------ every programmer should know wmemset!") == ERRON_0, &result);
1029 return result;
1030 }
1031
1032 extern "C" int Vfwprintf_Test(const wchar_t *format, ...);
Vfwprintf_Test(FILE * stream,const wchar_t * format,...)1033 int Vfwprintf_Test(FILE *stream, const wchar_t *format, ...)
1034 {
1035 va_list args;
1036 va_start(args, format);
1037 int ret = vfwprintf(stream, format, args);
1038 va_end(args);
1039 return ret;
1040 }
Vfwprintf_One(napi_env env,napi_callback_info info)1041 static napi_value Vfwprintf_One(napi_env env, napi_callback_info info)
1042 {
1043 FILE *fp = fopen(TEMP_FILE, "w");
1044 NAPI_ASSERT(env, fp != nullptr, "Vfwprintf_One fopen Error");
1045 int ret = MINUSONE;
1046 ret = Vfwprintf_Test(fp, L"Call with %d variable argument.\n", PARAM_1);
1047 NAPI_ASSERT(env, ret = PARAM_31, "vfwprintf Error");
1048 ret = Vfwprintf_Test(fp, L"Call with %d variable %ls.\n", PARAM_2, L"arguments");
1049 fclose(fp);
1050 remove(TEMP_FILE);
1051 napi_value result = nullptr;
1052 napi_create_int32(env, ret == PARAM_32, &result);
1053 return result;
1054 }
1055
1056 extern "C" int Vswprintf_Test(const wchar_t *format, ...);
Vswprintf_Test(const wchar_t * format,...)1057 int Vswprintf_Test(const wchar_t *format, ...)
1058 {
1059 wchar_t buffer[SIZE_256];
1060 va_list args;
1061 va_start(args, format);
1062 int ret = vswprintf(buffer, SIZE_256, format, args);
1063 fputws(buffer, stdout);
1064 va_end(args);
1065 return ret;
1066 }
1067
Vswprintf_One(napi_env env,napi_callback_info info)1068 static napi_value Vswprintf_One(napi_env env, napi_callback_info info)
1069 {
1070 wchar_t str[] = L"test string has %d wide characters.\n";
1071 size_t ret = MINUSONE;
1072 ret = Vswprintf_Test(str, wcslen(str));
1073 napi_value result = nullptr;
1074 napi_create_int32(env, ret == wcslen(str), &result);
1075 return result;
1076 }
1077
1078 extern "C" int Vwscanf_Test(const wchar_t *format, ...);
Vwscanf_Test(const wchar_t * format,...)1079 int Vwscanf_Test(const wchar_t *format, ...)
1080 {
1081 va_list args;
1082 va_start(args, format);
1083 int ret = vwscanf(format, args);
1084 va_end(args);
1085 return ret;
1086 }
1087
Vwscanf_One(napi_env env,napi_callback_info info)1088 static napi_value Vwscanf_One(napi_env env, napi_callback_info info)
1089 {
1090 FILE *fp = fopen(TEMP_FILE, "w");
1091 NAPI_ASSERT(env, fp != nullptr, "Vwscanf_One fopen Error");
1092 wchar_t wstr[] = L"vwscanf";
1093 fputws(wstr, fp);
1094 fseek(fp, PARAM_0, SEEK_SET);
1095 FILE *fp1 = freopen(TEMP_FILE, "r", stdin);
1096 NAPI_ASSERT(env, fp1 != nullptr, "Vwscanf_One freopen Error");
1097 wchar_t wch[PARAM_20];
1098 int ret = Vwscanf_Test(L"%ls", wch);
1099 NAPI_ASSERT(env, ret == SUCCESS, "vwscanf Error");
1100 fclose(fp);
1101 fclose(fp1);
1102 remove(TEMP_FILE);
1103 napi_value result = nullptr;
1104 napi_create_int32(env, wcscmp(wch, wstr) == ERRON_0, &result);
1105 return result;
1106 }
1107
1108 extern "C" int Vwprintf_Test(const wchar_t *format, ...);
Vwprintf_Test(const wchar_t * format,...)1109 int Vwprintf_Test(const wchar_t *format, ...)
1110 {
1111 va_list args;
1112 va_start(args, format);
1113 int ret = vwprintf(format, args);
1114 va_end(args);
1115 return ret;
1116 }
Vwprintf_One(napi_env env,napi_callback_info info)1117 static napi_value Vwprintf_One(napi_env env, napi_callback_info info)
1118 {
1119 int ret = MINUSONE;
1120 ret = Vwprintf_Test(L"Call with %d variable %ls.\n", PARAM_2, L"arguments");
1121 napi_value result = nullptr;
1122 napi_create_int32(env, ret == PARAM_32, &result);
1123 return result;
1124 }
1125
1126 extern "C" int Vfwscanf_Test(FILE *fp, const wchar_t *format, ...);
Vfwscanf_Test(FILE * fp,const wchar_t * format,...)1127 int Vfwscanf_Test(FILE *fp, const wchar_t *format, ...)
1128 {
1129 va_list args;
1130 va_start(args, format);
1131 int result = vfwscanf(fp, format, args);
1132 va_end(args);
1133 return result;
1134 }
1135
Vfwscanf_One(napi_env env,napi_callback_info info)1136 static napi_value Vfwscanf_One(napi_env env, napi_callback_info info)
1137 {
1138 setlocale(LC_ALL, "en_US.UTF-8");
1139 wchar_t symbol[] = L"\u0915\u0916\u0917\u0918\u0919";
1140 wchar_t names[PARAM_5][PARAM_5] = {L"Ka", L"Kha", L"Ga", L"Gha", L"Nga"};
1141 FILE *fp = fopen(TEMP_FILE, "w+");
1142 NAPI_ASSERT(env, fp != nullptr, "vfwscanf fopen Error");
1143 for (int i = PARAM_0; i < PARAM_5; i++) {
1144 fwprintf(fp, L"%lc %ls ", symbol[i], names[i]);
1145 }
1146 fseek(fp, PARAM_0, SEEK_SET);
1147 wchar_t ch, str[PARAM_5];
1148 int ret = PARAM_0;
1149 for (ret = PARAM_0; ret < PARAM_5; ret++) {
1150 Vfwscanf_Test(fp, L"%lc %ls ", &ch, str);
1151 NAPI_ASSERT(env, wcscmp(str, names[ret]) == ERRON_0, "vfwscanf Error");
1152 }
1153 fclose(fp);
1154 remove(TEMP_FILE);
1155 napi_value result = nullptr;
1156 napi_create_int32(env, ret == PARAM_5, &result);
1157 return result;
1158 }
1159
Getwchar_One(napi_env env,napi_callback_info info)1160 static napi_value Getwchar_One(napi_env env, napi_callback_info info)
1161 {
1162 FILE *fp = fopen(TEMP_FILE, "w");
1163 NAPI_ASSERT(env, fp != nullptr, "Getwchar_One fopen Error");
1164 wchar_t wstr[] = L"getwchar";
1165 fputws(wstr, fp);
1166 fseek(fp, PARAM_0, SEEK_SET);
1167 FILE *fp1 = freopen(TEMP_FILE, "r", stdin);
1168 NAPI_ASSERT(env, fp1 != nullptr, "Getwchar_One freopen Error");
1169 wint_t ret = getwchar();
1170 fclose(fp);
1171 fclose(fp1);
1172 remove(TEMP_FILE);
1173 napi_value result = nullptr;
1174 napi_create_int32(env, static_cast<wchar_t>(ret) == L'g', &result);
1175 return result;
1176 }
1177
Wscanf_One(napi_env env,napi_callback_info info)1178 static napi_value Wscanf_One(napi_env env, napi_callback_info info)
1179 {
1180 FILE *fp = fopen(TEMP_FILE, "w");
1181 NAPI_ASSERT(env, fp != nullptr, "Wscanf_One fopen Error");
1182 wchar_t wstr[] = L"testwscanf";
1183 fputws(wstr, fp);
1184 fseek(fp, PARAM_0, SEEK_SET);
1185 FILE *fp1 = freopen(TEMP_FILE, "r", stdin);
1186 NAPI_ASSERT(env, fp1 != nullptr, "Wscanf_One freopen Error");
1187 wchar_t wch[50] = {PARAM_0};
1188 int ret = wscanf(L"%ls", wch);
1189 NAPI_ASSERT(env, ret == SUCCESS, "wscanf Error");
1190 fclose(fp);
1191 fclose(fp1);
1192 remove(TEMP_FILE);
1193 napi_value result = nullptr;
1194 napi_create_int32(env, wcscmp(wch, L"testwscanf") == ERRON_0, &result);
1195 return result;
1196 }
1197
1198 EXTERN_C_START
Init(napi_env env,napi_value exports)1199 static napi_value Init(napi_env env, napi_value exports)
1200 {
1201 napi_property_descriptor desc[] = {
1202 {"Btowc_One", nullptr, Btowc_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1203 {"Btowc_Two", nullptr, Btowc_Two, nullptr, nullptr, nullptr, napi_default, nullptr},
1204 {"Fputwc_One", nullptr, Fputwc_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1205 {"Fputws_One", nullptr, Fputws_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1206 {"Fwide_One", nullptr, Fwide_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1207 {"Fwide_Two", nullptr, Fwide_Two, nullptr, nullptr, nullptr, napi_default, nullptr},
1208 {"Fwprintf_One", nullptr, Fwprintf_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1209 {"Fwprintf_Two", nullptr, Fwprintf_Two, nullptr, nullptr, nullptr, napi_default, nullptr},
1210 {"Fwscanf_One", nullptr, Fwscanf_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1211 {"Fwscanf_Two", nullptr, Fwscanf_Two, nullptr, nullptr, nullptr, napi_default, nullptr},
1212 {"Getwchar_One", nullptr, Getwchar_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1213 {"Mbrtowc_One", nullptr, Mbrtowc_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1214 {"Mbsinit_One", nullptr, Mbsinit_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1215 {"Mbsnrtowcs_One", nullptr, Mbsnrtowcs_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1216 {"Mbsrtowcs_One", nullptr, Mbsrtowcs_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1217 {"Mbstowcs_One", nullptr, Mbstowcs_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1218 {"Mbtowc_One", nullptr, Mbtowc_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1219 {"Mbtowc_Two", nullptr, Mbtowc_Two, nullptr, nullptr, nullptr, napi_default, nullptr},
1220 {"OpenWmemstream_One", nullptr, OpenWmemstream_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1221 {"Putwc_One", nullptr, Putwc_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1222 {"PutWChar_One", nullptr, PutWChar_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1223 {"Swprintf_One", nullptr, Swprintf_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1224 {"Swprintf_Two", nullptr, Swprintf_Two, nullptr, nullptr, nullptr, napi_default, nullptr},
1225 {"Swscanf_One", nullptr, Swscanf_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1226 {"Swscanf_Two", nullptr, Swscanf_Two, nullptr, nullptr, nullptr, napi_default, nullptr},
1227 {"Towlower_One", nullptr, Towlower_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1228 {"Towupper_One", nullptr, Towupper_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1229 {"Ungetwc_One", nullptr, Ungetwc_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1230 {"Vfwprintf_One", nullptr, Vfwprintf_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1231 {"Vfwscanf_One", nullptr, Vfwscanf_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1232 {"Vswprintf_One", nullptr, Vswprintf_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1233 {"Vwprintf_One", nullptr, Vwprintf_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1234 {"Vwscanf_One", nullptr, Vwscanf_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1235 {"Wcpcpy_One", nullptr, Wcpcpy_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1236 {"Wcpncpy_One", nullptr, Wcpncpy_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1237 {"Wcrtomb_One", nullptr, Wcrtomb_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1238 {"Wcscasecmp_One", nullptr, Wcscasecmp_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1239 {"Wcscasecmpl_One", nullptr, Wcscasecmpl_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1240 {"Wcscat_One", nullptr, Wcscat_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1241 {"Wcschr_One", nullptr, Wcschr_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1242 {"Wcscmp_One", nullptr, Wcscmp_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1243 {"Wcscoll_One", nullptr, Wcscoll_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1244 {"Wcscolll_One", nullptr, Wcscolll_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1245 {"Wcscpy_One", nullptr, Wcscpy_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1246 {"Wcscspn_One", nullptr, Wcscspn_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1247 {"Wcsdup_One", nullptr, Wcsdup_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1248 {"Wcsftime_One", nullptr, Wcsftime_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1249 {"Wcsftimel_One", nullptr, Wcsftimel_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1250 {"Wcslen_One", nullptr, Wcslen_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1251 {"Wcsncasecmp_One", nullptr, Wcsncasecmp_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1252 {"Wcsncasecmpl_One", nullptr, Wcsncasecmpl_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1253 {"Wcsncat_One", nullptr, Wcsncat_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1254 {"Wcsncmp_One", nullptr, Wcsncmp_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1255 {"Wcsncpy_One", nullptr, Wcsncpy_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1256 {"Wcsnlen_One", nullptr, Wcsnlen_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1257 {"Wcsnrtombs_One", nullptr, Wcsnrtombs_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1258 {"Wcspbrk_One", nullptr, Wcspbrk_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1259 {"Wcsrchr_One", nullptr, Wcsrchr_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1260 {"Wcsrtombs_One", nullptr, Wcsrtombs_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1261 {"Wcsspn_One", nullptr, Wcsspn_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1262 {"Wcsstr_One", nullptr, Wcsstr_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1263 {"Wcstod_One", nullptr, Wcstod_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1264 {"Wcstof_One", nullptr, Wcstof_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1265 {"Wcstok_One", nullptr, Wcstok_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1266 {"Wcstol_One", nullptr, Wcstol_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1267 {"Wcstold_One", nullptr, Wcstold_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1268 {"Wcstoll_One", nullptr, Wcstoll_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1269 {"Wcstombs_One", nullptr, Wcstombs_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1270 {"Wcstoul_One", nullptr, Wcstoul_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1271 {"Wcstoull_One", nullptr, Wcstoull_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1272 {"Wcswcs_One", nullptr, Wcswcs_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1273 {"Wcswidth_One", nullptr, Wcswidth_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1274 {"Wcsxfrm_One", nullptr, Wcsxfrm_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1275 {"Wcsxfrml_One", nullptr, Wcsxfrml_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1276 {"Wctob_One", nullptr, Wctob_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1277 {"Wctomb_One", nullptr, Wctomb_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1278 {"Wcwidth_One", nullptr, Wcwidth_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1279 {"Wmemchr_One", nullptr, Wmemchr_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1280 {"Wmemcmp_One", nullptr, Wmemcmp_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1281 {"Wmemcpy_One", nullptr, Wmemcpy_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1282 {"Wmemmove_One", nullptr, Wmemmove_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1283 {"Wmemset_One", nullptr, Wmemset_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1284 {"Wprintf_One", nullptr, Wprintf_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1285 {"Wprintf_Two", nullptr, Wprintf_Two, nullptr, nullptr, nullptr, napi_default, nullptr},
1286 {"Wscanf_One", nullptr, Wscanf_One, nullptr, nullptr, nullptr, napi_default, nullptr},
1287 };
1288 napi_define_properties(env, exports, sizeof(desc) / sizeof(desc[0]), desc);
1289 return exports;
1290 }
1291
1292 EXTERN_C_END
1293
1294 static napi_module demoModule = {
1295 .nm_version = 1,
1296 .nm_flags = 0,
1297 .nm_filename = nullptr,
1298 .nm_register_func = Init,
1299 .nm_modname = "wcharndk1",
1300 .nm_priv = ((void *)0),
1301 .reserved = {0},
1302 };
1303
RegisterEntryModule(void)1304 extern "C" __attribute__((constructor)) void RegisterEntryModule(void) { napi_module_register(&demoModule); }
1305