Delete all Trailing spaces in code.
[reactos.git] / rostests / apitests / gdi32api / tests / GetObject.c
1 static INT
2 Test_General(PTESTINFO pti)
3 {
4 struct
5 {
6 LOGBRUSH logbrush;
7 BYTE additional[5];
8 } TestStruct;
9 PLOGBRUSH plogbrush;
10 HBRUSH hBrush;
11
12 /* Test null pointer and invalid handles */
13 SetLastError(ERROR_SUCCESS);
14 TEST(GetObjectA(0, 0, NULL) == 0);
15 TEST(GetObjectA((HANDLE)-1, 0, NULL) == 0);
16 TEST(GetObjectA((HANDLE)0x00380000, 0, NULL) == 0);
17 TEST(GetLastError() == ERROR_SUCCESS);
18
19 SetLastError(ERROR_SUCCESS);
20 TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_DC, 0, NULL) == 0);
21 TEST(GetLastError() == ERROR_INVALID_HANDLE);
22 SetLastError(ERROR_SUCCESS);
23 TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_DC, 0, NULL) == 0);
24 TEST(GetLastError() == ERROR_INVALID_HANDLE);
25 SetLastError(ERROR_SUCCESS);
26 TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_REGION, 0, NULL) == 0);
27 TEST(GetLastError() == ERROR_INVALID_HANDLE);
28 SetLastError(ERROR_SUCCESS);
29 TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_REGION, 0, NULL) == 0);
30 TEST(GetLastError() == ERROR_INVALID_HANDLE);
31 SetLastError(ERROR_SUCCESS);
32 TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_EMF, 0, NULL) == 0);
33 TEST(GetLastError() == ERROR_INVALID_HANDLE);
34 SetLastError(ERROR_SUCCESS);
35 TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_EMF, 0, NULL) == 0);
36 TEST(GetLastError() == ERROR_INVALID_HANDLE);
37 SetLastError(ERROR_SUCCESS);
38 TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_METAFILE, 0, NULL) == 0);
39 TEST(GetLastError() == ERROR_INVALID_HANDLE);
40 SetLastError(ERROR_SUCCESS);
41 TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_METAFILE, 0, NULL) == 0);
42 TEST(GetLastError() == ERROR_INVALID_HANDLE);
43 SetLastError(ERROR_SUCCESS);
44 TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_ENHMETAFILE, 0, NULL) == 0);
45 TEST(GetLastError() == ERROR_INVALID_HANDLE);
46 SetLastError(ERROR_SUCCESS);
47 TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_ENHMETAFILE, 0, NULL) == 0);
48 TEST(GetLastError() == ERROR_INVALID_HANDLE);
49
50 /* Test need of alignment */
51 hBrush = GetStockObject(WHITE_BRUSH);
52 plogbrush = (PVOID)((ULONG_PTR)&TestStruct.logbrush);
53 TEST(GetObject(hBrush, sizeof(LOGBRUSH), plogbrush) == sizeof(LOGBRUSH));
54 plogbrush = (PVOID)((ULONG_PTR)&TestStruct.logbrush + 2);
55 TEST(GetObject(hBrush, sizeof(LOGBRUSH), plogbrush) == sizeof(LOGBRUSH));
56 plogbrush = (PVOID)((ULONG_PTR)&TestStruct.logbrush + 1);
57 TEST(GetObject(hBrush, sizeof(LOGBRUSH), plogbrush) == 0);
58
59 return TRUE;
60 }
61
62 static INT
63 Test_Bitmap(PTESTINFO pti)
64 {
65 HBITMAP hBitmap;
66 BITMAP bitmap;
67 DIBSECTION dibsection;
68 BYTE bData[100] = {0};
69 BYTE Buffer[100] = {48,48,48,48,48,48,48,48,48,48,48,48,48,48,48,0};
70
71 FillMemory(&bitmap, sizeof(BITMAP), 0x77);
72 hBitmap = CreateBitmap(10,10,1,8,bData);
73 if (!hBitmap) return FALSE;
74
75 SetLastError(ERROR_SUCCESS);
76 TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_BITMAP, 0, NULL) == sizeof(BITMAP));
77 TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_BITMAP, 0, NULL) == sizeof(BITMAP));
78 TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_BITMAP, sizeof(BITMAP), NULL) == sizeof(BITMAP));
79 TEST(GetObjectA(hBitmap, sizeof(DIBSECTION), NULL) == sizeof(BITMAP));
80 TEST(GetObjectA(hBitmap, 0, NULL) == sizeof(BITMAP));
81 TEST(GetObjectA((HANDLE)((UINT)hBitmap & 0x0000ffff), 0, NULL) == sizeof(BITMAP));
82 TEST(GetObjectA(hBitmap, 5, NULL) == sizeof(BITMAP));
83 TEST(GetObjectA(hBitmap, -5, NULL) == sizeof(BITMAP));
84 TEST(GetObjectA(hBitmap, 0, Buffer) == 0);
85 TEST(GetObjectA(hBitmap, 5, Buffer) == 0);
86 TEST(GetObjectA(hBitmap, sizeof(BITMAP), &bitmap) == sizeof(BITMAP));
87 TEST(GetObjectA(hBitmap, sizeof(BITMAP)+2, &bitmap) == sizeof(BITMAP));
88 TEST(GetObjectA(hBitmap, sizeof(DIBSECTION), &dibsection) == sizeof(BITMAP));
89 TEST(GetObjectA(hBitmap, -5, &bitmap) == sizeof(BITMAP));
90 TEST(GetLastError() == ERROR_SUCCESS);
91
92 // todo: test invalid handle + buffer
93
94 DeleteObject(hBitmap);
95 return TRUE;
96 }
97
98 static INT
99 Test_Dibsection(PTESTINFO pti)
100 {
101 BITMAPINFO bmi = {{sizeof(BITMAPINFOHEADER), 10, 10, 1, 8, BI_RGB, 0, 10, 10, 0,0}};
102 HBITMAP hBitmap;
103 DIBSECTION dibsection;
104 PVOID pData;
105
106 FillMemory(&dibsection, sizeof(DIBSECTION), 0x77);
107 HDC hDC = GetDC(0);
108 hBitmap = CreateDIBSection(hDC, &bmi, DIB_RGB_COLORS, &pData, NULL, 0);
109 if(!hBitmap) return FALSE;
110
111 SetLastError(ERROR_SUCCESS);
112 TEST(GetObject(hBitmap, sizeof(DIBSECTION), NULL) == sizeof(BITMAP));
113 TEST(GetObject(hBitmap, 0, NULL) == sizeof(BITMAP));
114 TEST(GetObject(hBitmap, 5, NULL) == sizeof(BITMAP));
115 TEST(GetObject(hBitmap, -5, NULL) == sizeof(BITMAP));
116 TEST(GetObject(hBitmap, 0, &dibsection) == 0);
117 TEST(GetObject(hBitmap, 5, &dibsection) == 0);
118 TEST(GetObject(hBitmap, sizeof(BITMAP), &dibsection) == sizeof(BITMAP));
119 TEST(GetObject(hBitmap, sizeof(BITMAP)+2, &dibsection) == sizeof(BITMAP));
120 TEST(GetObject(hBitmap, sizeof(DIBSECTION), &dibsection) == sizeof(DIBSECTION));
121 TEST(GetObject(hBitmap, sizeof(DIBSECTION)+2, &dibsection) == sizeof(DIBSECTION));
122 TEST(GetObject(hBitmap, -5, &dibsection) == sizeof(DIBSECTION));
123 TEST(GetLastError() == ERROR_SUCCESS);
124 DeleteObject(hBitmap);
125 ReleaseDC(0, hDC);
126
127 return TRUE;
128 }
129
130 static INT
131 Test_Palette(PTESTINFO pti)
132 {
133 LOGPALETTE logpal;
134 HPALETTE hPalette;
135 WORD wPalette;
136
137 FillMemory(&wPalette, sizeof(WORD), 0x77);
138 logpal.palVersion = 0x0300;
139 logpal.palNumEntries = 1;
140 logpal.palPalEntry[0].peRed = 0;
141 logpal.palPalEntry[0].peGreen = 0;
142 logpal.palPalEntry[0].peBlue = 0;
143 logpal.palPalEntry[0].peFlags = PC_EXPLICIT;
144 hPalette = CreatePalette(&logpal);
145 if (!hPalette) return FALSE;
146
147 SetLastError(ERROR_SUCCESS);
148 TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_PALETTE, 0, NULL) == sizeof(WORD));
149 TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_PALETTE, 0, NULL) == sizeof(WORD));
150 TEST(GetObject(hPalette, sizeof(WORD), NULL) == sizeof(WORD));
151 TEST(GetObject(hPalette, 0, NULL) == sizeof(WORD));
152 TEST(GetObject(hPalette, 5, NULL) == sizeof(WORD));
153 TEST(GetObject(hPalette, -5, NULL) == sizeof(WORD));
154 TEST(GetObject(hPalette, sizeof(WORD), &wPalette) == sizeof(WORD));
155 TEST(GetObject(hPalette, sizeof(WORD)+2, &wPalette) == sizeof(WORD));
156 TEST(GetObject(hPalette, 0, &wPalette) == 0);
157 TEST(GetObject(hPalette, 1, &wPalette) == 0);
158 TEST(GetObject(hPalette, -1, &wPalette) == sizeof(WORD));
159 TEST(GetLastError() == ERROR_SUCCESS);
160 DeleteObject(hPalette);
161 return TRUE;
162 }
163
164 static INT
165 Test_Brush(PTESTINFO pti)
166 {
167 LOGBRUSH logbrush;
168 HBRUSH hBrush;
169
170 FillMemory(&logbrush, sizeof(LOGBRUSH), 0x77);
171 hBrush = CreateSolidBrush(RGB(1,2,3));
172 if (!hBrush) return FALSE;
173
174 SetLastError(ERROR_SUCCESS);
175 TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_BRUSH, 0, NULL) == sizeof(LOGBRUSH));
176 TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_BRUSH, 0, NULL) == sizeof(LOGBRUSH));
177 TEST(GetObject(hBrush, sizeof(WORD), NULL) == sizeof(LOGBRUSH));
178 TEST(GetObject(hBrush, 0, NULL) == sizeof(LOGBRUSH));
179 RTEST(GetObject(hBrush, 5, NULL) == sizeof(LOGBRUSH));
180 RTEST(GetObject(hBrush, -5, NULL) == sizeof(LOGBRUSH));
181
182 RTEST(GetObject(hBrush, 0, &logbrush) == 0);
183 RTEST(logbrush.lbStyle == 0x77777777);
184 RTEST(GetObject(hBrush, 5, &logbrush) == sizeof(LOGBRUSH));
185 RTEST(logbrush.lbStyle == 0);
186 RTEST(logbrush.lbColor == 0x77777701);
187
188 RTEST(GetObject(hBrush, sizeof(LOGBRUSH), &logbrush) == sizeof(LOGBRUSH));
189 RTEST(GetObject(hBrush, sizeof(LOGBRUSH)+2, &logbrush) == sizeof(LOGBRUSH));
190 RTEST(GetObject(hBrush, -1, &logbrush) == sizeof(LOGBRUSH));
191 // TODO: test all members
192
193 RTEST(GetLastError() == ERROR_SUCCESS);
194 DeleteObject(hBrush);
195 return TRUE;
196 }
197
198 static INT
199 Test_Pen(PTESTINFO pti)
200 {
201 LOGPEN logpen;
202 HPEN hPen;
203
204 FillMemory(&logpen, sizeof(LOGPEN), 0x77);
205 hPen = CreatePen(PS_SOLID, 3, RGB(4,5,6));
206 if (!hPen) return FALSE;
207 SetLastError(ERROR_SUCCESS);
208 RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_PEN, 0, NULL) == sizeof(LOGPEN));
209 RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_PEN, 0, NULL) == sizeof(LOGPEN));
210 RTEST(GetObject(hPen, sizeof(BITMAP), NULL) == sizeof(LOGPEN));
211 RTEST(GetObject(hPen, 0, NULL) == sizeof(LOGPEN));
212 RTEST(GetObject(hPen, 5, NULL) == sizeof(LOGPEN));
213 RTEST(GetObject(hPen, -5, NULL) == sizeof(LOGPEN));
214 RTEST(GetObject(hPen, sizeof(LOGPEN), &logpen) == sizeof(LOGPEN));
215 RTEST(GetObject(hPen, sizeof(LOGPEN)-1, &logpen) == 0);
216 RTEST(GetObject(hPen, sizeof(LOGPEN)+2, &logpen) == sizeof(LOGPEN));
217 RTEST(GetObject(hPen, 0, &logpen) == 0);
218 RTEST(GetObject(hPen, -5, &logpen) == sizeof(LOGPEN));
219 RTEST(GetLastError() == ERROR_SUCCESS);
220
221 /* test if the fields are filled correctly */
222 RTEST(logpen.lopnStyle == PS_SOLID);
223
224
225 DeleteObject(hPen);
226 return TRUE;
227 }
228
229 static INT
230 Test_ExtPen(PTESTINFO pti)
231 {
232 HPEN hPen;
233 EXTLOGPEN extlogpen;
234 LOGBRUSH logbrush;
235 DWORD dwStyles[17] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
236 struct
237 {
238 EXTLOGPEN extlogpen;
239 DWORD dwStyles[50];
240 } elpUserStyle;
241
242 SetLastError(ERROR_SUCCESS);
243 RTEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0);
244 RTEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0);
245 TEST(GetLastError() == ERROR_INVALID_PARAMETER);
246
247 FillMemory(&extlogpen, sizeof(EXTLOGPEN), 0x77);
248 logbrush.lbStyle = BS_SOLID;
249 logbrush.lbColor = RGB(1,2,3);
250 logbrush.lbHatch = 22;
251 hPen = ExtCreatePen(PS_GEOMETRIC | PS_DASH, 5, &logbrush, 0, NULL);
252
253 RTEST(GDI_HANDLE_GET_TYPE(hPen) == GDI_OBJECT_TYPE_EXTPEN);
254 RTEST(GetObject((HANDLE)GDI_OBJECT_TYPE_EXTPEN, 0, NULL) == 0);
255 RTEST(GetObject(hPen, sizeof(EXTLOGPEN), NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));
256 RTEST(GetObject(hPen, 0, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));
257 RTEST(GetObject((HANDLE)GDI_HANDLE_GET_INDEX(hPen), 0, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));
258 RTEST(GetObject(hPen, 5, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));
259 RTEST(GetObject(hPen, -5, NULL) == sizeof(EXTLOGPEN)-sizeof(DWORD));
260 RTEST(GetObject(hPen, 0, &extlogpen) == 0);
261 RTEST(GetObject(hPen, 4, &extlogpen) == 0);
262
263 /* Nothing should be filled */
264 RTEST(extlogpen.elpPenStyle == 0x77777777);
265 RTEST(extlogpen.elpWidth == 0x77777777);
266
267 RTEST(GetObject(hPen, sizeof(EXTLOGPEN), &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD));
268 RTEST(GetObject(hPen, sizeof(EXTLOGPEN)-sizeof(DWORD), &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD));
269 RTEST(GetObject(hPen, sizeof(EXTLOGPEN)-sizeof(DWORD)-1, &extlogpen) == 0);
270 RTEST(GetObject(hPen, sizeof(EXTLOGPEN)+2, &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD));
271 RTEST(GetObject(hPen, -5, &extlogpen) == sizeof(EXTLOGPEN)-sizeof(DWORD));
272
273 /* test if the fields are filled correctly */
274 RTEST(extlogpen.elpPenStyle == (PS_GEOMETRIC | PS_DASH));
275 RTEST(extlogpen.elpWidth == 5);
276 RTEST(extlogpen.elpBrushStyle == 0);
277 RTEST(extlogpen.elpColor == RGB(1,2,3));
278 RTEST(extlogpen.elpHatch == 22);
279 RTEST(extlogpen.elpNumEntries == 0);
280 DeleteObject(hPen);
281
282 /* A maximum of 16 Styles is allowed */
283 hPen = ExtCreatePen(PS_GEOMETRIC | PS_USERSTYLE, 5, &logbrush, 16, (CONST DWORD*)&dwStyles);
284 RTEST(GetObject(hPen, 0, NULL) == sizeof(EXTLOGPEN) + 15*sizeof(DWORD));
285 RTEST(GetObject(hPen, sizeof(EXTLOGPEN) + 15*sizeof(DWORD), &elpUserStyle) == sizeof(EXTLOGPEN) + 15*sizeof(DWORD));
286 RTEST(((EXTLOGPEN*)&elpUserStyle)->elpStyleEntry[0] == 0);
287 RTEST(((EXTLOGPEN*)&elpUserStyle)->elpStyleEntry[1] == 1);
288 RTEST(((EXTLOGPEN*)&elpUserStyle)->elpStyleEntry[15] == 15);
289 DeleteObject(hPen);
290
291 return TRUE;
292 }
293
294 static INT
295 Test_Font(PTESTINFO pti)
296 {
297 HFONT hFont;
298 LOGFONTA logfonta;
299 LOGFONTW logfontw;
300 EXTLOGFONTA extlogfonta;
301 EXTLOGFONTW extlogfontw;
302 ENUMLOGFONTEXA enumlogfontexa;
303 ENUMLOGFONTEXW enumlogfontexw;
304 ENUMLOGFONTEXDVA enumlogfontexdva;
305 ENUMLOGFONTEXDVW enumlogfontexdvw;
306 ENUMLOGFONTA enumlogfonta;
307 ENUMLOGFONTW enumlogfontw;
308 BYTE bData[270];
309
310 FillMemory(&logfonta, sizeof(LOGFONTA), 0x77);
311 hFont = CreateFont(8, 8, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE,
312 ANSI_CHARSET, OUT_CHARACTER_PRECIS, CLIP_CHARACTER_PRECIS,
313 ANTIALIASED_QUALITY, DEFAULT_PITCH, "testfont");
314 TEST(hFont);
315
316 SetLastError(ERROR_SUCCESS);
317 TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, 0, NULL) == sizeof(LOGFONTA));
318 TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, 0, NULL) == sizeof(LOGFONTW));
319 TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(LOGFONTA), NULL) == sizeof(LOGFONTA)); // 60
320 TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTA), NULL) == sizeof(LOGFONTA)); // 156
321 TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXA), NULL) == sizeof(LOGFONTA)); // 188
322 TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(EXTLOGFONTA), NULL) == sizeof(LOGFONTA)); // 192
323 TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVA), NULL) == sizeof(LOGFONTA)); // 260
324 TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVA)+1, NULL) == sizeof(LOGFONTA)); // 260
325 TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(LOGFONTW), NULL) == sizeof(LOGFONTW)); // 92
326 TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTW), NULL) == sizeof(LOGFONTW)); // 284
327 TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(EXTLOGFONTW), NULL) == sizeof(LOGFONTW)); // 320
328 TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXW), NULL) == sizeof(LOGFONTW)); // 348
329 TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVW), NULL) == sizeof(LOGFONTW)); // 420
330 TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_FONT, sizeof(ENUMLOGFONTEXDVW)+1, NULL) == sizeof(LOGFONTW)); // 356!
331
332 TEST(GetObjectA(hFont, sizeof(LOGFONTA), NULL) == sizeof(LOGFONTA));
333 TEST(GetObjectA(hFont, 0, NULL) == sizeof(LOGFONTA));
334 TEST(GetObjectA(hFont, 5, NULL) == sizeof(LOGFONTA));
335 TEST(GetObjectA(hFont, -5, NULL) == sizeof(LOGFONTA));
336 TEST(GetObjectA(hFont, 0, &logfonta) == 0);
337 TEST(logfonta.lfHeight == 0x77777777);
338
339 TEST(GetObjectA(hFont, 5, &logfonta) == 5);
340 TEST(logfonta.lfHeight == 8);
341 TEST(logfonta.lfWidth == 0x77777708);
342
343 TEST(GetObjectA(hFont, sizeof(LOGFONTA), &logfonta) == sizeof(LOGFONTA)); // 60
344 TEST(GetObjectA(hFont, sizeof(LOGFONTW), &logfontw) == sizeof(LOGFONTA)); // 92
345 TEST(GetObjectA(hFont, sizeof(EXTLOGFONTA), &extlogfonta) == sizeof(EXTLOGFONTA)); // 192
346 TEST(GetObjectA(hFont, sizeof(EXTLOGFONTA)+1, &extlogfonta) == sizeof(EXTLOGFONTA)+1); // 192
347 TEST(GetObjectA(hFont, sizeof(EXTLOGFONTW), &extlogfontw) == sizeof(ENUMLOGFONTEXDVA)); // 320
348
349 TEST(GetObjectA(hFont, 261, &bData) == 260); // no
350
351 /* LOGFONT / GetObjectW */
352 FillMemory(&logfontw, sizeof(LOGFONTW), 0x77);
353
354 TEST(GetObjectW(hFont, sizeof(LOGFONTW), NULL) == sizeof(LOGFONTW));
355 TEST(GetObjectW(hFont, 0, NULL) == sizeof(LOGFONTW));
356 TEST(GetObjectW(hFont, 5, NULL) == sizeof(LOGFONTW));
357 TEST(GetObjectW(hFont, -5, NULL) == sizeof(LOGFONTW));
358 TEST(GetObjectW(hFont, 0, &logfontw) == 0);
359 TEST(logfontw.lfHeight == 0x77777777);
360
361 TEST(GetObjectW(hFont, 5, &logfontw) == 5);
362 TEST(logfontw.lfHeight == 8);
363 TEST(logfontw.lfWidth == 0x77777708);
364
365 TEST(GetObjectA(hFont, sizeof(LOGFONTA), &logfonta) == sizeof(LOGFONTA)); // 60
366 TEST(logfonta.lfHeight == 8);
367 TEST(GetObjectA(hFont, sizeof(ENUMLOGFONTA), &enumlogfonta) == sizeof(ENUMLOGFONTA)); // 156
368 TEST(GetObjectA(hFont, sizeof(ENUMLOGFONTEXA), &enumlogfontexa) == sizeof(ENUMLOGFONTEXA)); // 188
369 TEST(GetObjectA(hFont, sizeof(EXTLOGFONTA), &extlogfonta) == sizeof(EXTLOGFONTA)); // 192
370 TEST(GetObjectA(hFont, sizeof(ENUMLOGFONTEXDVA), &enumlogfontexdva) == sizeof(ENUMLOGFONTEXDVA)); // 260
371 TEST(GetObjectA(hFont, sizeof(ENUMLOGFONTEXDVA)+1, &enumlogfontexdva) == sizeof(ENUMLOGFONTEXDVA)); // 260
372
373 TEST(GetObjectW(hFont, sizeof(LOGFONTW), &logfontw) == sizeof(LOGFONTW)); // 92
374 TEST(GetObjectW(hFont, sizeof(ENUMLOGFONTW), &enumlogfontw) == sizeof(ENUMLOGFONTW)); // 284
375 TEST(GetObjectW(hFont, sizeof(EXTLOGFONTW), &extlogfontw) == sizeof(EXTLOGFONTW)); // 320
376 TEST(GetObjectW(hFont, sizeof(ENUMLOGFONTEXW), &enumlogfontexw) == sizeof(ENUMLOGFONTEXW)); // 348
377 TEST(GetObjectW(hFont, sizeof(ENUMLOGFONTEXDVW), &enumlogfontexdvw) == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD)); // 420
378 TEST(GetObjectW(hFont, sizeof(ENUMLOGFONTEXDVW)+1, &enumlogfontexdvw) == sizeof(ENUMLOGFONTEXW) + 2*sizeof(DWORD)); // 356!
379
380 TEST(GetObjectW(hFont, 356, &bData) == 356);
381 TEST(GetLastError() == ERROR_SUCCESS);
382
383 DeleteObject(hFont);
384
385 return TRUE;
386 }
387
388 static INT
389 Test_Colorspace(PTESTINFO pti)
390 {
391 SetLastError(ERROR_SUCCESS);
392 TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_COLORSPACE, 0, NULL) == 60);// FIXME: what structure?
393 TEST(GetLastError() == ERROR_INSUFFICIENT_BUFFER);
394 SetLastError(ERROR_SUCCESS);
395 TEST(GetObjectW((HANDLE)GDI_OBJECT_TYPE_COLORSPACE, 0, NULL) == 0);
396 TEST(GetLastError() == ERROR_INSUFFICIENT_BUFFER);
397
398 return TRUE;
399 }
400
401 static INT
402 Test_MetaDC(PTESTINFO pti)
403 {
404 /* Windows does not SetLastError() on a metadc, but it doesn't seem to do anything with it */
405 HDC hMetaDC;
406 BYTE buffer[100];
407
408 hMetaDC = CreateMetaFile(NULL);
409 if(!hMetaDC) return FALSE;
410 if(((UINT)hMetaDC & GDI_HANDLE_TYPE_MASK) != GDI_OBJECT_TYPE_METADC) return FALSE;
411
412 SetLastError(ERROR_SUCCESS);
413 TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_METADC, 0, NULL) == 0);
414 TEST(GetObjectA((HANDLE)GDI_OBJECT_TYPE_METADC, 100, &buffer) == 0);
415 TEST(GetObjectA(hMetaDC, 0, NULL) == 0);
416 TEST(GetObjectA(hMetaDC, 100, &buffer) == 0);
417 TEST(GetLastError() == ERROR_SUCCESS);
418 return TRUE;
419 }
420
421 INT
422 Test_GetObject(PTESTINFO pti)
423 {
424
425 HRGN hRgn;
426 hRgn = CreateRectRgn(0,0,5,5);
427 SetLastError(ERROR_SUCCESS);
428 TEST(GetObjectW(hRgn, 0, NULL) == 0);
429 TEST(GetLastError() == ERROR_INVALID_HANDLE);
430 DeleteObject(hRgn);
431
432 Test_Font(pti);
433 Test_Colorspace(pti);
434 Test_General(pti);
435 Test_Bitmap(pti);
436 Test_Dibsection(pti);
437 Test_Palette(pti);
438 Test_Brush(pti);
439 Test_Pen(pti);
440 Test_ExtPen(pti); // not implemented yet in ROS
441 Test_MetaDC(pti);
442
443 return APISTATUS_NORMAL;
444 }