d40679d0d55ccda3ddc6ab79149ba6d159a59071
[reactos.git] / rostests / winetests / uxtheme / system.c
1 /* Unit test suite for uxtheme API functions
2 *
3 * Copyright 2006 Paul Vriens
4 *
5 * This library is free software; you can redistribute it and/or
6 * modify it under the terms of the GNU Lesser General Public
7 * License as published by the Free Software Foundation; either
8 * version 2.1 of the License, or (at your option) any later version.
9 *
10 * This library is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 * Lesser General Public License for more details.
14 *
15 * You should have received a copy of the GNU Lesser General Public
16 * License along with this library; if not, write to the Free Software
17 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
18 *
19 */
20
21 #include <stdarg.h>
22
23 #include "windows.h"
24 #include "vfwmsgs.h"
25 #include "uxtheme.h"
26
27 #include "wine/test.h"
28
29 static HTHEME (WINAPI * pOpenThemeDataEx)(HWND, LPCWSTR, DWORD);
30
31 #define UXTHEME_GET_PROC(func) p ## func = (void*)GetProcAddress(hUxtheme, #func);
32
33 static void init_funcs(void)
34 {
35 HMODULE hUxtheme = GetModuleHandleA("uxtheme.dll");
36 UXTHEME_GET_PROC(OpenThemeDataEx)
37 }
38
39 static void test_IsThemed(void)
40 {
41 BOOL bThemeActive;
42 BOOL bAppThemed;
43 BOOL bTPDefined;
44
45 bThemeActive = IsThemeActive();
46 trace("Theming is %s\n", (bThemeActive) ? "active" : "inactive");
47
48 bAppThemed = IsAppThemed();
49 trace("Test executable is %s\n", (bAppThemed) ? "themed" : "not themed");
50
51 SetLastError(0xdeadbeef);
52 bTPDefined = IsThemePartDefined(NULL, 0 , 0);
53 ok( bTPDefined == FALSE, "Expected FALSE\n");
54 ok( GetLastError() == E_HANDLE,
55 "Expected E_HANDLE, got 0x%08x\n",
56 GetLastError());
57 }
58
59 static void test_GetWindowTheme(void)
60 {
61 HTHEME hTheme;
62 HWND hWnd;
63 BOOL bDestroyed;
64
65 SetLastError(0xdeadbeef);
66 hTheme = GetWindowTheme(NULL);
67 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
68 todo_wine
69 ok( GetLastError() == E_HANDLE,
70 "Expected E_HANDLE, got 0x%08x\n",
71 GetLastError());
72
73 /* Only do the bare minimum to get a valid hwnd */
74 hWnd = CreateWindowExA(0, "static", "", WS_POPUP, 0,0,100,100,0, 0, 0, NULL);
75 if (!hWnd) return;
76
77 SetLastError(0xdeadbeef);
78 hTheme = GetWindowTheme(hWnd);
79 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
80 ok( GetLastError() == 0xdeadbeef,
81 "Expected 0xdeadbeef, got 0x%08x\n",
82 GetLastError());
83
84 bDestroyed = DestroyWindow(hWnd);
85 if (!bDestroyed)
86 trace("Window %p couldn't be destroyed : 0x%08x\n",
87 hWnd, GetLastError());
88 }
89
90 static void test_SetWindowTheme(void)
91 {
92 HRESULT hRes;
93 HWND hWnd;
94 BOOL bDestroyed;
95
96 hRes = SetWindowTheme(NULL, NULL, NULL);
97 todo_wine
98 ok( hRes == E_HANDLE, "Expected E_HANDLE, got 0x%08x\n", hRes);
99
100 /* Only do the bare minimum to get a valid hwnd */
101 hWnd = CreateWindowExA(0, "static", "", WS_POPUP, 0,0,100,100,0, 0, 0, NULL);
102 if (!hWnd) return;
103
104 hRes = SetWindowTheme(hWnd, NULL, NULL);
105 ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes);
106
107 bDestroyed = DestroyWindow(hWnd);
108 if (!bDestroyed)
109 trace("Window %p couldn't be destroyed : 0x%08x\n",
110 hWnd, GetLastError());
111 }
112
113 static void test_OpenThemeData(void)
114 {
115 HTHEME hTheme, hTheme2;
116 HWND hWnd;
117 BOOL bThemeActive;
118 HRESULT hRes;
119 BOOL bDestroyed;
120 BOOL bTPDefined;
121
122 WCHAR szInvalidClassList[] = {'D','E','A','D','B','E','E','F', 0 };
123 WCHAR szButtonClassList[] = {'B','u','t','t','o','n', 0 };
124 WCHAR szButtonClassList2[] = {'b','U','t','T','o','N', 0 };
125 WCHAR szClassList[] = {'B','u','t','t','o','n',';','L','i','s','t','B','o','x', 0 };
126
127 bThemeActive = IsThemeActive();
128
129 /* All NULL */
130 SetLastError(0xdeadbeef);
131 hTheme = OpenThemeData(NULL, NULL);
132 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
133 ok( GetLastError() == E_POINTER,
134 "Expected GLE() to be E_POINTER, got 0x%08x\n",
135 GetLastError());
136
137 /* A NULL hWnd and an invalid classlist */
138 SetLastError(0xdeadbeef);
139 hTheme = OpenThemeData(NULL, szInvalidClassList);
140 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
141 todo_wine
142 ok( GetLastError() == E_PROP_ID_UNSUPPORTED,
143 "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n",
144 GetLastError());
145
146 SetLastError(0xdeadbeef);
147 hTheme = OpenThemeData(NULL, szClassList);
148 if (bThemeActive)
149 {
150 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
151 todo_wine
152 ok( GetLastError() == ERROR_SUCCESS,
153 "Expected ERROR_SUCCESS, got 0x%08x\n",
154 GetLastError());
155 }
156 else
157 {
158 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
159 todo_wine
160 ok( GetLastError() == E_PROP_ID_UNSUPPORTED,
161 "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n",
162 GetLastError());
163 }
164
165 /* Only do the bare minimum to get a valid hdc */
166 hWnd = CreateWindowExA(0, "static", "", WS_POPUP, 0,0,100,100,0, 0, 0, NULL);
167 if (!hWnd) return;
168
169 SetLastError(0xdeadbeef);
170 hTheme = OpenThemeData(hWnd, NULL);
171 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
172 ok( GetLastError() == E_POINTER,
173 "Expected GLE() to be E_POINTER, got 0x%08x\n",
174 GetLastError());
175
176 SetLastError(0xdeadbeef);
177 hTheme = OpenThemeData(hWnd, szInvalidClassList);
178 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
179 todo_wine
180 ok( GetLastError() == E_PROP_ID_UNSUPPORTED,
181 "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n",
182 GetLastError());
183
184 if (!bThemeActive)
185 {
186 SetLastError(0xdeadbeef);
187 hTheme = OpenThemeData(hWnd, szButtonClassList);
188 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
189 todo_wine
190 ok( GetLastError() == E_PROP_ID_UNSUPPORTED,
191 "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n",
192 GetLastError());
193 skip("No active theme, skipping rest of OpenThemeData tests\n");
194 return;
195 }
196
197 /* Only do the next checks if we have an active theme */
198
199 SetLastError(0xdeadbeef);
200 hTheme = OpenThemeData(hWnd, szButtonClassList);
201 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
202 todo_wine
203 ok( GetLastError() == ERROR_SUCCESS,
204 "Expected ERROR_SUCCESS, got 0x%08x\n",
205 GetLastError());
206
207 /* Test with bUtToN instead of Button */
208 SetLastError(0xdeadbeef);
209 hTheme = OpenThemeData(hWnd, szButtonClassList2);
210 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
211 todo_wine
212 ok( GetLastError() == ERROR_SUCCESS,
213 "Expected ERROR_SUCCESS, got 0x%08x\n",
214 GetLastError());
215
216 SetLastError(0xdeadbeef);
217 hTheme = OpenThemeData(hWnd, szClassList);
218 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
219 todo_wine
220 ok( GetLastError() == ERROR_SUCCESS,
221 "Expected ERROR_SUCCESS, got 0x%08x\n",
222 GetLastError());
223
224 /* GetWindowTheme should return the last handle opened by OpenThemeData */
225 SetLastError(0xdeadbeef);
226 hTheme2 = GetWindowTheme(hWnd);
227 ok( hTheme == hTheme2, "Expected the same HTHEME handle (%p<->%p)\n",
228 hTheme, hTheme2);
229 ok( GetLastError() == 0xdeadbeef,
230 "Expected 0xdeadbeef, got 0x%08x\n",
231 GetLastError());
232
233 hRes = CloseThemeData(hTheme);
234 ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes);
235
236 /* Close a second time */
237 hRes = CloseThemeData(hTheme);
238 ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes);
239
240 /* See if closing makes a difference for GetWindowTheme */
241 SetLastError(0xdeadbeef);
242 hTheme2 = NULL;
243 hTheme2 = GetWindowTheme(hWnd);
244 ok( hTheme == hTheme2, "Expected the same HTHEME handle (%p<->%p)\n",
245 hTheme, hTheme2);
246 ok( GetLastError() == 0xdeadbeef,
247 "Expected 0xdeadbeef, got 0x%08x\n",
248 GetLastError());
249
250 SetLastError(0xdeadbeef);
251 bTPDefined = IsThemePartDefined(hTheme, 0 , 0);
252 todo_wine
253 {
254 ok( bTPDefined == FALSE, "Expected FALSE\n");
255 ok( GetLastError() == ERROR_SUCCESS,
256 "Expected ERROR_SUCCESS, got 0x%08x\n",
257 GetLastError());
258 }
259
260 bDestroyed = DestroyWindow(hWnd);
261 if (!bDestroyed)
262 trace("Window %p couldn't be destroyed : 0x%08x\n",
263 hWnd, GetLastError());
264 }
265
266 static void test_OpenThemeDataEx(void)
267 {
268 HTHEME hTheme;
269 HWND hWnd;
270 BOOL bThemeActive;
271 BOOL bDestroyed;
272
273 WCHAR szInvalidClassList[] = {'D','E','A','D','B','E','E','F', 0 };
274 WCHAR szButtonClassList[] = {'B','u','t','t','o','n', 0 };
275 WCHAR szButtonClassList2[] = {'b','U','t','T','o','N', 0 };
276 WCHAR szClassList[] = {'B','u','t','t','o','n',';','L','i','s','t','B','o','x', 0 };
277
278 if (!pOpenThemeDataEx)
279 {
280 win_skip("OpenThemeDataEx not available\n");
281 return;
282 }
283
284 bThemeActive = IsThemeActive();
285
286 /* All NULL */
287 SetLastError(0xdeadbeef);
288 hTheme = pOpenThemeDataEx(NULL, NULL, 0);
289 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
290 ok( GetLastError() == E_POINTER,
291 "Expected GLE() to be E_POINTER, got 0x%08x\n",
292 GetLastError());
293
294 /* A NULL hWnd and an invalid classlist without flags */
295 SetLastError(0xdeadbeef);
296 hTheme = pOpenThemeDataEx(NULL, szInvalidClassList, 0);
297 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
298 todo_wine
299 ok( GetLastError() == E_PROP_ID_UNSUPPORTED,
300 "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n",
301 GetLastError());
302
303 SetLastError(0xdeadbeef);
304 hTheme = pOpenThemeDataEx(NULL, szClassList, 0);
305 if (bThemeActive)
306 {
307 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
308 todo_wine
309 ok( GetLastError() == ERROR_SUCCESS,
310 "Expected ERROR_SUCCESS, got 0x%08x\n",
311 GetLastError());
312 }
313 else
314 {
315 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
316 todo_wine
317 ok( GetLastError() == E_PROP_ID_UNSUPPORTED,
318 "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n",
319 GetLastError());
320 }
321
322 /* Only do the bare minimum to get a valid hdc */
323 hWnd = CreateWindowExA(0, "static", "", WS_POPUP, 0,0,100,100,0, 0, 0, NULL);
324 if (!hWnd) return;
325
326 SetLastError(0xdeadbeef);
327 hTheme = pOpenThemeDataEx(hWnd, NULL, 0);
328 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
329 ok( GetLastError() == E_POINTER,
330 "Expected GLE() to be E_POINTER, got 0x%08x\n",
331 GetLastError());
332
333 SetLastError(0xdeadbeef);
334 hTheme = pOpenThemeDataEx(hWnd, szInvalidClassList, 0);
335 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
336 todo_wine
337 ok( GetLastError() == E_PROP_ID_UNSUPPORTED,
338 "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n",
339 GetLastError());
340
341 if (!bThemeActive)
342 {
343 SetLastError(0xdeadbeef);
344 hTheme = pOpenThemeDataEx(hWnd, szButtonClassList, 0);
345 ok( hTheme == NULL, "Expected a NULL return, got %p\n", hTheme);
346 todo_wine
347 ok( GetLastError() == E_PROP_ID_UNSUPPORTED,
348 "Expected GLE() to be E_PROP_ID_UNSUPPORTED, got 0x%08x\n",
349 GetLastError());
350 skip("No active theme, skipping rest of OpenThemeDataEx tests\n");
351 return;
352 }
353
354 /* Only do the next checks if we have an active theme */
355
356 SetLastError(0xdeadbeef);
357 hTheme = pOpenThemeDataEx(hWnd, szButtonClassList, 0);
358 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
359 todo_wine
360 ok( GetLastError() == ERROR_SUCCESS,
361 "Expected ERROR_SUCCESS, got 0x%08x\n",
362 GetLastError());
363
364 SetLastError(0xdeadbeef);
365 hTheme = pOpenThemeDataEx(hWnd, szButtonClassList, OTD_FORCE_RECT_SIZING);
366 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
367 todo_wine
368 ok( GetLastError() == ERROR_SUCCESS,
369 "Expected ERROR_SUCCESS, got 0x%08x\n",
370 GetLastError());
371
372 SetLastError(0xdeadbeef);
373 hTheme = pOpenThemeDataEx(hWnd, szButtonClassList, OTD_NONCLIENT);
374 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
375 todo_wine
376 ok( GetLastError() == ERROR_SUCCESS,
377 "Expected ERROR_SUCCESS, got 0x%08x\n",
378 GetLastError());
379
380 SetLastError(0xdeadbeef);
381 hTheme = pOpenThemeDataEx(hWnd, szButtonClassList, 0x3);
382 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
383 todo_wine
384 ok( GetLastError() == ERROR_SUCCESS,
385 "Expected ERROR_SUCCESS, got 0x%08x\n",
386 GetLastError());
387
388 /* Test with bUtToN instead of Button */
389 SetLastError(0xdeadbeef);
390 hTheme = pOpenThemeDataEx(hWnd, szButtonClassList2, 0);
391 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
392 todo_wine
393 ok( GetLastError() == ERROR_SUCCESS,
394 "Expected ERROR_SUCCESS, got 0x%08x\n",
395 GetLastError());
396
397 SetLastError(0xdeadbeef);
398 hTheme = pOpenThemeDataEx(hWnd, szClassList, 0);
399 ok( hTheme != NULL, "got NULL, expected a HTHEME handle\n");
400 todo_wine
401 ok( GetLastError() == ERROR_SUCCESS,
402 "Expected ERROR_SUCCESS, got 0x%08x\n",
403 GetLastError());
404
405 bDestroyed = DestroyWindow(hWnd);
406 if (!bDestroyed)
407 trace("Window %p couldn't be destroyed : 0x%08x\n",
408 hWnd, GetLastError());
409 }
410
411 static void test_GetCurrentThemeName(void)
412 {
413 BOOL bThemeActive;
414 HRESULT hRes;
415 WCHAR currentTheme[MAX_PATH];
416 WCHAR currentColor[MAX_PATH];
417 WCHAR currentSize[MAX_PATH];
418
419 bThemeActive = IsThemeActive();
420
421 /* All NULLs */
422 hRes = GetCurrentThemeName(NULL, 0, NULL, 0, NULL, 0);
423 if (bThemeActive)
424 ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes);
425 else
426 ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
427
428 /* Number of characters given is 0 */
429 hRes = GetCurrentThemeName(currentTheme, 0, NULL, 0, NULL, 0);
430 if (bThemeActive)
431 ok( hRes == S_OK || broken(hRes == E_FAIL /* WinXP SP1 */), "Expected S_OK, got 0x%08x\n", hRes);
432 else
433 ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
434
435 hRes = GetCurrentThemeName(currentTheme, 2, NULL, 0, NULL, 0);
436 if (bThemeActive)
437 todo_wine
438 ok(hRes == E_NOT_SUFFICIENT_BUFFER ||
439 broken(hRes == E_FAIL /* WinXP SP1 */),
440 "Expected E_NOT_SUFFICIENT_BUFFER, got 0x%08x\n", hRes);
441 else
442 ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
443
444 /* The same is true if the number of characters is too small for Color and/or Size */
445 hRes = GetCurrentThemeName(currentTheme, sizeof(currentTheme) / sizeof(WCHAR),
446 currentColor, 2,
447 currentSize, sizeof(currentSize) / sizeof(WCHAR));
448 if (bThemeActive)
449 todo_wine
450 ok(hRes == E_NOT_SUFFICIENT_BUFFER ||
451 broken(hRes == E_FAIL /* WinXP SP1 */),
452 "Expected E_NOT_SUFFICIENT_BUFFER, got 0x%08x\n", hRes);
453 else
454 ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
455
456 /* Given number of characters is correct */
457 hRes = GetCurrentThemeName(currentTheme, sizeof(currentTheme) / sizeof(WCHAR), NULL, 0, NULL, 0);
458 if (bThemeActive)
459 ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes);
460 else
461 ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
462
463 /* Given number of characters for the theme name is too large */
464 hRes = GetCurrentThemeName(currentTheme, sizeof(currentTheme), NULL, 0, NULL, 0);
465 if (bThemeActive)
466 ok( hRes == E_POINTER || hRes == S_OK, "Expected E_POINTER or S_OK, got 0x%08x\n", hRes);
467 else
468 ok( hRes == E_PROP_ID_UNSUPPORTED ||
469 hRes == E_POINTER, /* win2k3 */
470 "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
471
472 /* The too large case is only for the theme name, not for color name or size name */
473 hRes = GetCurrentThemeName(currentTheme, sizeof(currentTheme) / sizeof(WCHAR),
474 currentColor, sizeof(currentTheme),
475 currentSize, sizeof(currentSize) / sizeof(WCHAR));
476 if (bThemeActive)
477 ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes);
478 else
479 ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
480
481 hRes = GetCurrentThemeName(currentTheme, sizeof(currentTheme) / sizeof(WCHAR),
482 currentColor, sizeof(currentTheme) / sizeof(WCHAR),
483 currentSize, sizeof(currentSize));
484 if (bThemeActive)
485 ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes);
486 else
487 ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
488
489 /* Correct call */
490 hRes = GetCurrentThemeName(currentTheme, sizeof(currentTheme) / sizeof(WCHAR),
491 currentColor, sizeof(currentColor) / sizeof(WCHAR),
492 currentSize, sizeof(currentSize) / sizeof(WCHAR));
493 if (bThemeActive)
494 ok( hRes == S_OK, "Expected S_OK, got 0x%08x\n", hRes);
495 else
496 ok( hRes == E_PROP_ID_UNSUPPORTED, "Expected E_PROP_ID_UNSUPPORTED, got 0x%08x\n", hRes);
497 }
498
499 static void test_CloseThemeData(void)
500 {
501 HRESULT hRes;
502
503 hRes = CloseThemeData(NULL);
504 ok( hRes == E_HANDLE, "Expected E_HANDLE, got 0x%08x\n", hRes);
505 hRes = CloseThemeData(INVALID_HANDLE_VALUE);
506 ok( hRes == E_HANDLE, "Expected E_HANDLE, got 0x%08x\n", hRes);
507 }
508
509 START_TEST(system)
510 {
511 init_funcs();
512
513 /* No real functional tests will be done (yet). The current tests
514 * only show input/return behaviour
515 */
516
517 /* IsThemeActive, IsAppThemed and IsThemePartDefined*/
518 trace("Starting test_IsThemed()\n");
519 test_IsThemed();
520
521 /* GetWindowTheme */
522 trace("Starting test_GetWindowTheme()\n");
523 test_GetWindowTheme();
524
525 /* SetWindowTheme */
526 trace("Starting test_SetWindowTheme()\n");
527 test_SetWindowTheme();
528
529 /* OpenThemeData, a bit more functional now */
530 trace("Starting test_OpenThemeData()\n");
531 test_OpenThemeData();
532
533 /* OpenThemeDataEx */
534 trace("Starting test_OpenThemeDataEx()\n");
535 test_OpenThemeDataEx();
536
537 /* GetCurrentThemeName */
538 trace("Starting test_GetCurrentThemeName()\n");
539 test_GetCurrentThemeName();
540
541 /* CloseThemeData */
542 trace("Starting test_CloseThemeData()\n");
543 test_CloseThemeData();
544 }