2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for wcstombs_s
9 #define WIN32_NO_STATUS
12 #include <specstrings.h>
14 #define ok_errno(x) ok_hex(errno, (x))
17 #define ok_char(x,y) ok_int((unsigned)(unsigned char)(x),(unsigned)(unsigned char)(y))
18 #define ok_wchar(x,y) ok_int((unsigned)(unsigned short)(x),(unsigned)(unsigned short)(y))
25 _Out_opt_
size_t * pcchConverted
,
26 _Out_writes_bytes_to_opt_(cjDstSize
, *pcchConverted
)
28 _In_
size_t cjDstSize
,
29 _In_z_
const wchar_t * pwszSrc
,
30 _In_
size_t cjMaxCount
);
33 START_TEST(wcstombs_s
)
40 cchConverted
= 0xf00bac;
42 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 6, L
"hallo", 5);
44 ok_size_t(cchConverted
, 6);
45 ok_char(mbsbuffer
[5], 0);
46 ok_str(mbsbuffer
, "hallo");
50 cchConverted
= 0xf00bac;
52 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 1, L
"", 0);
54 ok_size_t(cchConverted
, 1);
55 ok_wchar(mbsbuffer
[0], 0);
59 cchConverted
= 0xf00bac;
66 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 5, L
"hallo", 5);
68 ok_size_t(cchConverted
, 0);
69 ok_char(mbsbuffer
[5], 0xFF);
70 ok_char(mbsbuffer
[4], L
'o');
71 ok_char(mbsbuffer
[3], L
'l');
72 ok_char(mbsbuffer
[2], L
'l');
73 ok_char(mbsbuffer
[1], L
'a');
74 ok_char(mbsbuffer
[0], 0);
78 cchConverted
= 0xf00bac;
85 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 3, L
"hallo", 5);
87 ok_size_t(cchConverted
, 0);
88 ok_char(mbsbuffer
[5], 0xFF);
89 ok_char(mbsbuffer
[4], 0xFF);
90 ok_char(mbsbuffer
[3], 0xFF);
91 ok_char(mbsbuffer
[2], L
'l');
92 ok_char(mbsbuffer
[1], L
'a');
93 ok_char(mbsbuffer
[0], 0);
97 ret
= wcstombs_s(0, 0, 0, 0, 0);
102 cchConverted
= 0xf00bac;
103 ret
= wcstombs_s(&cchConverted
, 0, 0, 0, 0);
104 ok_long(ret
, EINVAL
);
105 ok_size_t(cchConverted
, 0);
110 ret
= wcstombs_s(0, mbsbuffer
, 0, 0, 0);
111 ok_long(ret
, EINVAL
);
112 ok_char(mbsbuffer
[0], L
'x');
116 ret
= wcstombs_s(0, mbsbuffer
, 10, L
"hallo", 5);
121 ret
= wcstombs_s(0, mbsbuffer
, 0, L
"hallo", 5);
122 ok_long(ret
, EINVAL
);
126 cchConverted
= 0xf00bac;
127 ret
= wcstombs_s(&cchConverted
, 0, 10, L
"hallo", 5);
128 ok_long(ret
, EINVAL
);
129 ok_size_t(cchConverted
, 0xf00bac);
133 cchConverted
= 0xf00bac;
134 ret
= wcstombs_s(&cchConverted
, 0, 0, L
"hallo", 5);
136 ok_size_t(cchConverted
, 6);
140 cchConverted
= 0xf00bac;
141 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 10, 0, 5);
142 ok_long(ret
, EINVAL
);
143 ok_size_t(cchConverted
, 0);
147 cchConverted
= 0xf00bac;
148 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 10, L
"hallo", 0);
150 ok_size_t(cchConverted
, 1);
154 cchConverted
= 0xf00bac;
161 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 10, L
"hallo", 2);
163 ok_size_t(cchConverted
, 3);
164 ok_char(mbsbuffer
[5], 0xCD);
165 ok_char(mbsbuffer
[4], 0xAB);
166 ok_char(mbsbuffer
[3], 0xCD);
167 ok_char(mbsbuffer
[2], 0);
168 ok_char(mbsbuffer
[1], L
'a');
169 ok_char(mbsbuffer
[0], L
'h');
173 cchConverted
= 0xf00bac;
174 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 10, 0, 0);
176 ok_size_t(cchConverted
, 1);
180 cchConverted
= 0xf00bac;
181 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 10, L
"hallo", 7);
183 ok_size_t(cchConverted
, 6);
187 cchConverted
= 0xf00bac;
188 ret
= wcstombs_s(&cchConverted
, 0, 0, L
"hallo", 7);
190 ok_size_t(cchConverted
, 6);
194 cchConverted
= 0xf00bac;
201 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 5, L
"hallo", _TRUNCATE
);
202 ok_long(ret
, STRUNCATE
);
203 ok_size_t(cchConverted
, 5);
204 ok_char(mbsbuffer
[5], 0xCD);
205 ok_char(mbsbuffer
[4], 0);
206 ok_char(mbsbuffer
[3], L
'l');
207 ok_char(mbsbuffer
[2], L
'l');
208 ok_char(mbsbuffer
[1], L
'a');
209 ok_char(mbsbuffer
[0], L
'h');
213 cchConverted
= 0xf00bac;
214 ret
= wcstombs_s(&cchConverted
, mbsbuffer
, 10, L
"hallo", -1);
216 ok_size_t(cchConverted
, 6);