ChangeLog: Updated ChangeLog.
[mono.git] / mcs / class / System.Drawing / Test / System.Drawing / TestRegion.cs
1 //
2 // Region class testing unit
3 //
4 // Author:
5 //   Jordi Mas, jordi@ximian.com
6 //
7
8 using System;
9 using System.Drawing.Imaging;
10 using System.Drawing;
11 using System.Drawing.Drawing2D;
12 using NUnit.Framework;
13
14 namespace MonoTests.System.Drawing
15 {
16
17         [TestFixture]   
18         public class TestRegion : Assertion 
19         {
20                 [TearDown]
21                 public void Clean() {}
22                 
23                 [SetUp]
24                 public void GetReady()          
25                 {
26                 
27                 }
28                 
29                 /* For debugging */     
30                 public static void DumpRegion (Region rgn)
31                 {
32                         Matrix matrix = new Matrix ();          
33                         RectangleF [] rects = rgn.GetRegionScans (matrix);
34         
35                         for (int i = 0; i < rects.Length; i++)
36                                 Console.WriteLine ( rects[i]);
37                 }
38                 
39                 [Test]
40                 public void TestBounds() 
41                 {
42                         Bitmap bmp = new Bitmap (600, 800);
43                         Graphics dc = Graphics.FromImage (bmp);                                         
44                         Rectangle rect1, rect2;         
45                         Region rgn1, rgn2;                                      
46                         RectangleF bounds;                              
47                         
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);                                               
52                         rgn1.Union(rgn2);                               
53                         
54                         bounds = rgn1.GetBounds (dc);                   
55                         
56                         AssertEquals (500, bounds.X);   
57                         AssertEquals (30, bounds.Y);    
58                         AssertEquals (80, bounds.Width);        
59                         AssertEquals (90, bounds.Height);                       
60                 }
61                 
62                 [Test]
63                 public void TestCloneAndEquals() 
64                 {
65                         Bitmap bmp = new Bitmap (600, 800);
66                         Graphics dc = Graphics.FromImage (bmp);                                         
67                         Rectangle rect1, rect2;         
68                         Region rgn1, rgn2;                                                              
69                         RectangleF [] rects;
70                         RectangleF [] rects2;
71                         Matrix matrix = new Matrix ();          
72                         
73                         rect1 = new Rectangle (500, 30, 60, 80);                
74                         rect2 = new Rectangle (520, 40, 60, 80);                
75                         rgn1 = new Region (rect1);                      
76                         rgn1.Union (rect2);                     
77                         rgn2 = rgn1.Clone ();
78                         
79                         rects = rgn1.GetRegionScans (matrix);                   
80                         rects2 = rgn2.GetRegionScans (matrix);                                          
81                         
82                         AssertEquals (rects.Length, rects2.Length);             
83                         
84                         for (int i = 0; i < rects.Length; i++) {
85                                 
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);        
90                         }                                       
91                         
92                         AssertEquals (true, rgn1.Equals (rgn2, dc));            
93                 }
94                 
95                  /*Tests infinite, empty, etc*/
96                 [Test]
97                 public void TestInfiniteAndEmpty() 
98                 {       
99                         Bitmap bmp = new Bitmap (600, 800);
100                         Graphics dc = Graphics.FromImage (bmp);                                         
101                         Rectangle rect1, rect2;         
102                         Region rgn1, rgn2;                                                              
103                         RectangleF [] rects;
104                         RectangleF [] rects2;
105                         Matrix matrix = new Matrix ();          
106                         
107                         rect1 = new Rectangle (500, 30, 60, 80);                
108                         rect2 = new Rectangle (520, 40, 60, 80);                
109                         rgn1 = new Region (rect1);                      
110                         rgn1.Union (rect2);                     
111                         
112                         AssertEquals (false, rgn1.IsEmpty (dc));        
113                         AssertEquals (false, rgn1.IsInfinite (dc));
114                                 
115                         rgn1.MakeEmpty();
116                         AssertEquals (true, rgn1.IsEmpty (dc));                         
117                         
118                         rgn1 = new Region (rect1);                      
119                         rgn1.Union (rect2);                                     
120                         rgn1.MakeInfinite ();
121                         rects = rgn1.GetRegionScans (matrix);                                           
122                         
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));                      
129                 }
130                 
131                 
132                 [Test]
133                 public void TestUnion() 
134                 {
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;                                  
140                         RectangleF [] rects;                            
141                         
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);                                               
146                         rgn1.Union(rgn2);                       
147                         rects = rgn1.GetRegionScans (matrix);                   
148                         
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);     
154                         
155                         AssertEquals (500, rects[1].X); 
156                         AssertEquals (40, rects[1].Y);  
157                         AssertEquals (80, rects[1].Width);      
158                         AssertEquals (70, rects[1].Height);     
159                         
160                         AssertEquals (520, rects[2].X); 
161                         AssertEquals (110, rects[2].Y); 
162                         AssertEquals (60, rects[2].Width);      
163                         AssertEquals (10, rects[2].Height);                             
164                         
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);      
171                                 
172                         rgn1.Union (rgn2);
173                         rgn1.Union (rgn3);                                              
174                         rects = rgn1.GetRegionScans (matrix);                   
175                         AssertEquals (5, rects.Length); 
176                         
177                         AssertEquals (20, rects[0].X);  
178                         AssertEquals (180, rects[0].Y); 
179                         AssertEquals (40, rects[0].Width);      
180                         AssertEquals (10, rects[0].Height);     
181                         
182                         AssertEquals (20, rects[1].X);  
183                         AssertEquals (190, rects[1].Y); 
184                         AssertEquals (70, rects[1].Width);      
185                         AssertEquals (20, rects[1].Height);     
186                         
187                         AssertEquals (20, rects[2].X);  
188                         AssertEquals (210, rects[2].Y); 
189                         AssertEquals (80, rects[2].Width);      
190                         AssertEquals (20, rects[2].Height);     
191                         
192                         AssertEquals (50, rects[3].X);  
193                         AssertEquals (230, rects[3].Y); 
194                         AssertEquals (50, rects[3].Width);      
195                         AssertEquals (10, rects[3].Height);     
196                         
197                         AssertEquals (70, rects[4].X);  
198                         AssertEquals (240, rects[4].Y); 
199                         AssertEquals (30, rects[4].Width);      
200                         AssertEquals (20, rects[4].Height);                             
201                         
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);                              
210                         
211                         rgn1.Union (rgn2);
212                         rgn1.Union (rgn3);
213                         rgn1.Union (rgn4);                                      
214                 
215                         rects = rgn1.GetRegionScans (matrix);   
216                         
217                         AssertEquals (6, rects.Length); 
218                         
219                         AssertEquals (20, rects[0].X);  
220                         AssertEquals (330, rects[0].Y); 
221                         AssertEquals (40, rects[0].Width);      
222                         AssertEquals (10, rects[0].Height);     
223                         
224                         AssertEquals (20, rects[1].X);  
225                         AssertEquals (340, rects[1].Y); 
226                         AssertEquals (70, rects[1].Width);      
227                         AssertEquals (20, rects[1].Height);     
228                         
229                         AssertEquals (20, rects[2].X);  
230                         AssertEquals (360, rects[2].Y); 
231                         AssertEquals (80, rects[2].Width);      
232                         AssertEquals (20, rects[2].Height);     
233                         
234                         AssertEquals (50, rects[3].X);  
235                         AssertEquals (380, rects[3].Y); 
236                         AssertEquals (50, rects[3].Width);      
237                         AssertEquals (10, rects[3].Height);     
238                         
239                         AssertEquals (70, rects[4].X);  
240                         AssertEquals (390, rects[4].Y); 
241                         AssertEquals (30, rects[4].Width);      
242                         AssertEquals (10, rects[4].Height);                     
243                         
244                         AssertEquals (70, rects[5].X);  
245                         AssertEquals (400, rects[5].Y); 
246                         AssertEquals (40, rects[5].Width);      
247                         AssertEquals (10, rects[5].Height);                                             
248                 }       
249                 
250                 [Test]
251                 public void TestComplement()
252                 {                       
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;                                        
258                         RectangleF [] rects;
259                         
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));          
269                         
270                         rects = rgn1.GetRegionScans (matrix);
271                         
272                         AssertEquals (2, rects.Length);                         
273                         
274                         AssertEquals (80, rects[0].X);  
275                         AssertEquals (40, rects[0].Y);  
276                         AssertEquals (30, rects[0].Width);      
277                         AssertEquals (70, rects[0].Height);     
278                         
279                         AssertEquals (50, rects[1].X);  
280                         AssertEquals (110, rects[1].Y); 
281                         AssertEquals (60, rects[1].Width);
282                         AssertEquals (10, rects[1].Height);                                                     
283                                                 
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);      
290                         
291                         rects = rgn1.GetRegionScans (matrix);                   
292                         rgn1.Complement (rgn2);
293                         rgn1.Complement (rgn3);                                 
294                         
295                         rects = rgn1.GetRegionScans (matrix);   
296                         
297                         AssertEquals (2, rects.Length);                                         
298                         
299                         AssertEquals (90, rects[0].X);  
300                         AssertEquals (210, rects[0].Y); 
301                         AssertEquals (10, rects[0].Width);      
302                         AssertEquals (30, rects[0].Height);     
303                         
304                         AssertEquals (70, rects[1].X);  
305                         AssertEquals (240, rects[1].Y); 
306                         AssertEquals (30, rects[1].Width);
307                         AssertEquals (20, rects[1].Height);                                                     
308                         
309                 }
310                 
311                 [Test]
312                 public void TestExclude()
313                 {                       
314                         Bitmap bmp = new Bitmap (600, 800);                     
315                         Graphics dc = Graphics.FromImage (bmp);                 
316                         Matrix matrix = new Matrix ();          
317                         Rectangle rect1, rect2;         
318                         Region rgn1, rgn2;                                      
319                         RectangleF [] rects;
320                         
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);
326                         
327                         AssertEquals (2, rects.Length);                                                 
328                         
329                         AssertEquals (130, rects[0].X); 
330                         AssertEquals (30, rects[0].Y);  
331                         AssertEquals (60, rects[0].Width);      
332                         AssertEquals (10, rects[0].Height);     
333                         
334                         AssertEquals (130, rects[1].X); 
335                         AssertEquals (40, rects[1].Y);  
336                         AssertEquals (40, rects[1].Width);
337                         AssertEquals (70, rects[1].Height);                                                                                                     
338                 }
339                 
340                 [Test]
341                 public void TestIntersect()
342                 {                       
343                         Bitmap bmp = new Bitmap (600, 800);                     
344                         Graphics dc = Graphics.FromImage (bmp);                 
345                         Matrix matrix = new Matrix ();          
346                         RectangleF [] rects;
347                         RectangleF rect3, rect4;
348                         Region rgn3, rgn4;
349                         
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);                  
355                                                 
356                         rects = rgn1.GetRegionScans (matrix);
357                         AssertEquals (1, rects.Length);                                                 
358                         
359                         AssertEquals (290, rects[0].X); 
360                         AssertEquals (40, rects[0].Y);  
361                         AssertEquals (30, rects[0].Width);      
362                         AssertEquals (70, rects[0].Height);     
363                         
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);                              
372                         
373                         rgn1.Intersect (rgn2);
374                         rgn1.Intersect (rgn3);
375                         rgn1.Intersect (rgn4);
376                         rects = rgn1.GetRegionScans (matrix);                   
377                         
378                         AssertEquals (0, rects.Length);                                                 
379                 }
380                 
381                 [Test]
382                 public void TestXor()
383                 {                       
384                         Bitmap bmp = new Bitmap (600, 800);                     
385                         Graphics dc = Graphics.FromImage (bmp);                 
386                         Matrix matrix = new Matrix ();          
387                         RectangleF [] rects;
388                         
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);                       
393                         rgn1.Xor (rgn2);                        
394                         
395                         
396                         rects = rgn1.GetRegionScans (matrix);
397                         
398                         AssertEquals (4, rects.Length);                                                 
399                         
400                         AssertEquals (380, rects[0].X); 
401                         AssertEquals (30, rects[0].Y);  
402                         AssertEquals (60, rects[0].Width);      
403                         AssertEquals (10, rects[0].Height);             
404                         
405                         AssertEquals (380, rects[1].X); 
406                         AssertEquals (40, rects[1].Y);  
407                         AssertEquals (30, rects[1].Width);      
408                         AssertEquals (70, rects[1].Height);             
409                         
410                         AssertEquals (440, rects[2].X); 
411                         AssertEquals (40, rects[2].Y);  
412                         AssertEquals (30, rects[2].Width);      
413                         AssertEquals (70, rects[2].Height);             
414                         
415                         AssertEquals (410, rects[3].X); 
416                         AssertEquals (110, rects[3].Y); 
417                         AssertEquals (60, rects[3].Width);      
418                         AssertEquals (10, rects[3].Height);             
419                 }
420
421                 
422                 [Test]
423                 public void TestIsVisible() 
424                 {
425                         Bitmap bmp = new Bitmap (600, 800);
426                         Graphics dc = Graphics.FromImage (bmp);                                         
427                         Rectangle rect1, rect2;         
428                         Region rgn1;                                                            
429                         Matrix matrix = new Matrix ();          
430                         
431                         rect1 = new Rectangle (500, 30, 60, 80);                
432                         rect2 = new Rectangle (520, 40, 60, 80);                
433                         
434                         rgn1 = new Region (new RectangleF (0, 0, 10,10));                                               
435                         AssertEquals (false, rgn1.IsVisible (0,0,0,1));         
436                         
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)));                                       
443                 }
444                 
445                 [Test]
446                 public void TestTranslate() 
447                 {
448                         Region rgn1 = new Region (new RectangleF (10, 10, 120,120));                                                                    
449                         rgn1.Translate (30,20);
450                         Matrix matrix = new Matrix ();          
451                         
452                         RectangleF [] rects = rgn1.GetRegionScans (matrix);
453                         
454                         AssertEquals (1, rects.Length);                                                 
455                         
456                         AssertEquals (40, rects[0].X);  
457                         AssertEquals (30, rects[0].Y);  
458                         AssertEquals (120, rects[0].Width);     
459                         AssertEquals (120, rects[0].Height);                                    
460                 }
461
462         }
463 }
464
465