2 * Unit test suite for serialui API functions
4 * Copyright 2007 Detlef Riekenberg
6 * This library is free software; you can redistribute it and/or
7 * modify it under the terms of the GNU Lesser General Public
8 * License as published by the Free Software Foundation; either
9 * version 2.1 of the License, or (at your option) any later version.
11 * This library is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
14 * Lesser General Public License for more details.
16 * You should have received a copy of the GNU Lesser General Public
17 * License along with this library; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
30 #include "wine/test.h"
33 static HINSTANCE hdll
;
34 static DWORD (WINAPI
*pCommConfigDialogA
)(LPCSTR
, HWND
, LPCOMMCONFIG
);
35 static DWORD (WINAPI
*pCommConfigDialogW
)(LPCWSTR
, HWND
, LPCOMMCONFIG
);
36 static DWORD (WINAPI
*pGetDefaultCommConfigA
)(LPCSTR
, LPCOMMCONFIG
, LPDWORD
);
37 static DWORD (WINAPI
*pGetDefaultCommConfigW
)(LPCWSTR
, LPCOMMCONFIG
, LPDWORD
);
40 static const CHAR com1A
[] = "com1";
41 static const CHAR emptyA
[] = "";
42 static const CHAR fmt_comA
[] = "com%d";
43 static const CHAR str_colonA
[] = ":";
45 static const WCHAR com1W
[] = {'c','o','m','1',0};
46 static const WCHAR emptyW
[] = {0};
47 static const WCHAR str_colonW
[] = {':',0};
49 /* ################# */
51 static LPCSTR
load_functions(void)
56 hdll
= LoadLibraryA(ptr
);
57 if (!hdll
) return ptr
;
59 ptr
= "drvCommConfigDialogA";
60 pCommConfigDialogA
= (VOID
*) GetProcAddress(hdll
, ptr
);
61 if (!pCommConfigDialogA
) return ptr
;
63 ptr
= "drvCommConfigDialogW";
64 pCommConfigDialogW
= (VOID
*) GetProcAddress(hdll
, ptr
);
65 if (!pCommConfigDialogW
) return ptr
;
67 ptr
= "drvGetDefaultCommConfigA";
68 pGetDefaultCommConfigA
= (VOID
*) GetProcAddress(hdll
, ptr
);
69 if (!pGetDefaultCommConfigA
) return ptr
;
71 ptr
= "drvGetDefaultCommConfigW";
72 pGetDefaultCommConfigW
= (VOID
*) GetProcAddress(hdll
, ptr
);
73 if (!pGetDefaultCommConfigW
) return ptr
;
79 /* ################# */
81 static void test_drvCommConfigDialogA(void)
90 /* test ports "com1" - "com4" */
91 for (i
= 1; i
< 5 ; i
++) {
92 sprintf(bufferA
, fmt_comA
, i
);
94 ZeroMemory(pCC
, sizeof(pCC
));
95 SetLastError(0xdeadbeef);
96 res
= pGetDefaultCommConfigA(bufferA
, pCC
, &len
);
97 if (res
== ERROR_CALL_NOT_IMPLEMENTED
) {
98 /* NT does not implement the ANSI API */
99 skip("*A not implemented\n");
103 if (res
== ERROR_SUCCESS
) {
105 if (winetest_interactive
) {
106 SetLastError(0xdeadbeef);
107 res
= pCommConfigDialogA(bufferA
, NULL
, pCC
);
108 /* OK: ERROR_SUCCESS, Cancel: ERROR_CANCELLED */
109 trace("returned %u with %u for '%s'\n", res
, GetLastError(), bufferA
);
112 ZeroMemory(pCC
, sizeof(pCC
));
113 SetLastError(0xdeadbeef);
114 res
= pCommConfigDialogA(bufferA
, NULL
, pCC
);
115 ok( res
== ERROR_INSUFFICIENT_BUFFER
,
116 "returned %u with %u for '%s' (expected ERROR_INSUFFICIENT_BUFFER)\n",
117 res
, GetLastError(), bufferA
);
120 SetLastError(0xdeadbeef);
121 res
= pCommConfigDialogA(bufferA
, NULL
, NULL
);
122 ok( res
== ERROR_INVALID_PARAMETER
,
123 "returned %u with %u for '%s' (expected ERROR_INVALID_PARAMETER)\n",
124 res
, GetLastError(), bufferA
);
129 ZeroMemory(pCC
, sizeof(pCC
));
130 SetLastError(0xdeadbeef);
131 res
= pCommConfigDialogA(emptyA
, NULL
, pCC
);
132 ok( res
== ERROR_INSUFFICIENT_BUFFER
,
133 "returned %u with %u (expected ERROR_INSUFFICIENT_BUFFER)\n",
134 res
, GetLastError());
137 ZeroMemory(pCC
, sizeof(pCC
));
138 pCC
[0].dwSize
= sizeof(COMMCONFIG
);
139 SetLastError(0xdeadbeef);
140 res
= pCommConfigDialogA(emptyA
, NULL
, pCC
);
141 ok( res
== ERROR_BADKEY
, "returned %u with %u (expected ERROR_BADKEY)\n",
142 res
, GetLastError());
145 ZeroMemory(pCC
, sizeof(pCC
));
146 SetLastError(0xdeadbeef);
147 res
= pCommConfigDialogA(NULL
, NULL
, pCC
);
148 ok( res
== ERROR_INVALID_PARAMETER
,
149 "returned %u with %u (expected ERROR_INVALID_PARAMETER)\n",
150 res
, GetLastError());
153 /* ################# */
155 static void test_drvCommConfigDialogW(void)
165 /* test ports "com1" - "com4" */
166 for (i
= 1; i
< 5 ; i
++) {
167 sprintf(bufferA
, fmt_comA
, i
);
168 MultiByteToWideChar( CP_ACP
, 0, bufferA
, -1, bufferW
, sizeof(bufferW
)/sizeof(WCHAR
) );
170 ZeroMemory(pCC
, sizeof(pCC
));
171 SetLastError(0xdeadbeef);
172 res
= pGetDefaultCommConfigW(bufferW
, pCC
, &len
);
173 if (res
== ERROR_CALL_NOT_IMPLEMENTED
) {
174 skip("*W not implemented\n");
178 if (res
== ERROR_SUCCESS
) {
180 if (winetest_interactive
) {
181 SetLastError(0xdeadbeef);
182 res
= pCommConfigDialogW(bufferW
, NULL
, pCC
);
183 /* OK: ERROR_SUCCESS, Cancel: ERROR_CANCELLED */
184 trace("returned %u with %u for '%s'\n", res
, GetLastError(), bufferA
);
187 ZeroMemory(pCC
, sizeof(pCC
));
188 SetLastError(0xdeadbeef);
189 res
= pCommConfigDialogW(bufferW
, NULL
, pCC
);
190 ok( res
== ERROR_INSUFFICIENT_BUFFER
,
191 "returned %u with %u for '%s' (expected ERROR_INSUFFICIENT_BUFFER)\n",
192 res
, GetLastError(), bufferA
);
194 SetLastError(0xdeadbeef);
195 res
= pCommConfigDialogW(bufferW
, NULL
, NULL
);
196 ok( res
== ERROR_INVALID_PARAMETER
,
197 "returned %u with %u for '%s' (expected ERROR_INVALID_PARAMETER)\n",
198 res
, GetLastError(), bufferA
);
203 ZeroMemory(pCC
, sizeof(pCC
));
204 SetLastError(0xdeadbeef);
205 res
= pCommConfigDialogW(emptyW
, NULL
, pCC
);
206 ok( res
== ERROR_INSUFFICIENT_BUFFER
,
207 "returned %u with %u (expected ERROR_INSUFFICIENT_BUFFER)\n",
208 res
, GetLastError());
211 ZeroMemory(pCC
, sizeof(pCC
));
212 pCC
[0].dwSize
= sizeof(COMMCONFIG
);
213 SetLastError(0xdeadbeef);
214 res
= pCommConfigDialogW(emptyW
, NULL
, pCC
);
215 ok( res
== ERROR_BADKEY
, "returned %u with %u (expected ERROR_BADKEY)\n",
216 res
, GetLastError());
219 ZeroMemory(pCC
, sizeof(pCC
));
220 SetLastError(0xdeadbeef);
221 res
= pCommConfigDialogW(NULL
, NULL
, pCC
);
222 ok( res
== ERROR_INVALID_PARAMETER
,
223 "returned %u with %u (expected ERROR_INVALID_PARAMETER)\n",
224 res
, GetLastError());
228 /* ################# */
230 static void test_drvGetDefaultCommConfigA(void)
239 /* off by one: one byte smaller */
240 i
= sizeof(COMMCONFIG
);
241 len
= sizeof(COMMCONFIG
) -1;
242 ZeroMemory(pCC
, sizeof(pCC
));
243 SetLastError(0xdeadbeef);
244 res
= pGetDefaultCommConfigA(com1A
, pCC
, &len
);
245 if (res
== ERROR_CALL_NOT_IMPLEMENTED
) {
246 /* NT does not implement the ANSI API */
247 skip("*A not implemented\n");
250 ok( (res
== ERROR_INSUFFICIENT_BUFFER
) && (len
>= i
),
251 "returned %u with %u and %u (expected "
252 "ERROR_INSUFFICIENT_BUFFER and '>= %u')\n", res
, GetLastError(), len
, i
);
254 /* test ports "com0" - "com10" */
255 for (i
= 0; i
< 11 ; i
++) {
256 sprintf(bufferA
, fmt_comA
, i
);
258 ZeroMemory(pCC
, sizeof(pCC
));
259 SetLastError(0xdeadbeef);
260 res
= pGetDefaultCommConfigA(bufferA
, pCC
, &len
);
262 ok( res
== ERROR_BADKEY
,
263 "returned %u with %u and %u for %s (expected "
264 "ERROR_BADKEY)\n", res
, GetLastError(), len
, bufferA
);
268 ok((res
== ERROR_SUCCESS
) || (res
== ERROR_BADKEY
),
269 "returned %u with %u and %u for %s (expected ERROR_SUCCESS or "
270 "ERROR_BADKEY)\n", res
, GetLastError(), len
, bufferA
);
273 /* a name with a colon is invalid */
274 if (res
== ERROR_SUCCESS
) {
275 lstrcatA(bufferA
, str_colonA
);
277 ZeroMemory(pCC
, sizeof(pCC
));
278 res
= pGetDefaultCommConfigA(bufferA
, pCC
, &len
);
279 ok( res
== ERROR_BADKEY
,
280 "returned %u with %u and %u for %s (expected '0' with "
281 "ERROR_BADKEY)\n", res
, GetLastError(), len
, bufferA
);
286 /* an empty String is not allowed */
288 ZeroMemory(pCC
, sizeof(pCC
));
289 SetLastError(0xdeadbeef);
290 res
= pGetDefaultCommConfigA(emptyA
, pCC
, &len
);
291 ok( res
== ERROR_BADKEY
,
292 "returned %u with %u and %u for %s (expected ERROR_BADKEY)\n",
293 res
, GetLastError(), len
, emptyA
);
295 /* some NULL checks */
297 ZeroMemory(pCC
, sizeof(pCC
));
298 SetLastError(0xdeadbeef);
299 res
= pGetDefaultCommConfigA(NULL
, pCC
, &len
);
300 ok( res
== ERROR_INVALID_PARAMETER
,
301 "returned %u with %u and %u for NULL (expected ERROR_INVALID_PARAMETER)\n",
302 res
, GetLastError(), len
);
306 SetLastError(0xdeadbeef);
307 res
= pGetDefaultCommConfigA(com1A
, NULL
, &len
);
308 ok( res
== ERROR_INVALID_PARAMETER
,
309 "returned %u with %u and %u (expected ERROR_INVALID_PARAMETER)\n",
310 res
, GetLastError(), len
);
313 SetLastError(0xdeadbeef);
314 res
= pGetDefaultCommConfigA(com1A
, pCC
, NULL
);
315 ok( res
== ERROR_INVALID_PARAMETER
,
316 "returned %u with %u (expected ERROR_INVALID_PARAMETER)\n",
317 res
, GetLastError());
320 /* ################# */
322 static void test_drvGetDefaultCommConfigW(void)
332 /* off by one: one byte smaller */
333 i
= sizeof(COMMCONFIG
);
334 len
= sizeof(COMMCONFIG
) -1;
335 ZeroMemory(pCC
, sizeof(pCC
));
336 SetLastError(0xdeadbeef);
337 res
= pGetDefaultCommConfigW(com1W
, pCC
, &len
);
338 if (res
== ERROR_CALL_NOT_IMPLEMENTED
) {
339 skip("*W not implemented\n");
342 ok( (res
== ERROR_INSUFFICIENT_BUFFER
) && (len
>= i
),
343 "returned %u with %u and %u (expected "
344 "ERROR_INSUFFICIENT_BUFFER and '>= %u')\n", res
, GetLastError(), len
, i
);
346 /* test ports "com0" - "com10" */
347 for (i
= 0; i
< 11 ; i
++) {
348 sprintf(bufferA
, fmt_comA
, i
);
349 MultiByteToWideChar( CP_ACP
, 0, bufferA
, -1, bufferW
, sizeof(bufferW
)/sizeof(WCHAR
) );
351 ZeroMemory(pCC
, sizeof(pCC
));
352 SetLastError(0xdeadbeef);
353 res
= pGetDefaultCommConfigW(bufferW
, pCC
, &len
);
355 ok( res
== ERROR_BADKEY
,
356 "returned %u with %u and %u for %s (expected "
357 "ERROR_BADKEY)\n", res
, GetLastError(), len
, bufferA
);
361 ok((res
== ERROR_SUCCESS
) || (res
== ERROR_BADKEY
),
362 "returned %u with %u and %u for %s (expected ERROR_SUCCESS or "
363 "ERROR_BADKEY)\n", res
, GetLastError(), len
, bufferA
);
366 /* a name with a colon is invalid */
367 if (res
== ERROR_SUCCESS
) {
368 lstrcatA(bufferA
, str_colonA
);
369 lstrcatW(bufferW
, str_colonW
);
371 ZeroMemory(pCC
, sizeof(pCC
));
372 res
= pGetDefaultCommConfigW(bufferW
, pCC
, &len
);
373 ok( res
== ERROR_BADKEY
,
374 "returned %u with %u and %u for %s (expected '0' with "
375 "ERROR_BADKEY)\n", res
, GetLastError(), len
, bufferA
);
379 /* an empty String is not allowed */
381 ZeroMemory(pCC
, sizeof(pCC
));
382 SetLastError(0xdeadbeef);
383 res
= pGetDefaultCommConfigW(emptyW
, pCC
, &len
);
384 ok( res
== ERROR_BADKEY
,
385 "returned %u with %u and %u for %s (expected ERROR_BADKEY)\n",
386 res
, GetLastError(), len
, emptyA
);
388 /* some NULL checks */
390 ZeroMemory(pCC
, sizeof(pCC
));
391 SetLastError(0xdeadbeef);
392 res
= pGetDefaultCommConfigW(NULL
, pCC
, &len
);
393 ok( res
== ERROR_INVALID_PARAMETER
,
394 "returned %u with %u and %u for NULL (expected ERROR_INVALID_PARAMETER)\n",
395 res
, GetLastError(), len
);
399 SetLastError(0xdeadbeef);
400 res
= pGetDefaultCommConfigW(com1W
, NULL
, &len
);
401 ok( res
== ERROR_INVALID_PARAMETER
,
402 "returned %u with %u and %u (expected ERROR_INVALID_PARAMETER)\n",
403 res
, GetLastError(), len
);
406 SetLastError(0xdeadbeef);
407 res
= pGetDefaultCommConfigW(com1W
, pCC
, NULL
);
408 ok( res
== ERROR_INVALID_PARAMETER
,
409 "returned %u with %u (expected ERROR_INVALID_PARAMETER)\n",
410 res
, GetLastError());
414 /* ################# */
420 ptr
= load_functions();
422 skip("got NULL with %u for %s\n", GetLastError(), ptr
);
426 test_drvCommConfigDialogA();
427 test_drvCommConfigDialogW();
428 test_drvGetDefaultCommConfigA();
429 test_drvGetDefaultCommConfigW();