1 /*
2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL-2.0+ (https://spdx.org/licenses/GPL-2.0+)
4 * PURPOSE: Tests for GetClassInfo
5 * COPYRIGHT: Copyright 2023 Timo Kreuzer <timo.kreuzer@reactos.org>
6 */
7
8 #include "precomp.h"
9
GetWinVersion(VOID)10 static USHORT GetWinVersion(VOID)
11 {
12 return ((GetVersion() & 0xFF) << 8) |
13 ((GetVersion() >> 8) & 0xFF);
14 }
15
Test_Desktop(VOID)16 VOID Test_Desktop(VOID)
17 {
18 WNDCLASSEXW wcex;
19 BOOL result;
20
21 memset(&wcex, 0xab, sizeof(wcex));
22
23 result = GetClassInfoExW(GetModuleHandle(NULL), (LPCWSTR)WC_DESKTOP, &wcex);
24 ok_int(result, (ULONG_PTR)WC_DESKTOP);
25
26 ok_hex(wcex.cbSize, 0xabababab);
27 ok_hex(wcex.style, 0x8);
28 ok(wcex.lpfnWndProc != NULL, "lpfnWndProc shound't be NULL\n");
29 ok_int(wcex.cbClsExtra, 0);
30 ok_int(wcex.cbWndExtra, GetWinVersion() <= 0x502 ? 8 : 0);
31 ok_ptr(wcex.hInstance, GetModuleHandle(NULL));
32 ok_ptr(wcex.hIcon, NULL);
33 ok(wcex.hCursor != NULL, "hCursor shound't be NULL\n");
34 if (GetWinVersion() > 0x502)
35 ok_ptr(wcex.hbrBackground, (HBRUSH)(ULONG_PTR)2);
36 else
37 ok(wcex.hbrBackground != NULL, "hbrBackground shound't be NULL\n");
38 ok_ptr(wcex.lpszMenuName, NULL);
39 ok_ptr(wcex.lpszClassName, (LPCWSTR)WC_DESKTOP);
40 ok_ptr(wcex.hIconSm, NULL);
41 }
42
Test_Dialog(VOID)43 VOID Test_Dialog(VOID)
44 {
45 WNDCLASSEXW wcex;
46 BOOL result;
47
48 memset(&wcex, 0xab, sizeof(wcex));
49
50 result = GetClassInfoExW(GetModuleHandle(NULL), (LPCWSTR)(ULONG_PTR)WC_DIALOG, &wcex);
51 ok_int(result, (ULONG_PTR)WC_DIALOG);
52
53 ok_hex(wcex.cbSize, 0xabababab);
54 ok_hex(wcex.style, 0x808);
55 ok(wcex.lpfnWndProc != NULL, "lpfnWndProc shound't be NULL\n");
56 ok_int(wcex.cbClsExtra, 0);
57 ok_int(wcex.cbWndExtra, 30); // DLGWINDOWEXTRA
58 ok_ptr(wcex.hInstance, GetModuleHandle(NULL));
59 ok_ptr(wcex.hIcon, NULL);
60 ok(wcex.hCursor != NULL, "hCursor shound't be NULL\n");
61 ok_ptr(wcex.hbrBackground, NULL);
62 ok_ptr(wcex.lpszMenuName, NULL);
63 ok_ptr(wcex.lpszClassName, (LPCWSTR)(ULONG_PTR)WC_DIALOG);
64 ok_ptr(wcex.hIconSm, NULL);
65 }
66
Test_Menu(VOID)67 VOID Test_Menu(VOID)
68 {
69 WNDCLASSEXW wcex;
70 BOOL result;
71
72 memset(&wcex, 0xab, sizeof(wcex));
73
74 result = GetClassInfoExW(GetModuleHandle(NULL), (LPCWSTR)(ULONG_PTR)WC_MENU, &wcex);
75 ok_int(result, (ULONG_PTR)WC_MENU);
76
77 ok_hex(wcex.cbSize, 0xabababab);
78 ok_hex(wcex.style, 0x803);
79 ok_ptr(wcex.lpfnWndProc, NULL);
80 ok_int(wcex.cbClsExtra, 0);
81 ok_int(wcex.cbWndExtra, 16);
82 ok_ptr(wcex.hInstance, GetModuleHandle(NULL));
83 ok_ptr(wcex.hIcon, NULL);
84 ok(wcex.hCursor != NULL, "hCursor shound't be NULL\n");
85 ok_ptr(wcex.hbrBackground, NULL);
86 ok_ptr(wcex.lpszMenuName, NULL);
87 ok_ptr(wcex.lpszClassName, (LPCWSTR)(ULONG_PTR)WC_MENU);
88 ok_ptr(wcex.hIconSm, NULL);
89 }
90
91
Test_SwitchWnd(VOID)92 VOID Test_SwitchWnd(VOID)
93 {
94 WNDCLASSEXW wcex;
95 BOOL result;
96
97 memset(&wcex, 0xab, sizeof(wcex));
98
99 result = GetClassInfoExW(GetModuleHandle(NULL), (LPCWSTR)(ULONG_PTR)WC_SWITCH, &wcex);
100 ok_int(result, (ULONG_PTR)WC_SWITCH);
101
102 ok_hex(wcex.cbSize, 0xabababab);
103 ok_hex(wcex.style, 0x803);
104 ok_ptr(wcex.lpfnWndProc, NULL);
105 ok_int(wcex.cbClsExtra, 0);
106 ok_int(wcex.cbWndExtra, GetWinVersion() <= 0x502 ? sizeof(ULONG_PTR) : 16);
107 ok_ptr(wcex.hInstance, GetModuleHandle(NULL));
108 ok_ptr(wcex.hIcon, NULL);
109 ok(wcex.hCursor != NULL, "hCursor shound't be NULL\n");
110 ok_ptr(wcex.hbrBackground, NULL);
111 ok_ptr(wcex.lpszMenuName, NULL);
112 ok_ptr(wcex.lpszClassName, (LPCWSTR)(ULONG_PTR)WC_SWITCH);
113 ok_ptr(wcex.hIconSm, NULL);
114 }
115
Test_Custom(VOID)116 VOID Test_Custom(VOID)
117 {
118 WNDCLASSEXW wcex;
119 ATOM atom;
120 BOOL result;
121
122 memset(&wcex, 0, sizeof(wcex));
123
124 wcex.cbSize = sizeof(WNDCLASSEXW);
125 wcex.style = 0x1;
126 wcex.lpfnWndProc = DefWindowProcW;
127 wcex.cbClsExtra = 1;
128 wcex.cbWndExtra = 5;
129 wcex.hInstance = GetModuleHandle(NULL);
130 wcex.hIcon = NULL;
131 wcex.hCursor = NULL;
132 wcex.hbrBackground = NULL;
133 wcex.lpszMenuName = NULL;
134 wcex.lpszClassName = L"ProTestClass1";
135 wcex.hIconSm = 0;
136
137 atom = RegisterClassExW(&wcex);
138 ok(atom != 0, "Failed to register class!\n");
139 if (atom == 0)
140 {
141 skip("Failed to register class!");
142 return;
143 }
144
145 memset(&wcex, 0xab, sizeof(wcex));
146
147 result = GetClassInfoExW(GetModuleHandle(NULL), (LPCWSTR)(ULONG_PTR)atom, &wcex);
148 ok_int(result, atom);
149
150 ok_hex(wcex.cbSize, 0xabababab);
151 ok_hex(wcex.style, 0x1);
152 ok_ptr(wcex.lpfnWndProc, DefWindowProcW);
153 ok_int(wcex.cbClsExtra, 1);
154 ok_int(wcex.cbWndExtra, 5);
155 ok_ptr(wcex.hInstance, GetModuleHandle(NULL));
156 ok_ptr(wcex.hIcon, NULL);
157 ok_ptr(wcex.hIcon, NULL);
158 ok_ptr(wcex.hbrBackground, NULL);
159 ok_ptr(wcex.lpszMenuName, NULL);
160 ok_ptr(wcex.lpszClassName, (LPCWSTR)(ULONG_PTR)atom);
161 ok_ptr(wcex.hIconSm, NULL);
162 }
163
START_TEST(GetClassInfo)164 START_TEST(GetClassInfo)
165 {
166 Test_Desktop();
167 Test_Dialog();
168 Test_SwitchWnd();
169 Test_Custom();
170 }
171