1 /*
2  * PROJECT:         ReactOS api tests
3  * LICENSE:         GPL - See COPYING in the top level directory
4  * PURPOSE:         Test for NtGdiGetRandomRgn
5  * PROGRAMMERS:
6  */
7 
8 #include <win32nt.h>
9 
10 START_TEST(NtGdiGetRandomRgn)
11 {
12     HINSTANCE hinst = GetModuleHandle(NULL);
13 	HWND hWnd;
14 	HDC hDC;
15 	HRGN hrgn, hrgn2;
16 
17 	/* Create a window */
18 	hWnd = CreateWindowW(L"BUTTON", L"TestWindow", WS_OVERLAPPEDWINDOW | WS_VISIBLE,
19 	                    CW_USEDEFAULT, CW_USEDEFAULT, 100, 100,
20 	                    NULL, NULL, hinst, 0);
21 //	UpdateWindow(hWnd);
22 	hDC = GetDC(hWnd);
23 
24 	ASSERT(hDC != NULL);
25 
26 	hrgn = CreateRectRgn(0,0,0,0);
27 	hrgn2 = CreateRectRgn(3,3,10,10);
28 	SetLastError(ERROR_SUCCESS);
29 	RTEST(NtGdiGetRandomRgn(0, hrgn, 0) == -1);
30 	RTEST(GetLastError() == ERROR_INVALID_HANDLE);
31 
32 	SetLastError(ERROR_SUCCESS);
33 	RTEST(NtGdiGetRandomRgn((HDC)2345, hrgn, 1) == -1);
34 	RTEST(GetLastError() == ERROR_INVALID_HANDLE);
35 
36 	SetLastError(ERROR_SUCCESS);
37 	RTEST(NtGdiGetRandomRgn((HDC)2345, hrgn, 10) == -1);
38 	RTEST(GetLastError() == ERROR_INVALID_HANDLE);
39 
40 	SetLastError(ERROR_SUCCESS);
41 	RTEST(NtGdiGetRandomRgn((HDC)2345, (HRGN)10, 10) == -1);
42 	RTEST(GetLastError() == ERROR_INVALID_HANDLE);
43 
44 	SetLastError(ERROR_SUCCESS);
45 	RTEST(NtGdiGetRandomRgn((HDC)2345, 0, 1) == -1);
46 	RTEST(GetLastError() == ERROR_INVALID_HANDLE);
47 
48 	SetLastError(ERROR_SUCCESS);
49 	RTEST(NtGdiGetRandomRgn(hDC, 0, 0) == 0);
50 	RTEST(NtGdiGetRandomRgn(hDC, 0, 1) == 0);
51 	RTEST(NtGdiGetRandomRgn(hDC, (HRGN)-5, 0) == 0);
52 	RTEST(NtGdiGetRandomRgn(hDC, (HRGN)-5, 1) == 0);
53 	RTEST(NtGdiGetRandomRgn(hDC, hrgn, 0) == 0);
54 	RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 0);
55 	TEST(NtGdiGetRandomRgn(hDC, hrgn, 2) == 0);
56 	RTEST(NtGdiGetRandomRgn(hDC, hrgn, 3) == 0);
57 	RTEST(NtGdiGetRandomRgn(hDC, hrgn, 4) == 1);
58 	RTEST(NtGdiGetRandomRgn(hDC, hrgn, 5) == 0);
59 	RTEST(NtGdiGetRandomRgn(hDC, hrgn, 10) == 0);
60 	RTEST(NtGdiGetRandomRgn(hDC, hrgn, -10) == 0);
61 	RTEST(GetLastError() == ERROR_SUCCESS);
62 
63 	SelectClipRgn(hDC, hrgn2);
64 	RTEST(NtGdiGetRandomRgn(hDC, 0, 1) == -1);
65 	RTEST(GetLastError() == ERROR_SUCCESS);
66 	RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 1);
67 	RTEST(CombineRgn(hrgn, hrgn, hrgn, RGN_OR) == SIMPLEREGION);
68 	RTEST(CombineRgn(hrgn, hrgn, hrgn2, RGN_XOR) == NULLREGION);
69 
70 	SetRectRgn(hrgn2,0,0,0,0);
71 	SelectClipRgn(hDC, hrgn2);
72 	RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 1);
73 
74 	RTEST(CombineRgn(hrgn2, hrgn, hrgn2, RGN_XOR) == NULLREGION);
75 	RTEST(CombineRgn(hrgn2, hrgn, hrgn, RGN_OR) == NULLREGION);
76 
77 	SelectClipRgn(hDC, NULL);
78 	RTEST(NtGdiGetRandomRgn(hDC, hrgn, 1) == 0);
79 
80 
81 	RTEST(NtGdiGetRandomRgn(hDC, hrgn, 4) == 1);
82 
83 	RTEST(GetLastError() == ERROR_SUCCESS);
84 
85 	ReleaseDC(hWnd, hDC);
86 	DestroyWindow(hWnd);
87 
88 }
89