2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for SelectObject
5 * PROGRAMMERS: Timo Kreuzer
12 #include <reactos/win32k/ntgdityp.h>
13 #include <reactos/win32k/ntgdihdl.h>
15 #define TEST(x) ok(x, #x)
16 #define RTEST(x) ok(x, #x)
18 void Test_SelectObject()
20 HGDIOBJ hOldObj
, hNewObj
;
21 HDC hScreenDC
, hDC
, hDC2
;
22 // PGDI_TABLE_ENTRY pEntry;
27 hScreenDC
= GetDC(NULL
);
28 ok(hScreenDC
!= NULL
, "GetDC failed. Skipping tests.\n");
29 if (hScreenDC
== NULL
) return;
30 hDC
= CreateCompatibleDC(hScreenDC
);
31 ok(hDC
!= NULL
, "CreateCompatibleDC failed. Skipping tests.\n");
32 if (hDC
== NULL
) return;
34 /* Get the Dc_Attr for later testing */
35 // pEntry = &GdiHandleTable[GDI_HANDLE_GET_INDEX(hDC)];
36 // pDc_Attr = pEntry->UserData;
37 // ok(pDc_Attr != NULL, "Skipping tests.\n");
38 // if (pDc_Attr == NULL) return;
40 /* Test incomplete dc handle doesn't work */
41 SetLastError(ERROR_SUCCESS
);
42 hNewObj
= GetStockObject(GRAY_BRUSH
);
43 hOldObj
= SelectObject((HDC
)GDI_HANDLE_GET_INDEX(hDC
), hNewObj
);
44 RTEST(GetLastError() == ERROR_INVALID_HANDLE
);
45 RTEST(hOldObj
== NULL
);
46 // RTEST(pDc_Attr->hbrush == GetStockObject(WHITE_BRUSH));
47 SelectObject(hDC
, hOldObj
);
49 /* Test incomplete hobj handle works */
50 hNewObj
= GetStockObject(GRAY_BRUSH
);
51 hOldObj
= SelectObject(hDC
, (HGDIOBJ
)GDI_HANDLE_GET_INDEX(hNewObj
));
52 RTEST(hOldObj
== GetStockObject(WHITE_BRUSH
));
53 // RTEST(pDc_Attr->hbrush == hNewObj);
54 SelectObject(hDC
, hOldObj
);
56 /* Test wrong hDC handle type */
57 SetLastError(ERROR_SUCCESS
);
58 hNewObj
= GetStockObject(GRAY_BRUSH
);
59 hDC2
= (HDC
)((UINT_PTR
)hDC
& ~GDI_HANDLE_TYPE_MASK
);
60 hDC2
= (HDC
)((UINT_PTR
)hDC2
| GDI_OBJECT_TYPE_PEN
);
61 hOldObj
= SelectObject(hDC2
, hNewObj
);
62 RTEST(GetLastError() == ERROR_INVALID_HANDLE
);
63 RTEST(hOldObj
== NULL
);
64 // RTEST(pDc_Attr->hbrush == GetStockObject(WHITE_BRUSH));
66 /* Test wrong hobj handle type */
67 SetLastError(ERROR_SUCCESS
);
68 hNewObj
= GetStockObject(GRAY_BRUSH
);
69 hNewObj
= (HGDIOBJ
)((UINT_PTR
)hNewObj
& ~GDI_HANDLE_TYPE_MASK
);
70 hNewObj
= (HGDIOBJ
)((UINT_PTR
)hNewObj
| GDI_OBJECT_TYPE_PEN
);
71 hOldObj
= SelectObject(hDC
, hNewObj
);
72 RTEST(GetLastError() == ERROR_SUCCESS
);
73 RTEST(hOldObj
== NULL
);
74 // RTEST(pDc_Attr->hbrush == GetStockObject(WHITE_BRUSH));
76 SetLastError(ERROR_SUCCESS
);
77 hNewObj
= (HGDIOBJ
)0x00761234;
78 hOldObj
= SelectObject(hDC
, hNewObj
);
79 RTEST(hOldObj
== NULL
);
80 RTEST(GetLastError() == ERROR_SUCCESS
);
81 SelectObject(hDC
, hOldObj
);
84 SetLastError(ERROR_SUCCESS
);
85 hOldObj
= SelectObject(hDC
, hScreenDC
);
86 RTEST(hOldObj
== NULL
);
87 TEST(GetLastError() == ERROR_SUCCESS
);
90 SetLastError(ERROR_SUCCESS
);
91 hNewObj
= CreateRectRgn(0,0,0,0);
92 hOldObj
= SelectObject(hDC
, hNewObj
);
93 RTEST((UINT_PTR
)hOldObj
== NULLREGION
);
94 DeleteObject(hNewObj
);
96 hNewObj
= CreateRectRgn(0,0,10,10);
97 RTEST((UINT_PTR
)SelectObject(hDC
, hNewObj
) == SIMPLEREGION
);
98 hOldObj
= CreateRectRgn(5,5,20,20);
99 RTEST(CombineRgn(hNewObj
, hNewObj
, hOldObj
, RGN_OR
) == COMPLEXREGION
);
100 DeleteObject(hOldObj
);
101 RTEST((UINT_PTR
)SelectObject(hDC
, hNewObj
) == SIMPLEREGION
); // ??? Why this?
102 DeleteObject(hNewObj
);
103 // TEST(IsHandleValid(hNewObj) == TRUE);
105 RTEST(GetLastError() == ERROR_SUCCESS
);
108 hNewObj
= CreateBitmap(2, 2, 1, 1, &bmBits
);
109 ok(hNewObj
!= NULL
, "CreateBitmap failed. Skipping tests.\n");
110 if (hNewObj
== NULL
) return;
111 hOldObj
= SelectObject(hDC
, hNewObj
);
112 RTEST(GDI_HANDLE_GET_TYPE(hOldObj
) == GDI_OBJECT_TYPE_BITMAP
);
113 hOldObj
= SelectObject(hDC
, hOldObj
);
114 RTEST(hOldObj
== hNewObj
);
121 SetLastError(ERROR_SUCCESS
);
122 hNewObj
= GetStockObject(DEFAULT_PALETTE
);
123 hOldObj
= SelectObject(hDC
, hNewObj
);
124 RTEST(hOldObj
== NULL
);
125 RTEST(GetLastError() == ERROR_INVALID_FUNCTION
);
127 /* Test COLORSPACE */
134 hNewObj
= GetStockObject(GRAY_BRUSH
);
135 hOldObj
= SelectObject(hDC
, hNewObj
);
136 RTEST(hOldObj
== GetStockObject(WHITE_BRUSH
));
137 // RTEST(pDc_Attr->hbrush == hNewObj);
138 RTEST(GDI_HANDLE_GET_TYPE(hOldObj
) == GDI_OBJECT_TYPE_BRUSH
);
139 SelectObject(hDC
, hOldObj
);
142 hNewObj
= GetStockObject(DC_BRUSH
);
143 hOldObj
= SelectObject(hDC
, hNewObj
);
144 // RTEST(pDc_Attr->hbrush == hNewObj);
145 SelectObject(hDC
, hOldObj
);
147 /* Test BRUSH color xform */
148 // hcmXform = (HANDLE)pDc_Attr->hcmXform;
155 /* Test ENHMETAFILE */
158 hNewObj
= GetStockObject(GRAY_BRUSH
);
159 hOldObj
= SelectObject(hDC
, hNewObj
);
160 RTEST(hOldObj
== GetStockObject(WHITE_BRUSH
));
161 // RTEST(pDc_Attr->hbrush == hNewObj);
162 RTEST(GDI_HANDLE_GET_TYPE(hOldObj
) == GDI_OBJECT_TYPE_BRUSH
);
163 SelectObject(hDC
, hOldObj
);
171 START_TEST(SelectObject
)