(DISTFILES): Comment out a few missing files.
[mono-project.git] / mcs / class / System.Drawing / Test / System.Drawing / TestRegion.cs
blob6ab0b200e9d4a2eb7273d3655e90b49d2124b4ef
1 //
2 // Region class testing unit
3 //
4 // Author:
5 // Jordi Mas, jordi@ximian.com
6 //
8 //
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:
18 //
19 // The above copyright notice and this permission notice shall be
20 // included in all copies or substantial portions of the Software.
21 //
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.
31 using System;
32 using System.Drawing.Imaging;
33 using System.Drawing;
34 using System.Drawing.Drawing2D;
35 using NUnit.Framework;
37 namespace MonoTests.System.Drawing
40 [TestFixture]
41 public class TestRegion : Assertion
43 [TearDown]
44 public void Clean() {}
46 [SetUp]
47 public void GetReady()
52 /* For debugging */
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]);
62 [Test]
63 public void TestBounds()
65 Bitmap bmp = new Bitmap (600, 800);
66 Graphics dc = Graphics.FromImage (bmp);
67 Rectangle rect1, rect2;
68 Region rgn1, rgn2;
69 RectangleF bounds;
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);
75 rgn1.Union(rgn2);
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);
85 [Test]
86 public void TestCloneAndEquals()
88 Bitmap bmp = new Bitmap (600, 800);
89 Graphics dc = Graphics.FromImage (bmp);
90 Rectangle rect1, rect2;
91 Region rgn1, rgn2;
92 RectangleF [] rects;
93 RectangleF [] rects2;
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);
99 rgn1.Union (rect2);
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*/
119 [Test]
120 public void TestInfiniteAndEmpty()
122 Bitmap bmp = new Bitmap (600, 800);
123 Graphics dc = Graphics.FromImage (bmp);
124 Rectangle rect1, rect2;
125 Region rgn1, rgn2;
126 RectangleF [] rects;
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);
133 rgn1.Union (rect2);
135 AssertEquals (false, rgn1.IsEmpty (dc));
136 AssertEquals (false, rgn1.IsInfinite (dc));
138 rgn1.MakeEmpty();
139 AssertEquals (true, rgn1.IsEmpty (dc));
141 rgn1 = new Region (rect1);
142 rgn1.Union (rect2);
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));
155 [Test]
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;
163 RectangleF [] rects;
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);
169 rgn1.Union(rgn2);
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);
195 rgn1.Union (rgn2);
196 rgn1.Union (rgn3);
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);
234 rgn1.Union (rgn2);
235 rgn1.Union (rgn3);
236 rgn1.Union (rgn4);
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);
273 [Test]
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;
281 RectangleF [] rects;
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);
334 [Test]
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;
341 Region rgn1, rgn2;
342 RectangleF [] rects;
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);
363 [Test]
364 public void TestIntersect()
366 Bitmap bmp = new Bitmap (600, 800);
367 Graphics dc = Graphics.FromImage (bmp);
368 Matrix matrix = new Matrix ();
369 RectangleF [] rects;
370 RectangleF rect3, rect4;
371 Region rgn3, rgn4;
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);
404 [Test]
405 public void TestXor()
407 Bitmap bmp = new Bitmap (600, 800);
408 Graphics dc = Graphics.FromImage (bmp);
409 Matrix matrix = new Matrix ();
410 RectangleF [] rects;
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);
416 rgn1.Xor (rgn2);
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);
445 [Test]
446 public void TestIsVisible()
448 Bitmap bmp = new Bitmap (600, 800);
449 Graphics dc = Graphics.FromImage (bmp);
450 Rectangle rect1, rect2;
451 Region rgn1;
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)));
468 [Test]
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);