2 // Region class testing unit
5 // Jordi Mas, jordi@ximian.com
9 using System.Drawing.Imaging;
11 using System.Drawing.Drawing2D;
12 using NUnit.Framework;
14 namespace MonoTests.System.Drawing
18 public class TestRegion : Assertion
21 public void Clean() {}
24 public void GetReady()
30 public static void DumpRegion (Region rgn)
32 Matrix matrix = new Matrix ();
33 RectangleF [] rects = rgn.GetRegionScans (matrix);
35 for (int i = 0; i < rects.Length; i++)
36 Console.WriteLine ( rects[i]);
40 public void TestBounds()
42 Bitmap bmp = new Bitmap (600, 800);
43 Graphics dc = Graphics.FromImage (bmp);
44 Rectangle rect1, rect2;
48 rect1 = new Rectangle (500, 30, 60, 80);
49 rect2 = new Rectangle (520, 40, 60, 80);
50 rgn1 = new Region(rect1);
51 rgn2 = new Region(rect2);
54 bounds = rgn1.GetBounds (dc);
56 AssertEquals (500, bounds.X);
57 AssertEquals (30, bounds.Y);
58 AssertEquals (80, bounds.Width);
59 AssertEquals (90, bounds.Height);
63 public void TestCloneAndEquals()
65 Bitmap bmp = new Bitmap (600, 800);
66 Graphics dc = Graphics.FromImage (bmp);
67 Rectangle rect1, rect2;
71 Matrix matrix = new Matrix ();
73 rect1 = new Rectangle (500, 30, 60, 80);
74 rect2 = new Rectangle (520, 40, 60, 80);
75 rgn1 = new Region (rect1);
79 rects = rgn1.GetRegionScans (matrix);
80 rects2 = rgn2.GetRegionScans (matrix);
82 AssertEquals (rects.Length, rects2.Length);
84 for (int i = 0; i < rects.Length; i++) {
86 AssertEquals (rects[i].X, rects[i].X);
87 AssertEquals (rects[i].Y, rects[i].Y);
88 AssertEquals (rects[i].Width, rects[i].Width);
89 AssertEquals (rects[i].Height, rects[i].Height);
92 AssertEquals (true, rgn1.Equals (rgn2, dc));
95 /*Tests infinite, empty, etc*/
97 public void TestInfiniteAndEmpty()
99 Bitmap bmp = new Bitmap (600, 800);
100 Graphics dc = Graphics.FromImage (bmp);
101 Rectangle rect1, rect2;
104 RectangleF [] rects2;
105 Matrix matrix = new Matrix ();
107 rect1 = new Rectangle (500, 30, 60, 80);
108 rect2 = new Rectangle (520, 40, 60, 80);
109 rgn1 = new Region (rect1);
112 AssertEquals (false, rgn1.IsEmpty (dc));
113 AssertEquals (false, rgn1.IsInfinite (dc));
116 AssertEquals (true, rgn1.IsEmpty (dc));
118 rgn1 = new Region (rect1);
120 rgn1.MakeInfinite ();
121 rects = rgn1.GetRegionScans (matrix);
123 AssertEquals (1, rects.Length);
124 AssertEquals (-4194304, rects[0].X);
125 AssertEquals (-4194304, rects[0].Y);
126 AssertEquals (8388608, rects[0].Width);
127 AssertEquals (8388608, rects[0].Height);
128 AssertEquals (true, rgn1.IsInfinite (dc));
133 public void TestUnion()
135 Bitmap bmp = new Bitmap (600, 800);
136 Graphics dc = Graphics.FromImage (bmp);
137 Matrix matrix = new Matrix ();
138 Rectangle rect1, rect2, rect3, rect4;
139 Region rgn1, rgn2, rgn3, rgn4;
142 rect1 = new Rectangle (500, 30, 60, 80);
143 rect2 = new Rectangle (520, 40, 60, 80);
144 rgn1 = new Region(rect1);
145 rgn2 = new Region(rect2);
147 rects = rgn1.GetRegionScans (matrix);
149 AssertEquals (3, rects.Length);
150 AssertEquals (500, rects[0].X);
151 AssertEquals (30, rects[0].Y);
152 AssertEquals (60, rects[0].Width);
153 AssertEquals (10, rects[0].Height);
155 AssertEquals (500, rects[1].X);
156 AssertEquals (40, rects[1].Y);
157 AssertEquals (80, rects[1].Width);
158 AssertEquals (70, rects[1].Height);
160 AssertEquals (520, rects[2].X);
161 AssertEquals (110, rects[2].Y);
162 AssertEquals (60, rects[2].Width);
163 AssertEquals (10, rects[2].Height);
165 rect1 = new Rectangle (20, 180, 40, 50);
166 rect2 = new Rectangle (50, 190, 40, 50);
167 rect3 = new Rectangle (70, 210, 30, 50);
168 rgn1 = new Region (rect1);
169 rgn2 = new Region (rect2);
170 rgn3 = new Region (rect3);
174 rects = rgn1.GetRegionScans (matrix);
175 AssertEquals (5, rects.Length);
177 AssertEquals (20, rects[0].X);
178 AssertEquals (180, rects[0].Y);
179 AssertEquals (40, rects[0].Width);
180 AssertEquals (10, rects[0].Height);
182 AssertEquals (20, rects[1].X);
183 AssertEquals (190, rects[1].Y);
184 AssertEquals (70, rects[1].Width);
185 AssertEquals (20, rects[1].Height);
187 AssertEquals (20, rects[2].X);
188 AssertEquals (210, rects[2].Y);
189 AssertEquals (80, rects[2].Width);
190 AssertEquals (20, rects[2].Height);
192 AssertEquals (50, rects[3].X);
193 AssertEquals (230, rects[3].Y);
194 AssertEquals (50, rects[3].Width);
195 AssertEquals (10, rects[3].Height);
197 AssertEquals (70, rects[4].X);
198 AssertEquals (240, rects[4].Y);
199 AssertEquals (30, rects[4].Width);
200 AssertEquals (20, rects[4].Height);
202 rect1 = new Rectangle (20, 330, 40, 50);
203 rect2 = new Rectangle (50, 340, 40, 50);
204 rect3 = new Rectangle (70, 360, 30, 50);
205 rect4 = new Rectangle (80, 400, 30, 10);
206 rgn1 = new Region (rect1);
207 rgn2 = new Region (rect2);
208 rgn3 = new Region (rect3);
209 rgn4 = new Region (rect4);
215 rects = rgn1.GetRegionScans (matrix);
217 AssertEquals (6, rects.Length);
219 AssertEquals (20, rects[0].X);
220 AssertEquals (330, rects[0].Y);
221 AssertEquals (40, rects[0].Width);
222 AssertEquals (10, rects[0].Height);
224 AssertEquals (20, rects[1].X);
225 AssertEquals (340, rects[1].Y);
226 AssertEquals (70, rects[1].Width);
227 AssertEquals (20, rects[1].Height);
229 AssertEquals (20, rects[2].X);
230 AssertEquals (360, rects[2].Y);
231 AssertEquals (80, rects[2].Width);
232 AssertEquals (20, rects[2].Height);
234 AssertEquals (50, rects[3].X);
235 AssertEquals (380, rects[3].Y);
236 AssertEquals (50, rects[3].Width);
237 AssertEquals (10, rects[3].Height);
239 AssertEquals (70, rects[4].X);
240 AssertEquals (390, rects[4].Y);
241 AssertEquals (30, rects[4].Width);
242 AssertEquals (10, rects[4].Height);
244 AssertEquals (70, rects[5].X);
245 AssertEquals (400, rects[5].Y);
246 AssertEquals (40, rects[5].Width);
247 AssertEquals (10, rects[5].Height);
251 public void TestComplement()
253 Bitmap bmp = new Bitmap (600, 800);
254 Graphics dc = Graphics.FromImage (bmp);
255 Matrix matrix = new Matrix ();
256 Rectangle rect1, rect2, rect3;
257 Region rgn1, rgn2, rgn3;
260 rect1 = new Rectangle (20, 30, 60, 80);
261 rect2 = new Rectangle (50, 40, 60, 80);
262 rgn1 = new Region (rect1);
263 rgn2 = new Region (rect2);
264 dc.DrawRectangle (Pens.Green, rect1);
265 dc.DrawRectangle (Pens.Red, rect2);
266 rgn1.Complement (rgn2);
267 dc.FillRegion (Brushes.Blue, rgn1);
268 dc.DrawRectangles (Pens.Yellow, rgn1.GetRegionScans (matrix));
270 rects = rgn1.GetRegionScans (matrix);
272 AssertEquals (2, rects.Length);
274 AssertEquals (80, rects[0].X);
275 AssertEquals (40, rects[0].Y);
276 AssertEquals (30, rects[0].Width);
277 AssertEquals (70, rects[0].Height);
279 AssertEquals (50, rects[1].X);
280 AssertEquals (110, rects[1].Y);
281 AssertEquals (60, rects[1].Width);
282 AssertEquals (10, rects[1].Height);
284 rect1 = new Rectangle (20, 180, 40, 50);
285 rect2 = new Rectangle (50, 190, 40, 50);
286 rect3 = new Rectangle (70, 210, 30, 50);
287 rgn1 = new Region (rect1);
288 rgn2 = new Region (rect2);
289 rgn3 = new Region (rect3);
291 rects = rgn1.GetRegionScans (matrix);
292 rgn1.Complement (rgn2);
293 rgn1.Complement (rgn3);
295 rects = rgn1.GetRegionScans (matrix);
297 AssertEquals (2, rects.Length);
299 AssertEquals (90, rects[0].X);
300 AssertEquals (210, rects[0].Y);
301 AssertEquals (10, rects[0].Width);
302 AssertEquals (30, rects[0].Height);
304 AssertEquals (70, rects[1].X);
305 AssertEquals (240, rects[1].Y);
306 AssertEquals (30, rects[1].Width);
307 AssertEquals (20, rects[1].Height);
312 public void TestExclude()
314 Bitmap bmp = new Bitmap (600, 800);
315 Graphics dc = Graphics.FromImage (bmp);
316 Matrix matrix = new Matrix ();
317 Rectangle rect1, rect2;
321 rect1 = new Rectangle (130, 30, 60, 80);
322 rect2 = new Rectangle (170, 40, 60, 80);
323 rgn1 = new Region (rect1);
324 rgn1.Exclude (rect2);
325 rects = rgn1.GetRegionScans (matrix);
327 AssertEquals (2, rects.Length);
329 AssertEquals (130, rects[0].X);
330 AssertEquals (30, rects[0].Y);
331 AssertEquals (60, rects[0].Width);
332 AssertEquals (10, rects[0].Height);
334 AssertEquals (130, rects[1].X);
335 AssertEquals (40, rects[1].Y);
336 AssertEquals (40, rects[1].Width);
337 AssertEquals (70, rects[1].Height);
341 public void TestIntersect()
343 Bitmap bmp = new Bitmap (600, 800);
344 Graphics dc = Graphics.FromImage (bmp);
345 Matrix matrix = new Matrix ();
347 RectangleF rect3, rect4;
350 Rectangle rect1 = new Rectangle (260, 30, 60, 80);
351 Rectangle rect2 = new Rectangle (290, 40, 60, 80);
352 Region rgn1 = new Region (rect1);
353 Region rgn2 = new Region (rect2);
354 rgn1.Intersect (rgn2);
356 rects = rgn1.GetRegionScans (matrix);
357 AssertEquals (1, rects.Length);
359 AssertEquals (290, rects[0].X);
360 AssertEquals (40, rects[0].Y);
361 AssertEquals (30, rects[0].Width);
362 AssertEquals (70, rects[0].Height);
364 rect1 = new Rectangle (20, 330, 40, 50);
365 rect2 = new Rectangle (50, 340, 40, 50);
366 rect3 = new Rectangle (70, 360, 30, 50);
367 rect4 = new Rectangle (80, 400, 30, 10);
368 rgn1 = new Region (rect1);
369 rgn2 = new Region (rect2);
370 rgn3 = new Region (rect3);
371 rgn4 = new Region (rect4);
373 rgn1.Intersect (rgn2);
374 rgn1.Intersect (rgn3);
375 rgn1.Intersect (rgn4);
376 rects = rgn1.GetRegionScans (matrix);
378 AssertEquals (0, rects.Length);
382 public void TestXor()
384 Bitmap bmp = new Bitmap (600, 800);
385 Graphics dc = Graphics.FromImage (bmp);
386 Matrix matrix = new Matrix ();
389 Rectangle rect1 = new Rectangle (380, 30, 60, 80);
390 Rectangle rect2 = new Rectangle (410, 40, 60, 80);
391 Region rgn1 = new Region (rect1);
392 Region rgn2 = new Region (rect2);
396 rects = rgn1.GetRegionScans (matrix);
398 AssertEquals (4, rects.Length);
400 AssertEquals (380, rects[0].X);
401 AssertEquals (30, rects[0].Y);
402 AssertEquals (60, rects[0].Width);
403 AssertEquals (10, rects[0].Height);
405 AssertEquals (380, rects[1].X);
406 AssertEquals (40, rects[1].Y);
407 AssertEquals (30, rects[1].Width);
408 AssertEquals (70, rects[1].Height);
410 AssertEquals (440, rects[2].X);
411 AssertEquals (40, rects[2].Y);
412 AssertEquals (30, rects[2].Width);
413 AssertEquals (70, rects[2].Height);
415 AssertEquals (410, rects[3].X);
416 AssertEquals (110, rects[3].Y);
417 AssertEquals (60, rects[3].Width);
418 AssertEquals (10, rects[3].Height);
423 public void TestIsVisible()
425 Bitmap bmp = new Bitmap (600, 800);
426 Graphics dc = Graphics.FromImage (bmp);
427 Rectangle rect1, rect2;
429 Matrix matrix = new Matrix ();
431 rect1 = new Rectangle (500, 30, 60, 80);
432 rect2 = new Rectangle (520, 40, 60, 80);
434 rgn1 = new Region (new RectangleF (0, 0, 10,10));
435 AssertEquals (false, rgn1.IsVisible (0,0,0,1));
437 rgn1 = new Region (rect1);
438 AssertEquals (false, rgn1.IsVisible (500,29));
439 AssertEquals (true, rgn1.IsVisible (500,30));
440 AssertEquals (true, rgn1.IsVisible (rect1));
441 AssertEquals (true, rgn1.IsVisible (rect2));
442 AssertEquals (false, rgn1.IsVisible (new Rectangle (50,50,2,5)));
446 public void TestTranslate()
448 Region rgn1 = new Region (new RectangleF (10, 10, 120,120));
449 rgn1.Translate (30,20);
450 Matrix matrix = new Matrix ();
452 RectangleF [] rects = rgn1.GetRegionScans (matrix);
454 AssertEquals (1, rects.Length);
456 AssertEquals (40, rects[0].X);
457 AssertEquals (30, rects[0].Y);
458 AssertEquals (120, rects[0].Width);
459 AssertEquals (120, rects[0].Height);