2 * PROJECT: ReactOS API tests
3 * LICENSE: GPL-2.0-or-later (https://spdx.org/licenses/GPL-2.0-or-later)
4 * PURPOSE: Tests for wctomb
5 * COPYRIGHT: Copyright 2020 George Bișoc <george.bisoc@reactos.org>
9 #include <apitest_guard.h>
11 #define WIN32_NO_STATUS
17 unsigned int cdecl ___lc_codepage_func(void);
24 unsigned int codepage
= ___lc_codepage_func();
25 wchar_t wchSrc
[2] = {L
'R', 0414}; // 0414 corresponds to a Russian character in Windows-1251
27 chDest
= AllocateGuarded(sizeof(*chDest
));
30 skip("Buffer allocation failed!\n");
34 /* Output the current locale of the system and codepage for comparison between ReactOS and Windows */
35 loc
= setlocale(LC_ALL
, NULL
);
36 printf("The current codepage of your system tested is (%u) and locale (%s).\n\n", codepage
, loc
);
38 /* Do not give output to the caller */
39 Length
= wctomb(NULL
, 0);
40 ok(Length
== 0, "Expected no characters to be converted (because the output argument is refused) but got %d\n.", Length
);
42 /* Do the same but expect a valid wide character argument this time */
43 Length
= wctomb(NULL
, wchSrc
[0]);
44 ok(Length
== 0, "Expected no characters to be converted (because the output argument is refused) but got %d\n.", Length
);
46 /* Don't return anything to the output even if conversion is impossible */
47 Length
= wctomb(NULL
, wchSrc
[1]);
48 ok(errno
== 0, "The error number (errno) should be 0 even though an invalid character in current locale is given but got %d.\n", errno
);
49 ok(Length
== 0, "Expected no characters to be converted (because the output argument is refused) but got %d\n.", Length
);
51 /* Attempt to convert a character not possible in current locale */
52 Length
= wctomb(chDest
, wchSrc
[1]);
53 ok(Length
== -1, "The conversion is not possible in current locale but got %d as returned value.\n", Length
);
54 ok(errno
== EILSEQ
, "EILSEQ is expected in an illegal sequence conversion but got %d.\n", errno
);
56 /* Return a null wide character to the destination argument */
57 Length
= wctomb(chDest
, 0);
58 ok(Length
== 1, "Expected one character to be converted (the null character) but got %d.\n", Length
);
59 ok_int(chDest
[0], '\0');
61 /* Get the converted output and validate what we should get */
62 Length
= wctomb(chDest
, wchSrc
[0]);
63 ok(Length
== 1, "Expected one character to be converted but got %d.\n", Length
);
64 ok_int(chDest
[0], 'R');