65 tests for NtGdiCreateBitmap
[reactos.git] / rostests / apitests / w32knapi / ntgdi / NtGdiCreateBitmap.c
1 #include "../w32knapi.h"
2
3 W32KAPI
4 HBITMAP
5 APIENTRY
6 NtGdiCreateBitmap(
7 IN INT cx,
8 IN INT cy,
9 IN UINT cPlanes,
10 IN UINT cBPP,
11 IN OPTIONAL LPBYTE pjInit
12 )
13 {
14 return (HBITMAP)Syscall(L"NtGdiCreateBitmap", 5, &cx);
15 }
16
17 INT
18 Test_NtGdiCreateBitmap_Params(PTESTINFO pti)
19 {
20 HBITMAP hBmp;
21 BITMAP bitmap;
22 BYTE BitmapData[10] = {0x11, 0x22, 0x33};
23
24 /* Test simple params */
25 SetLastError(ERROR_SUCCESS);
26 TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 1, NULL)) != NULL);
27 TEST(GetLastError() == ERROR_SUCCESS);
28 DeleteObject(hBmp);
29
30 /* Test all zero */
31 SetLastError(ERROR_SUCCESS);
32 TEST(NtGdiCreateBitmap(0, 0, 0, 0, NULL) == NULL);
33 TEST(GetLastError() == ERROR_INVALID_PARAMETER);
34
35 /* Test cx == 0 */
36 SetLastError(ERROR_SUCCESS);
37 TEST(NtGdiCreateBitmap(0, 1, 1, 1, NULL) == NULL);
38 TEST(GetLastError() == ERROR_INVALID_PARAMETER);
39
40 /* Test negative cx */
41 SetLastError(ERROR_SUCCESS);
42 TEST(NtGdiCreateBitmap(-10, 1, 1, 1, NULL) == NULL);
43 TEST(GetLastError() == ERROR_INVALID_PARAMETER);
44
45 /* Test cy == 0 */
46 SetLastError(ERROR_SUCCESS);
47 TEST(NtGdiCreateBitmap(1, 0, 1, 1, NULL) == NULL);
48 TEST(GetLastError() == ERROR_INVALID_PARAMETER);
49
50 /* Test negative cy */
51 SetLastError(ERROR_SUCCESS);
52 TEST(NtGdiCreateBitmap(1, -2, 1, 1, NULL) == NULL);
53 TEST(GetLastError() == ERROR_INVALID_PARAMETER);
54
55 /* Test negative cy */
56 SetLastError(ERROR_SUCCESS);
57 TEST(NtGdiCreateBitmap(1, -2, 1, 1, BitmapData) == NULL);
58 TEST(GetLastError() == ERROR_SUCCESS);
59
60 /* Test huge size */
61 SetLastError(ERROR_SUCCESS);
62 TEST(NtGdiCreateBitmap(100000, 100000, 1, 1, NULL) == NULL);
63 TEST(GetLastError() == ERROR_NOT_ENOUGH_MEMORY);
64
65 /* Test cPlanes == 0 */
66 SetLastError(ERROR_SUCCESS);
67 TEST((hBmp = NtGdiCreateBitmap(1, 1, 0, 1, NULL)) != NULL);
68 TEST(GetLastError() == ERROR_SUCCESS);
69 ASSERT1(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
70 TEST(bitmap.bmType == 0);
71 TEST(bitmap.bmWidth == 1);
72 TEST(bitmap.bmHeight == 1);
73 TEST(bitmap.bmWidthBytes == 2);
74 TEST(bitmap.bmPlanes == 1);
75 TEST(bitmap.bmBitsPixel == 1);
76 DeleteObject(hBmp);
77
78 /* Test big cPlanes */
79 SetLastError(ERROR_SUCCESS);
80 TEST((hBmp = NtGdiCreateBitmap(1, 1, 32, 1, NULL)) != NULL);
81 TEST(GetLastError() == ERROR_SUCCESS);
82 DeleteObject(hBmp);
83
84 TEST(NtGdiCreateBitmap(1, 1, 33, 1, NULL) == NULL);
85 TEST(GetLastError() == ERROR_INVALID_PARAMETER);
86
87 /* Test cBPP == 0 */
88 SetLastError(ERROR_SUCCESS);
89 TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 0, NULL)) != NULL);
90 TEST(GetLastError() == ERROR_SUCCESS);
91 ASSERT1(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
92 TEST(bitmap.bmType == 0);
93 TEST(bitmap.bmWidth == 1);
94 TEST(bitmap.bmHeight == 1);
95 TEST(bitmap.bmWidthBytes == 2);
96 TEST(bitmap.bmPlanes == 1);
97 TEST(bitmap.bmBitsPixel == 1);
98 DeleteObject(hBmp);
99
100 /* Test negative cBPP */
101 SetLastError(ERROR_SUCCESS);
102 TEST(NtGdiCreateBitmap(1, 1, 1, -1, NULL) == NULL);
103 TEST(GetLastError() == ERROR_INVALID_PARAMETER);
104
105 /* Test bad cBPP */
106 SetLastError(ERROR_SUCCESS);
107 TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 3, NULL)) != NULL);
108 ASSERT1(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
109 TEST(bitmap.bmBitsPixel == 4);
110 DeleteObject(hBmp);
111
112 TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 6, NULL)) != NULL);
113 ASSERT1(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
114 TEST(bitmap.bmBitsPixel == 8);
115 DeleteObject(hBmp);
116
117 TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 15, NULL)) != NULL);
118 ASSERT1(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
119 TEST(bitmap.bmBitsPixel == 16);
120 DeleteObject(hBmp);
121
122 TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 17, NULL)) != NULL);
123 ASSERT1(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
124 TEST(bitmap.bmBitsPixel == 24);
125 DeleteObject(hBmp);
126
127 TEST((hBmp = NtGdiCreateBitmap(1, 1, 3, 7, NULL)) != NULL);
128 ASSERT1(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
129 TEST(bitmap.bmBitsPixel == 24);
130 DeleteObject(hBmp);
131
132 TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 25, NULL)) != NULL);
133 ASSERT1(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
134 TEST(bitmap.bmBitsPixel == 32);
135 DeleteObject(hBmp);
136
137 TEST(GetLastError() == ERROR_SUCCESS);
138
139 TEST(NtGdiCreateBitmap(1, 1, 1, 33, NULL) == NULL);
140 TEST(GetLastError() == ERROR_INVALID_PARAMETER);
141
142 /* Test bad pointer */
143 SetLastError(ERROR_SUCCESS);
144 TEST(NtGdiCreateBitmap(1, 1, 1, 1, (BYTE*)0x80001234) == NULL);
145 TEST(GetLastError() == ERROR_SUCCESS);
146
147 /* Test pointer alignment */
148 SetLastError(ERROR_SUCCESS);
149 TEST((hBmp = NtGdiCreateBitmap(1, 1, 1, 1, &BitmapData[1])) != NULL);
150 TEST(GetLastError() == ERROR_SUCCESS);
151 DeleteObject(hBmp);
152
153 /* Test normal params */
154 SetLastError(ERROR_SUCCESS);
155 TEST((hBmp = NtGdiCreateBitmap(5, 7, 2, 4, NULL)) != NULL);
156 TEST(GetLastError() == ERROR_SUCCESS);
157 ASSERT1(GetObject(hBmp, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
158 TEST(bitmap.bmType == 0);
159 TEST(bitmap.bmWidth == 5);
160 TEST(bitmap.bmHeight == 7);
161 TEST(bitmap.bmWidthBytes == 6);
162 TEST(bitmap.bmPlanes == 1);
163 TEST(bitmap.bmBitsPixel == 8);
164 DeleteObject(hBmp);
165
166 return APISTATUS_NORMAL;
167 }
168
169 INT
170 Test_NtGdiCreateBitmap(PTESTINFO pti)
171 {
172 INT ret;
173
174 ret = Test_NtGdiCreateBitmap_Params(pti);
175 if (ret != APISTATUS_NORMAL)
176 return ret;
177
178 // ret = Test_NtGdiCreateBitmap_Pixel(pti);
179 // if (ret != APISTATUS_NORMAL)
180 // return ret;
181
182 return APISTATUS_NORMAL;
183
184 }