0df71e9837c4a88f2d50839e50c693598cb76f14
2 Test_SelectObject(PTESTINFO pti
)
4 HGDIOBJ hOldObj
, hNewObj
;
5 HDC hScreenDC
, hDC
, hDC2
;
6 PGDI_TABLE_ENTRY pEntry
;
11 hScreenDC
= GetDC(NULL
);
12 ASSERT (hScreenDC
!= NULL
);
13 hDC
= CreateCompatibleDC(hScreenDC
);
16 /* Get the Dc_Attr for later testing */
17 pEntry
= &GdiHandleTable
[GDI_HANDLE_GET_INDEX(hDC
)];
19 pDc_Attr
= pEntry
->UserData
;
22 /* Test incomplete dc handle doesn't work */
23 SetLastError(ERROR_SUCCESS
);
24 hNewObj
= GetStockObject(GRAY_BRUSH
);
25 hOldObj
= SelectObject((HDC
)GDI_HANDLE_GET_INDEX(hDC
), hNewObj
);
26 RTEST(GetLastError() == ERROR_INVALID_HANDLE
);
27 RTEST(hOldObj
== NULL
);
28 RTEST(pDc_Attr
->hbrush
== GetStockObject(WHITE_BRUSH
));
29 SelectObject(hDC
, hOldObj
);
31 /* Test incomplete hobj handle works */
32 hNewObj
= GetStockObject(GRAY_BRUSH
);
33 hOldObj
= SelectObject(hDC
, (HGDIOBJ
)GDI_HANDLE_GET_INDEX(hNewObj
));
34 RTEST(hOldObj
== GetStockObject(WHITE_BRUSH
));
35 RTEST(pDc_Attr
->hbrush
== hNewObj
);
36 SelectObject(hDC
, hOldObj
);
38 /* Test wrong hDC handle type */
39 SetLastError(ERROR_SUCCESS
);
40 hNewObj
= GetStockObject(GRAY_BRUSH
);
41 hDC2
= (HDC
)((UINT_PTR
)hDC
& ~GDI_HANDLE_TYPE_MASK
);
42 hDC2
= (HDC
)((UINT_PTR
)hDC2
| GDI_OBJECT_TYPE_PEN
);
43 hOldObj
= SelectObject(hDC2
, hNewObj
);
44 RTEST(GetLastError() == ERROR_INVALID_HANDLE
);
45 RTEST(hOldObj
== NULL
);
46 RTEST(pDc_Attr
->hbrush
== GetStockObject(WHITE_BRUSH
));
48 /* Test wrong hobj handle type */
49 SetLastError(ERROR_SUCCESS
);
50 hNewObj
= GetStockObject(GRAY_BRUSH
);
51 hNewObj
= (HGDIOBJ
)((UINT_PTR
)hNewObj
& ~GDI_HANDLE_TYPE_MASK
);
52 hNewObj
= (HGDIOBJ
)((UINT_PTR
)hNewObj
| GDI_OBJECT_TYPE_PEN
);
53 hOldObj
= SelectObject(hDC
, hNewObj
);
54 RTEST(GetLastError() == ERROR_SUCCESS
);
55 RTEST(hOldObj
== NULL
);
56 RTEST(pDc_Attr
->hbrush
== GetStockObject(WHITE_BRUSH
));
58 SetLastError(ERROR_SUCCESS
);
59 hNewObj
= (HGDIOBJ
)0x00761234;
60 hOldObj
= SelectObject(hDC
, hNewObj
);
61 RTEST(hOldObj
== NULL
);
62 RTEST(GetLastError() == ERROR_SUCCESS
);
63 SelectObject(hDC
, hOldObj
);
66 SetLastError(ERROR_SUCCESS
);
67 hOldObj
= SelectObject(hDC
, hScreenDC
);
68 RTEST(hOldObj
== NULL
);
69 TEST(GetLastError() == ERROR_SUCCESS
);
72 SetLastError(ERROR_SUCCESS
);
73 hNewObj
= CreateRectRgn(0,0,0,0);
74 hOldObj
= SelectObject(hDC
, hNewObj
);
75 RTEST((UINT_PTR
)hOldObj
== NULLREGION
);
76 DeleteObject(hNewObj
);
78 hNewObj
= CreateRectRgn(0,0,10,10);
79 RTEST((UINT_PTR
)SelectObject(hDC
, hNewObj
) == SIMPLEREGION
);
80 hOldObj
= CreateRectRgn(5,5,20,20);
81 RTEST(CombineRgn(hNewObj
, hNewObj
, hOldObj
, RGN_OR
) == COMPLEXREGION
);
82 DeleteObject(hOldObj
);
83 RTEST((UINT_PTR
)SelectObject(hDC
, hNewObj
) == SIMPLEREGION
); // ??? Why this?
84 DeleteObject(hNewObj
);
85 RTEST(GetLastError() == ERROR_SUCCESS
);
88 hNewObj
= CreateBitmap(2, 2, 1, 1, &bmBits
);
89 ASSERT(hNewObj
!= NULL
);
90 hOldObj
= SelectObject(hDC
, hNewObj
);
91 RTEST(GDI_HANDLE_GET_TYPE(hOldObj
) == GDI_OBJECT_TYPE_BITMAP
);
92 hOldObj
= SelectObject(hDC
, hOldObj
);
93 RTEST(hOldObj
== hNewObj
);
100 SetLastError(ERROR_SUCCESS
);
101 hNewObj
= GetStockObject(DEFAULT_PALETTE
);
102 hOldObj
= SelectObject(hDC
, hNewObj
);
103 RTEST(hOldObj
== NULL
);
104 RTEST(GetLastError() == ERROR_INVALID_FUNCTION
);
106 /* Test COLORSPACE */
113 hNewObj
= GetStockObject(GRAY_BRUSH
);
114 hOldObj
= SelectObject(hDC
, hNewObj
);
115 RTEST(hOldObj
== GetStockObject(WHITE_BRUSH
));
116 RTEST(pDc_Attr
->hbrush
== hNewObj
);
117 RTEST(GDI_HANDLE_GET_TYPE(hOldObj
) == GDI_OBJECT_TYPE_BRUSH
);
118 SelectObject(hDC
, hOldObj
);
121 hNewObj
= GetStockObject(DC_BRUSH
);
122 hOldObj
= SelectObject(hDC
, hNewObj
);
123 RTEST(pDc_Attr
->hbrush
== hNewObj
);
124 SelectObject(hDC
, hOldObj
);
126 /* Test BRUSH color xform */
127 hcmXform
= (HANDLE
)pDc_Attr
->hcmXform
;
134 /* Test ENHMETAFILE */
137 hNewObj
= GetStockObject(GRAY_BRUSH
);
138 hOldObj
= SelectObject(hDC
, hNewObj
);
139 RTEST(hOldObj
== GetStockObject(WHITE_BRUSH
));
140 RTEST(pDc_Attr
->hbrush
== hNewObj
);
141 RTEST(GDI_HANDLE_GET_TYPE(hOldObj
) == GDI_OBJECT_TYPE_BRUSH
);
142 SelectObject(hDC
, hOldObj
);
150 return APISTATUS_NORMAL
;