2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for wcstombs_s
7 #define WIN32_NO_STATUS
10 #include <wine/test.h>
11 #include <specstrings.h>
13 #define ok_errno(x) ok_hex(errno, (x))
16 #define ok_char(x,y) ok_int((unsigned)(unsigned char)(x),(unsigned)(unsigned char)(y))
17 #define ok_wchar(x,y) ok_int((unsigned)(unsigned short)(x),(unsigned)(unsigned short)(y))
24 _Out_opt_
size_t * pcchConverted
,
25 _Out_writes_bytes_to_opt_(cjDstSize
, *pcchConverted
)
27 _In_
size_t cjDstSize
,
28 _In_z_
const wchar_t * pwszSrc
,
29 _In_
size_t cjMaxCount
);
32 START_TEST(wcstombs_s
)
39 cchConverted
= 0xf00bac;
41 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 6, L
"hallo", 5);
43 ok_size_t(cchConverted
, 6);
44 ok_char(mbsbuffer
[5], 0);
45 ok_str(mbsbuffer
, "hallo");
49 cchConverted
= 0xf00bac;
51 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 1, L
"", 0);
53 ok_size_t(cchConverted
, 1);
54 ok_wchar(mbsbuffer
[0], 0);
58 cchConverted
= 0xf00bac;
65 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 5, L
"hallo", 5);
67 ok_size_t(cchConverted
, 0);
68 ok_char(mbsbuffer
[5], 0xFF);
69 ok_char(mbsbuffer
[4], L
'o');
70 ok_char(mbsbuffer
[3], L
'l');
71 ok_char(mbsbuffer
[2], L
'l');
72 ok_char(mbsbuffer
[1], L
'a');
73 ok_char(mbsbuffer
[0], 0);
77 cchConverted
= 0xf00bac;
84 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 3, L
"hallo", 5);
86 ok_size_t(cchConverted
, 0);
87 ok_char(mbsbuffer
[5], 0xFF);
88 ok_char(mbsbuffer
[4], 0xFF);
89 ok_char(mbsbuffer
[3], 0xFF);
90 ok_char(mbsbuffer
[2], L
'l');
91 ok_char(mbsbuffer
[1], L
'a');
92 ok_char(mbsbuffer
[0], 0);
96 ret
= wcstombs_s(0, 0, 0, 0, 0);
101 cchConverted
= 0xf00bac;
102 ret
= wcstombs_s(&cchConverted
, 0, 0, 0, 0);
103 ok_long(ret
, EINVAL
);
104 ok_size_t(cchConverted
, 0);
109 ret
= wcstombs_s(0, mbsbuffer
, 0, 0, 0);
110 ok_long(ret
, EINVAL
);
111 ok_char(mbsbuffer
[0], L
'x');
115 ret
= wcstombs_s(0, mbsbuffer
, 10, L
"hallo", 5);
120 ret
= wcstombs_s(0, mbsbuffer
, 0, L
"hallo", 5);
121 ok_long(ret
, EINVAL
);
125 cchConverted
= 0xf00bac;
126 ret
= wcstombs_s(&cchConverted
, 0, 10, L
"hallo", 5);
127 ok_long(ret
, EINVAL
);
128 ok_size_t(cchConverted
, 0xf00bac);
132 cchConverted
= 0xf00bac;
133 ret
= wcstombs_s(&cchConverted
, 0, 0, L
"hallo", 5);
135 ok_size_t(cchConverted
, 6);
139 cchConverted
= 0xf00bac;
140 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 10, 0, 5);
141 ok_long(ret
, EINVAL
);
142 ok_size_t(cchConverted
, 0);
146 cchConverted
= 0xf00bac;
147 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 10, L
"hallo", 0);
149 ok_size_t(cchConverted
, 1);
153 cchConverted
= 0xf00bac;
160 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 10, L
"hallo", 2);
162 ok_size_t(cchConverted
, 3);
163 ok_char(mbsbuffer
[5], 0xCD);
164 ok_char(mbsbuffer
[4], 0xAB);
165 ok_char(mbsbuffer
[3], 0xCD);
166 ok_char(mbsbuffer
[2], 0);
167 ok_char(mbsbuffer
[1], L
'a');
168 ok_char(mbsbuffer
[0], L
'h');
172 cchConverted
= 0xf00bac;
173 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 10, 0, 0);
175 ok_size_t(cchConverted
, 1);
179 cchConverted
= 0xf00bac;
180 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 10, L
"hallo", 7);
182 ok_size_t(cchConverted
, 6);
186 cchConverted
= 0xf00bac;
187 ret
= wcstombs_s(&cchConverted
, 0, 0, L
"hallo", 7);
189 ok_size_t(cchConverted
, 6);
193 cchConverted
= 0xf00bac;
200 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 5, L
"hallo", _TRUNCATE
);
201 ok_long(ret
, STRUNCATE
);
202 ok_size_t(cchConverted
, 5);
203 ok_char(mbsbuffer
[5], 0xCD);
204 ok_char(mbsbuffer
[4], 0);
205 ok_char(mbsbuffer
[3], L
'l');
206 ok_char(mbsbuffer
[2], L
'l');
207 ok_char(mbsbuffer
[1], L
'a');
208 ok_char(mbsbuffer
[0], L
'h');
212 cchConverted
= 0xf00bac;
213 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 10, L
"hallo", -1);
215 ok_size_t(cchConverted
, 6);