[WIN32KNT_APITEST]: -Make sure that NtUserUnregisterClass works when it gets the...
[reactos.git] / rostests / apitests / win32nt / ntuser / NtUserGetIconInfo.c
1 /*
2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for NtUserGetIconInfo
5 * PROGRAMMERS:
6 */
7
8 #include <win32nt.h>
9
10 START_TEST(NtUserGetIconInfo)
11 {
12 HICON hIcon;
13 ICONINFO iinfo;
14 HBITMAP mask, color;
15 UNICODE_STRING hInstStr;
16 UNICODE_STRING ResourceStr;
17 DWORD bpp = 0;
18
19 ZeroMemory(&iinfo, sizeof(ICONINFO));
20
21 /* BASIC TESTS */
22 hIcon = (HICON) NtUserCallOneParam(0, _ONEPARAM_ROUTINE_CREATEEMPTYCUROBJECT);
23 TEST(hIcon != NULL);
24
25 /* Last param is unknown */
26 TEST(NtUserGetIconInfo(hIcon, &iinfo, NULL, NULL, NULL, FALSE) == FALSE);
27 TEST(NtUserGetIconInfo(hIcon, &iinfo, NULL, NULL, NULL, TRUE) == FALSE);
28
29 TEST(NtUserDestroyCursor(hIcon, 0) == TRUE);
30
31 mask = CreateBitmap(16,16,1,1,NULL);
32 color = CreateBitmap(16,16,1,16,NULL);
33
34 iinfo.hbmMask = mask;
35 iinfo.hbmColor = color ;
36 iinfo.fIcon = TRUE;
37 iinfo.xHotspot = 8;
38 iinfo.yHotspot = 8;
39
40 hIcon = CreateIconIndirect(&iinfo);
41 TEST(hIcon!=NULL);
42
43 // TODO : test last parameter...
44 TEST(NtUserGetIconInfo(hIcon, &iinfo, NULL, NULL, NULL, FALSE) == TRUE);
45
46 TEST(iinfo.hbmMask != NULL);
47 TEST(iinfo.hbmColor != NULL);
48 TEST(iinfo.fIcon == TRUE);
49 TEST(iinfo.yHotspot == 8);
50 TEST(iinfo.xHotspot == 8);
51
52 TEST(iinfo.hbmMask != mask);
53 TEST(iinfo.hbmColor != color);
54
55 /* Does it make a difference? */
56 TEST(NtUserGetIconInfo(hIcon, &iinfo, NULL, NULL, NULL, TRUE) == TRUE);
57
58 TEST(iinfo.hbmMask != NULL);
59 TEST(iinfo.hbmColor != NULL);
60 TEST(iinfo.fIcon == TRUE);
61 TEST(iinfo.yHotspot == 8);
62 TEST(iinfo.xHotspot == 8);
63
64 TEST(iinfo.hbmMask != mask);
65 TEST(iinfo.hbmColor != color);
66
67 DeleteObject(mask);
68 DeleteObject(color);
69
70 DestroyIcon(hIcon);
71
72 /* Test full param, with local icon */
73 hIcon = LoadImageA(GetModuleHandle(NULL),
74 MAKEINTRESOURCE(IDI_ICON),
75 IMAGE_ICON,
76 0,
77 0,
78 LR_DEFAULTSIZE);
79
80 TEST(hIcon != NULL);
81
82 RtlInitUnicodeString(&hInstStr, NULL);
83 RtlInitUnicodeString(&ResourceStr, NULL);
84
85 TEST(NtUserGetIconInfo(hIcon,
86 &iinfo,
87 &hInstStr,
88 &ResourceStr,
89 &bpp,
90 FALSE) == TRUE);
91
92 TESTX(hInstStr.Buffer == NULL, "hInstStr.buffer : %p\n", hInstStr.Buffer);
93 TEST((LPCTSTR)ResourceStr.Buffer == MAKEINTRESOURCE(IDI_ICON));
94 TEST(bpp == 32);
95
96 /* Last param doesn't seem to matter*/
97 TEST(NtUserGetIconInfo(hIcon,
98 &iinfo,
99 &hInstStr,
100 &ResourceStr,
101 &bpp,
102 TRUE) == TRUE);
103
104 TESTX(hInstStr.Buffer == NULL, "hInstStr.buffer : %p\n", hInstStr.Buffer);
105 TEST((LPCTSTR)ResourceStr.Buffer == MAKEINTRESOURCE(IDI_ICON));
106 TEST(bpp == 32);
107
108 DestroyIcon(hIcon);
109
110 /* Test full param, with foreign icon */
111 hIcon = LoadImageA(GetModuleHandleA("shell32.dll"),
112 MAKEINTRESOURCE(293),
113 IMAGE_ICON,
114 0,
115 0,
116 LR_DEFAULTSIZE);
117
118 TEST(hIcon != NULL);
119
120 hInstStr.Buffer = HeapAlloc(GetProcessHeap(), 0, MAX_PATH * sizeof(WCHAR));
121 hInstStr.MaximumLength = MAX_PATH;
122 hInstStr.Length = 0;
123 RtlInitUnicodeString(&ResourceStr, NULL);
124
125 TEST(NtUserGetIconInfo(hIcon,
126 &iinfo,
127 &hInstStr,
128 &ResourceStr,
129 &bpp,
130 FALSE) == TRUE);
131
132 TEST(hInstStr.Length != 0);
133 hInstStr.Buffer[hInstStr.Length] = 0;
134 printf("%s,%i: hInstStr.buffer : %S\n", __FUNCTION__, __LINE__, hInstStr.Buffer);
135 TEST((LPCTSTR)ResourceStr.Buffer == MAKEINTRESOURCE(293));
136 TEST(ResourceStr.Length == 0);
137 TEST(ResourceStr.MaximumLength == 0);
138 TEST(bpp == 32);
139
140 ZeroMemory(hInstStr.Buffer, MAX_PATH*sizeof(WCHAR));
141 hInstStr.Length = 0;
142 RtlInitUnicodeString(&ResourceStr, NULL);
143
144 TEST(NtUserGetIconInfo(hIcon,
145 &iinfo,
146 &hInstStr,
147 &ResourceStr,
148 &bpp,
149 TRUE) == TRUE);
150
151 TEST(hInstStr.Length != 0);
152 hInstStr.Buffer[hInstStr.Length] = 0;
153 printf("%s,%i: hInstStr.buffer : %S\n", __FUNCTION__, __LINE__, hInstStr.Buffer);
154 TEST((LPCTSTR)ResourceStr.Buffer == MAKEINTRESOURCE(293));
155 TEST(bpp == 32);
156
157 DestroyIcon(hIcon);
158
159 }