[WIN32KNT_APITEST]: -Make sure that NtUserUnregisterClass works when it gets the...
[reactos.git] / rostests / apitests / win32nt / ntuser / NtUserSelectPalette.c
1 /*
2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for NtUserSelectPalette
5 * PROGRAMMERS:
6 */
7
8 #include <win32nt.h>
9
10 FORCEINLINE
11 PALETTEENTRY
12 PALENTRY(BYTE r, BYTE g, BYTE b)
13 {
14 PALETTEENTRY ret;
15
16 ret.peRed = r;
17 ret.peGreen = g;
18 ret.peBlue = b;
19 ret.peFlags = 0;
20 return ret;
21 }
22
23 START_TEST(NtUserSelectPalette)
24 {
25 HINSTANCE hinst = GetModuleHandle(NULL);
26 HPALETTE hPal, hOldPal;
27 HWND hWnd;
28 HDC hDC, hCompDC;
29 struct
30 {
31 LOGPALETTE logpal;
32 PALETTEENTRY entry[20];
33 } pal;
34
35 ZeroMemory(&pal, sizeof(pal));
36
37 pal.logpal.palVersion = 0x300;
38 pal.logpal.palNumEntries = 6;
39 pal.entry[0] = PALENTRY(0,0,0);
40 pal.entry[1] = PALENTRY(255,255,255);
41 pal.entry[2] = PALENTRY(128,128,128);
42 pal.entry[3] = PALENTRY(128,0,0);
43 pal.entry[4] = PALENTRY(0,128,0);
44 pal.entry[5] = PALENTRY(0,0,128);
45
46 hPal = CreatePalette(&pal.logpal);
47 ASSERT(hPal);
48 TEST(DeleteObject(hPal) == 1);
49 hPal = CreatePalette(&pal.logpal);
50 ASSERT(hPal);
51
52 /* Create a window */
53 hWnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
54 CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,
55 NULL, NULL, hinst, 0);
56 hDC = GetDC(hWnd);
57 ASSERT(hDC);
58 hCompDC = CreateCompatibleDC(hDC);
59 ASSERT(hCompDC);
60
61 /* Test NULL DC */
62 SetLastError(ERROR_SUCCESS);
63 hOldPal = NtUserSelectPalette(NULL, hPal, 0);
64 TEST(hOldPal == 0);
65 TEST(GetLastError() == ERROR_SUCCESS);
66
67 /* Test invalid DC */
68 SetLastError(ERROR_SUCCESS);
69 hOldPal = NtUserSelectPalette((HDC)-1, hPal, 0);
70 TEST(hOldPal == 0);
71 TEST(GetLastError() == ERROR_SUCCESS);
72
73 /* Test NULL palette */
74 SetLastError(ERROR_SUCCESS);
75 hOldPal = NtUserSelectPalette(hDC, NULL, 0);
76 TEST(hOldPal == 0);
77 TEST(GetLastError() == ERROR_SUCCESS);
78
79 /* Test invalid palette */
80 SetLastError(ERROR_SUCCESS);
81 hOldPal = NtUserSelectPalette(hDC, (HPALETTE)-1, 0);
82 TEST(hOldPal == 0);
83 TEST(GetLastError() == ERROR_SUCCESS);
84
85 /* Test valid palette */
86 hOldPal = NtUserSelectPalette(hDC, hPal, 0);
87 TEST(hOldPal != 0);
88 TEST(hOldPal == GetStockObject(DEFAULT_PALETTE));
89
90 /* We cannot Delete the palette */
91 TEST(DeleteObject(hPal) == 0);
92
93 /* We can still select the Palette into a compatible DC */
94 hOldPal = NtUserSelectPalette(hCompDC, hPal, 0);
95 TEST(hOldPal != 0);
96
97
98
99 #if 0
100 RealizePalette(hDC);
101
102 GetClientRect(hWnd, &rect);
103 FillRect(hDC, &rect, GetSysColorBrush(COLOR_BTNSHADOW));
104
105 TEST(GetNearestColor(hDC, RGB(0,0,0)) == RGB(0,0,0));
106 TEST(GetNearestColor(hDC, RGB(0,0,1)) == RGB(0,0,1));
107
108 ReleaseDC(hWnd, hDC);
109 DestroyWindow(hWnd);
110 RECT rect;
111 HBITMAP hBmp;
112
113
114 BITMAPINFOHEADER bmih = {sizeof(BITMAPINFOHEADER), // biSize
115 3, // biWidth
116 3, // biHeight
117 1, // biPlanes
118 8, // biBitCount
119 BI_RGB, // biCompression
120 0, // biSizeImage
121 92, // biXPelsPerMeter
122 92, // biYPelsPerMeter
123 6, // biClrUsed
124 6}; // biClrImportant
125 BYTE bits[3][3] = {{0,1,2},{3,4,5},{6,1,2}};
126
127 struct
128 {
129 BITMAPINFOHEADER bmih;
130 RGBQUAD colors[6];
131 } bmi = {{sizeof(BITMAPINFOHEADER),3,3,1,8,BI_RGB,0,92,92,6,6},
132 {{0,0,0,0},{255,255,255,0},{255,0,0,0},
133 {0,255,0,0},{0,0,255,0},{128,128,128,0}}};
134
135 hBmp = CreateDIBitmap(hCompDC, &bmih, CBM_INIT, &bits, (BITMAPINFO*)&bmi, DIB_RGB_COLORS);
136 ASSERT(hBmp);
137
138 SetLastError(0);
139 TEST(NtGdiSelectBitmap(hCompDC, hBmp));
140 hOldPal = NtUserSelectPalette(hCompDC, hPal, 0);
141 TEST(hOldPal != NULL);
142 RealizePalette(hCompDC);
143
144 TEST(GetNearestColor(hCompDC, RGB(0,0,0)) == RGB(0,0,0));
145 TEST(GetNearestColor(hCompDC, RGB(0,0,1)) == RGB(0,0,0));
146 TEST(GetNearestColor(hCompDC, RGB(100,0,0)) == RGB(0,0,0));
147 TEST(GetNearestColor(hCompDC, RGB(250,250,250)) == RGB(255,255,255));
148 TEST(GetNearestColor(hCompDC, RGB(120,100,110)) == RGB(128,128,128));
149
150 printf("nearest = 0x%x\n", GetNearestColor(hCompDC, RGB(120,100,110)));
151 #endif
152
153 }