2 Test_General(PTESTINFO pti
)
12 /* Test null pointer and invalid handles */
13 SetLastError(ERROR_SUCCESS
);
14 RTEST(GetObjectA(0, 0, NULL
) == 0);
15 RTEST(GetObjectA((HANDLE
)-1, 0, NULL
) == 0);
16 RTEST(GetObjectA((HANDLE
)0x00380000, 0, NULL
) == 0);
17 RTEST(GetLastError() == ERROR_SUCCESS
);
19 SetLastError(ERROR_SUCCESS
);
20 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_DC
, 0, NULL
) == 0);
21 RTEST(GetLastError() == ERROR_INVALID_HANDLE
);
22 SetLastError(ERROR_SUCCESS
);
23 RTEST(GetObjectW((HANDLE
)GDI_OBJECT_TYPE_DC
, 0, NULL
) == 0);
24 RTEST(GetLastError() == ERROR_INVALID_HANDLE
);
25 SetLastError(ERROR_SUCCESS
);
26 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_REGION
, 0, NULL
) == 0);
27 RTEST(GetLastError() == ERROR_INVALID_HANDLE
);
28 SetLastError(ERROR_SUCCESS
);
29 RTEST(GetObjectW((HANDLE
)GDI_OBJECT_TYPE_REGION
, 0, NULL
) == 0);
30 RTEST(GetLastError() == ERROR_INVALID_HANDLE
);
31 SetLastError(ERROR_SUCCESS
);
32 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_EMF
, 0, NULL
) == 0);
33 RTEST(GetLastError() == ERROR_INVALID_HANDLE
);
34 SetLastError(ERROR_SUCCESS
);
35 RTEST(GetObjectW((HANDLE
)GDI_OBJECT_TYPE_EMF
, 0, NULL
) == 0);
36 RTEST(GetLastError() == ERROR_INVALID_HANDLE
);
37 SetLastError(ERROR_SUCCESS
);
38 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_METAFILE
, 0, NULL
) == 0);
39 RTEST(GetLastError() == ERROR_INVALID_HANDLE
);
40 SetLastError(ERROR_SUCCESS
);
41 RTEST(GetObjectW((HANDLE
)GDI_OBJECT_TYPE_METAFILE
, 0, NULL
) == 0);
42 RTEST(GetLastError() == ERROR_INVALID_HANDLE
);
43 SetLastError(ERROR_SUCCESS
);
44 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_ENHMETAFILE
, 0, NULL
) == 0);
45 RTEST(GetLastError() == ERROR_INVALID_HANDLE
);
46 SetLastError(ERROR_SUCCESS
);
47 RTEST(GetObjectW((HANDLE
)GDI_OBJECT_TYPE_ENHMETAFILE
, 0, NULL
) == 0);
48 RTEST(GetLastError() == ERROR_INVALID_HANDLE
);
50 /* Test need of alignment */
51 hBrush
= GetStockObject(WHITE_BRUSH
);
52 plogbrush
= (PVOID
)((ULONG_PTR
)&TestStruct
.logbrush
);
53 RTEST(GetObject(hBrush
, sizeof(LOGBRUSH
), plogbrush
) == sizeof(LOGBRUSH
));
54 plogbrush
= (PVOID
)((ULONG_PTR
)&TestStruct
.logbrush
+ 2);
55 RTEST(GetObject(hBrush
, sizeof(LOGBRUSH
), plogbrush
) == sizeof(LOGBRUSH
));
56 plogbrush
= (PVOID
)((ULONG_PTR
)&TestStruct
.logbrush
+ 1);
57 RTEST(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 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_BITMAP
, 0, NULL
) == sizeof(BITMAP
));
77 RTEST(GetObjectW((HANDLE
)GDI_OBJECT_TYPE_BITMAP
, 0, NULL
) == sizeof(BITMAP
));
78 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_BITMAP
, sizeof(BITMAP
), NULL
) == sizeof(BITMAP
));
79 RTEST(GetObjectA(hBitmap
, sizeof(DIBSECTION
), NULL
) == sizeof(BITMAP
));
80 RTEST(GetObjectA(hBitmap
, 0, NULL
) == sizeof(BITMAP
));
81 RTEST(GetObjectA((HANDLE
)((UINT_PTR
)hBitmap
& 0x0000ffff), 0, NULL
) == sizeof(BITMAP
));
82 RTEST(GetObjectA(hBitmap
, 5, NULL
) == sizeof(BITMAP
));
83 RTEST(GetObjectA(hBitmap
, -5, NULL
) == sizeof(BITMAP
));
84 RTEST(GetObjectA(hBitmap
, 0, Buffer
) == 0);
85 RTEST(GetObjectA(hBitmap
, 5, Buffer
) == 0);
86 RTEST(GetObjectA(hBitmap
, sizeof(BITMAP
), &bitmap
) == sizeof(BITMAP
));
87 RTEST(GetObjectA(hBitmap
, sizeof(BITMAP
)+2, &bitmap
) == sizeof(BITMAP
));
88 RTEST(GetObjectA(hBitmap
, sizeof(DIBSECTION
), &dibsection
) == sizeof(BITMAP
));
89 RTEST(GetObjectA(hBitmap
, -5, &bitmap
) == sizeof(BITMAP
));
90 RTEST(GetLastError() == ERROR_SUCCESS
);
92 // todo: test invalid handle + buffer
94 DeleteObject(hBitmap
);
99 Test_Dibsection(PTESTINFO pti
)
101 BITMAPINFO bmi
= {{sizeof(BITMAPINFOHEADER
), 10, 9, 1, 8, BI_RGB
, 0, 10, 10, 0,0}};
104 DIBSECTION dibsection
;
108 FillMemory(&dibsection
, sizeof(DIBSECTION
), 0x77);
110 hBitmap
= CreateDIBSection(hDC
, &bmi
, DIB_RGB_COLORS
, &pData
, NULL
, 0);
113 SetLastError(ERROR_SUCCESS
);
114 RTEST(GetObject(hBitmap
, sizeof(DIBSECTION
), NULL
) == sizeof(BITMAP
));
115 RTEST(GetObject(hBitmap
, 0, NULL
) == sizeof(BITMAP
));
116 RTEST(GetObject(hBitmap
, 5, NULL
) == sizeof(BITMAP
));
117 RTEST(GetObject(hBitmap
, -5, NULL
) == sizeof(BITMAP
));
118 RTEST(GetObject(hBitmap
, 0, &dibsection
) == 0);
119 RTEST(GetObject(hBitmap
, 5, &dibsection
) == 0);
120 RTEST(GetObject(hBitmap
, sizeof(BITMAP
), &bitmap
) == sizeof(BITMAP
));
121 RTEST(GetObject(hBitmap
, sizeof(BITMAP
)+2, &bitmap
) == sizeof(BITMAP
));
122 TEST(bitmap
.bmType
== 0);
123 TEST(bitmap
.bmWidth
== 10);
124 TEST(bitmap
.bmHeight
== 9);
125 TEST(bitmap
.bmWidthBytes
== 12);
126 TEST(bitmap
.bmPlanes
== 1);
127 TEST(bitmap
.bmBitsPixel
== 8);
128 TEST(bitmap
.bmBits
== pData
);
129 RTEST(GetObject(hBitmap
, sizeof(DIBSECTION
), &dibsection
) == sizeof(DIBSECTION
));
130 RTEST(GetObject(hBitmap
, sizeof(DIBSECTION
)+2, &dibsection
) == sizeof(DIBSECTION
));
131 RTEST(GetObject(hBitmap
, -5, &dibsection
) == sizeof(DIBSECTION
));
132 RTEST(GetLastError() == ERROR_SUCCESS
);
133 DeleteObject(hBitmap
);
140 Test_Palette(PTESTINFO pti
)
146 FillMemory(&wPalette
, sizeof(WORD
), 0x77);
147 logpal
.palVersion
= 0x0300;
148 logpal
.palNumEntries
= 1;
149 logpal
.palPalEntry
[0].peRed
= 0;
150 logpal
.palPalEntry
[0].peGreen
= 0;
151 logpal
.palPalEntry
[0].peBlue
= 0;
152 logpal
.palPalEntry
[0].peFlags
= PC_EXPLICIT
;
153 hPalette
= CreatePalette(&logpal
);
154 if (!hPalette
) return FALSE
;
156 SetLastError(ERROR_SUCCESS
);
157 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_PALETTE
, 0, NULL
) == sizeof(WORD
));
158 RTEST(GetObjectW((HANDLE
)GDI_OBJECT_TYPE_PALETTE
, 0, NULL
) == sizeof(WORD
));
159 RTEST(GetObject(hPalette
, sizeof(WORD
), NULL
) == sizeof(WORD
));
160 RTEST(GetObject(hPalette
, 0, NULL
) == sizeof(WORD
));
161 RTEST(GetObject(hPalette
, 5, NULL
) == sizeof(WORD
));
162 RTEST(GetObject(hPalette
, -5, NULL
) == sizeof(WORD
));
163 RTEST(GetObject(hPalette
, sizeof(WORD
), &wPalette
) == sizeof(WORD
));
164 RTEST(GetObject(hPalette
, sizeof(WORD
)+2, &wPalette
) == sizeof(WORD
));
165 RTEST(GetObject(hPalette
, 0, &wPalette
) == 0);
166 RTEST(GetObject(hPalette
, 1, &wPalette
) == 0);
167 RTEST(GetObject(hPalette
, -1, &wPalette
) == sizeof(WORD
));
168 RTEST(GetLastError() == ERROR_SUCCESS
);
169 DeleteObject(hPalette
);
174 Test_Brush(PTESTINFO pti
)
179 FillMemory(&logbrush
, sizeof(LOGBRUSH
), 0x77);
180 hBrush
= CreateSolidBrush(RGB(1,2,3));
181 if (!hBrush
) return FALSE
;
183 SetLastError(ERROR_SUCCESS
);
184 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_BRUSH
, 0, NULL
) == sizeof(LOGBRUSH
));
185 RTEST(GetObjectW((HANDLE
)GDI_OBJECT_TYPE_BRUSH
, 0, NULL
) == sizeof(LOGBRUSH
));
186 RTEST(GetObject(hBrush
, sizeof(WORD
), NULL
) == sizeof(LOGBRUSH
));
187 RTEST(GetObject(hBrush
, 0, NULL
) == sizeof(LOGBRUSH
));
188 RTEST(GetObject(hBrush
, 5, NULL
) == sizeof(LOGBRUSH
));
189 RTEST(GetObject(hBrush
, -5, NULL
) == sizeof(LOGBRUSH
));
191 RTEST(GetObject(hBrush
, 0, &logbrush
) == 0);
192 RTEST(logbrush
.lbStyle
== 0x77777777);
193 RTEST(GetObject(hBrush
, 5, &logbrush
) == sizeof(LOGBRUSH
));
194 RTEST(logbrush
.lbStyle
== 0);
195 RTEST(logbrush
.lbColor
== 0x77777701);
197 RTEST(GetObject(hBrush
, sizeof(LOGBRUSH
), &logbrush
) == sizeof(LOGBRUSH
));
198 RTEST(GetObject(hBrush
, sizeof(LOGBRUSH
)+2, &logbrush
) == sizeof(LOGBRUSH
));
199 RTEST(GetObject(hBrush
, -1, &logbrush
) == sizeof(LOGBRUSH
));
200 // TODO: test all members
202 RTEST(GetLastError() == ERROR_SUCCESS
);
203 DeleteObject(hBrush
);
208 Test_Pen(PTESTINFO pti
)
213 FillMemory(&logpen
, sizeof(LOGPEN
), 0x77);
214 hPen
= CreatePen(PS_SOLID
, 3, RGB(4,5,6));
215 if (!hPen
) return FALSE
;
216 SetLastError(ERROR_SUCCESS
);
217 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_PEN
, 0, NULL
) == sizeof(LOGPEN
));
218 RTEST(GetObjectW((HANDLE
)GDI_OBJECT_TYPE_PEN
, 0, NULL
) == sizeof(LOGPEN
));
219 RTEST(GetObject(hPen
, sizeof(BITMAP
), NULL
) == sizeof(LOGPEN
));
220 RTEST(GetObject(hPen
, 0, NULL
) == sizeof(LOGPEN
));
221 RTEST(GetObject(hPen
, 5, NULL
) == sizeof(LOGPEN
));
222 RTEST(GetObject(hPen
, -5, NULL
) == sizeof(LOGPEN
));
223 RTEST(GetObject(hPen
, sizeof(LOGPEN
), &logpen
) == sizeof(LOGPEN
));
224 RTEST(GetObject(hPen
, sizeof(LOGPEN
)-1, &logpen
) == 0);
225 RTEST(GetObject(hPen
, sizeof(LOGPEN
)+2, &logpen
) == sizeof(LOGPEN
));
226 RTEST(GetObject(hPen
, 0, &logpen
) == 0);
227 RTEST(GetObject(hPen
, -5, &logpen
) == sizeof(LOGPEN
));
228 RTEST(GetLastError() == ERROR_SUCCESS
);
230 /* test if the fields are filled correctly */
231 RTEST(logpen
.lopnStyle
== PS_SOLID
);
239 Test_ExtPen(PTESTINFO pti
)
244 DWORD dwStyles
[17] = {0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16};
251 SetLastError(ERROR_SUCCESS
);
252 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_EXTPEN
, 0, NULL
) == 0);
253 RTEST(GetObjectW((HANDLE
)GDI_OBJECT_TYPE_EXTPEN
, 0, NULL
) == 0);
254 TEST(GetLastError() == ERROR_INVALID_PARAMETER
);
256 FillMemory(&extlogpen
, sizeof(EXTLOGPEN
), 0x77);
257 logbrush
.lbStyle
= BS_SOLID
;
258 logbrush
.lbColor
= RGB(1,2,3);
259 logbrush
.lbHatch
= 22;
260 hPen
= ExtCreatePen(PS_GEOMETRIC
| PS_DASH
, 5, &logbrush
, 0, NULL
);
262 RTEST(GDI_HANDLE_GET_TYPE(hPen
) == GDI_OBJECT_TYPE_EXTPEN
);
263 RTEST(GetObject((HANDLE
)GDI_OBJECT_TYPE_EXTPEN
, 0, NULL
) == 0);
264 RTEST(GetObject(hPen
, sizeof(EXTLOGPEN
), NULL
) == sizeof(EXTLOGPEN
)-sizeof(DWORD
));
265 RTEST(GetObject(hPen
, 0, NULL
) == sizeof(EXTLOGPEN
)-sizeof(DWORD
));
266 RTEST(GetObject((HANDLE
)GDI_HANDLE_GET_INDEX(hPen
), 0, NULL
) == sizeof(EXTLOGPEN
)-sizeof(DWORD
));
267 RTEST(GetObject(hPen
, 5, NULL
) == sizeof(EXTLOGPEN
)-sizeof(DWORD
));
268 RTEST(GetObject(hPen
, -5, NULL
) == sizeof(EXTLOGPEN
)-sizeof(DWORD
));
269 RTEST(GetObject(hPen
, 0, &extlogpen
) == 0);
270 RTEST(GetObject(hPen
, 4, &extlogpen
) == 0);
272 /* Nothing should be filled */
273 RTEST(extlogpen
.elpPenStyle
== 0x77777777);
274 RTEST(extlogpen
.elpWidth
== 0x77777777);
276 RTEST(GetObject(hPen
, sizeof(EXTLOGPEN
), &extlogpen
) == sizeof(EXTLOGPEN
)-sizeof(DWORD
));
277 RTEST(GetObject(hPen
, sizeof(EXTLOGPEN
)-sizeof(DWORD
), &extlogpen
) == sizeof(EXTLOGPEN
)-sizeof(DWORD
));
278 RTEST(GetObject(hPen
, sizeof(EXTLOGPEN
)-sizeof(DWORD
)-1, &extlogpen
) == 0);
279 RTEST(GetObject(hPen
, sizeof(EXTLOGPEN
)+2, &extlogpen
) == sizeof(EXTLOGPEN
)-sizeof(DWORD
));
280 RTEST(GetObject(hPen
, -5, &extlogpen
) == sizeof(EXTLOGPEN
)-sizeof(DWORD
));
282 /* test if the fields are filled correctly */
283 RTEST(extlogpen
.elpPenStyle
== (PS_GEOMETRIC
| PS_DASH
));
284 RTEST(extlogpen
.elpWidth
== 5);
285 RTEST(extlogpen
.elpBrushStyle
== 0);
286 RTEST(extlogpen
.elpColor
== RGB(1,2,3));
287 RTEST(extlogpen
.elpHatch
== 22);
288 RTEST(extlogpen
.elpNumEntries
== 0);
291 /* A maximum of 16 Styles is allowed */
292 hPen
= ExtCreatePen(PS_GEOMETRIC
| PS_USERSTYLE
, 5, &logbrush
, 16, (CONST DWORD
*)&dwStyles
);
293 RTEST(GetObject(hPen
, 0, NULL
) == sizeof(EXTLOGPEN
) + 15*sizeof(DWORD
));
294 RTEST(GetObject(hPen
, sizeof(EXTLOGPEN
) + 15*sizeof(DWORD
), &elpUserStyle
) == sizeof(EXTLOGPEN
) + 15*sizeof(DWORD
));
295 RTEST(((EXTLOGPEN
*)&elpUserStyle
)->elpStyleEntry
[0] == 0);
296 RTEST(((EXTLOGPEN
*)&elpUserStyle
)->elpStyleEntry
[1] == 1);
297 RTEST(((EXTLOGPEN
*)&elpUserStyle
)->elpStyleEntry
[15] == 15);
304 Test_Font(PTESTINFO pti
)
309 EXTLOGFONTA extlogfonta
;
310 EXTLOGFONTW extlogfontw
;
311 ENUMLOGFONTEXA enumlogfontexa
;
312 ENUMLOGFONTEXW enumlogfontexw
;
313 ENUMLOGFONTEXDVA enumlogfontexdva
;
314 ENUMLOGFONTEXDVW enumlogfontexdvw
;
315 ENUMLOGFONTA enumlogfonta
;
316 ENUMLOGFONTW enumlogfontw
;
319 FillMemory(&logfonta
, sizeof(LOGFONTA
), 0x77);
320 hFont
= CreateFontA(8, 8, 0, 0, FW_NORMAL
, FALSE
, FALSE
, FALSE
,
321 ANSI_CHARSET
, OUT_CHARACTER_PRECIS
, CLIP_CHARACTER_PRECIS
,
322 ANTIALIASED_QUALITY
, DEFAULT_PITCH
, "testfont");
325 SetLastError(ERROR_SUCCESS
);
326 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_FONT
, 0, NULL
) == sizeof(LOGFONTA
));
327 RTEST(GetObjectW((HANDLE
)GDI_OBJECT_TYPE_FONT
, 0, NULL
) == sizeof(LOGFONTW
));
328 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_FONT
, sizeof(LOGFONTA
), NULL
) == sizeof(LOGFONTA
)); // 60
329 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_FONT
, sizeof(ENUMLOGFONTA
), NULL
) == sizeof(LOGFONTA
)); // 156
330 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_FONT
, sizeof(ENUMLOGFONTEXA
), NULL
) == sizeof(LOGFONTA
)); // 188
331 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_FONT
, sizeof(EXTLOGFONTA
), NULL
) == sizeof(LOGFONTA
)); // 192
332 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_FONT
, sizeof(ENUMLOGFONTEXDVA
), NULL
) == sizeof(LOGFONTA
)); // 260
333 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_FONT
, sizeof(ENUMLOGFONTEXDVA
)+1, NULL
) == sizeof(LOGFONTA
)); // 260
334 RTEST(GetObjectW((HANDLE
)GDI_OBJECT_TYPE_FONT
, sizeof(LOGFONTW
), NULL
) == sizeof(LOGFONTW
)); // 92
335 RTEST(GetObjectW((HANDLE
)GDI_OBJECT_TYPE_FONT
, sizeof(ENUMLOGFONTW
), NULL
) == sizeof(LOGFONTW
)); // 284
336 RTEST(GetObjectW((HANDLE
)GDI_OBJECT_TYPE_FONT
, sizeof(EXTLOGFONTW
), NULL
) == sizeof(LOGFONTW
)); // 320
337 RTEST(GetObjectW((HANDLE
)GDI_OBJECT_TYPE_FONT
, sizeof(ENUMLOGFONTEXW
), NULL
) == sizeof(LOGFONTW
)); // 348
338 RTEST(GetObjectW((HANDLE
)GDI_OBJECT_TYPE_FONT
, sizeof(ENUMLOGFONTEXDVW
), NULL
) == sizeof(LOGFONTW
)); // 420
339 RTEST(GetObjectW((HANDLE
)GDI_OBJECT_TYPE_FONT
, sizeof(ENUMLOGFONTEXDVW
)+1, NULL
) == sizeof(LOGFONTW
)); // 356!
341 RTEST(GetObjectA(hFont
, sizeof(LOGFONTA
), NULL
) == sizeof(LOGFONTA
));
342 RTEST(GetObjectA(hFont
, 0, NULL
) == sizeof(LOGFONTA
));
343 RTEST(GetObjectA(hFont
, 5, NULL
) == sizeof(LOGFONTA
));
344 RTEST(GetObjectA(hFont
, -5, NULL
) == sizeof(LOGFONTA
));
345 RTEST(GetObjectA(hFont
, 0, &logfonta
) == 0);
346 RTEST(logfonta
.lfHeight
== 0x77777777);
348 TEST(GetObjectA(hFont
, 5, &logfonta
) == 5);
349 TEST(logfonta
.lfHeight
== 8);
350 TEST(logfonta
.lfWidth
== 0x77777708);
352 RTEST(GetObjectA(hFont
, sizeof(LOGFONTA
), &logfonta
) == sizeof(LOGFONTA
)); // 60
353 TEST(GetObjectA(hFont
, sizeof(LOGFONTW
), &logfontw
) == sizeof(LOGFONTA
)); // 92
354 RTEST(GetObjectA(hFont
, sizeof(EXTLOGFONTA
), &extlogfonta
) == sizeof(EXTLOGFONTA
)); // 192
355 TEST(GetObjectA(hFont
, sizeof(EXTLOGFONTA
)+1, &extlogfonta
) == sizeof(EXTLOGFONTA
)+1); // 192
356 TEST(GetObjectA(hFont
, sizeof(EXTLOGFONTW
), &extlogfontw
) == sizeof(ENUMLOGFONTEXDVA
)); // 320
358 TEST(GetObjectA(hFont
, 261, &bData
) == 260); // no
360 /* LOGFONT / GetObjectW */
361 FillMemory(&logfontw
, sizeof(LOGFONTW
), 0x77);
363 RTEST(GetObjectW(hFont
, sizeof(LOGFONTW
), NULL
) == sizeof(LOGFONTW
));
364 RTEST(GetObjectW(hFont
, 0, NULL
) == sizeof(LOGFONTW
));
365 RTEST(GetObjectW(hFont
, 5, NULL
) == sizeof(LOGFONTW
));
366 RTEST(GetObjectW(hFont
, -5, NULL
) == sizeof(LOGFONTW
));
367 RTEST(GetObjectW(hFont
, 0, &logfontw
) == 0);
368 RTEST(logfontw
.lfHeight
== 0x77777777);
370 TEST(GetObjectW(hFont
, 5, &logfontw
) == 5);
371 TEST(logfontw
.lfHeight
== 8);
372 TEST(logfontw
.lfWidth
== 0x77777708);
374 RTEST(GetObjectA(hFont
, sizeof(LOGFONTA
), &logfonta
) == sizeof(LOGFONTA
)); // 60
375 RTEST(logfonta
.lfHeight
== 8);
376 RTEST(GetObjectA(hFont
, sizeof(ENUMLOGFONTA
), &enumlogfonta
) == sizeof(ENUMLOGFONTA
)); // 156
377 RTEST(GetObjectA(hFont
, sizeof(ENUMLOGFONTEXA
), &enumlogfontexa
) == sizeof(ENUMLOGFONTEXA
)); // 188
378 RTEST(GetObjectA(hFont
, sizeof(EXTLOGFONTA
), &extlogfonta
) == sizeof(EXTLOGFONTA
)); // 192
379 RTEST(GetObjectA(hFont
, sizeof(ENUMLOGFONTEXDVA
), &enumlogfontexdva
) == sizeof(ENUMLOGFONTEXDVA
)); // 260
380 TEST(GetObjectA(hFont
, sizeof(ENUMLOGFONTEXDVA
)+1, &enumlogfontexdva
) == sizeof(ENUMLOGFONTEXDVA
)); // 260
382 RTEST(GetObjectW(hFont
, sizeof(LOGFONTW
), &logfontw
) == sizeof(LOGFONTW
)); // 92
383 RTEST(GetObjectW(hFont
, sizeof(ENUMLOGFONTW
), &enumlogfontw
) == sizeof(ENUMLOGFONTW
)); // 284
384 RTEST(GetObjectW(hFont
, sizeof(EXTLOGFONTW
), &extlogfontw
) == sizeof(EXTLOGFONTW
)); // 320
385 RTEST(GetObjectW(hFont
, sizeof(ENUMLOGFONTEXW
), &enumlogfontexw
) == sizeof(ENUMLOGFONTEXW
)); // 348
386 TEST(GetObjectW(hFont
, sizeof(ENUMLOGFONTEXDVW
), &enumlogfontexdvw
) == sizeof(ENUMLOGFONTEXW
) + 2*sizeof(DWORD
)); // 420
387 TEST(GetObjectW(hFont
, sizeof(ENUMLOGFONTEXDVW
)+1, &enumlogfontexdvw
) == sizeof(ENUMLOGFONTEXW
) + 2*sizeof(DWORD
)); // 356!
389 TEST(GetObjectW(hFont
, 356, &bData
) == 356);
390 TEST(GetLastError() == ERROR_SUCCESS
);
398 Test_Colorspace(PTESTINFO pti
)
400 SetLastError(ERROR_SUCCESS
);
401 TEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_COLORSPACE
, 0, NULL
) == 60);// FIXME: what structure?
402 TEST(GetLastError() == ERROR_INSUFFICIENT_BUFFER
);
403 SetLastError(ERROR_SUCCESS
);
404 RTEST(GetObjectW((HANDLE
)GDI_OBJECT_TYPE_COLORSPACE
, 0, NULL
) == 0);
405 TEST(GetLastError() == ERROR_INSUFFICIENT_BUFFER
);
411 Test_MetaDC(PTESTINFO pti
)
413 /* Windows does not SetLastError() on a metadc, but it doesn't seem to do anything with it */
417 hMetaDC
= CreateMetaFile(NULL
);
418 if(!hMetaDC
) return FALSE
;
419 if(((UINT_PTR
)hMetaDC
& GDI_HANDLE_TYPE_MASK
) != GDI_OBJECT_TYPE_METADC
) return FALSE
;
421 SetLastError(ERROR_SUCCESS
);
422 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_METADC
, 0, NULL
) == 0);
423 RTEST(GetObjectA((HANDLE
)GDI_OBJECT_TYPE_METADC
, 100, &buffer
) == 0);
424 RTEST(GetObjectA(hMetaDC
, 0, NULL
) == 0);
425 RTEST(GetObjectA(hMetaDC
, 100, &buffer
) == 0);
426 RTEST(GetLastError() == ERROR_SUCCESS
);
431 Test_GetObject(PTESTINFO pti
)
435 hRgn
= CreateRectRgn(0,0,5,5);
436 SetLastError(ERROR_SUCCESS
);
437 RTEST(GetObjectW(hRgn
, 0, NULL
) == 0);
438 RTEST(GetLastError() == ERROR_INVALID_HANDLE
);
442 Test_Colorspace(pti
);
445 Test_Dibsection(pti
);
449 Test_ExtPen(pti
); // not implemented yet in ROS
452 return APISTATUS_NORMAL
;