1 // Permission is hereby granted, free of charge, to any person obtaining
2 // a copy of this software and associated documentation files (the
3 // "Software"), to deal in the Software without restriction, including
4 // without limitation the rights to use, copy, modify, merge, publish,
5 // distribute, sublicense, and/or sell copies of the Software, and to
6 // permit persons to whom the Software is furnished to do so, subject to
7 // the following conditions:
9 // The above copyright notice and this permission notice shall be
10 // included in all copies or substantial portions of the Software.
12 // THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
13 // EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
14 // MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
15 // NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
16 // LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
17 // OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
18 // WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
20 // Copyright (c) 2007 Novell, Inc. (http://www.novell.com)
23 // Chris Toshok (toshok@ximian.com)
27 using System.Globalization;
29 using System.Windows.Media;
30 using NUnit.Framework;
32 namespace MonoTests.System.Windows {
38 public void Ctor_Accessor ()
42 r = new Rect (new Size (40, 50));
43 Assert.AreEqual (0, r.X);
44 Assert.AreEqual (0, r.Y);
45 Assert.AreEqual (40, r.Width);
46 Assert.AreEqual (50, r.Height);
47 Assert.AreEqual (0, r.Left);
48 Assert.AreEqual (0, r.Top);
49 Assert.AreEqual (40, r.Right);
50 Assert.AreEqual (50, r.Bottom);
51 Assert.AreEqual (new Point (0, 0), r.TopLeft);
52 Assert.AreEqual (new Point (40, 0), r.TopRight);
53 Assert.AreEqual (new Point (0, 50), r.BottomLeft);
54 Assert.AreEqual (new Point (40, 50), r.BottomRight);
55 Assert.AreEqual (new Point (0, 0), r.Location);
56 Assert.AreEqual (new Size (40, 50), r.Size);
58 r = new Rect (new Point (4, 5), new Vector (20, 30));
59 Assert.AreEqual (4, r.X);
60 Assert.AreEqual (5, r.Y);
61 Assert.AreEqual (20, r.Width);
62 Assert.AreEqual (30, r.Height);
63 Assert.AreEqual (4, r.Left);
64 Assert.AreEqual (5, r.Top);
65 Assert.AreEqual (24, r.Right);
66 Assert.AreEqual (35, r.Bottom);
67 Assert.AreEqual (new Point (4, 5), r.TopLeft);
68 Assert.AreEqual (new Point (24, 5), r.TopRight);
69 Assert.AreEqual (new Point (4, 35), r.BottomLeft);
70 Assert.AreEqual (new Point (24, 35), r.BottomRight);
71 Assert.AreEqual (new Point (4, 5), r.Location);
72 Assert.AreEqual (new Size (20, 30), r.Size);
74 r = new Rect (new Point (4, 5), new Point (20, 30));
75 Assert.AreEqual (4, r.X);
76 Assert.AreEqual (5, r.Y);
77 Assert.AreEqual (16, r.Width);
78 Assert.AreEqual (25, r.Height);
79 Assert.AreEqual (4, r.Left);
80 Assert.AreEqual (5, r.Top);
81 Assert.AreEqual (20, r.Right);
82 Assert.AreEqual (30, r.Bottom);
83 Assert.AreEqual (new Point (4, 5), r.TopLeft);
84 Assert.AreEqual (new Point (20, 5), r.TopRight);
85 Assert.AreEqual (new Point (4, 30), r.BottomLeft);
86 Assert.AreEqual (new Point (20, 30), r.BottomRight);
87 Assert.AreEqual (new Point (4, 5), r.Location);
88 Assert.AreEqual (new Size (16,25), r.Size);
90 r = new Rect (new Point (20, 30), new Point (4, 5));
91 Assert.AreEqual (4, r.X);
92 Assert.AreEqual (5, r.Y);
93 Assert.AreEqual (16, r.Width);
94 Assert.AreEqual (25, r.Height);
95 Assert.AreEqual (4, r.Left);
96 Assert.AreEqual (5, r.Top);
97 Assert.AreEqual (20, r.Right);
98 Assert.AreEqual (30, r.Bottom);
99 Assert.AreEqual (new Point (4, 5), r.TopLeft);
100 Assert.AreEqual (new Point (20, 5), r.TopRight);
101 Assert.AreEqual (new Point (4, 30), r.BottomLeft);
102 Assert.AreEqual (new Point (20, 30), r.BottomRight);
103 Assert.AreEqual (new Point (4, 5), r.Location);
104 Assert.AreEqual (new Size (16,25), r.Size);
106 r = new Rect (10, 15, 20, 30);
107 Assert.AreEqual (10, r.X);
108 Assert.AreEqual (15, r.Y);
109 Assert.AreEqual (20, r.Width);
110 Assert.AreEqual (30, r.Height);
111 Assert.AreEqual (10, r.Left);
112 Assert.AreEqual (15, r.Top);
113 Assert.AreEqual (30, r.Right);
114 Assert.AreEqual (45, r.Bottom);
115 Assert.AreEqual (new Point (10, 15), r.TopLeft);
116 Assert.AreEqual (new Point (30, 15), r.TopRight);
117 Assert.AreEqual (new Point (10, 45), r.BottomLeft);
118 Assert.AreEqual (new Point (30, 45), r.BottomRight);
119 Assert.AreEqual (new Point (10, 15), r.Location);
120 Assert.AreEqual (new Size (20, 30), r.Size);
122 r = new Rect (new Point (10, 15), new Size (20, 30));
123 Assert.AreEqual (10, r.X);
124 Assert.AreEqual (15, r.Y);
125 Assert.AreEqual (20, r.Width);
126 Assert.AreEqual (30, r.Height);
127 Assert.AreEqual (10, r.Left);
128 Assert.AreEqual (15, r.Top);
129 Assert.AreEqual (30, r.Right);
130 Assert.AreEqual (45, r.Bottom);
131 Assert.AreEqual (new Point (10, 15), r.TopLeft);
132 Assert.AreEqual (new Point (30, 15), r.TopRight);
133 Assert.AreEqual (new Point (10, 45), r.BottomLeft);
134 Assert.AreEqual (new Point (30, 45), r.BottomRight);
135 Assert.AreEqual (new Point (10, 15), r.Location);
136 Assert.AreEqual (new Size (20, 30), r.Size);
140 [ExpectedException (typeof (ArgumentException))]
141 public void Ctor_NegativeWidth ()
143 new Rect (10, 10, -10, 10);
147 [ExpectedException (typeof (ArgumentException))]
148 public void Ctor_NegativeHeight ()
150 new Rect (10, 10, 10, -10);
157 Assert.AreEqual (Double.PositiveInfinity, r.X);
158 Assert.AreEqual (Double.PositiveInfinity, r.Y);
159 Assert.AreEqual (Double.NegativeInfinity, r.Width);
160 Assert.AreEqual (Double.NegativeInfinity, r.Height);
164 [ExpectedException (typeof (InvalidOperationException))]
165 public void ModifyEmpty_x ()
172 [ExpectedException (typeof (InvalidOperationException))]
173 public void ModifyEmpty_y ()
180 [ExpectedException (typeof (InvalidOperationException))]
181 public void ModifyEmpty_width ()
188 [ExpectedException (typeof (InvalidOperationException))]
189 public void ModifyEmpty_height ()
196 [ExpectedException (typeof (InvalidOperationException))]
197 public void ModifyEmpty_negative_width ()
204 [ExpectedException (typeof (InvalidOperationException))]
205 public void ModifyEmpty_negative_height ()
213 [ExpectedException (typeof (ArgumentException))]
214 public void Modify_negative_width ()
216 Rect r = new Rect (0, 0, 10, 10);
221 [ExpectedException (typeof (ArgumentException))]
222 public void Modify_negative_height ()
224 Rect r = new Rect (0, 0, 10, 10);
229 public void Empty_Size ()
231 Assert.AreEqual (Size.Empty, Rect.Empty.Size);
235 public void IsEmpty ()
237 Assert.IsTrue (Rect.Empty.IsEmpty);
238 Assert.IsFalse ((new Rect (5, 5, 5, 5)).IsEmpty);
242 public void Location ()
244 Rect r = new Rect (0, 0, 0, 0);
246 r.Location = new Point (10, 15);
247 Assert.AreEqual (10, r.X);
248 Assert.AreEqual (15, r.Y);
252 public void RectSize ()
254 Rect r = new Rect (0, 0, 5, 5);
256 r.Size = new Size (10, 15);
257 Assert.AreEqual (10, r.Width);
258 Assert.AreEqual (15, r.Height);
262 public void ToStringTest ()
264 Rect r = new Rect (1.0, 2.5, 3, 4);
266 string expectedStringOutput = "1,2.5,3,4";
267 Assert.AreEqual (expectedStringOutput, r.ToString ());
268 Assert.AreEqual (expectedStringOutput, r.ToString (null));
269 Assert.AreEqual ("Empty", Rect.Empty.ToString ());
271 // IFormattable.ToString
272 IFormattable rFormattable = r;
273 Assert.AreEqual (expectedStringOutput,
274 rFormattable.ToString (null, null),
275 "IFormattable.ToString with null format");
276 Assert.AreEqual (expectedStringOutput,
277 rFormattable.ToString (string.Empty, null),
278 "IFormattable.ToString with empty format");
279 Assert.AreEqual ("1.00,2.50,3.00,4.00",
280 rFormattable.ToString ("N2", null),
281 "IFormattable.ToString with N2 format");
282 Assert.AreEqual ("blah,blah,blah,blah",
283 rFormattable.ToString ("blah", null),
284 "IFormattable.ToString with blah format");
285 Assert.AreEqual (":,:,:,:",
286 rFormattable.ToString (":", null),
287 "IFormattable.ToString with : format");
288 Assert.AreEqual ("Empty",
289 ((IFormattable) Rect.Empty).ToString ("blah", null),
290 "IFormattable.ToString on Rect.Empty with blah format");
292 foreach (CultureInfo culture in CultureInfo.GetCultures (CultureTypes.AllCultures)) {
293 if (culture.IsNeutralCulture)
295 string separator = ",";
296 if (culture.NumberFormat.NumberDecimalSeparator == separator)
298 expectedStringOutput =
299 1.ToString (culture) + separator +
300 2.5.ToString (culture) + separator +
301 3.ToString (culture) + separator +
302 4.ToString (culture);
303 Assert.AreEqual (expectedStringOutput,
304 r.ToString (culture),
305 "ToString with Culture: " + culture.Name);
306 Assert.AreEqual ("Empty",
307 Rect.Empty.ToString (culture),
308 "ToString on Empty with Culture: " + culture.Name);
310 // IFormattable.ToString
311 Assert.AreEqual (expectedStringOutput,
312 rFormattable.ToString (null, culture),
313 "IFormattable.ToString with null format with Culture: " + culture.Name);
314 Assert.AreEqual (expectedStringOutput,
315 rFormattable.ToString (string.Empty, culture),
316 "IFormattable.ToString with empty format with Culture: " + culture.Name);
317 expectedStringOutput =
318 1.ToString ("N2", culture) + separator +
319 2.5.ToString ("N2", culture) + separator +
320 3.ToString ("N2", culture) + separator +
321 4.ToString ("N2", culture);
322 Assert.AreEqual (expectedStringOutput,
323 rFormattable.ToString ("N2", culture),
324 "IFormattable.ToString with N2 format with Culture: " + culture.Name);
329 [Category ("NotWorking")]
330 public void ToString_FormatException ()
332 // This test does not currently work because
333 // String.Format does not throw all necessary exceptions
334 IFormattable rFormattable = new Rect (1.0, 2.5, 3, 4);
335 bool exceptionRaised = false;
337 rFormattable.ToString ("{", null);
338 } catch (FormatException) {
339 exceptionRaised = true;
341 Assert.IsTrue (exceptionRaised, "Expected FormatException with IFormattable.ToString (\"{\", null)");
345 [Category ("NotWorking")]
348 Rect r = Rect.Parse ("1 , 2, 3, 4");
349 Assert.AreEqual (new Rect (1, 2, 3, 4), r);
353 [Category ("NotWorking")]
354 public void Parse2 ()
356 Rect r = Rect.Parse ("1 2 3 4");
357 Assert.AreEqual (new Rect (1, 2, 3, 4), r);
361 [Category ("NotWorking")]
362 public void Parse3 ()
364 Rect r = Rect.Parse (" 1 2 3 4 ");
365 Assert.AreEqual (new Rect (1, 2, 3, 4), r);
369 [Category ("NotWorking")]
370 public void ParseWithBothSeparators ()
372 Rect.Parse ("1.0, 3 2.0, 5.0");
376 [Category ("NotWorking")]
377 [ExpectedException (typeof (ArgumentException))]
378 public void ParseNegative ()
380 Rect.Parse ("1, 2, -3, -4");
384 [Category ("NotWorking")]
385 [ExpectedException (typeof (InvalidOperationException))] // "Premature string termination encountered."
386 public void Parse3Doubles ()
388 Rect.Parse ("1.0, 3, -5");
392 [Category ("NotWorking")]
393 [ExpectedException (typeof (FormatException))]
394 public void ParseInvalidString1 ()
396 Rect.Parse ("1.0, 3, -x, 5.0");
400 [Category ("NotWorking")]
401 [ExpectedException (typeof (InvalidOperationException))]
402 public void ParseInvalidString3 ()
404 Rect.Parse ("1.0, 3, 2.0, 5.0, 2");
408 [Category ("NotWorking")]
409 [ExpectedException (typeof (FormatException))]
410 public void ParseInvalidString4 ()
412 Rect.Parse ("1.0-3, 2.0, 5.0, 2");
416 [Category ("NotWorking")]
417 [ExpectedException (typeof (InvalidOperationException))]
418 public void ParseInvalidString5 ()
420 Rect.Parse ("1.0, 2.0, 5.0, 2,");
424 [Category ("NotWorking")]
425 public void ParseInvalidString6 ()
427 Rect.Parse ("\n1.0, 2.0, 5.0, 2");
431 [Category ("NotWorking")]
432 [ExpectedException (typeof (InvalidOperationException))]
433 public void ParseInvalidString7 ()
435 Rect r = Rect.Parse ("1,, 2, 3, 4");
436 Assert.AreEqual (new Rect (1, 2, 3, 4), r);
440 public void Equals ()
442 Rect r1 = new Rect (1, 2, 3, 4);
445 Assert.IsTrue (r1.Equals (r1));
448 Assert.IsFalse (r1.Equals (r2));
452 Assert.IsFalse (r1.Equals (r2));
456 Assert.IsFalse (r1.Equals (r2));
460 Assert.IsFalse (r1.Equals (r2));
461 r2.Height = r1.Height;
463 Assert.IsFalse (r1.Equals (new object ()));
468 Assert.AreEqual (true, r1.Equals (r2));
469 Assert.AreEqual (true, r2.Equals (r1));
473 public void ContainsRect ()
475 Rect r = new Rect (0, 0, 50, 50);
478 Assert.IsTrue (r.Contains (new Rect (10, 10, 10, 10)));
481 Assert.IsFalse (r.Contains (new Rect (5, -5, 10, 10)));
483 // crosses right side
484 Assert.IsFalse (r.Contains (new Rect (5, 5, 50, 10)));
486 // crosses bottom side
487 Assert.IsFalse (r.Contains (new Rect (5, 5, 10, 50)));
490 Assert.IsFalse (r.Contains (new Rect (-5, 5, 10, 10)));
492 // completely outside (top)
493 Assert.IsFalse (r.Contains (new Rect (5, -5, 1, 1)));
495 // completely outside (right)
496 Assert.IsFalse (r.Contains (new Rect (75, 5, 1, 1)));
498 // completely outside (bottom)
499 Assert.IsFalse (r.Contains (new Rect (5, 75, 1, 1)));
501 // completely outside (left)
502 Assert.IsFalse (r.Contains (new Rect (-25, 5, 1, 1)));
506 public void ContainsDoubles ()
508 Rect r = new Rect (0, 0, 50, 50);
510 Assert.IsTrue (r.Contains (10, 10));
511 Assert.IsFalse (r.Contains (-5, -5));
515 public void ContainsPoint ()
517 Rect r = new Rect (0, 0, 50, 50);
519 Assert.IsTrue (r.Contains (new Point (10, 10)));
520 Assert.IsFalse (r.Contains (new Point (-5, -5)));
524 public void Inflate ()
526 Rect r = Rect.Inflate (new Rect (0, 0, 20, 20), 10, 15);
527 Assert.AreEqual (new Rect (-10, -15, 40, 50), r);
529 r = Rect.Inflate (new Rect (0, 0, 20, 20), new Size (10, 15));
530 Assert.AreEqual (new Rect (-10, -15, 40, 50), r);
532 r = new Rect (0, 0, 20, 20);
534 Assert.AreEqual (new Rect (-10, -15, 40, 50), r);
536 r = new Rect (0, 0, 20, 20);
537 r.Inflate (new Size (10, 15));
538 Assert.AreEqual (new Rect (-10, -15, 40, 50), r);
542 public void IntersectsWith ()
544 Rect r = new Rect (0, 0, 50, 50);
547 Assert.IsTrue (r.IntersectsWith (new Rect (10, 10, 10, 10)));
550 Assert.IsTrue (r.IntersectsWith (new Rect (5, -5, 10, 10)));
552 // crosses right side
553 Assert.IsTrue (r.IntersectsWith (new Rect (5, 5, 50, 10)));
555 // crosses bottom side
556 Assert.IsTrue (r.IntersectsWith (new Rect (5, 5, 10, 50)));
559 Assert.IsTrue (r.IntersectsWith (new Rect (-5, 5, 10, 10)));
561 // completely outside (top)
562 Assert.IsFalse (r.IntersectsWith (new Rect (5, -5, 1, 1)));
564 // completely outside (right)
565 Assert.IsFalse (r.IntersectsWith (new Rect (75, 5, 1, 1)));
567 // completely outside (bottom)
568 Assert.IsFalse (r.IntersectsWith (new Rect (5, 75, 1, 1)));
570 // completely outside (left)
571 Assert.IsFalse (r.IntersectsWith (new Rect (-25, 5, 1, 1)));
575 public void Intersect ()
580 r = new Rect (0, 0, 50, 50);
581 r.Intersect (new Rect (10, 10, 10, 10));
582 Assert.AreEqual (new Rect (10, 10, 10, 10), r);
585 r = new Rect (0, 0, 50, 50);
586 r.Intersect (new Rect (5, -5, 10, 10));
587 Assert.AreEqual (new Rect (5, 0, 10, 5), r);
589 // crosses right side
590 r = new Rect (0, 0, 50, 50);
591 r.Intersect (new Rect (5, 5, 50, 10));
592 Assert.AreEqual (new Rect (5, 5, 45, 10), r);
594 // crosses bottom side
595 r = new Rect (0, 0, 50, 50);
596 r.Intersect (new Rect (5, 5, 10, 50));
597 Assert.AreEqual(new Rect(5, 5, 10, 45), r);
600 r = new Rect (0, 0, 50, 50);
601 r.Intersect (new Rect (-5, 5, 10, 10));
602 Assert.AreEqual(new Rect(0, 5, 5, 10), r);
604 // completely outside (top)
605 r = new Rect (0, 0, 50, 50);
606 r.Intersect (new Rect (5, -5, 1, 1));
607 Assert.AreEqual (Rect.Empty, r);
609 // completely outside (right)
610 r = new Rect (0, 0, 50, 50);
611 r.Intersect (new Rect (75, 5, 1, 1));
612 Assert.AreEqual (Rect.Empty, r);
614 // completely outside (bottom)
615 r = new Rect (0, 0, 50, 50);
616 r.Intersect (new Rect (5, 75, 1, 1));
617 Assert.AreEqual (Rect.Empty, r);
619 // completely outside (left)
620 r = new Rect (0, 0, 50, 50);
621 r.Intersect (new Rect (-25, 5, 1, 1));
622 Assert.AreEqual (Rect.Empty, r);
631 r = new Rect(0, 0, 50, 50);
632 r.Union(new Rect(10, 10, 10, 10));
633 Assert.AreEqual(new Rect(0, 0, 50, 50), r);
636 r = new Rect(0, 0, 50, 50);
637 r.Union(new Rect(5, -5, 10, 10));
638 Assert.AreEqual(new Rect(0, -5, 50, 55), r);
640 // crosses right side
641 r = new Rect(0, 0, 50, 50);
642 r.Union(new Rect(5, 5, 50, 10));
643 Assert.AreEqual(new Rect(0, 0, 55, 50), r);
645 // crosses bottom side
646 r = new Rect(0, 0, 50, 50);
647 r.Union(new Rect(5, 5, 10, 50));
648 Assert.AreEqual(new Rect(0, 0, 50, 55), r);
651 r = new Rect(0, 0, 50, 50);
652 r.Union(new Rect(-5, 5, 10, 10));
653 Assert.AreEqual(new Rect(-5, 0, 55, 50), r);
655 // completely outside (top)
656 r = new Rect(0, 0, 50, 50);
657 r.Union(new Rect(5, -5, 1, 1));
658 Assert.AreEqual(new Rect(0, -5, 50, 55), r);
660 // completely outside (right)
661 r = new Rect(0, 0, 50, 50);
662 r.Union(new Rect(75, 5, 1, 1));
663 Assert.AreEqual(new Rect(0, 0, 76, 50), r);
665 // completely outside (bottom)
666 r = new Rect(0, 0, 50, 50);
667 r.Union(new Rect(5, 75, 1, 1));
668 Assert.AreEqual(new Rect(0,0, 50, 76), r);
670 // completely outside (left)
671 r = new Rect(0, 0, 50, 50);
672 r.Union(new Rect(-25, 5, 1, 1));
673 Assert.AreEqual(new Rect(-25, 0, 75, 50), r);
677 public void Equals_Operator ()
679 Rect r1 = new Rect (1, 2, 30, 30);
680 Rect r2 = new Rect (1, 2, 30, 30);
682 Assert.AreEqual (true, r1 == r2);
683 Assert.AreEqual (false, r1 != r2);
685 r2 = new Rect (10, 20, 30, 30);
687 Assert.AreEqual (false, r1 == r2);
688 Assert.AreEqual (true, r1 != r2);
693 Assert.AreEqual (true, r1 == r2);
694 Assert.AreEqual (false, r1 != r2);