2 // Region class testing unit
5 // Jordi Mas, jordi@ximian.com
9 // Copyright (C) 2004 Novell, Inc (http://www.novell.com)
11 // Permission is hereby granted, free of charge, to any person obtaining
12 // a copy of this software and associated documentation files (the
13 // "Software"), to deal in the Software without restriction, including
14 // without limitation the rights to use, copy, modify, merge, publish,
15 // distribute, sublicense, and/or sell copies of the Software, and to
16 // permit persons to whom the Software is furnished to do so, subject to
17 // the following conditions:
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
22 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
23 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
24 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
25 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
26 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
27 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
28 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
32 using System
.Drawing
.Imaging
;
34 using System
.Drawing
.Drawing2D
;
35 using NUnit
.Framework
;
37 namespace MonoTests
.System
.Drawing
41 public class TestRegion
: Assertion
44 public void Clean() {}
47 public void GetReady()
53 public static void DumpRegion (Region rgn
)
55 Matrix matrix
= new Matrix ();
56 RectangleF
[] rects
= rgn
.GetRegionScans (matrix
);
58 for (int i
= 0; i
< rects
.Length
; i
++)
59 Console
.WriteLine ( rects
[i
]);
63 public void TestBounds()
65 Bitmap bmp
= new Bitmap (600, 800);
66 Graphics dc
= Graphics
.FromImage (bmp
);
67 Rectangle rect1
, rect2
;
71 rect1
= new Rectangle (500, 30, 60, 80);
72 rect2
= new Rectangle (520, 40, 60, 80);
73 rgn1
= new Region(rect1
);
74 rgn2
= new Region(rect2
);
77 bounds
= rgn1
.GetBounds (dc
);
79 AssertEquals (500, bounds
.X
);
80 AssertEquals (30, bounds
.Y
);
81 AssertEquals (80, bounds
.Width
);
82 AssertEquals (90, bounds
.Height
);
86 public void TestCloneAndEquals()
88 Bitmap bmp
= new Bitmap (600, 800);
89 Graphics dc
= Graphics
.FromImage (bmp
);
90 Rectangle rect1
, rect2
;
94 Matrix matrix
= new Matrix ();
96 rect1
= new Rectangle (500, 30, 60, 80);
97 rect2
= new Rectangle (520, 40, 60, 80);
98 rgn1
= new Region (rect1
);
100 rgn2
= rgn1
.Clone ();
102 rects
= rgn1
.GetRegionScans (matrix
);
103 rects2
= rgn2
.GetRegionScans (matrix
);
105 AssertEquals (rects
.Length
, rects2
.Length
);
107 for (int i
= 0; i
< rects
.Length
; i
++) {
109 AssertEquals (rects
[i
].X
, rects
[i
].X
);
110 AssertEquals (rects
[i
].Y
, rects
[i
].Y
);
111 AssertEquals (rects
[i
].Width
, rects
[i
].Width
);
112 AssertEquals (rects
[i
].Height
, rects
[i
].Height
);
115 AssertEquals (true, rgn1
.Equals (rgn2
, dc
));
118 /*Tests infinite, empty, etc*/
120 public void TestInfiniteAndEmpty()
122 Bitmap bmp
= new Bitmap (600, 800);
123 Graphics dc
= Graphics
.FromImage (bmp
);
124 Rectangle rect1
, rect2
;
127 RectangleF
[] rects2
;
128 Matrix matrix
= new Matrix ();
130 rect1
= new Rectangle (500, 30, 60, 80);
131 rect2
= new Rectangle (520, 40, 60, 80);
132 rgn1
= new Region (rect1
);
135 AssertEquals (false, rgn1
.IsEmpty (dc
));
136 AssertEquals (false, rgn1
.IsInfinite (dc
));
139 AssertEquals (true, rgn1
.IsEmpty (dc
));
141 rgn1
= new Region (rect1
);
143 rgn1
.MakeInfinite ();
144 rects
= rgn1
.GetRegionScans (matrix
);
146 AssertEquals (1, rects
.Length
);
147 AssertEquals (-4194304, rects
[0].X
);
148 AssertEquals (-4194304, rects
[0].Y
);
149 AssertEquals (8388608, rects
[0].Width
);
150 AssertEquals (8388608, rects
[0].Height
);
151 AssertEquals (true, rgn1
.IsInfinite (dc
));
156 public void TestUnion()
158 Bitmap bmp
= new Bitmap (600, 800);
159 Graphics dc
= Graphics
.FromImage (bmp
);
160 Matrix matrix
= new Matrix ();
161 Rectangle rect1
, rect2
, rect3
, rect4
;
162 Region rgn1
, rgn2
, rgn3
, rgn4
;
165 rect1
= new Rectangle (500, 30, 60, 80);
166 rect2
= new Rectangle (520, 40, 60, 80);
167 rgn1
= new Region(rect1
);
168 rgn2
= new Region(rect2
);
170 rects
= rgn1
.GetRegionScans (matrix
);
172 AssertEquals (3, rects
.Length
);
173 AssertEquals (500, rects
[0].X
);
174 AssertEquals (30, rects
[0].Y
);
175 AssertEquals (60, rects
[0].Width
);
176 AssertEquals (10, rects
[0].Height
);
178 AssertEquals (500, rects
[1].X
);
179 AssertEquals (40, rects
[1].Y
);
180 AssertEquals (80, rects
[1].Width
);
181 AssertEquals (70, rects
[1].Height
);
183 AssertEquals (520, rects
[2].X
);
184 AssertEquals (110, rects
[2].Y
);
185 AssertEquals (60, rects
[2].Width
);
186 AssertEquals (10, rects
[2].Height
);
188 rect1
= new Rectangle (20, 180, 40, 50);
189 rect2
= new Rectangle (50, 190, 40, 50);
190 rect3
= new Rectangle (70, 210, 30, 50);
191 rgn1
= new Region (rect1
);
192 rgn2
= new Region (rect2
);
193 rgn3
= new Region (rect3
);
197 rects
= rgn1
.GetRegionScans (matrix
);
198 AssertEquals (5, rects
.Length
);
200 AssertEquals (20, rects
[0].X
);
201 AssertEquals (180, rects
[0].Y
);
202 AssertEquals (40, rects
[0].Width
);
203 AssertEquals (10, rects
[0].Height
);
205 AssertEquals (20, rects
[1].X
);
206 AssertEquals (190, rects
[1].Y
);
207 AssertEquals (70, rects
[1].Width
);
208 AssertEquals (20, rects
[1].Height
);
210 AssertEquals (20, rects
[2].X
);
211 AssertEquals (210, rects
[2].Y
);
212 AssertEquals (80, rects
[2].Width
);
213 AssertEquals (20, rects
[2].Height
);
215 AssertEquals (50, rects
[3].X
);
216 AssertEquals (230, rects
[3].Y
);
217 AssertEquals (50, rects
[3].Width
);
218 AssertEquals (10, rects
[3].Height
);
220 AssertEquals (70, rects
[4].X
);
221 AssertEquals (240, rects
[4].Y
);
222 AssertEquals (30, rects
[4].Width
);
223 AssertEquals (20, rects
[4].Height
);
225 rect1
= new Rectangle (20, 330, 40, 50);
226 rect2
= new Rectangle (50, 340, 40, 50);
227 rect3
= new Rectangle (70, 360, 30, 50);
228 rect4
= new Rectangle (80, 400, 30, 10);
229 rgn1
= new Region (rect1
);
230 rgn2
= new Region (rect2
);
231 rgn3
= new Region (rect3
);
232 rgn4
= new Region (rect4
);
238 rects
= rgn1
.GetRegionScans (matrix
);
240 AssertEquals (6, rects
.Length
);
242 AssertEquals (20, rects
[0].X
);
243 AssertEquals (330, rects
[0].Y
);
244 AssertEquals (40, rects
[0].Width
);
245 AssertEquals (10, rects
[0].Height
);
247 AssertEquals (20, rects
[1].X
);
248 AssertEquals (340, rects
[1].Y
);
249 AssertEquals (70, rects
[1].Width
);
250 AssertEquals (20, rects
[1].Height
);
252 AssertEquals (20, rects
[2].X
);
253 AssertEquals (360, rects
[2].Y
);
254 AssertEquals (80, rects
[2].Width
);
255 AssertEquals (20, rects
[2].Height
);
257 AssertEquals (50, rects
[3].X
);
258 AssertEquals (380, rects
[3].Y
);
259 AssertEquals (50, rects
[3].Width
);
260 AssertEquals (10, rects
[3].Height
);
262 AssertEquals (70, rects
[4].X
);
263 AssertEquals (390, rects
[4].Y
);
264 AssertEquals (30, rects
[4].Width
);
265 AssertEquals (10, rects
[4].Height
);
267 AssertEquals (70, rects
[5].X
);
268 AssertEquals (400, rects
[5].Y
);
269 AssertEquals (40, rects
[5].Width
);
270 AssertEquals (10, rects
[5].Height
);
274 public void TestComplement()
276 Bitmap bmp
= new Bitmap (600, 800);
277 Graphics dc
= Graphics
.FromImage (bmp
);
278 Matrix matrix
= new Matrix ();
279 Rectangle rect1
, rect2
, rect3
;
280 Region rgn1
, rgn2
, rgn3
;
283 rect1
= new Rectangle (20, 30, 60, 80);
284 rect2
= new Rectangle (50, 40, 60, 80);
285 rgn1
= new Region (rect1
);
286 rgn2
= new Region (rect2
);
287 dc
.DrawRectangle (Pens
.Green
, rect1
);
288 dc
.DrawRectangle (Pens
.Red
, rect2
);
289 rgn1
.Complement (rgn2
);
290 dc
.FillRegion (Brushes
.Blue
, rgn1
);
291 dc
.DrawRectangles (Pens
.Yellow
, rgn1
.GetRegionScans (matrix
));
293 rects
= rgn1
.GetRegionScans (matrix
);
295 AssertEquals (2, rects
.Length
);
297 AssertEquals (80, rects
[0].X
);
298 AssertEquals (40, rects
[0].Y
);
299 AssertEquals (30, rects
[0].Width
);
300 AssertEquals (70, rects
[0].Height
);
302 AssertEquals (50, rects
[1].X
);
303 AssertEquals (110, rects
[1].Y
);
304 AssertEquals (60, rects
[1].Width
);
305 AssertEquals (10, rects
[1].Height
);
307 rect1
= new Rectangle (20, 180, 40, 50);
308 rect2
= new Rectangle (50, 190, 40, 50);
309 rect3
= new Rectangle (70, 210, 30, 50);
310 rgn1
= new Region (rect1
);
311 rgn2
= new Region (rect2
);
312 rgn3
= new Region (rect3
);
314 rects
= rgn1
.GetRegionScans (matrix
);
315 rgn1
.Complement (rgn2
);
316 rgn1
.Complement (rgn3
);
318 rects
= rgn1
.GetRegionScans (matrix
);
320 AssertEquals (2, rects
.Length
);
322 AssertEquals (90, rects
[0].X
);
323 AssertEquals (210, rects
[0].Y
);
324 AssertEquals (10, rects
[0].Width
);
325 AssertEquals (30, rects
[0].Height
);
327 AssertEquals (70, rects
[1].X
);
328 AssertEquals (240, rects
[1].Y
);
329 AssertEquals (30, rects
[1].Width
);
330 AssertEquals (20, rects
[1].Height
);
335 public void TestExclude()
337 Bitmap bmp
= new Bitmap (600, 800);
338 Graphics dc
= Graphics
.FromImage (bmp
);
339 Matrix matrix
= new Matrix ();
340 Rectangle rect1
, rect2
;
344 rect1
= new Rectangle (130, 30, 60, 80);
345 rect2
= new Rectangle (170, 40, 60, 80);
346 rgn1
= new Region (rect1
);
347 rgn1
.Exclude (rect2
);
348 rects
= rgn1
.GetRegionScans (matrix
);
350 AssertEquals (2, rects
.Length
);
352 AssertEquals (130, rects
[0].X
);
353 AssertEquals (30, rects
[0].Y
);
354 AssertEquals (60, rects
[0].Width
);
355 AssertEquals (10, rects
[0].Height
);
357 AssertEquals (130, rects
[1].X
);
358 AssertEquals (40, rects
[1].Y
);
359 AssertEquals (40, rects
[1].Width
);
360 AssertEquals (70, rects
[1].Height
);
364 public void TestIntersect()
366 Bitmap bmp
= new Bitmap (600, 800);
367 Graphics dc
= Graphics
.FromImage (bmp
);
368 Matrix matrix
= new Matrix ();
370 RectangleF rect3
, rect4
;
373 Rectangle rect1
= new Rectangle (260, 30, 60, 80);
374 Rectangle rect2
= new Rectangle (290, 40, 60, 80);
375 Region rgn1
= new Region (rect1
);
376 Region rgn2
= new Region (rect2
);
377 rgn1
.Intersect (rgn2
);
379 rects
= rgn1
.GetRegionScans (matrix
);
380 AssertEquals (1, rects
.Length
);
382 AssertEquals (290, rects
[0].X
);
383 AssertEquals (40, rects
[0].Y
);
384 AssertEquals (30, rects
[0].Width
);
385 AssertEquals (70, rects
[0].Height
);
387 rect1
= new Rectangle (20, 330, 40, 50);
388 rect2
= new Rectangle (50, 340, 40, 50);
389 rect3
= new Rectangle (70, 360, 30, 50);
390 rect4
= new Rectangle (80, 400, 30, 10);
391 rgn1
= new Region (rect1
);
392 rgn2
= new Region (rect2
);
393 rgn3
= new Region (rect3
);
394 rgn4
= new Region (rect4
);
396 rgn1
.Intersect (rgn2
);
397 rgn1
.Intersect (rgn3
);
398 rgn1
.Intersect (rgn4
);
399 rects
= rgn1
.GetRegionScans (matrix
);
401 AssertEquals (0, rects
.Length
);
405 public void TestXor()
407 Bitmap bmp
= new Bitmap (600, 800);
408 Graphics dc
= Graphics
.FromImage (bmp
);
409 Matrix matrix
= new Matrix ();
412 Rectangle rect1
= new Rectangle (380, 30, 60, 80);
413 Rectangle rect2
= new Rectangle (410, 40, 60, 80);
414 Region rgn1
= new Region (rect1
);
415 Region rgn2
= new Region (rect2
);
419 rects
= rgn1
.GetRegionScans (matrix
);
421 AssertEquals (4, rects
.Length
);
423 AssertEquals (380, rects
[0].X
);
424 AssertEquals (30, rects
[0].Y
);
425 AssertEquals (60, rects
[0].Width
);
426 AssertEquals (10, rects
[0].Height
);
428 AssertEquals (380, rects
[1].X
);
429 AssertEquals (40, rects
[1].Y
);
430 AssertEquals (30, rects
[1].Width
);
431 AssertEquals (70, rects
[1].Height
);
433 AssertEquals (440, rects
[2].X
);
434 AssertEquals (40, rects
[2].Y
);
435 AssertEquals (30, rects
[2].Width
);
436 AssertEquals (70, rects
[2].Height
);
438 AssertEquals (410, rects
[3].X
);
439 AssertEquals (110, rects
[3].Y
);
440 AssertEquals (60, rects
[3].Width
);
441 AssertEquals (10, rects
[3].Height
);
446 public void TestIsVisible()
448 Bitmap bmp
= new Bitmap (600, 800);
449 Graphics dc
= Graphics
.FromImage (bmp
);
450 Rectangle rect1
, rect2
;
452 Matrix matrix
= new Matrix ();
454 rect1
= new Rectangle (500, 30, 60, 80);
455 rect2
= new Rectangle (520, 40, 60, 80);
457 rgn1
= new Region (new RectangleF (0, 0, 10,10));
458 AssertEquals (false, rgn1
.IsVisible (0,0,0,1));
460 rgn1
= new Region (rect1
);
461 AssertEquals (false, rgn1
.IsVisible (500,29));
462 AssertEquals (true, rgn1
.IsVisible (500,30));
463 AssertEquals (true, rgn1
.IsVisible (rect1
));
464 AssertEquals (true, rgn1
.IsVisible (rect2
));
465 AssertEquals (false, rgn1
.IsVisible (new Rectangle (50,50,2,5)));
469 public void TestTranslate()
471 Region rgn1
= new Region (new RectangleF (10, 10, 120,120));
472 rgn1
.Translate (30,20);
473 Matrix matrix
= new Matrix ();
475 RectangleF
[] rects
= rgn1
.GetRegionScans (matrix
);
477 AssertEquals (1, rects
.Length
);
479 AssertEquals (40, rects
[0].X
);
480 AssertEquals (30, rects
[0].Y
);
481 AssertEquals (120, rects
[0].Width
);
482 AssertEquals (120, rects
[0].Height
);