1 /*
2  * PROJECT:         ReactOS api tests
3  * LICENSE:         GPL - See COPYING in the top level directory
4  * PURPOSE:         Test for NtGdiGetBitmapBits
5  * PROGRAMMERS:
6  */
7 
8 #include <win32nt.h>
9 
10 START_TEST(NtGdiGetBitmapBits)
11 {
12     BYTE Bits[50] = {0,1,2,3,4,5,6,7,8,9};
13     HBITMAP hBitmap;
14 
15     SetLastError(ERROR_SUCCESS);
16     ok_long(NtGdiGetBitmapBits(0, 0, 0), 0);
17     ok_long(GetLastError(), ERROR_INVALID_HANDLE);
18 
19     /* Test NULL bitmap handle */
20     SetLastError(ERROR_SUCCESS);
21     ok_long(NtGdiGetBitmapBits(0, 5, Bits), 0);
22     ok_long(GetLastError(), ERROR_INVALID_HANDLE);
23 
24     /* Test invalid bitmap handle */
25     hBitmap = (HBITMAP)CreatePen(PS_SOLID, 1, RGB(1,2,3));
26     SetLastError(ERROR_SUCCESS);
27     ok_long(NtGdiGetBitmapBits(hBitmap, 5, Bits), 0);
28     ok_long(GetLastError(), ERROR_INVALID_HANDLE);
29     DeleteObject(hBitmap);
30 
31     hBitmap = CreateBitmap(3, 3, 1, 8, NULL);
32     SetLastError(ERROR_SUCCESS);
33 
34     /* test NULL pointer and count buffer size != 0 */
35     ok_long(NtGdiGetBitmapBits(hBitmap, 5, NULL), 12);
36 
37     /* test NULL pointer and buffer size == 0*/
38     ok_long(NtGdiGetBitmapBits(hBitmap, 0, NULL), 12);
39 
40     /* test bad pointer */
41     ok_long(NtGdiGetBitmapBits(hBitmap, 5, (PBYTE)0x500), 0);
42 
43     /* Test if we can set a number of bytes between lines */
44     ok_long(NtGdiGetBitmapBits(hBitmap, 5, Bits), 5);
45 
46     /* Test alignment */
47     ok_long(NtGdiGetBitmapBits(hBitmap, 4, Bits+1), 4);
48 
49     /* Test 1 byte too much */
50     ok_long(NtGdiGetBitmapBits(hBitmap, 10, Bits), 10);
51 
52     /* Test one row too much */
53     ok_long(NtGdiGetBitmapBits(hBitmap, 12, Bits), 12);
54 
55     ok_long(NtGdiGetBitmapBits(hBitmap, 13, Bits), 12);
56 
57     ok_long(NtGdiGetBitmapBits(hBitmap, 100, Bits), 12);
58 
59     /* Test huge bytes count */
60     ok_long(NtGdiGetBitmapBits(hBitmap, 12345678, Bits), 12);
61 
62     /* Test negative bytes count */
63     ok_long(NtGdiGetBitmapBits(hBitmap, -5, Bits), 12);
64 
65     ok_long(GetLastError(), ERROR_SUCCESS);
66 
67     DeleteObject(hBitmap);
68 }
69