2 Test_General(PTESTINFO pti
)
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
);
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
);
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);
63 Test_Bitmap(PTESTINFO pti
)
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};
71 FillMemory(&bitmap
, sizeof(BITMAP
), 0x77);
72 hBitmap
= CreateBitmap(10,10,1,8,bData
);
73 if (!hBitmap
) return FALSE
;
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
);
92 // todo: test invalid handle + buffer
94 DeleteObject(hBitmap
);
99 Test_Dibsection(PTESTINFO pti
)
101 BITMAPINFO bmi
= {{sizeof(BITMAPINFOHEADER
), 10, 10, 1, 8, BI_RGB
, 0, 10, 10, 0,0}};
103 DIBSECTION dibsection
;
106 FillMemory(&dibsection
, sizeof(DIBSECTION
), 0x77);
108 hBitmap
= CreateDIBSection(hDC
, &bmi
, DIB_RGB_COLORS
, &pData
, NULL
, 0);
109 if(!hBitmap
) return FALSE
;
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
);
131 Test_Palette(PTESTINFO pti
)
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
;
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
);
165 Test_Brush(PTESTINFO pti
)
170 FillMemory(&logbrush
, sizeof(LOGBRUSH
), 0x77);
171 hBrush
= CreateSolidBrush(RGB(1,2,3));
172 if (!hBrush
) return FALSE
;
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
));
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);
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
193 RTEST(GetLastError() == ERROR_SUCCESS
);
194 DeleteObject(hBrush
);
199 Test_Pen(PTESTINFO pti
)
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
);
221 /* test if the fields are filled correctly */
222 RTEST(logpen
.lopnStyle
== PS_SOLID
);
230 Test_ExtPen(PTESTINFO pti
)
235 DWORD dwStyles
[17] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
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
);
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
);
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);
263 /* Nothing should be filled */
264 RTEST(extlogpen
.elpPenStyle
== 0x77777777);
265 RTEST(extlogpen
.elpWidth
== 0x77777777);
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
));
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);
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);
295 Test_Font(PTESTINFO pti
)
300 EXTLOGFONTA extlogfonta
;
301 EXTLOGFONTW extlogfontw
;
302 ENUMLOGFONTEXA enumlogfontexa
;
303 ENUMLOGFONTEXW enumlogfontexw
;
304 ENUMLOGFONTEXDVA enumlogfontexdva
;
305 ENUMLOGFONTEXDVW enumlogfontexdvw
;
306 ENUMLOGFONTA enumlogfonta
;
307 ENUMLOGFONTW enumlogfontw
;
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");
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!
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);
339 TEST(GetObjectA(hFont
, 5, &logfonta
) == 5);
340 TEST(logfonta
.lfHeight
== 8);
341 TEST(logfonta
.lfWidth
== 0x77777708);
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
349 TEST(GetObjectA(hFont
, 261, &bData
) == 260); // no
351 /* LOGFONT / GetObjectW */
352 FillMemory(&logfontw
, sizeof(LOGFONTW
), 0x77);
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);
361 TEST(GetObjectW(hFont
, 5, &logfontw
) == 5);
362 TEST(logfontw
.lfHeight
== 8);
363 TEST(logfontw
.lfWidth
== 0x77777708);
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
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!
380 TEST(GetObjectW(hFont
, 356, &bData
) == 356);
381 TEST(GetLastError() == ERROR_SUCCESS
);
389 Test_Colorspace(PTESTINFO pti
)
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
);
402 Test_MetaDC(PTESTINFO pti
)
404 /* Windows does not SetLastError() on a metadc, but it doesn't seem to do anything with it */
408 hMetaDC
= CreateMetaFile(NULL
);
409 if(!hMetaDC
) return FALSE
;
410 if(((UINT
)hMetaDC
& GDI_HANDLE_TYPE_MASK
) != GDI_OBJECT_TYPE_METADC
) return FALSE
;
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
);
422 Test_GetObject(PTESTINFO pti
)
426 hRgn
= CreateRectRgn(0,0,5,5);
427 SetLastError(ERROR_SUCCESS
);
428 TEST(GetObjectW(hRgn
, 0, NULL
) == 0);
429 TEST(GetLastError() == ERROR_INVALID_HANDLE
);
433 Test_Colorspace(pti
);
436 Test_Dibsection(pti
);
440 Test_ExtPen(pti
); // not implemented yet in ROS
443 return APISTATUS_NORMAL
;