[WIN32KNT_APITEST] NtGdiSetBitmapBits: Add tests for max buffer size 2 (#1312)
[reactos.git] / modules / rostests / apitests / win32nt / ntgdi / NtGdiSetBitmapBits.c
1 /*
2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for NtGdiSetBitmapBits
5 * PROGRAMMERS: Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
6 */
7
8 #include <win32nt.h>
9
10 START_TEST(NtGdiSetBitmapBits)
11 {
12 BYTE Bits[100] = {0,1,2,3,4,5,6,7,8,9};
13 HBITMAP hBitmap;
14 HDC hDC;
15 BITMAPINFO bmi;
16 LPVOID pvBits;
17
18 SetLastError(0xDEADFACE);
19 ok_long(NtGdiSetBitmapBits(0, 0, 0), 0);
20 ok_long(GetLastError(), 0xDEADFACE);
21
22 /* Test NULL bitnap handle */
23 SetLastError(0xDEADFACE);
24 ok_long(NtGdiSetBitmapBits(0, 5, Bits), 0);
25 ok_long(GetLastError(), ERROR_INVALID_HANDLE);
26
27 /* Test invalid bitmap handle */
28 hBitmap = (HBITMAP)CreatePen(PS_SOLID, 1, RGB(1,2,3));
29 SetLastError(0xDEADFACE);
30 ok_long(NtGdiSetBitmapBits(hBitmap, 5, Bits), 0);
31 ok_long(GetLastError(), ERROR_INVALID_HANDLE);
32 DeleteObject(hBitmap);
33
34 hBitmap = CreateBitmap(3, 3, 1, 8, NULL);
35 ok(hBitmap != NULL, "hBitmap was NULL.\n");
36
37 /* test NULL pointer and count buffer size != 0 */
38 SetLastError(0xDEADFACE);
39 ok_long(NtGdiSetBitmapBits(hBitmap, 5, NULL), 0);
40 ok_long(GetLastError(), 0xDEADFACE);
41
42 /* test NULL pointer and buffer size == 0*/
43 SetLastError(0xDEADFACE);
44 ok_long(NtGdiSetBitmapBits(hBitmap, 0, NULL), 0);
45 ok_long(GetLastError(), 0xDEADFACE);
46
47 /* test bad pointer */
48 SetLastError(0xDEADFACE);
49 ok_long(NtGdiSetBitmapBits(hBitmap, 5, (PBYTE)0x500), 0);
50 ok_long(GetLastError(), 0xDEADFACE);
51
52 /* Test if we can set a number of bytes between lines */
53 SetLastError(0xDEADFACE);
54 ok_long(NtGdiSetBitmapBits(hBitmap, 5, Bits), 5);
55 ok_long(GetLastError(), 0xDEADFACE);
56
57 /* Test alignment */
58 SetLastError(0xDEADFACE);
59 ok_long(NtGdiSetBitmapBits(hBitmap, 4, Bits+1), 4);
60 ok_long(GetLastError(), 0xDEADFACE);
61
62 /* Test 1 byte too much */
63 SetLastError(0xDEADFACE);
64 ok_long(NtGdiSetBitmapBits(hBitmap, 10, Bits), 10);
65 ok_long(GetLastError(), 0xDEADFACE);
66
67 /* Test one row too much */
68 SetLastError(0xDEADFACE);
69 ok_long(NtGdiSetBitmapBits(hBitmap, 12, Bits), 12);
70 ok_long(GetLastError(), 0xDEADFACE);
71
72 SetLastError(0xDEADFACE);
73 ok_long(NtGdiSetBitmapBits(hBitmap, 13, Bits), 12);
74 ok_long(GetLastError(), 0xDEADFACE);
75
76 SetLastError(0xDEADFACE);
77 ok_long(NtGdiSetBitmapBits(hBitmap, 100, Bits), 12);
78 ok_long(GetLastError(), 0xDEADFACE);
79
80 /* Test huge bytes count */
81 SetLastError(0xDEADFACE);
82 ok_long(NtGdiSetBitmapBits(hBitmap, 12345678, Bits), 0);
83 ok_long(GetLastError(), 0xDEADFACE);
84
85 SetLastError(0xDEADFACE);
86 ok_long(NtGdiSetBitmapBits(hBitmap, 0x100, Bits), 0xC);
87 ok_long(GetLastError(), 0xDEADFACE);
88
89 SetLastError(0xDEADFACE);
90 ok_long(NtGdiSetBitmapBits(hBitmap, 564, Bits), 0xC);
91 ok_long(GetLastError(), 0xDEADFACE);
92
93 SetLastError(0xDEADFACE);
94 ok_long(NtGdiSetBitmapBits(hBitmap, 565, Bits), 0);
95 ok_long(GetLastError(), 0xDEADFACE);
96
97 {
98 BYTE dummy[256] = { 1 };
99
100 SetLastError(0xDEADFACE);
101 ok_long(NtGdiSetBitmapBits(hBitmap, 564, Bits), 0xC);
102 ok_long(GetLastError(), 0xDEADFACE);
103
104 SetLastError(0xDEADFACE);
105 ok_long(NtGdiSetBitmapBits(hBitmap, 565, Bits), 0);
106 ok_long(GetLastError(), 0xDEADFACE);
107
108 ok_int(dummy[0], 1);
109 }
110
111 SetLastError(0xDEADFACE);
112 ok_long(NtGdiSetBitmapBits(hBitmap, 0x7FFF, Bits), 0);
113 ok_long(GetLastError(), 0xDEADFACE);
114
115 SetLastError(0xDEADFACE);
116 ok_long(NtGdiSetBitmapBits(hBitmap, 0x8000, Bits), 0);
117 ok_long(GetLastError(), 0xDEADFACE);
118
119 SetLastError(0xDEADFACE);
120 ok_long(NtGdiSetBitmapBits(hBitmap, 0xFFFF, Bits), 0);
121 ok_long(GetLastError(), 0xDEADFACE);
122
123 SetLastError(0xDEADFACE);
124 ok_long(NtGdiSetBitmapBits(hBitmap, 0x10000, Bits), 0);
125 ok_long(GetLastError(), 0xDEADFACE);
126
127 /* Test negative bytes count */
128 SetLastError(0xDEADFACE);
129 ok_long(NtGdiSetBitmapBits(hBitmap, -5, Bits), 0);
130 ok_long(GetLastError(), 0xDEADFACE);
131
132 DeleteObject(hBitmap);
133
134 /* ------------------------- */
135
136 hBitmap = CreateBitmap(16, 16, 1, 1, NULL);
137 ok(hBitmap != NULL, "hBitmap was NULL.\n");
138
139 FillMemory(Bits, sizeof(Bits), 0x55);
140 SetLastError(0xDEADFACE);
141 ok_long(NtGdiGetBitmapBits(hBitmap, 0, Bits), 0);
142 ok_long(GetLastError(), 0xDEADFACE);
143 ok_int(Bits[0], 0x55);
144
145 FillMemory(Bits, sizeof(Bits), 0x55);
146
147 SetLastError(0xDEADFACE);
148 ok_long(NtGdiGetBitmapBits(hBitmap, 1, Bits), 1);
149 ok_long(GetLastError(), 0xDEADFACE);
150 ok_int(Bits[0], 0);
151 ok_int(Bits[1], 0x55);
152
153 FillMemory(Bits, sizeof(Bits), 0x55);
154 SetLastError(0xDEADFACE);
155 ok_long(NtGdiGetBitmapBits(hBitmap, 2, Bits), 2);
156 ok_long(GetLastError(), 0xDEADFACE);
157 ok_int(Bits[0], 0);
158 ok_int(Bits[1], 0);
159 ok_int(Bits[2], 0x55);
160
161 FillMemory(Bits, sizeof(Bits), 0x33);
162 SetLastError(0xDEADFACE);
163 ok_long(NtGdiSetBitmapBits(hBitmap, 10, Bits), 10);
164 ok_long(GetLastError(), 0xDEADFACE);
165
166 FillMemory(Bits, sizeof(Bits), 0xAA);
167 SetLastError(0xDEADFACE);
168 ok_long(NtGdiSetBitmapBits(hBitmap, 1, Bits), 1);
169 ok_long(GetLastError(), 0xDEADFACE);
170 FillMemory(Bits, sizeof(Bits), 0x55);
171 SetLastError(0xDEADFACE);
172 ok_long(NtGdiGetBitmapBits(hBitmap, 1, Bits), 1);
173 ok_long(GetLastError(), 0xDEADFACE);
174 ok_int(Bits[0], 0xAA);
175 ok_int(Bits[1], 0x55);
176 SetLastError(0xDEADFACE);
177 ok_long(NtGdiGetBitmapBits(hBitmap, 2, Bits), 2);
178 ok_long(GetLastError(), 0xDEADFACE);
179 ok_int(Bits[0], 0xAA);
180 ok_int(Bits[1], 0x33);
181 ok_int(Bits[2], 0x55);
182
183 FillMemory(Bits, sizeof(Bits), 0xAA);
184 SetLastError(0xDEADFACE);
185 ok_long(NtGdiSetBitmapBits(hBitmap, 2, Bits), 2);
186 ok_long(GetLastError(), 0xDEADFACE);
187 FillMemory(Bits, sizeof(Bits), 0x55);
188 SetLastError(0xDEADFACE);
189 ok_long(NtGdiGetBitmapBits(hBitmap, 2, Bits), 2);
190 ok_long(GetLastError(), 0xDEADFACE);
191 ok_int(Bits[0], 0xAA);
192 ok_int(Bits[1], 0xAA);
193 ok_int(Bits[2], 0x55);
194 SetLastError(0xDEADFACE);
195 ok_long(NtGdiGetBitmapBits(hBitmap, 3, Bits), 3);
196 ok_long(GetLastError(), 0xDEADFACE);
197 ok_int(Bits[0], 0xAA);
198 ok_int(Bits[1], 0xAA);
199 ok_int(Bits[2], 0x33);
200 ok_int(Bits[3], 0x55);
201
202 FillMemory(Bits, sizeof(Bits), 0xAA);
203 SetLastError(0xDEADFACE);
204 ok_long(NtGdiSetBitmapBits(hBitmap, 3, Bits), 3);
205 ok_long(GetLastError(), 0xDEADFACE);
206 FillMemory(Bits, sizeof(Bits), 0x55);
207 SetLastError(0xDEADFACE);
208 ok_long(NtGdiGetBitmapBits(hBitmap, 3, Bits), 3);
209 ok_long(GetLastError(), 0xDEADFACE);
210 ok_int(Bits[0], 0xAA);
211 ok_int(Bits[1], 0xAA);
212 ok_int(Bits[2], 0xAA);
213 ok_int(Bits[3], 0x55);
214 SetLastError(0xDEADFACE);
215 ok_long(NtGdiGetBitmapBits(hBitmap, 4, Bits), 4);
216 ok_long(GetLastError(), 0xDEADFACE);
217 ok_int(Bits[0], 0xAA);
218 ok_int(Bits[1], 0xAA);
219 ok_int(Bits[2], 0xAA);
220 ok_int(Bits[3], 0x33);
221 ok_int(Bits[4], 0x55);
222
223 SetLastError(0xDEADFACE);
224 ok_long(NtGdiSetBitmapBits(hBitmap, 564, Bits), 0x20);
225 ok_long(GetLastError(), 0xDEADFACE);
226
227 SetLastError(0xDEADFACE);
228 ok_long(NtGdiSetBitmapBits(hBitmap, 565, Bits), 0);
229 ok_long(GetLastError(), 0xDEADFACE);
230
231 DeleteObject(hBitmap);
232
233 /* ------------------------- */
234
235 hDC = CreateCompatibleDC(NULL);
236
237 ZeroMemory(&bmi, sizeof(bmi));
238 bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
239 bmi.bmiHeader.biWidth = 15;
240 bmi.bmiHeader.biHeight = 15; /* positive */
241 bmi.bmiHeader.biPlanes = 1;
242 bmi.bmiHeader.biBitCount = 24;
243 hBitmap = CreateDIBSection(hDC, &bmi, DIB_RGB_COLORS, &pvBits, NULL, 0);
244 ok(hBitmap != NULL, "hBitmap was NULL.\n");
245
246 FillMemory(Bits, sizeof(Bits), 0x55);
247 SetLastError(0xDEADFACE);
248 ok_long(NtGdiGetBitmapBits(hBitmap, 0, Bits), 0);
249 ok_long(GetLastError(), 0xDEADFACE);
250 ok_int(Bits[0], 0x55);
251
252 FillMemory(Bits, sizeof(Bits), 0x55);
253 SetLastError(0xDEADFACE);
254 ok_long(NtGdiGetBitmapBits(hBitmap, 1, Bits), 1);
255 ok_long(GetLastError(), 0xDEADFACE);
256 ok_int(Bits[0], 0);
257 ok_int(Bits[1], 0x55);
258
259 FillMemory(Bits, sizeof(Bits), 0x55);
260 SetLastError(0xDEADFACE);
261 ok_long(NtGdiGetBitmapBits(hBitmap, 2, Bits), 2);
262 ok_long(GetLastError(), 0xDEADFACE);
263 ok_int(Bits[0], 0);
264 ok_int(Bits[1], 0);
265 ok_int(Bits[2], 0x55);
266
267 FillMemory(Bits, sizeof(Bits), 0x33);
268 SetLastError(0xDEADFACE);
269 ok_long(NtGdiSetBitmapBits(hBitmap, 10, Bits), 10);
270 ok_long(GetLastError(), 0xDEADFACE);
271
272 FillMemory(Bits, sizeof(Bits), 0xAA);
273 SetLastError(0xDEADFACE);
274 ok_long(NtGdiSetBitmapBits(hBitmap, 1, Bits), 1);
275 ok_long(GetLastError(), 0xDEADFACE);
276 FillMemory(Bits, sizeof(Bits), 0x55);
277 SetLastError(0xDEADFACE);
278 ok_long(NtGdiGetBitmapBits(hBitmap, 1, Bits), 1);
279 ok_long(GetLastError(), 0xDEADFACE);
280 ok_int(Bits[0], 0xAA);
281 ok_int(Bits[1], 0x55);
282 SetLastError(0xDEADFACE);
283 ok_long(NtGdiGetBitmapBits(hBitmap, 2, Bits), 2);
284 ok_long(GetLastError(), 0xDEADFACE);
285 ok_int(Bits[0], 0xAA);
286 ok_int(Bits[1], 0x33);
287 ok_int(Bits[2], 0x55);
288
289 FillMemory(Bits, sizeof(Bits), 0xAA);
290 SetLastError(0xDEADFACE);
291 ok_long(NtGdiSetBitmapBits(hBitmap, 2, Bits), 2);
292 ok_long(GetLastError(), 0xDEADFACE);
293 FillMemory(Bits, sizeof(Bits), 0x55);
294 SetLastError(0xDEADFACE);
295 ok_long(NtGdiGetBitmapBits(hBitmap, 2, Bits), 2);
296 ok_long(GetLastError(), 0xDEADFACE);
297 ok_int(Bits[0], 0xAA);
298 ok_int(Bits[1], 0xAA);
299 ok_int(Bits[2], 0x55);
300 SetLastError(0xDEADFACE);
301 ok_long(NtGdiGetBitmapBits(hBitmap, 3, Bits), 3);
302 ok_long(GetLastError(), 0xDEADFACE);
303 ok_int(Bits[0], 0xAA);
304 ok_int(Bits[1], 0xAA);
305 ok_int(Bits[2], 0x33);
306 ok_int(Bits[3], 0x55);
307
308 FillMemory(Bits, sizeof(Bits), 0xAA);
309 SetLastError(0xDEADFACE);
310 ok_long(NtGdiSetBitmapBits(hBitmap, 3, Bits), 3);
311 ok_long(GetLastError(), 0xDEADFACE);
312 FillMemory(Bits, sizeof(Bits), 0x55);
313 SetLastError(0xDEADFACE);
314 ok_long(NtGdiGetBitmapBits(hBitmap, 3, Bits), 3);
315 ok_long(GetLastError(), 0xDEADFACE);
316 ok_int(Bits[0], 0xAA);
317 ok_int(Bits[1], 0xAA);
318 ok_int(Bits[2], 0xAA);
319 ok_int(Bits[3], 0x55);
320 SetLastError(0xDEADFACE);
321 ok_long(NtGdiGetBitmapBits(hBitmap, 4, Bits), 4);
322 ok_long(GetLastError(), 0xDEADFACE);
323 ok_int(Bits[0], 0xAA);
324 ok_int(Bits[1], 0xAA);
325 ok_int(Bits[2], 0xAA);
326 ok_int(Bits[3], 0x33);
327 ok_int(Bits[4], 0x55);
328
329 SetLastError(0xDEADFACE);
330 ok_long(NtGdiSetBitmapBits(hBitmap, 564, Bits), 0x234);
331 ok_long(GetLastError(), 0xDEADFACE);
332
333 SetLastError(0xDEADFACE);
334 ok_long(NtGdiSetBitmapBits(hBitmap, 565, Bits), 0);
335 ok_long(GetLastError(), 0xDEADFACE);
336
337 DeleteObject(hBitmap);
338 DeleteDC(hDC);
339
340 /* ------------------------- */
341
342 hDC = CreateCompatibleDC(NULL);
343
344 ZeroMemory(&bmi, sizeof(bmi));
345 bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
346 bmi.bmiHeader.biWidth = 15;
347 bmi.bmiHeader.biHeight = -15; /* negative */
348 bmi.bmiHeader.biPlanes = 1;
349 bmi.bmiHeader.biBitCount = 24;
350 hBitmap = CreateDIBSection(hDC, &bmi, DIB_RGB_COLORS, &pvBits, NULL, 0);
351 ok(hBitmap != NULL, "hBitmap was NULL.\n");
352
353 FillMemory(Bits, sizeof(Bits), 0x55);
354 SetLastError(0xDEADFACE);
355 ok_long(NtGdiGetBitmapBits(hBitmap, 0, Bits), 0);
356 ok_long(GetLastError(), 0xDEADFACE);
357 ok_int(Bits[0], 0x55);
358
359 FillMemory(Bits, sizeof(Bits), 0x55);
360 SetLastError(0xDEADFACE);
361 ok_long(NtGdiGetBitmapBits(hBitmap, 1, Bits), 1);
362 ok_long(GetLastError(), 0xDEADFACE);
363 ok_int(Bits[0], 0);
364 ok_int(Bits[1], 0x55);
365
366 FillMemory(Bits, sizeof(Bits), 0x55);
367 SetLastError(0xDEADFACE);
368 ok_long(NtGdiGetBitmapBits(hBitmap, 2, Bits), 2);
369 ok_long(GetLastError(), 0xDEADFACE);
370 ok_int(Bits[0], 0);
371 ok_int(Bits[1], 0);
372 ok_int(Bits[2], 0x55);
373
374 FillMemory(Bits, sizeof(Bits), 0x33);
375 SetLastError(0xDEADFACE);
376 ok_long(NtGdiSetBitmapBits(hBitmap, 10, Bits), 10);
377 ok_long(GetLastError(), 0xDEADFACE);
378
379 FillMemory(Bits, sizeof(Bits), 0xAA);
380 SetLastError(0xDEADFACE);
381 ok_long(NtGdiSetBitmapBits(hBitmap, 1, Bits), 1);
382 ok_long(GetLastError(), 0xDEADFACE);
383 FillMemory(Bits, sizeof(Bits), 0x55);
384 SetLastError(0xDEADFACE);
385 ok_long(NtGdiGetBitmapBits(hBitmap, 1, Bits), 1);
386 ok_long(GetLastError(), 0xDEADFACE);
387 ok_int(Bits[0], 0xAA);
388 ok_int(Bits[1], 0x55);
389 SetLastError(0xDEADFACE);
390 ok_long(NtGdiGetBitmapBits(hBitmap, 2, Bits), 2);
391 ok_long(GetLastError(), 0xDEADFACE);
392 ok_int(Bits[0], 0xAA);
393 ok_int(Bits[1], 0x33);
394 ok_int(Bits[2], 0x55);
395
396 FillMemory(Bits, sizeof(Bits), 0xAA);
397 SetLastError(0xDEADFACE);
398 ok_long(NtGdiSetBitmapBits(hBitmap, 2, Bits), 2);
399 ok_long(GetLastError(), 0xDEADFACE);
400 FillMemory(Bits, sizeof(Bits), 0x55);
401 SetLastError(0xDEADFACE);
402 ok_long(NtGdiGetBitmapBits(hBitmap, 2, Bits), 2);
403 ok_long(GetLastError(), 0xDEADFACE);
404 ok_int(Bits[0], 0xAA);
405 ok_int(Bits[1], 0xAA);
406 ok_int(Bits[2], 0x55);
407 SetLastError(0xDEADFACE);
408 ok_long(NtGdiGetBitmapBits(hBitmap, 3, Bits), 3);
409 ok_long(GetLastError(), 0xDEADFACE);
410 ok_int(Bits[0], 0xAA);
411 ok_int(Bits[1], 0xAA);
412 ok_int(Bits[2], 0x33);
413 ok_int(Bits[3], 0x55);
414
415 FillMemory(Bits, sizeof(Bits), 0xAA);
416 SetLastError(0xDEADFACE);
417 ok_long(NtGdiSetBitmapBits(hBitmap, 3, Bits), 3);
418 ok_long(GetLastError(), 0xDEADFACE);
419 FillMemory(Bits, sizeof(Bits), 0x55);
420 SetLastError(0xDEADFACE);
421 ok_long(NtGdiGetBitmapBits(hBitmap, 3, Bits), 3);
422 ok_long(GetLastError(), 0xDEADFACE);
423 ok_int(Bits[0], 0xAA);
424 ok_int(Bits[1], 0xAA);
425 ok_int(Bits[2], 0xAA);
426 ok_int(Bits[3], 0x55);
427 SetLastError(0xDEADFACE);
428 ok_long(NtGdiGetBitmapBits(hBitmap, 4, Bits), 4);
429 ok_long(GetLastError(), 0xDEADFACE);
430 ok_int(Bits[0], 0xAA);
431 ok_int(Bits[1], 0xAA);
432 ok_int(Bits[2], 0xAA);
433 ok_int(Bits[3], 0x33);
434 ok_int(Bits[4], 0x55);
435
436 SetLastError(0xDEADFACE);
437 ok_long(NtGdiSetBitmapBits(hBitmap, 564, Bits), 0x234);
438 ok_long(GetLastError(), 0xDEADFACE);
439
440 SetLastError(0xDEADFACE);
441 ok_long(NtGdiSetBitmapBits(hBitmap, 565, Bits), 0);
442 ok_long(GetLastError(), 0xDEADFACE);
443
444 DeleteObject(hBitmap);
445 DeleteDC(hDC);
446 }