1 /*
2  * PROJECT:         ReactOS api tests
3  * LICENSE:         GPL - See COPYING in the top level directory
4  * PURPOSE:         Test for GetCurrentObject
5  * PROGRAMMERS:     Timo Kreuzer
6  */
7 
8 #include <apitest.h>
9 
10 #include <wingdi.h>
11 #include <winddi.h>
12 #include <winuser.h>
13 #include <include/ntgdityp.h>
14 #include <include/ntgdihdl.h>
15 
16 void Test_GetCurrentObject()
17 {
18 	HWND hWnd;
19 	HDC hDC;
20 	HBITMAP hBmp;
21 	HGDIOBJ hObj;
22 
23 	/* Create a window */
24 	hWnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
25 	                    CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,
26 	                    NULL, NULL, 0, 0);
27 	/* Get the DC */
28 	hDC = GetDC(hWnd);
29 
30 	/* Test NULL DC */
31 	SetLastError(ERROR_SUCCESS);
32 	hObj = GetCurrentObject(NULL, 0);
33 	ok(hObj == 0, "Expected 0, got %p\n", hObj);
34 	ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %lu\n", GetLastError());
35 
36 	SetLastError(ERROR_SUCCESS);
37 	hObj = GetCurrentObject(NULL, OBJ_BITMAP);
38 	ok(hObj == 0, "Expected 0, got %p\n", hObj);
39 	hObj = GetCurrentObject(NULL, OBJ_BRUSH);
40 	ok(hObj == 0, "Expected 0, got %p\n", hObj);
41 	hObj = GetCurrentObject(NULL, OBJ_COLORSPACE);
42 	ok(hObj == 0, "Expected 0, got %p\n", hObj);
43 	hObj = GetCurrentObject(NULL, OBJ_FONT);
44 	ok(hObj == 0, "Expected 0, got %p\n", hObj);
45 	hObj = GetCurrentObject(NULL, OBJ_PAL);
46 	ok(hObj == 0, "Expected 0, got %p\n", hObj);
47 	hObj = GetCurrentObject(NULL, OBJ_PEN);
48 	ok(hObj == 0, "Expected 0, got %p\n", hObj);
49 	ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %lu\n", GetLastError());
50 
51 	/* Test invalid DC handle */
52 	SetLastError(ERROR_SUCCESS);
53 	hObj = GetCurrentObject((HDC)-123, OBJ_PEN);
54 	ok(hObj == 0, "Expected 0, got %p\n", hObj);
55 	ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %lu\n", GetLastError());
56 
57 	SetLastError(ERROR_SUCCESS);
58 	hObj = GetCurrentObject((HDC)-123, OBJ_BITMAP);
59 	ok(hObj == 0, "Expected 0, got %p\n", hObj);
60 	ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %lu\n", GetLastError());
61 
62 	/* Test invalid types */
63 	SetLastError(ERROR_SUCCESS);
64 	hObj = GetCurrentObject(hDC, 0);
65 	ok(hObj == 0, "Expected 0, got %p\n", hObj);
66 	ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %lu\n", GetLastError());
67 
68 	SetLastError(ERROR_SUCCESS);
69 	hObj = GetCurrentObject((HDC)-123, 0);
70 	ok(hObj == 0, "Expected 0, got %p\n", hObj);
71 	ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %lu\n", GetLastError());
72 
73 	SetLastError(ERROR_SUCCESS);
74 	hObj = GetCurrentObject(hDC, 3);
75 	ok(hObj == 0, "Expected 0, got %p\n", hObj);
76 	ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %lu\n", GetLastError());
77 
78 	SetLastError(ERROR_SUCCESS);
79 	hObj = GetCurrentObject(NULL, 3);
80 	ok(hObj == 0, "Expected 0, got %p\n", hObj);
81 	ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %lu\n", GetLastError());
82 
83 	SetLastError(ERROR_SUCCESS);
84 	hObj = GetCurrentObject(hDC, 4);
85 	ok(hObj == 0, "Expected 0, got %p\n", hObj);
86 	ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %lu\n", GetLastError());
87 
88 	SetLastError(ERROR_SUCCESS);
89 	hObj = GetCurrentObject(hDC, 8);
90 	ok(hObj == 0, "Expected 0, got %p\n", hObj);
91 	ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %lu\n", GetLastError());
92 
93 	SetLastError(ERROR_SUCCESS);
94 	hObj = GetCurrentObject(hDC, 9);
95 	ok(hObj == 0, "Expected 0, got %p\n", hObj);
96 	ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %lu\n", GetLastError());
97 
98 	SetLastError(ERROR_SUCCESS);
99 	hObj = GetCurrentObject(hDC, 10);
100 	ok(hObj == 0, "Expected 0, got %p\n", hObj);
101 	ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %lu\n", GetLastError());
102 
103 	SetLastError(ERROR_SUCCESS);
104 	hObj = GetCurrentObject(hDC, 12);
105 	ok(hObj == 0, "Expected 0, got %p\n", hObj);
106 	ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %lu\n", GetLastError());
107 
108 	SetLastError(ERROR_SUCCESS);
109 	hObj = GetCurrentObject(hDC, 13);
110 	ok(hObj == 0, "Expected 0, got %p\n", hObj);
111 	ok(GetLastError() == ERROR_INVALID_PARAMETER, "Expected ERROR_INVALID_PARAMETER, got %lu\n", GetLastError());
112 
113 	/* Default bitmap */
114 	SetLastError(ERROR_SUCCESS);
115 	hBmp = GetCurrentObject(hDC, OBJ_BITMAP);
116 	ok(GDI_HANDLE_GET_TYPE(hBmp) == GDI_OBJECT_TYPE_BITMAP, "Expected GDI_OBJECT_TYPE_BITMAP, got %lu\n", GDI_HANDLE_GET_TYPE(hBmp));
117 	ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %lu\n", GetLastError());
118 
119 	/* Other bitmap */
120 	SetLastError(ERROR_SUCCESS);
121 	SelectObject(hDC, GetStockObject(21));
122 	ok(hBmp == GetCurrentObject(hDC, OBJ_BITMAP), "\n");
123 	ok(GDI_HANDLE_GET_TYPE(hBmp) == GDI_OBJECT_TYPE_BITMAP, "Expected GDI_OBJECT_TYPE_BITMAP, got %lu\n", GDI_HANDLE_GET_TYPE(hBmp));
124 	ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %lu\n", GetLastError());
125 
126 	/* Default brush */
127 	SetLastError(ERROR_SUCCESS);
128 	hObj = GetCurrentObject(hDC, OBJ_BRUSH);
129 	ok(hObj == GetStockObject(WHITE_BRUSH), "Expected %p, got %p\n", GetStockObject(WHITE_BRUSH), hObj);
130 	ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %lu\n", GetLastError());
131 
132 	/* Other brush */
133 	SetLastError(ERROR_SUCCESS);
134 	SelectObject(hDC, GetStockObject(BLACK_BRUSH));
135 	hObj = GetCurrentObject(hDC, OBJ_BRUSH);
136 	ok(hObj == GetStockObject(BLACK_BRUSH), "Expected %p, got %p\n", GetStockObject(BLACK_BRUSH), hObj);
137 	ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %lu\n", GetLastError());
138 
139 	/* Default colorspace */
140 	SetLastError(ERROR_SUCCESS);
141 	hObj = GetCurrentObject(hDC, OBJ_COLORSPACE);
142 	ok(hObj == GetStockObject(20), "Expected %p, got %p\n", GetStockObject(20), hObj);
143 	ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %lu\n", GetLastError());
144 
145 	/* Default font */
146 	SetLastError(ERROR_SUCCESS);
147 	hObj = GetCurrentObject(hDC, OBJ_FONT);
148 	ok(hObj == GetStockObject(SYSTEM_FONT), "Expected %p, got %p\n", GetStockObject(SYSTEM_FONT), hObj);
149 	ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %lu\n", GetLastError());
150 
151 	/* Other font */
152 	SetLastError(ERROR_SUCCESS);
153 	SelectObject(hDC, GetStockObject(DEFAULT_GUI_FONT));
154 	hObj = GetCurrentObject(hDC, OBJ_FONT);
155 	ok(hObj == GetStockObject(DEFAULT_GUI_FONT), "Expected %p, got %p\n", GetStockObject(DEFAULT_GUI_FONT), hObj);
156 	ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %lu\n", GetLastError());
157 
158 	/* Default palette */
159 	SetLastError(ERROR_SUCCESS);
160 	hObj = GetCurrentObject(hDC, OBJ_PAL);
161 	ok(hObj == GetStockObject(DEFAULT_PALETTE), "Expected %p, got %p\n", GetStockObject(DEFAULT_PALETTE), hObj);
162 	ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %lu\n", GetLastError());
163 
164 	/* Default pen */
165 	SetLastError(ERROR_SUCCESS);
166 	hObj = GetCurrentObject(hDC, OBJ_PEN);
167 	ok(hObj == GetStockObject(BLACK_PEN), "Expected %p, got %p\n", GetStockObject(BLACK_PEN), hObj);
168 	ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %lu\n", GetLastError());
169 
170 	/* Other pen */
171 	SetLastError(ERROR_SUCCESS);
172 	SelectObject(hDC, GetStockObject(WHITE_PEN));
173 	hObj = GetCurrentObject(hDC, OBJ_PEN);
174 	ok(hObj == GetStockObject(WHITE_PEN), "Expected %p, got %p\n", GetStockObject(WHITE_PEN), hObj);
175 	ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %lu\n", GetLastError());
176 
177 	/* DC pen */
178 	SetLastError(ERROR_SUCCESS);
179 	SelectObject(hDC, GetStockObject(DC_PEN));
180 	hObj = GetCurrentObject(hDC, OBJ_PEN);
181 	ok(hObj == GetStockObject(DC_PEN), "Expected %p, got %p\n", GetStockObject(DC_PEN), hObj);
182 	ok(GetLastError() == ERROR_SUCCESS, "Expected ERROR_SUCCESS, got %lu\n", GetLastError());
183 
184 	ReleaseDC(hWnd, hDC);
185 	DestroyWindow(hWnd);
186 }
187 
188 START_TEST(GetCurrentObject)
189 {
190     Test_GetCurrentObject();
191 }
192 
193