1 /*
2  * PROJECT:         ReactOS api tests
3  * LICENSE:         GPL - See COPYING in the top level directory
4  * PURPOSE:         Test for NtGdiSelectBitmap
5  * PROGRAMMERS:
6  */
7 
8 #include <win32nt.h>
9 
10 void
11 Test_SelectDIBSection(void)
12 {
13     HDC hdc;
14     HBITMAP hbmp;
15     struct
16     {
17         BITMAPINFOHEADER bmiHeader;
18         RGBQUAD          bmiColors[100];
19     } bmi;
20     PBITMAPINFO pbmi = (PBITMAPINFO)&bmi;
21     PVOID pvBits;
22 
23     hdc = CreateCompatibleDC(0);
24     ASSERT(hdc);
25 
26     bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
27     bmi.bmiHeader.biWidth = 2;
28     bmi.bmiHeader.biHeight = 2;
29     bmi.bmiHeader.biPlanes = 1;
30     bmi.bmiHeader.biBitCount = 1;
31     bmi.bmiHeader.biCompression = BI_RGB;
32     bmi.bmiHeader.biSizeImage = 0;
33     bmi.bmiHeader.biXPelsPerMeter = 100;
34     bmi.bmiHeader.biYPelsPerMeter = 100;
35     bmi.bmiHeader.biClrUsed = 2;
36     bmi.bmiHeader.biClrImportant = 2;
37 
38     hbmp = CreateDIBSection(hdc, pbmi, DIB_PAL_COLORS, &pvBits, NULL, 0);
39     ASSERT(hbmp);
40 
41     TEST(NtGdiSelectBitmap(hdc, hbmp) != 0);
42 
43 }
44 
45 
46 START_TEST(NtGdiSelectBitmap)
47 {
48 	HDC hDC;
49 	HBITMAP hBmp, hOldBmp;
50 	HPALETTE hOldPalette, hPalette;
51 	LOGPALETTE logpal = {0x300, 1, {{12,13,14,15}}};
52 
53 	hBmp = CreateBitmap(2,2,1,1,NULL);
54 	ASSERT(hBmp);
55 
56 	/* We cannot select a bitmap into a display DC */
57 	hDC = GetDC(NULL);
58 	ASSERT(hDC);
59 	hOldBmp = NtGdiSelectBitmap(hDC, hBmp);
60 	TEST(hOldBmp == NULL);
61 
62 	hDC = CreateCompatibleDC(GetDC(NULL));
63 	ASSERT(hDC);
64 
65 	/* Check the palette before we mess it up*/
66 	hPalette = CreatePalette(&logpal);
67 	hOldPalette = SelectPalette(hDC, hPalette, 0);
68 	TEST(hOldPalette == GetStockObject(DEFAULT_PALETTE));
69 
70 	/* Test NULL DC */
71 	SetLastError(ERROR_SUCCESS);
72 	hOldBmp = NtGdiSelectBitmap(NULL, hBmp);
73 	TEST(hOldBmp == NULL);
74 	TEST(GetLastError() == ERROR_SUCCESS);
75 
76 	/* Test invalid DC */
77 	SetLastError(ERROR_SUCCESS);
78 	hOldBmp = NtGdiSelectBitmap((HDC)((ULONG_PTR)hDC & 0x0000ffff), hBmp);
79 	TEST(hOldBmp == NULL);
80 	TEST(GetLastError() == ERROR_SUCCESS);
81 
82 	/* Test NULL bitmap */
83 	SetLastError(ERROR_SUCCESS);
84 	hOldBmp = NtGdiSelectBitmap(hDC, NULL);
85 	TEST(hOldBmp == NULL);
86 	TEST(GetLastError() == ERROR_SUCCESS);
87 
88 	/* Test bitmap with only index */
89 	SetLastError(ERROR_SUCCESS);
90 	hOldBmp = NtGdiSelectBitmap(hDC, (HBITMAP)((ULONG_PTR)hBmp & 0x0000ffff));
91 	TEST(hOldBmp == NULL);
92 	TEST(GetLastError() == ERROR_SUCCESS);
93 
94 	/* Test valid bitmap */
95 	SetLastError(ERROR_SUCCESS);
96 	hOldBmp = NtGdiSelectBitmap(hDC, hBmp);
97 	TEST(hOldBmp != NULL);
98 	/* The default bitmap should be GetStockObject(21) */
99 	TEST(hOldBmp == GetStockObject(21));
100 
101 	/* Check the palette */
102 	hOldPalette = SelectPalette(hDC, hOldPalette, 0);
103 	TEST(hOldPalette == hPalette);
104 	DeleteObject(hPalette);
105 
106 	/* Select the old one again and check */
107 	hOldBmp = NtGdiSelectBitmap(hDC, hOldBmp);
108 	TEST(hOldBmp == hBmp);
109 	TEST(GetLastError() == ERROR_SUCCESS);
110 
111 	/* cleanup */
112 	DeleteObject(hBmp);
113 	DeleteDC(hDC);
114 
115     Test_SelectDIBSection();
116 
117 }
118 
119