2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for SetDIBitsToDevice
5 * PROGRAMMERS: Timo Kreuzer
13 Test_SetDIBitsToDevice_Params()
15 UCHAR ajBmiBuffer
[sizeof(BITMAPINFO
) + 4];
16 PBITMAPINFO pbmi
= (PBITMAPINFO
)ajBmiBuffer
;
20 /* Setup the bitmap info */
21 pbmi
->bmiHeader
.biSize
= sizeof(BITMAPINFOHEADER
);
22 pbmi
->bmiHeader
.biWidth
= 2;
23 pbmi
->bmiHeader
.biHeight
= -4;
24 pbmi
->bmiHeader
.biPlanes
= 1;
25 pbmi
->bmiHeader
.biBitCount
= 32;
26 pbmi
->bmiHeader
.biCompression
= BI_RGB
;
27 pbmi
->bmiHeader
.biSizeImage
= 0;
28 pbmi
->bmiHeader
.biXPelsPerMeter
= 0;
29 pbmi
->bmiHeader
.biYPelsPerMeter
= 0;
30 pbmi
->bmiHeader
.biClrUsed
= 0;
31 pbmi
->bmiHeader
.biClrImportant
= 0;
33 /* Test a normal operation */
34 SetLastError(0xdeadc0de);
35 ret
= SetDIBitsToDevice(ghdcDIB32
,
50 /* Test hdc == NULL */
51 SetLastError(0xdeadc0de);
52 ret
= SetDIBitsToDevice(NULL
,
65 ok_err(ERROR_INVALID_HANDLE
);
67 /* Test truncated hdc */
68 SetLastError(0xdeadc0de);
69 ret
= SetDIBitsToDevice((HDC
)((ULONG_PTR
)ghdcDIB32
& 0xFFFF),
82 ok_err(ERROR_INVALID_HANDLE
);
84 /* Test invalid ColorUse */
85 SetLastError(0xdeadc0de);
86 ret
= SetDIBitsToDevice(ghdcDIB32
,
101 /* test unaligned buffer */
102 SetLastError(0xdeadc0de);
103 ret
= SetDIBitsToDevice(ghdcDIB32
,
112 (BYTE
*)aulBits
+ 1, // lpvBits,
118 /* test unaligned and huge scanline buffer */
119 SetLastError(0xdeadc0de);
120 ret
= SetDIBitsToDevice(ghdcDIB32
,
128 20000000, // cScanLines,
129 (BYTE
*)aulBits
+ 1, // lpvBits,
132 todo_ros
ok_dec(ret
, 0);
135 /* test unaligned illegal buffer */
136 SetLastError(0xdeadc0de);
137 ret
= SetDIBitsToDevice(ghdcDIB32
,
146 (BYTE
*)0x7fffffff, // lpvBits,
149 todo_ros
ok_dec(ret
, 0);
152 /* Test negative XDest */
153 SetLastError(0xdeadc0de);
154 ret
= SetDIBitsToDevice(ghdcDIB32
,
169 /* Test huge XDest */
170 SetLastError(0xdeadc0de);
171 ret
= SetDIBitsToDevice(ghdcDIB32
,
186 /* Test XSrc outside of the DIB */
187 SetLastError(0xdeadc0de);
188 ret
= SetDIBitsToDevice(ghdcDIB32
,
203 /* Test YSrc outside of the DIB */
204 SetLastError(0xdeadc0de);
205 ret
= SetDIBitsToDevice(ghdcDIB32
,
220 /* Test uStartScan outside of the DIB */
221 SetLastError(0xdeadc0de);
222 ret
= SetDIBitsToDevice(ghdcDIB32
,
237 /* Test cScanLines larger than the DIB */
238 SetLastError(0xdeadc0de);
239 ret
= SetDIBitsToDevice(ghdcDIB32
,
251 todo_ros
ok_dec(ret
, 7);
254 /* Test large cScanlines */
255 SetLastError(0xdeadc0de);
256 ret
= SetDIBitsToDevice(ghdcDIB32
,
268 todo_ros
ok_dec(ret
, 0);
271 /* Test uStartScan and cScanLines larger than the DIB */
272 SetLastError(0xdeadc0de);
273 ret
= SetDIBitsToDevice(ghdcDIB32
,
288 /* Test lpvBits == NULL */
289 SetLastError(0xdeadc0de);
290 ret
= SetDIBitsToDevice(ghdcDIB32
,
305 /* Test pbmi == NULL */
306 SetLastError(0xdeadc0de);
307 ret
= SetDIBitsToDevice(ghdcDIB32
,
322 /* Test huge positive DIB height, result is limited to dwHeight */
323 pbmi
->bmiHeader
.biHeight
= 10000;
324 SetLastError(0xdeadc0de);
325 ret
= SetDIBitsToDevice(ghdcDIB32
,
340 /* Test huge negative DIB height */
341 pbmi
->bmiHeader
.biHeight
= -10000;
342 SetLastError(0xdeadc0de);
343 ret
= SetDIBitsToDevice(ghdcDIB32
,
358 /* Test what happens when we cause an integer overflow */
359 pbmi
->bmiHeader
.biHeight
= LONG_MIN
;
360 SetLastError(0xdeadc0de);
361 ret
= SetDIBitsToDevice(ghdcDIB32
,
376 /* Now also test a huge value of uStartScan */
377 SetLastError(0xdeadc0de);
378 ret
= SetDIBitsToDevice(ghdcDIB32
,
385 abs(pbmi
->bmiHeader
.biHeight
) - 3, // uStartScan,
393 /* Now also test a huge value of uStartScan */
394 pbmi
->bmiHeader
.biHeight
= LONG_MIN
+ 1;
395 SetLastError(0xdeadc0de);
396 ret
= SetDIBitsToDevice(ghdcDIB32
,
403 abs(pbmi
->bmiHeader
.biHeight
) - 3, // uStartScan,
411 /* Now also test a huge value of uStartScan */
412 pbmi
->bmiHeader
.biHeight
= LONG_MIN
+ 7;
413 SetLastError(0xdeadc0de);
414 ret
= SetDIBitsToDevice(ghdcDIB32
,
421 abs(pbmi
->bmiHeader
.biHeight
) - 3, // uStartScan,
429 /* Test invalid bitmap info header */
430 pbmi
->bmiHeader
.biSize
= 0;
431 SetLastError(0xdeadc0de);
432 ret
= SetDIBitsToDevice(ghdcDIB32
,
451 Test_SetDIBitsToDevice()
453 UCHAR ajBmiBuffer
[sizeof(BITMAPINFO
) + 4];
454 PBITMAPINFO pbmi
= (PBITMAPINFO
)ajBmiBuffer
;
458 /* Setup the bitmap info */
459 pbmi
->bmiHeader
.biSize
= sizeof(BITMAPINFOHEADER
);
460 pbmi
->bmiHeader
.biWidth
= 2;
461 pbmi
->bmiHeader
.biHeight
= -2;
462 pbmi
->bmiHeader
.biPlanes
= 1;
463 pbmi
->bmiHeader
.biBitCount
= 32;
464 pbmi
->bmiHeader
.biCompression
= BI_RGB
;
465 pbmi
->bmiHeader
.biSizeImage
= 0;
466 pbmi
->bmiHeader
.biXPelsPerMeter
= 0;
467 pbmi
->bmiHeader
.biYPelsPerMeter
= 0;
468 pbmi
->bmiHeader
.biClrUsed
= 0;
469 pbmi
->bmiHeader
.biClrImportant
= 0;
472 aulBits
[0] = 0x11000000;
473 aulBits
[1] = 0x00000011;
474 aulBits
[2] = 0xFF000000;
475 aulBits
[3] = 0x000000FF;
478 memset(gpDIB32
, 0, sizeof(*gpDIB32
));
479 ret
= SetDIBitsToDevice(ghdcDIB32
,
493 ok_hex((*gpDIB32
)[0][0], 0x11000000);
494 ok_hex((*gpDIB32
)[0][1], 0x00000011);
495 ok_hex((*gpDIB32
)[0][2], 0x00000000);
496 ok_hex((*gpDIB32
)[0][3], 0x00000000);
497 ok_hex((*gpDIB32
)[1][0], 0xFF000000);
498 ok_hex((*gpDIB32
)[1][1], 0x000000FF);
499 ok_hex((*gpDIB32
)[1][2], 0x00000000);
500 ok_hex((*gpDIB32
)[1][3], 0x00000000);
502 memset(gpDIB32
, 0, sizeof(*gpDIB32
));
503 ret
= SetDIBitsToDevice(ghdcDIB32
,
517 ok_hex((*gpDIB32
)[0][0], 0x00000000);
518 ok_hex((*gpDIB32
)[0][1], 0x00000000);
519 ok_hex((*gpDIB32
)[0][2], 0x00000000);
520 ok_hex((*gpDIB32
)[0][3], 0x00000000);
521 ok_hex((*gpDIB32
)[1][0], 0x11000000);
522 ok_hex((*gpDIB32
)[1][1], 0x00000011);
523 ok_hex((*gpDIB32
)[1][2], 0x00000000);
524 ok_hex((*gpDIB32
)[1][3], 0x00000000);
525 ok_hex((*gpDIB32
)[2][0], 0xFF000000);
526 ok_hex((*gpDIB32
)[2][1], 0x000000FF);
527 ok_hex((*gpDIB32
)[2][2], 0x00000000);
528 ok_hex((*gpDIB32
)[2][3], 0x00000000);
530 memset(gpDIB32
, 0, sizeof(*gpDIB32
));
531 ret
= SetDIBitsToDevice(ghdcDIB32
,
545 todo_ros
ok_hex((*gpDIB32
)[0][0], 0x00000000);
546 todo_ros
ok_hex((*gpDIB32
)[0][1], 0x00000000);
547 ok_hex((*gpDIB32
)[0][2], 0x00000000);
548 ok_hex((*gpDIB32
)[0][3], 0x00000000);
549 todo_ros
ok_hex((*gpDIB32
)[1][0], 0x11000000);
550 todo_ros
ok_hex((*gpDIB32
)[1][1], 0x00000011);
551 ok_hex((*gpDIB32
)[1][2], 0x00000000);
552 ok_hex((*gpDIB32
)[1][3], 0x00000000);
555 memset(gpDIB32
, 0, sizeof(*gpDIB32
));
556 ret
= SetDIBitsToDevice(ghdcDIB32
,
570 todo_ros
ok_hex(pulDIB32Bits
[0], 0x11000000);
571 todo_ros
ok_hex(pulDIB32Bits
[1], 0x00000011);
572 ok_hex(pulDIB32Bits
[2], 0x00000000);
573 ok_hex(pulDIB32Bits
[3], 0x00000000);
574 todo_ros
ok_hex(pulDIB32Bits
[4], 0x00000000);
575 todo_ros
ok_hex(pulDIB32Bits
[5], 0x00000000);
576 ok_hex(pulDIB32Bits
[6], 0x00000000);
577 ok_hex(pulDIB32Bits
[7], 0x00000000);
581 /* Use bottom-up bitmap */
582 pbmi
->bmiHeader
.biHeight
= 2;
584 memset(gpDIB32
, 0, sizeof(*gpDIB32
));
585 ret
= SetDIBitsToDevice(ghdcDIB32
,
599 ok_hex(pulDIB32Bits
[0], 0xFF000000);
600 ok_hex(pulDIB32Bits
[1], 0x000000FF);
601 ok_hex(pulDIB32Bits
[2], 0x00000000);
602 ok_hex(pulDIB32Bits
[3], 0x00000000);
603 ok_hex(pulDIB32Bits
[4], 0x11000000);
604 ok_hex(pulDIB32Bits
[5], 0x00000011);
605 ok_hex(pulDIB32Bits
[6], 0x00000000);
606 ok_hex(pulDIB32Bits
[7], 0x00000000);
608 memset(gpDIB32
, 0, sizeof(*gpDIB32
));
609 ret
= SetDIBitsToDevice(ghdcDIB32
,
623 ok_hex(pulDIB32Bits
[0], 0x00000000);
624 ok_hex(pulDIB32Bits
[1], 0x00000000);
625 ok_hex(pulDIB32Bits
[2], 0x00000000);
626 ok_hex(pulDIB32Bits
[3], 0x00000000);
627 ok_hex(pulDIB32Bits
[4], 0xFF000000);
628 ok_hex(pulDIB32Bits
[5], 0x000000FF);
629 ok_hex(pulDIB32Bits
[6], 0x00000000);
630 ok_hex(pulDIB32Bits
[7], 0x00000000);
631 ok_hex(pulDIB32Bits
[8], 0x11000000);
632 ok_hex(pulDIB32Bits
[9], 0x00000011);
633 ok_hex(pulDIB32Bits
[10], 0x00000000);
634 ok_hex(pulDIB32Bits
[11], 0x00000000);
636 memset(gpDIB32
, 0, sizeof(*gpDIB32
));
637 ret
= SetDIBitsToDevice(ghdcDIB32
,
651 todo_ros
ok_hex(pulDIB32Bits
[0], 0x00000000);
652 todo_ros
ok_hex(pulDIB32Bits
[1], 0x00000000);
653 ok_hex(pulDIB32Bits
[2], 0x00000000);
654 ok_hex(pulDIB32Bits
[3], 0x00000000);
655 todo_ros
ok_hex(pulDIB32Bits
[4], 0x11000000);
656 todo_ros
ok_hex(pulDIB32Bits
[5], 0x00000011);
657 ok_hex(pulDIB32Bits
[6], 0x00000000);
658 ok_hex(pulDIB32Bits
[7], 0x00000000);
661 memset(gpDIB32
, 0, sizeof(*gpDIB32
));
662 ret
= SetDIBitsToDevice(ghdcDIB32
,
676 todo_ros
ok_hex(pulDIB32Bits
[0], 0x11000000);
677 todo_ros
ok_hex(pulDIB32Bits
[1], 0x00000011);
678 ok_hex(pulDIB32Bits
[2], 0x00000000);
679 ok_hex(pulDIB32Bits
[3], 0x00000000);
680 todo_ros
ok_hex(pulDIB32Bits
[4], 0x00000000);
681 todo_ros
ok_hex(pulDIB32Bits
[5], 0x00000000);
682 ok_hex(pulDIB32Bits
[6], 0x00000000);
683 ok_hex(pulDIB32Bits
[7], 0x00000000);
688 START_TEST(SetDIBitsToDevice
)
692 Test_SetDIBitsToDevice_Params();
693 Test_SetDIBitsToDevice();