diff options
author | Armin Sander <armin@replicator.org> | 2012-06-08 17:23:27 +0400 |
---|---|---|
committer | Armin Sander <armin@replicator.org> | 2012-06-08 17:23:27 +0400 |
commit | 33ca3a4f70be6cbdd2f79e7433efae4b9a66986e (patch) | |
tree | 5236e7b233d2a2f889d5c7331eda9127bacb116e /mcs/class/WindowsBase | |
parent | 05a45ba7b269575a1969685ba9c50a6095caa2c9 (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.cs | 13 | ||||
-rw-r--r-- | mcs/class/WindowsBase/Test/System.Windows/RectTest.cs | 52 |
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 () |