1 /* 2 * PROJECT: ReactOS api tests 3 * LICENSE: GPL - See COPYING in the top level directory 4 * PURPOSE: Test for GetRandomRgn 5 * PROGRAMMERS: Timo Kreuzer 6 */ 7 8 #include "precomp.h" 9 10 #define METARGN 2 11 #define APIRGN 3 12 #define SYSRGN 4 13 #define RGN5 5 14 15 HWND ghwnd; 16 HDC ghdcWindow; 17 18 void Test_GetRandomRgn_Params() 19 { 20 HDC hdc; 21 HRGN hrgn; 22 INT ret; 23 24 hdc = CreateCompatibleDC(0); 25 if (!hdc) 26 { 27 printf("Coun't create a dc\n"); 28 return; 29 } 30 31 hrgn = CreateRectRgn(11, 17, 23, 42); 32 if (!hrgn) 33 { 34 printf("Coun't create a region\n"); 35 return; 36 } 37 38 SetLastError(0xbadbad00); 39 ret = GetRandomRgn(NULL, NULL, 0); 40 ok_int(ret, -1); 41 ok((GetLastError() == 0xbadbad00) || (GetLastError() == ERROR_INVALID_HANDLE), "wrong error: %ld\n", GetLastError()); 42 43 SetLastError(0xbadbad00); 44 ret = GetRandomRgn(NULL, NULL, CLIPRGN); 45 ok_int(ret, -1); 46 ok((GetLastError() == 0xbadbad00) || (GetLastError() == ERROR_INVALID_HANDLE), "wrong error: %ld\n", GetLastError()); 47 48 SetLastError(0xbadbad00); 49 ret = GetRandomRgn(NULL, hrgn, 0); 50 ok_int(ret, -1); 51 ok((GetLastError() == 0xbadbad00) || (GetLastError() == ERROR_INVALID_HANDLE), "wrong error: %ld\n", GetLastError()); 52 53 SetLastError(0xbadbad00); 54 ret = GetRandomRgn(NULL, hrgn, CLIPRGN); 55 ok_int(ret, -1); 56 ok((GetLastError() == 0xbadbad00) || (GetLastError() == ERROR_INVALID_HANDLE), "wrong error: %ld\n", GetLastError()); 57 58 SetLastError(0xbadbad00); 59 ret = GetRandomRgn(hdc, NULL, 0); 60 ok_int(ret, 0); 61 ok_long(GetLastError(), 0xbadbad00); 62 63 SetLastError(0xbadbad00); 64 ret = GetRandomRgn(hdc, NULL, CLIPRGN); 65 ok_int(ret, 0); 66 ok_long(GetLastError(), 0xbadbad00); 67 68 SetLastError(0xbadbad00); 69 ret = GetRandomRgn(hdc, hrgn, 0); 70 ok_int(ret, 0); 71 ok_long(GetLastError(), 0xbadbad00); 72 #if 0 // this is vista+ 73 SetLastError(0xbadbad00); 74 ret = GetRandomRgn(hdc, hrgn, 5); 75 ok_int(ret, 1); 76 ok_long(GetLastError(), 0xbadbad00); 77 #endif 78 SetLastError(0xbadbad00); 79 ret = GetRandomRgn(hdc, hrgn, 6); 80 ok_int(ret, 0); 81 ok_long(GetLastError(), 0xbadbad00); 82 83 SetLastError(0xbadbad00); 84 ret = GetRandomRgn(hdc, hrgn, 27); 85 ok_int(ret, 0); 86 ok_long(GetLastError(), 0xbadbad00); 87 88 SetLastError(0xbadbad00); 89 ret = GetRandomRgn(hdc, hrgn, -1); 90 ok_int(ret, 0); 91 ok_long(GetLastError(), 0xbadbad00); 92 93 SetLastError(0xbadbad00); 94 ret = GetRandomRgn(hdc, hrgn, CLIPRGN); 95 ok_int(ret, 0); 96 ok_long(GetLastError(), 0xbadbad00); 97 98 SetLastError(0xbadbad00); 99 ret = GetRandomRgn((HDC)0x123, hrgn, CLIPRGN); 100 ok_int(ret, -1); 101 ok((GetLastError() == 0xbadbad00) || (GetLastError() == ERROR_INVALID_HANDLE), "wrong error: %ld\n", GetLastError()); 102 103 DeleteObject(hrgn); 104 DeleteDC(hdc); 105 } 106 107 void Test_GetRandomRgn_CLIPRGN() 108 { 109 HDC hdc; 110 HRGN hrgn1, hrgn2; 111 INT ret; 112 RECT rect; 113 114 hrgn1 = CreateRectRgn(11, 17, 23, 42); 115 if (!hrgn1) 116 { 117 printf("Coun't create a region\n"); 118 return; 119 } 120 121 hdc = CreateCompatibleDC(0); 122 if (!hdc) 123 { 124 printf("Coun't create a dc\n"); 125 return; 126 } 127 128 ret = GetRandomRgn(hdc, hrgn1, CLIPRGN); 129 ok_int(ret, 0); 130 GetRgnBox(hrgn1, &rect); 131 ok_long(rect.left, 11); 132 ok_long(rect.top, 17); 133 ok_long(rect.right, 23); 134 ok_long(rect.bottom, 42); 135 136 hrgn2 = CreateRectRgn(1, 2, 3, 4); 137 SelectClipRgn(hdc, hrgn2); 138 DeleteObject(hrgn2); 139 ret = GetRandomRgn(hdc, hrgn1, CLIPRGN); 140 ok_int(ret, 1); 141 GetRgnBox(hrgn1, &rect); 142 ok_long(rect.left, 1); 143 ok_long(rect.top, 2); 144 ok_long(rect.right, 3); 145 ok_long(rect.bottom, 4); 146 147 hrgn2 = CreateRectRgn(2, 3, 4, 5); 148 SelectClipRgn(ghdcWindow, hrgn2); 149 DeleteObject(hrgn2); 150 ret = GetRandomRgn(ghdcWindow, hrgn1, CLIPRGN); 151 ok_int(ret, 1); 152 GetRgnBox(hrgn1, &rect); 153 ok_long(rect.left, 2); 154 ok_long(rect.top, 3); 155 ok_long(rect.right, 4); 156 ok_long(rect.bottom, 5); 157 158 MoveWindow(ghwnd, 200, 400, 100, 100, 0); 159 160 ret = GetRandomRgn(ghdcWindow, hrgn1, CLIPRGN); 161 ok_int(ret, 1); 162 GetRgnBox(hrgn1, &rect); 163 ok_long(rect.left, 2); 164 ok_long(rect.top, 3); 165 ok_long(rect.right, 4); 166 ok_long(rect.bottom, 5); 167 168 169 DeleteObject(hrgn1); 170 DeleteDC(hdc); 171 } 172 173 void Test_GetRandomRgn_METARGN() 174 { 175 } 176 177 void Test_GetRandomRgn_APIRGN() 178 { 179 } 180 181 void Test_GetRandomRgn_SYSRGN() 182 { 183 HDC hdc; 184 HRGN hrgn1, hrgn2; 185 INT ret; 186 RECT rect, rect2; 187 HBITMAP hbmp; 188 189 hrgn1 = CreateRectRgn(11, 17, 23, 42); 190 if (!hrgn1) 191 { 192 printf("Coun't create a region\n"); 193 return; 194 } 195 196 hdc = CreateCompatibleDC(0); 197 if (!hdc) 198 { 199 printf("Coun't create a dc\n"); 200 return; 201 } 202 203 ret = GetRandomRgn(hdc, hrgn1, SYSRGN); 204 ok_int(ret, 1); 205 GetRgnBox(hrgn1, &rect); 206 ok_long(rect.left, 0); 207 ok_long(rect.top, 0); 208 ok_long(rect.right, 1); 209 ok_long(rect.bottom, 1); 210 211 hrgn2 = CreateRectRgn(1, 2, 3, 4); 212 SelectClipRgn(hdc, hrgn2); 213 DeleteObject(hrgn2); 214 ret = GetRandomRgn(hdc, hrgn1, SYSRGN); 215 ok_int(ret, 1); 216 GetRgnBox(hrgn1, &rect); 217 ok_long(rect.left, 0); 218 ok_long(rect.top, 0); 219 ok_long(rect.right, 1); 220 ok_long(rect.bottom, 1); 221 222 hbmp = CreateCompatibleBitmap(hdc, 4, 7); 223 SelectObject(hdc, hbmp); 224 ret = GetRandomRgn(hdc, hrgn1, SYSRGN); 225 ok_int(ret, 1); 226 GetRgnBox(hrgn1, &rect); 227 ok_long(rect.left, 0); 228 ok_long(rect.top, 0); 229 ok_long(rect.right, 4); 230 ok_long(rect.bottom, 7); 231 DeleteObject(hbmp); 232 233 MoveWindow(ghwnd, 100, 100, 100, 100, 0); 234 ret = GetRandomRgn(ghdcWindow, hrgn1, SYSRGN); 235 ok_int(ret, 1); 236 GetRgnBox(hrgn1, &rect); 237 DPtoLP(ghdcWindow, (LPPOINT)&rect, 2); 238 #if 0 // FIXME: this needs calculation 239 ok_long(rect.left, 104); 240 ok_long(rect.top, 124); 241 ok_long(rect.right, 209); 242 ok_long(rect.bottom, 196); 243 #endif 244 245 MoveWindow(ghwnd, 200, 400, 200, 200, 0); 246 247 ret = GetRandomRgn(ghdcWindow, hrgn1, SYSRGN); 248 ok_int(ret, 1); 249 GetRgnBox(hrgn1, &rect2); 250 DPtoLP(ghdcWindow, (LPPOINT)&rect2, 2); 251 #if 0 // FIXME: this needs calculation 252 ok_long(rect2.left, rect.left + 100); 253 ok_long(rect2.top, rect.top + 300); 254 ok_long(rect2.right, rect.right + 200 - 13); 255 ok_long(rect2.bottom, rect.bottom + 400); 256 #endif 257 258 DeleteObject(hrgn1); 259 DeleteDC(hdc); 260 261 } 262 263 void Test_GetRandomRgn_RGN5() 264 { 265 HDC hdc; 266 HRGN hrgn1, hrgn2; 267 INT ret; 268 RECT rect, rect2; 269 HBITMAP hbmp; 270 DBG_UNREFERENCED_LOCAL_VARIABLE(hrgn2); 271 DBG_UNREFERENCED_LOCAL_VARIABLE(rect2); 272 273 hrgn1 = CreateRectRgn(11, 17, 23, 42); 274 if (!hrgn1) 275 { 276 printf("Coun't create a region\n"); 277 return; 278 } 279 280 hdc = CreateCompatibleDC(0); 281 if (!hdc) 282 { 283 printf("Coun't create a dc\n"); 284 return; 285 } 286 #if 0 // this is vista+ 287 ret = GetRandomRgn(hdc, hrgn1, RGN5); 288 ok_int(ret, 1); 289 GetRgnBox(hrgn1, &rect); 290 ok_long(rect.left, 0); 291 ok_long(rect.top, 0); 292 ok_long(rect.right, 1); 293 ok_long(rect.bottom, 1); 294 295 hrgn2 = CreateRectRgn(1, 2, 3, 4); 296 SelectClipRgn(hdc, hrgn2); 297 DeleteObject(hrgn2); 298 ret = GetRandomRgn(hdc, hrgn1, RGN5); 299 ok_int(ret, 1); 300 GetRgnBox(hrgn1, &rect); 301 ok_long(rect.left, 0); 302 ok_long(rect.top, 0); 303 ok_long(rect.right, 1); 304 ok_long(rect.bottom, 1); 305 #endif 306 307 hbmp = CreateCompatibleBitmap(hdc, 4, 7); 308 SelectObject(hdc, hbmp); 309 ret = GetRandomRgn(hdc, hrgn1, SYSRGN); 310 ok_int(ret, 1); 311 GetRgnBox(hrgn1, &rect); 312 ok_long(rect.left, 0); 313 ok_long(rect.top, 0); 314 ok_long(rect.right, 4); 315 ok_long(rect.bottom, 7); 316 DeleteObject(hbmp); 317 318 #if 0 // this is vista+ 319 MoveWindow(ghwnd, 100, 100, 100, 100, 0); 320 ret = GetRandomRgn(ghdcWindow, hrgn1, RGN5); 321 ok_int(ret, 1); 322 GetRgnBox(hrgn1, &rect); 323 DPtoLP(ghdcWindow, (LPPOINT)&rect, 2); 324 ok_long(rect.left, 104); 325 ok_long(rect.top, 124); 326 ok_long(rect.right, 209); 327 ok_long(rect.bottom, 196); 328 329 MoveWindow(ghwnd, 200, 400, 200, 200, 0); 330 331 ret = GetRandomRgn(ghdcWindow, hrgn1, RGN5); 332 ok_int(ret, 1); 333 GetRgnBox(hrgn1, &rect2); 334 DPtoLP(ghdcWindow, (LPPOINT)&rect2, 2); 335 ok_long(rect2.left, rect.left + 100); 336 ok_long(rect2.top, rect.top + 300); 337 ok_long(rect2.right, rect.right + 200 - 13); 338 ok_long(rect2.bottom, rect.bottom + 400); 339 #endif 340 341 DeleteObject(hrgn1); 342 DeleteDC(hdc); 343 } 344 345 START_TEST(GetRandomRgn) 346 { 347 348 /* Create a window */ 349 ghwnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE, 350 100, 100, 100, 100, NULL, NULL, 0, 0); 351 ghdcWindow = GetDC(ghwnd); 352 if (!ghdcWindow) 353 { 354 printf("No window dc\n"); 355 return; 356 } 357 358 Test_GetRandomRgn_Params(); 359 Test_GetRandomRgn_CLIPRGN(); 360 Test_GetRandomRgn_METARGN(); 361 Test_GetRandomRgn_APIRGN(); 362 Test_GetRandomRgn_SYSRGN(); 363 Test_GetRandomRgn_RGN5(); 364 365 } 366 367