1 /*
2  * PROJECT:         ReactOS api tests
3  * LICENSE:         GPL - See COPYING in the top level directory
4  * PURPOSE:         Test for SetWindowTheme
5  * PROGRAMMERS:     Giannis Adamopoulos
6  */
7 
8 #include <apitest.h>
9 #include <stdio.h>
10 #include <windows.h>
11 #include <uxtheme.h>
12 
TestParams(HWND hwnd)13 void TestParams(HWND hwnd)
14 {
15     HRESULT hr;
16 
17     hr = SetWindowTheme(0, NULL, NULL);
18     ok (hr == E_HANDLE, "Expected E_HANDLE got 0x%lx error\n", hr);
19 
20     hr = SetWindowTheme((HWND)(ULONG_PTR)0xdeaddeaddeaddeadULL, NULL, NULL);
21     ok (hr == E_HANDLE, "Expected E_HANDLE got 0x%lx error\n", hr);
22 
23     hr = SetWindowTheme(hwnd, NULL, NULL);
24     ok (hr == S_OK, "Expected S_OK got 0x%lx error\n", hr);
25 
26     hr = SetWindowTheme(hwnd, L"none", L"none");
27     ok (hr == S_OK, "Expected S_OK got 0x%lx error\n", hr);
28 
29     hr = SetWindowTheme(hwnd, NULL, L"none");
30     ok (hr == S_OK, "Expected S_OK got 0x%lx error\n", hr);
31 
32     hr = SetWindowTheme(hwnd, L"none", NULL);
33     ok (hr == S_OK, "Expected S_OK got 0x%lx error\n", hr);
34 
35     hr = SetWindowTheme(hwnd, L"", L"");
36     ok (hr == S_OK, "Expected S_OK got 0x%lx error\n", hr);
37 }
38 
TestTheme(HWND hwnd)39 void TestTheme(HWND hwnd)
40 {
41     HRESULT hr;
42     HTHEME htheme1, htheme2;
43 
44     hr = SetWindowTheme(hwnd, NULL, NULL);
45     ok (hr == S_OK, "Expected S_OK got 0x%lx error\n", hr);
46 
47     htheme1 = OpenThemeData(hwnd, L"Toolbar");
48     if (IsThemeActive())
49         ok (htheme1 != NULL, "OpenThemeData failed\n");
50     else
51         skip("Theme not active\n");
52 
53     hr = SetWindowTheme(hwnd, L"", L"");
54     ok (hr == S_OK, "Expected S_OK got 0x%lx error\n", hr);
55 
56     htheme2 = OpenThemeData(hwnd, L"Toolbar");
57     ok (htheme2 == NULL, "Expected OpenThemeData to fail\n");
58 
59     hr = SetWindowTheme(hwnd, L"TrayNotify", L"");
60     ok (hr == S_OK, "Expected S_OK got 0x%lx error\n", hr);
61 
62     htheme2 = OpenThemeData(hwnd, L"Toolbar");
63     ok (htheme2 == NULL, "Expected OpenThemeData to fail\n");
64 
65     hr = SetWindowTheme(hwnd, L"TrayNotify", NULL);
66     ok (hr == S_OK, "Expected S_OK got 0x%lx error\n", hr);
67 
68     htheme2 = OpenThemeData(hwnd, L"Toolbar");
69     if (IsThemeActive())
70     {
71         ok (htheme2 != NULL, "OpenThemeData failed\n");
72         ok(htheme1 != htheme2, "Expected different theme data\n");
73     }
74     else
75     {
76         skip("Theme not active\n");
77     }
78 }
79 
START_TEST(SetWindowTheme)80 START_TEST(SetWindowTheme)
81 {
82     HWND hwnd;
83 
84     hwnd = CreateWindowW(L"button", L"Test window", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 100, 100, 200, 200, 0, NULL, NULL, NULL);
85     ok (hwnd != NULL, "Expected CreateWindowW to succeed\n");
86 
87     TestParams(hwnd);
88     TestTheme(hwnd);
89 
90     DestroyWindow(hwnd);
91 }
92