2 * PROJECT: ReactOS api tests
3 * LICENSE: GPL - See COPYING in the top level directory
4 * PURPOSE: Test for ...
5 * PROGRAMMERS: Timo Kreuzer
12 void Test_CombineRgn_Params()
14 HRGN hrgn1
, hrgn2
, hrgn3
;
16 hrgn1
= CreateRectRgn(0, 0, 0, 0);
17 hrgn2
= CreateRectRgn(0, 0, 10, 10);
18 hrgn3
= CreateRectRgn(5, 5, 20, 20);
20 SetLastError(0xbadbabe);
21 ok_long(CombineRgn(NULL
, NULL
, NULL
, 0), ERROR
);
22 ok_long(CombineRgn(hrgn1
, hrgn2
, hrgn3
, 0), ERROR
);
23 ok_long(CombineRgn(hrgn1
, hrgn2
, hrgn3
, 6), ERROR
);
24 ok((GetLastError() == 0xbadbabe) || (GetLastError() == ERROR_INVALID_PARAMETER
), "wrong error: %ld\n", GetLastError());
28 void Test_CombineRgn_COPY()
30 HRGN hrgn1
, hrgn2
, hrgn3
;
32 hrgn1
= CreateRectRgn(0, 0, 0, 0);
33 hrgn2
= CreateRectRgn(0, 0, 10, 10);
34 hrgn3
= CreateRectRgn(5, 5, 20, 20);
36 SetLastError(0xbadbabe);
37 ok_long(CombineRgn(NULL
, NULL
, NULL
, RGN_COPY
), ERROR
);
38 ok_long(CombineRgn(NULL
, hrgn1
, NULL
, RGN_COPY
), ERROR
);
39 ok_long(CombineRgn(NULL
, NULL
, hrgn1
, RGN_COPY
), ERROR
);
40 ok_long(CombineRgn(NULL
, hrgn1
, hrgn2
, RGN_COPY
), ERROR
);
41 ok((GetLastError() == 0xbadbabe) || (GetLastError() == ERROR_INVALID_HANDLE
), "wrong error: %ld\n", GetLastError());
43 ok_long(CombineRgn(hrgn1
, hrgn2
, hrgn3
, RGN_COPY
), SIMPLEREGION
);
44 ok(EqualRgn(hrgn1
, hrgn2
), "Region is not correct\n");
46 ok_long(CombineRgn(hrgn1
, hrgn1
, NULL
, RGN_COPY
), SIMPLEREGION
);
47 ok(EqualRgn(hrgn1
, hrgn2
), "Region is not correct\n");
49 ok_long(CombineRgn(hrgn1
, hrgn3
, GetStockObject(BLACK_PEN
), RGN_COPY
), SIMPLEREGION
);
50 ok(EqualRgn(hrgn1
, hrgn3
), "Region is not correct\n");
52 ok_long(CombineRgn(hrgn1
, GetStockObject(BLACK_PEN
), hrgn2
, RGN_COPY
), ERROR
);
53 ok(EqualRgn(hrgn1
, hrgn3
), "Region is not correct\n");
55 ok_long(CombineRgn(hrgn1
, NULL
, hrgn2
, RGN_COPY
), ERROR
);
56 ok(EqualRgn(hrgn1
, hrgn3
), "Region is not correct\n");
58 ok_long(CombineRgn(hrgn1
, NULL
, NULL
, RGN_COPY
), ERROR
);
59 ok(EqualRgn(hrgn1
, hrgn3
), "Region is not correct\n");
61 ok((GetLastError() == 0xbadbabe) || (GetLastError() == ERROR_INVALID_HANDLE
), "wrong error: %ld\n", GetLastError());
65 void Test_CombineRgn_AND()
67 HRGN hrgn1
, hrgn2
, hrgn3
;
69 hrgn1
= CreateRectRgn(0, 0, 0, 0);
70 hrgn2
= CreateRectRgn(0, 0, 10, 10);
71 hrgn3
= CreateRectRgn(5, 5, 20, 20);
73 SetLastError(0xbadbabe);
74 ok_long(CombineRgn(NULL
, NULL
, NULL
, RGN_AND
), ERROR
);
75 ok_long(CombineRgn(hrgn1
, NULL
, NULL
, RGN_AND
), ERROR
);
76 ok_long(CombineRgn(hrgn1
, hrgn2
, NULL
, RGN_AND
), ERROR
);
77 ok_long(CombineRgn(hrgn1
, NULL
, hrgn2
, RGN_AND
), ERROR
);
78 ok_long(CombineRgn(hrgn1
, GetStockObject(BLACK_PEN
), hrgn2
, RGN_AND
), ERROR
);
79 ok_long(CombineRgn(hrgn1
, hrgn2
, GetStockObject(BLACK_PEN
), RGN_AND
), ERROR
);
80 ok((GetLastError() == 0xbadbabe) || (GetLastError() == ERROR_INVALID_HANDLE
), "wrong error: %ld\n", GetLastError());
83 ok_long(CombineRgn(hrgn1
, hrgn2
, hrgn3
, RGN_AND
), SIMPLEREGION
);
84 SetRectRgn(hrgn2
, 5, 5, 10, 10);
85 ok(EqualRgn(hrgn1
, hrgn2
), "Region is not correct\n");
87 SetRectRgn(hrgn2
, 0, 0, 5, 5);
88 SetRectRgn(hrgn3
, 5, 0, 10, 5);
89 ok_long(CombineRgn(hrgn1
, hrgn2
, hrgn3
, RGN_AND
), NULLREGION
);
90 SetRectRgn(hrgn2
, 0, 0, 0, 0);
91 ok(EqualRgn(hrgn1
, hrgn2
), "Region is not correct\n");
93 SetRectRgn(hrgn2
, 0, 0, 20, 20);
94 SetRectRgn(hrgn3
, 5, 5, 10, 10);
95 ok_long(CombineRgn(hrgn1
, hrgn2
, hrgn3
, RGN_AND
), SIMPLEREGION
);
96 SetRectRgn(hrgn2
, 5, 5, 10, 10);
97 ok(EqualRgn(hrgn1
, hrgn2
), "Region is not correct\n");
100 SetRectRgn(hrgn2
, 0, 0, 30, 10);
101 SetRectRgn(hrgn3
, 10, 10, 20, 30);
102 ok_long(CombineRgn(hrgn1
, hrgn2
, hrgn3
, RGN_OR
), COMPLEXREGION
);
103 SetRectRgn(hrgn2
, 10, 0, 30, 30);
104 ok_long(CombineRgn(hrgn1
, hrgn1
, hrgn2
, RGN_AND
), COMPLEXREGION
);
105 ok_long(CombineRgn(hrgn1
, hrgn1
, hrgn1
, RGN_AND
), COMPLEXREGION
);
106 SetRectRgn(hrgn2
, 10, 10, 30, 30);
107 ok_long(CombineRgn(hrgn1
, hrgn1
, hrgn2
, RGN_AND
), SIMPLEREGION
);
108 SetRectRgn(hrgn2
, 0, 0, 10, 10);
109 ok_long(CombineRgn(hrgn1
, hrgn1
, hrgn2
, RGN_AND
), NULLREGION
);
111 SetRectRgn(hrgn1
, 0, 0, 30, 10);
112 ok_long(CombineRgn(hrgn1
, hrgn1
, hrgn1
, RGN_AND
), SIMPLEREGION
);
116 void Test_CombineRgn_OR()
118 HRGN hrgn1
, hrgn2
, hrgn3
;
120 hrgn1
= CreateRectRgn(0, 0, 0, 0);
121 hrgn2
= CreateRectRgn(0, 0, 5, 5);
122 hrgn3
= CreateRectRgn(5, 0, 10, 5);
123 ok_long(CombineRgn(hrgn1
, hrgn2
, hrgn3
, RGN_OR
), SIMPLEREGION
);
124 SetRectRgn(hrgn2
, 0, 0, 10, 5);
125 ok(EqualRgn(hrgn1
, hrgn2
), "Region is not correct\n");
127 SetRectRgn(hrgn2
, 0, 0, 10, 10);
128 SetRectRgn(hrgn3
, 10, 10, 20, 20);
129 ok_long(CombineRgn(hrgn1
, hrgn2
, hrgn3
, RGN_OR
), COMPLEXREGION
);
130 SetRectRgn(hrgn2
, 10, 0, 20, 10);
131 ok_long(CombineRgn(hrgn1
, hrgn1
, hrgn2
, RGN_OR
), COMPLEXREGION
);
132 ok_long(CombineRgn(hrgn1
, hrgn1
, hrgn1
, RGN_OR
), COMPLEXREGION
);
133 SetRectRgn(hrgn2
, 0, 10, 10, 20);
134 ok_long(CombineRgn(hrgn1
, hrgn1
, hrgn2
, RGN_OR
), SIMPLEREGION
);
135 SetRectRgn(hrgn2
, 0, 0, 20, 20);
136 ok(EqualRgn(hrgn1
, hrgn2
), "Region is not correct\n");
140 void Test_CombineRgn_DIFF()
142 HRGN hrgn1
, hrgn2
, hrgn3
;
144 hrgn1
= CreateRectRgn(0, 0, 0, 0);
145 hrgn2
= CreateRectRgn(0, 0, 10, 10);
146 hrgn3
= CreateRectRgn(5, 0, 10, 5);
148 SetLastError(0xbadbabe);
149 ok_long(CombineRgn(NULL
, NULL
, NULL
, RGN_DIFF
), ERROR
);
150 ok_long(CombineRgn(hrgn1
, NULL
, NULL
, RGN_DIFF
), ERROR
);
151 ok_long(CombineRgn(hrgn1
, hrgn2
, NULL
, RGN_DIFF
), ERROR
);
152 ok_long(CombineRgn(hrgn1
, NULL
, hrgn2
, RGN_DIFF
), ERROR
);
153 ok_long(CombineRgn(hrgn1
, GetStockObject(BLACK_PEN
), hrgn2
, RGN_DIFF
), ERROR
);
154 ok_long(CombineRgn(hrgn1
, hrgn2
, GetStockObject(BLACK_PEN
), RGN_DIFF
), ERROR
);
155 ok((GetLastError() == 0xbadbabe) || (GetLastError() == ERROR_INVALID_HANDLE
), "wrong error: %ld\n", GetLastError());
157 ok_long(CombineRgn(hrgn1
, hrgn1
, hrgn1
, RGN_DIFF
), NULLREGION
);
158 ok_long(CombineRgn(hrgn1
, hrgn2
, hrgn2
, RGN_DIFF
), NULLREGION
);
159 ok_long(CombineRgn(hrgn1
, hrgn1
, hrgn2
, RGN_DIFF
), NULLREGION
);
161 ok_long(CombineRgn(hrgn1
, hrgn2
, hrgn1
, RGN_DIFF
), SIMPLEREGION
);
162 ok_long(CombineRgn(hrgn1
, hrgn2
, hrgn3
, RGN_DIFF
), COMPLEXREGION
);
163 ok_long(CombineRgn(hrgn1
, hrgn1
, hrgn3
, RGN_DIFF
), COMPLEXREGION
);
164 ok_long(CombineRgn(hrgn1
, hrgn1
, hrgn2
, RGN_DIFF
), NULLREGION
);
169 void Test_CombineRgn_XOR()
171 HRGN hrgn1
, hrgn2
, hrgn3
, hrgn4
;
173 hrgn1
= CreateRectRgn(0, 0, 0, 0);
174 hrgn2
= CreateRectRgn(0, 0, 5, 5);
175 hrgn3
= CreateRectRgn(5, 5, 10, 10);
176 hrgn4
= CreateRectRgn(0, 0, 0, 0);
178 SetLastError(0xbadbabe);
179 ok_long(CombineRgn(NULL
, NULL
, NULL
, RGN_XOR
), ERROR
);
180 ok_long(CombineRgn(hrgn1
, NULL
, NULL
, RGN_XOR
), ERROR
);
181 ok_long(CombineRgn(hrgn1
, hrgn2
, NULL
, RGN_XOR
), ERROR
);
182 ok_long(CombineRgn(hrgn1
, NULL
, hrgn2
, RGN_XOR
), ERROR
);
183 ok_long(CombineRgn(hrgn1
, GetStockObject(BLACK_PEN
), hrgn2
, RGN_XOR
), ERROR
);
184 ok_long(CombineRgn(hrgn1
, hrgn2
, GetStockObject(BLACK_PEN
), RGN_XOR
), ERROR
);
185 ok((GetLastError() == 0xbadbabe) || (GetLastError() == ERROR_INVALID_HANDLE
), "wrong error: %ld\n", GetLastError());
187 ok_long(CombineRgn(hrgn1
, hrgn2
, hrgn3
, RGN_XOR
), COMPLEXREGION
);
188 ok_long(CombineRgn(hrgn4
, hrgn2
, hrgn3
, RGN_OR
), COMPLEXREGION
);
189 ok(EqualRgn(hrgn1
, hrgn4
), "Region is not correct\n");
191 ok_long(CombineRgn(hrgn1
, hrgn1
, hrgn2
, RGN_XOR
), SIMPLEREGION
);
192 ok(EqualRgn(hrgn1
, hrgn3
), "Region is not correct\n");
193 ok_long(CombineRgn(hrgn1
, hrgn1
, hrgn3
, RGN_XOR
), NULLREGION
);
198 START_TEST(CombineRgn
)
200 Test_CombineRgn_Params();
201 Test_CombineRgn_COPY();
202 Test_CombineRgn_AND();
203 Test_CombineRgn_OR();
204 Test_CombineRgn_DIFF();
205 Test_CombineRgn_XOR();