Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mono/mono.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArmin Sander <armin@replicator.org>2012-06-08 17:23:27 +0400
committerArmin Sander <armin@replicator.org>2012-06-08 17:23:27 +0400
commit33ca3a4f70be6cbdd2f79e7433efae4b9a66986e (patch)
tree5236e7b233d2a2f889d5c7331eda9127bacb116e /mcs/class/WindowsBase
parent05a45ba7b269575a1969685ba9c50a6095caa2c9 (diff)
WindowsBase: fix Rect.Union() and add Rect.Union test cases
Diffstat (limited to 'mcs/class/WindowsBase')
-rw-r--r--mcs/class/WindowsBase/System.Windows/Rect.cs13
-rw-r--r--mcs/class/WindowsBase/Test/System.Windows/RectTest.cs52
2 files changed, 61 insertions, 4 deletions
diff --git a/mcs/class/WindowsBase/System.Windows/Rect.cs b/mcs/class/WindowsBase/System.Windows/Rect.cs
index 4cf00e73576..2c5f3c0e619 100644
--- a/mcs/class/WindowsBase/System.Windows/Rect.cs
+++ b/mcs/class/WindowsBase/System.Windows/Rect.cs
@@ -278,10 +278,15 @@ namespace System.Windows {
public void Union(Rect rect)
{
- x = Math.Min (x, rect.x);
- y = Math.Min (y, rect.y);
- width = Math.Max (Right, rect.Right) - x;
- height = Math.Max (Bottom, rect.Bottom) - y;
+ var left = Math.Min (Left, rect.Left);
+ var top = Math.Min (Top, rect.Top);
+ var right = Math.Max (Right, rect.Right);
+ var bottom = Math.Max (Bottom, rect.Bottom);
+
+ x = left;
+ y = top;
+ width = right - left;
+ height = bottom - top;
}
public void Union(Point point)
diff --git a/mcs/class/WindowsBase/Test/System.Windows/RectTest.cs b/mcs/class/WindowsBase/Test/System.Windows/RectTest.cs
index e5a4635f73e..e83008d4452 100644
--- a/mcs/class/WindowsBase/Test/System.Windows/RectTest.cs
+++ b/mcs/class/WindowsBase/Test/System.Windows/RectTest.cs
@@ -594,10 +594,12 @@ namespace MonoTests.System.Windows {
// crosses bottom side
r = new Rect (0, 0, 50, 50);
r.Intersect (new Rect (5, 5, 10, 50));
+ Assert.AreEqual(new Rect(5, 5, 10, 45), r);
// crosses left side
r = new Rect (0, 0, 50, 50);
r.Intersect (new Rect (-5, 5, 10, 10));
+ Assert.AreEqual(new Rect(0, 5, 5, 10), r);
// completely outside (top)
r = new Rect (0, 0, 50, 50);
@@ -620,6 +622,56 @@ namespace MonoTests.System.Windows {
Assert.AreEqual (Rect.Empty, r);
}
+ [Test]
+ public void Union()
+ {
+ Rect r;
+
+ // fully contained
+ r = new Rect(0, 0, 50, 50);
+ r.Union(new Rect(10, 10, 10, 10));
+ Assert.AreEqual(new Rect(0, 0, 50, 50), r);
+
+ // crosses top side
+ r = new Rect(0, 0, 50, 50);
+ r.Union(new Rect(5, -5, 10, 10));
+ Assert.AreEqual(new Rect(0, -5, 50, 55), r);
+
+ // crosses right side
+ r = new Rect(0, 0, 50, 50);
+ r.Union(new Rect(5, 5, 50, 10));
+ Assert.AreEqual(new Rect(0, 0, 55, 50), r);
+
+ // crosses bottom side
+ r = new Rect(0, 0, 50, 50);
+ r.Union(new Rect(5, 5, 10, 50));
+ Assert.AreEqual(new Rect(0, 0, 50, 55), r);
+
+ // crosses left side
+ r = new Rect(0, 0, 50, 50);
+ r.Union(new Rect(-5, 5, 10, 10));
+ Assert.AreEqual(new Rect(-5, 0, 55, 50), r);
+
+ // completely outside (top)
+ r = new Rect(0, 0, 50, 50);
+ r.Union(new Rect(5, -5, 1, 1));
+ Assert.AreEqual(new Rect(0, -5, 50, 55), r);
+
+ // completely outside (right)
+ r = new Rect(0, 0, 50, 50);
+ r.Union(new Rect(75, 5, 1, 1));
+ Assert.AreEqual(new Rect(0, 0, 76, 50), r);
+
+ // completely outside (bottom)
+ r = new Rect(0, 0, 50, 50);
+ r.Union(new Rect(5, 75, 1, 1));
+ Assert.AreEqual(new Rect(0,0, 50, 76), r);
+
+ // completely outside (left)
+ r = new Rect(0, 0, 50, 50);
+ r.Union(new Rect(-25, 5, 1, 1));
+ Assert.AreEqual(new Rect(-25, 0, 75, 50), r);
+ }
[Test]
public void Equals_Operator ()