2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for SetDIBitsToDevice
5 * PROGRAMMERS: Timo Kreuzer
14 Test_SetDIBitsToDevice_Params()
16 UCHAR ajBmiBuffer
[sizeof(BITMAPINFO
) + 4];
17 PBITMAPINFO pbmi
= (PBITMAPINFO
)ajBmiBuffer
;
21 /* Setup the bitmap info */
22 pbmi
->bmiHeader
.biSize
= sizeof(BITMAPINFOHEADER
);
23 pbmi
->bmiHeader
.biWidth
= 2;
24 pbmi
->bmiHeader
.biHeight
= -4;
25 pbmi
->bmiHeader
.biPlanes
= 1;
26 pbmi
->bmiHeader
.biBitCount
= 32;
27 pbmi
->bmiHeader
.biCompression
= BI_RGB
;
28 pbmi
->bmiHeader
.biSizeImage
= 0;
29 pbmi
->bmiHeader
.biXPelsPerMeter
= 0;
30 pbmi
->bmiHeader
.biYPelsPerMeter
= 0;
31 pbmi
->bmiHeader
.biClrUsed
= 0;
32 pbmi
->bmiHeader
.biClrImportant
= 0;
34 /* Test a normal operation */
35 SetLastError(0xdeadc0de);
36 ret
= SetDIBitsToDevice(ghdcDIB32
,
51 /* Test hdc == NULL */
52 SetLastError(0xdeadc0de);
53 ret
= SetDIBitsToDevice(NULL
,
66 ok_err(ERROR_INVALID_HANDLE
);
68 /* Test truncated hdc */
69 SetLastError(0xdeadc0de);
70 ret
= SetDIBitsToDevice((HDC
)((ULONG_PTR
)ghdcDIB32
& 0xFFFF),
83 ok_err(ERROR_INVALID_HANDLE
);
85 /* Test invalid ColorUse */
86 SetLastError(0xdeadc0de);
87 ret
= SetDIBitsToDevice(ghdcDIB32
,
102 /* test unaligned buffer */
103 SetLastError(0xdeadc0de);
104 ret
= SetDIBitsToDevice(ghdcDIB32
,
113 (BYTE
*)aulBits
+ 1, // lpvBits,
119 /* test unaligned and huge scanline buffer */
120 SetLastError(0xdeadc0de);
121 ret
= SetDIBitsToDevice(ghdcDIB32
,
129 20000000, // cScanLines,
130 (BYTE
*)aulBits
+ 1, // lpvBits,
133 todo_ros
ok_dec(ret
, 0);
136 /* test unaligned illegal buffer */
137 SetLastError(0xdeadc0de);
138 ret
= SetDIBitsToDevice(ghdcDIB32
,
147 (BYTE
*)0x7fffffff, // lpvBits,
150 todo_ros
ok_dec(ret
, 0);
153 /* Test negative XDest */
154 SetLastError(0xdeadc0de);
155 ret
= SetDIBitsToDevice(ghdcDIB32
,
170 /* Test huge XDest */
171 SetLastError(0xdeadc0de);
172 ret
= SetDIBitsToDevice(ghdcDIB32
,
187 /* Test XSrc outside of the DIB */
188 SetLastError(0xdeadc0de);
189 ret
= SetDIBitsToDevice(ghdcDIB32
,
204 /* Test YSrc outside of the DIB */
205 SetLastError(0xdeadc0de);
206 ret
= SetDIBitsToDevice(ghdcDIB32
,
221 /* Test uStartScan outside of the DIB */
222 SetLastError(0xdeadc0de);
223 ret
= SetDIBitsToDevice(ghdcDIB32
,
238 /* Test cScanLines larger than the DIB */
239 SetLastError(0xdeadc0de);
240 ret
= SetDIBitsToDevice(ghdcDIB32
,
252 todo_ros
ok_dec(ret
, 7);
255 /* Test large cScanlines */
256 SetLastError(0xdeadc0de);
257 ret
= SetDIBitsToDevice(ghdcDIB32
,
269 todo_ros
ok_dec(ret
, 0);
272 /* Test uStartScan and cScanLines larger than the DIB */
273 SetLastError(0xdeadc0de);
274 ret
= SetDIBitsToDevice(ghdcDIB32
,
289 /* Test lpvBits == NULL */
290 SetLastError(0xdeadc0de);
291 ret
= SetDIBitsToDevice(ghdcDIB32
,
306 /* Test pbmi == NULL */
307 SetLastError(0xdeadc0de);
308 ret
= SetDIBitsToDevice(ghdcDIB32
,
323 /* Test huge positive DIB height, result is limited to dwHeight */
324 pbmi
->bmiHeader
.biHeight
= 10000;
325 SetLastError(0xdeadc0de);
326 ret
= SetDIBitsToDevice(ghdcDIB32
,
341 /* Test huge negative DIB height */
342 pbmi
->bmiHeader
.biHeight
= -10000;
343 SetLastError(0xdeadc0de);
344 ret
= SetDIBitsToDevice(ghdcDIB32
,
359 /* Test what happens when we cause an integer overflow */
360 pbmi
->bmiHeader
.biHeight
= LONG_MIN
;
361 SetLastError(0xdeadc0de);
362 ret
= SetDIBitsToDevice(ghdcDIB32
,
377 /* Now also test a huge value of uStartScan */
378 SetLastError(0xdeadc0de);
379 ret
= SetDIBitsToDevice(ghdcDIB32
,
386 abs(pbmi
->bmiHeader
.biHeight
) - 3, // uStartScan,
394 /* Now also test a huge value of uStartScan */
395 pbmi
->bmiHeader
.biHeight
= LONG_MIN
+ 1;
396 SetLastError(0xdeadc0de);
397 ret
= SetDIBitsToDevice(ghdcDIB32
,
404 abs(pbmi
->bmiHeader
.biHeight
) - 3, // uStartScan,
412 /* Now also test a huge value of uStartScan */
413 pbmi
->bmiHeader
.biHeight
= LONG_MIN
+ 7;
414 SetLastError(0xdeadc0de);
415 ret
= SetDIBitsToDevice(ghdcDIB32
,
422 abs(pbmi
->bmiHeader
.biHeight
) - 3, // uStartScan,
430 /* Test invalid bitmap info header */
431 pbmi
->bmiHeader
.biSize
= 0;
432 SetLastError(0xdeadc0de);
433 ret
= SetDIBitsToDevice(ghdcDIB32
,
452 Test_SetDIBitsToDevice()
454 UCHAR ajBmiBuffer
[sizeof(BITMAPINFO
) + 4];
455 PBITMAPINFO pbmi
= (PBITMAPINFO
)ajBmiBuffer
;
459 /* Setup the bitmap info */
460 pbmi
->bmiHeader
.biSize
= sizeof(BITMAPINFOHEADER
);
461 pbmi
->bmiHeader
.biWidth
= 2;
462 pbmi
->bmiHeader
.biHeight
= -2;
463 pbmi
->bmiHeader
.biPlanes
= 1;
464 pbmi
->bmiHeader
.biBitCount
= 32;
465 pbmi
->bmiHeader
.biCompression
= BI_RGB
;
466 pbmi
->bmiHeader
.biSizeImage
= 0;
467 pbmi
->bmiHeader
.biXPelsPerMeter
= 0;
468 pbmi
->bmiHeader
.biYPelsPerMeter
= 0;
469 pbmi
->bmiHeader
.biClrUsed
= 0;
470 pbmi
->bmiHeader
.biClrImportant
= 0;
473 aulBits
[0] = 0x11000000;
474 aulBits
[1] = 0x00000011;
475 aulBits
[2] = 0xFF000000;
476 aulBits
[3] = 0x000000FF;
479 memset(gpDIB32
, 0, sizeof(*gpDIB32
));
480 ret
= SetDIBitsToDevice(ghdcDIB32
,
494 ok_hex((*gpDIB32
)[0][0], 0x11000000);
495 ok_hex((*gpDIB32
)[0][1], 0x00000011);
496 ok_hex((*gpDIB32
)[0][2], 0x00000000);
497 ok_hex((*gpDIB32
)[0][3], 0x00000000);
498 ok_hex((*gpDIB32
)[1][0], 0xFF000000);
499 ok_hex((*gpDIB32
)[1][1], 0x000000FF);
500 ok_hex((*gpDIB32
)[1][2], 0x00000000);
501 ok_hex((*gpDIB32
)[1][3], 0x00000000);
503 memset(gpDIB32
, 0, sizeof(*gpDIB32
));
504 ret
= SetDIBitsToDevice(ghdcDIB32
,
518 ok_hex((*gpDIB32
)[0][0], 0x00000000);
519 ok_hex((*gpDIB32
)[0][1], 0x00000000);
520 ok_hex((*gpDIB32
)[0][2], 0x00000000);
521 ok_hex((*gpDIB32
)[0][3], 0x00000000);
522 ok_hex((*gpDIB32
)[1][0], 0x11000000);
523 ok_hex((*gpDIB32
)[1][1], 0x00000011);
524 ok_hex((*gpDIB32
)[1][2], 0x00000000);
525 ok_hex((*gpDIB32
)[1][3], 0x00000000);
526 ok_hex((*gpDIB32
)[2][0], 0xFF000000);
527 ok_hex((*gpDIB32
)[2][1], 0x000000FF);
528 ok_hex((*gpDIB32
)[2][2], 0x00000000);
529 ok_hex((*gpDIB32
)[2][3], 0x00000000);
531 memset(gpDIB32
, 0, sizeof(*gpDIB32
));
532 ret
= SetDIBitsToDevice(ghdcDIB32
,
546 todo_ros
ok_hex((*gpDIB32
)[0][0], 0x00000000);
547 todo_ros
ok_hex((*gpDIB32
)[0][1], 0x00000000);
548 ok_hex((*gpDIB32
)[0][2], 0x00000000);
549 ok_hex((*gpDIB32
)[0][3], 0x00000000);
550 todo_ros
ok_hex((*gpDIB32
)[1][0], 0x11000000);
551 todo_ros
ok_hex((*gpDIB32
)[1][1], 0x00000011);
552 ok_hex((*gpDIB32
)[1][2], 0x00000000);
553 ok_hex((*gpDIB32
)[1][3], 0x00000000);
556 memset(gpDIB32
, 0, sizeof(*gpDIB32
));
557 ret
= SetDIBitsToDevice(ghdcDIB32
,
571 todo_ros
ok_hex(pulDIB32Bits
[0], 0x11000000);
572 todo_ros
ok_hex(pulDIB32Bits
[1], 0x00000011);
573 ok_hex(pulDIB32Bits
[2], 0x00000000);
574 ok_hex(pulDIB32Bits
[3], 0x00000000);
575 todo_ros
ok_hex(pulDIB32Bits
[4], 0x00000000);
576 todo_ros
ok_hex(pulDIB32Bits
[5], 0x00000000);
577 ok_hex(pulDIB32Bits
[6], 0x00000000);
578 ok_hex(pulDIB32Bits
[7], 0x00000000);
582 /* Use bottom-up bitmap */
583 pbmi
->bmiHeader
.biHeight
= 2;
585 memset(gpDIB32
, 0, sizeof(*gpDIB32
));
586 ret
= SetDIBitsToDevice(ghdcDIB32
,
600 ok_hex(pulDIB32Bits
[0], 0xFF000000);
601 ok_hex(pulDIB32Bits
[1], 0x000000FF);
602 ok_hex(pulDIB32Bits
[2], 0x00000000);
603 ok_hex(pulDIB32Bits
[3], 0x00000000);
604 ok_hex(pulDIB32Bits
[4], 0x11000000);
605 ok_hex(pulDIB32Bits
[5], 0x00000011);
606 ok_hex(pulDIB32Bits
[6], 0x00000000);
607 ok_hex(pulDIB32Bits
[7], 0x00000000);
609 memset(gpDIB32
, 0, sizeof(*gpDIB32
));
610 ret
= SetDIBitsToDevice(ghdcDIB32
,
624 ok_hex(pulDIB32Bits
[0], 0x00000000);
625 ok_hex(pulDIB32Bits
[1], 0x00000000);
626 ok_hex(pulDIB32Bits
[2], 0x00000000);
627 ok_hex(pulDIB32Bits
[3], 0x00000000);
628 ok_hex(pulDIB32Bits
[4], 0xFF000000);
629 ok_hex(pulDIB32Bits
[5], 0x000000FF);
630 ok_hex(pulDIB32Bits
[6], 0x00000000);
631 ok_hex(pulDIB32Bits
[7], 0x00000000);
632 ok_hex(pulDIB32Bits
[8], 0x11000000);
633 ok_hex(pulDIB32Bits
[9], 0x00000011);
634 ok_hex(pulDIB32Bits
[10], 0x00000000);
635 ok_hex(pulDIB32Bits
[11], 0x00000000);
637 memset(gpDIB32
, 0, sizeof(*gpDIB32
));
638 ret
= SetDIBitsToDevice(ghdcDIB32
,
652 todo_ros
ok_hex(pulDIB32Bits
[0], 0x00000000);
653 todo_ros
ok_hex(pulDIB32Bits
[1], 0x00000000);
654 ok_hex(pulDIB32Bits
[2], 0x00000000);
655 ok_hex(pulDIB32Bits
[3], 0x00000000);
656 todo_ros
ok_hex(pulDIB32Bits
[4], 0x11000000);
657 todo_ros
ok_hex(pulDIB32Bits
[5], 0x00000011);
658 ok_hex(pulDIB32Bits
[6], 0x00000000);
659 ok_hex(pulDIB32Bits
[7], 0x00000000);
662 memset(gpDIB32
, 0, sizeof(*gpDIB32
));
663 ret
= SetDIBitsToDevice(ghdcDIB32
,
677 todo_ros
ok_hex(pulDIB32Bits
[0], 0x11000000);
678 todo_ros
ok_hex(pulDIB32Bits
[1], 0x00000011);
679 ok_hex(pulDIB32Bits
[2], 0x00000000);
680 ok_hex(pulDIB32Bits
[3], 0x00000000);
681 todo_ros
ok_hex(pulDIB32Bits
[4], 0x00000000);
682 todo_ros
ok_hex(pulDIB32Bits
[5], 0x00000000);
683 ok_hex(pulDIB32Bits
[6], 0x00000000);
684 ok_hex(pulDIB32Bits
[7], 0x00000000);
689 START_TEST(SetDIBitsToDevice
)
693 Test_SetDIBitsToDevice_Params();
694 Test_SetDIBitsToDevice();