#region CPL License /* Nuclex Framework Copyright (C) 2002-2010 Nuclex Development Labs This library is free software; you can redistribute it and/or modify it under the terms of the IBM Common Public License as published by the IBM Corporation; either version 1.0 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the IBM Common Public License for more details. You should have received a copy of the IBM Common Public License along with this library */ #endregion #if UNITTEST using System; using NUnit.Framework; using Microsoft.Xna.Framework; using Nuclex.Support; namespace Nuclex.UserInterface { /// Unit Test for the floating point rectangle class [TestFixture] internal class RectangleFTest { /// /// Validates the empty rectangle provided by the floating point rectangle /// [Test] public void TestEmptyRectangle() { Assert.AreEqual(0.0f, RectangleF.Empty.X); Assert.AreEqual(0.0f, RectangleF.Empty.Y); Assert.AreEqual(0.0f, RectangleF.Empty.Width); Assert.AreEqual(0.0f, RectangleF.Empty.Height); } /// /// Verifies that the constructor of the floating point rectangle is working /// [Test] public void TestConstructor() { RectangleF testRectangle = new RectangleF(1.2f, 3.4f, 5.6f, 7.8f); Assert.AreEqual(1.2f, testRectangle.X); Assert.AreEqual(3.4f, testRectangle.Y); Assert.AreEqual(5.6f, testRectangle.Width); Assert.AreEqual(7.8f, testRectangle.Height); } /// /// Verifies that the Offset() method is working as expected /// [Test] public void TestOffset() { RectangleF testRectangle = new RectangleF(1.2f, 3.4f, 5.6f, 7.8f); testRectangle.Offset(new Vector2(100.0f, 100.0f)); Assert.AreEqual(101.2f, testRectangle.X); Assert.AreEqual(103.4f, testRectangle.Y); Assert.AreEqual(5.6f, testRectangle.Width); Assert.AreEqual(7.8f, testRectangle.Height); } /// /// Verifies that the Inflate() method is working as expected /// [Test] public void TestInflate() { RectangleF testRectangle = new RectangleF(1.2f, 3.4f, 5.6f, 7.8f); testRectangle.Inflate(10.0f, 100.0f); Assert.That(testRectangle.X, Is.EqualTo(-8.8f).Within(4).Ulps); Assert.That(testRectangle.Y, Is.EqualTo(-96.6f).Within(4).Ulps); Assert.That(testRectangle.Width, Is.EqualTo(25.6f).Within(4).Ulps); Assert.That(testRectangle.Height, Is.EqualTo(207.8f).Within(4).Ulps); } /// /// Verifies that the Contains() method is working as expected for points /// [Test] public void TestContainsWithPoint() { RectangleF testRectangle = new RectangleF(1.2f, 3.4f, 5.6f, 7.8f); Vector2 insidePoint = new Vector2(3.4f, 5.6f); Assert.IsTrue(testRectangle.Contains(insidePoint)); Vector2 outsidePoint = Vector2.Zero; Assert.IsFalse(testRectangle.Contains(outsidePoint)); Vector2 upperLeftBorderPoint = new Vector2(testRectangle.X, testRectangle.Y); Assert.IsTrue(testRectangle.Contains(upperLeftBorderPoint)); Vector2 lowerRightBorderPoint = new Vector2(testRectangle.Right, testRectangle.Bottom); Assert.IsFalse(testRectangle.Contains(lowerRightBorderPoint)); } /// /// Verifies that the Contains() method is working as expected for point references /// [Test] public void TestContainsWithPointReference() { RectangleF testRectangle = new RectangleF(1.2f, 3.4f, 5.6f, 7.8f); bool result; Vector2 insidePoint = new Vector2(3.4f, 5.6f); testRectangle.Contains(ref insidePoint, out result); Assert.IsTrue(result); Vector2 outsidePoint = Vector2.Zero; testRectangle.Contains(ref outsidePoint, out result); Assert.IsFalse(result); Vector2 upperLeftBorderPoint = new Vector2(testRectangle.X, testRectangle.Y); testRectangle.Contains(ref upperLeftBorderPoint, out result); Assert.IsTrue(result); Vector2 lowerRightBorderPoint = new Vector2(testRectangle.Right, testRectangle.Bottom); testRectangle.Contains(ref lowerRightBorderPoint, out result); Assert.IsFalse(result); } /// /// Verifies that the Contains() method is working as expected for rectangles /// [Test] public void TestContainsWithRectangle() { RectangleF testRectangle = new RectangleF(1.2f, 3.4f, 5.6f, 7.8f); RectangleF insideRectangle = new RectangleF(3.0f, 6.0f, 3.7f, 5.2f); Assert.IsTrue(testRectangle.Contains(insideRectangle)); RectangleF outsideRectangle = new RectangleF(1.1f, 3.3f, 5.8f, 8.0f); Assert.IsFalse(testRectangle.Contains(outsideRectangle)); RectangleF upperLeftQuadrant = new RectangleF(1.2f, 3.4f, 2.8f, 3.9f); Assert.IsTrue(testRectangle.Contains(upperLeftQuadrant)); RectangleF lowerRightQuadrant = new RectangleF(4.0f, 7.3f, 2.8f, 3.9f); Assert.IsTrue(testRectangle.Contains(lowerRightQuadrant)); } /// /// Verifies that the Contains() method is working as expected for rectangle references /// [Test] public void TestContainsWithRectangleReference() { RectangleF testRectangle = new RectangleF(1.2f, 3.4f, 5.6f, 7.8f); bool result; RectangleF insideRectangle = new RectangleF(3.0f, 6.0f, 3.7f, 5.2f); testRectangle.Contains(ref insideRectangle, out result); Assert.IsTrue(result); RectangleF outsideRectangle = new RectangleF(1.1f, 3.3f, 5.8f, 8.0f); testRectangle.Contains(ref outsideRectangle, out result); Assert.IsFalse(result); RectangleF upperLeftQuadrant = new RectangleF(1.2f, 3.4f, 2.8f, 3.9f); testRectangle.Contains(ref upperLeftQuadrant, out result); Assert.IsTrue(result); RectangleF lowerRightQuadrant = new RectangleF(4.0f, 7.3f, 2.8f, 3.9f); testRectangle.Contains(ref lowerRightQuadrant, out result); Assert.IsTrue(result); } /// /// Verifies that the Intersects() method is working as expected for rectangles /// [Test] public void TestIntersectsWithRectangle() { RectangleF testRectangle = new RectangleF(1.2f, 3.4f, 5.6f, 7.8f); RectangleF insideRectangle = new RectangleF(3.0f, 6.0f, 3.7f, 5.2f); Assert.IsTrue(testRectangle.Intersects(insideRectangle)); RectangleF outsideRectangle = new RectangleF(1.1f, 3.3f, 5.8f, 8.0f); Assert.IsTrue(testRectangle.Intersects(outsideRectangle)); RectangleF horizontalTouchingRectangle = new RectangleF(3.0f, 0.0f, 3.7f, 16.0f); Assert.IsTrue(testRectangle.Intersects(horizontalTouchingRectangle)); RectangleF verticalTouchingRectangle = new RectangleF(0.0f, 6.0f, 12.0f, 5.2f); Assert.IsTrue(testRectangle.Intersects(verticalTouchingRectangle)); RectangleF upperLeftTouchingRectangle = new RectangleF(0.0f, 0.0f, 1.2f, 3.4f); Assert.IsFalse(testRectangle.Intersects(upperLeftTouchingRectangle)); RectangleF lowerRightTouchingRectangle = new RectangleF(6.8f, 10.2f, 1.0f, 1.0f); Assert.IsFalse(testRectangle.Intersects(lowerRightTouchingRectangle)); } /// /// Verifies that the Intersects() method is working as expected for rectangles /// [Test] public void TestIntersectsWithRectangleReference() { RectangleF testRectangle = new RectangleF(1.2f, 3.4f, 5.6f, 7.8f); bool result; RectangleF insideRectangle = new RectangleF(3.0f, 6.0f, 3.7f, 5.2f); testRectangle.Intersects(ref insideRectangle, out result); Assert.IsTrue(result); RectangleF outsideRectangle = new RectangleF(1.1f, 3.3f, 5.8f, 8.0f); testRectangle.Intersects(ref outsideRectangle, out result); Assert.IsTrue(result); RectangleF horizontalTouchingRectangle = new RectangleF(3.0f, 0.0f, 3.7f, 16.0f); testRectangle.Intersects(ref horizontalTouchingRectangle, out result); Assert.IsTrue(result); RectangleF verticalTouchingRectangle = new RectangleF(0.0f, 6.0f, 12.0f, 5.2f); testRectangle.Intersects(ref verticalTouchingRectangle, out result); Assert.IsTrue(result); RectangleF upperLeftTouchingRectangle = new RectangleF(0.0f, 0.0f, 1.2f, 3.4f); testRectangle.Intersects(ref upperLeftTouchingRectangle, out result); Assert.IsFalse(result); RectangleF lowerRightTouchingRectangle = new RectangleF(6.8f, 10.2f, 1.0f, 1.0f); testRectangle.Intersects(ref lowerRightTouchingRectangle, out result); Assert.IsFalse(result); } /// /// Verifies that the equality operator of the unified rectangle is working /// [Test] public void TestEqualityOperator() { RectangleF testRectangle = new RectangleF(1.2f, 3.4f, 5.6f, 7.8f); RectangleF equivalentRectangle = new RectangleF(1.2f, 3.4f, 5.6f, 7.8f); RectangleF differingRectangle = new RectangleF(3.0f, 6.0f, 3.7f, 5.2f); Assert.IsTrue(testRectangle == equivalentRectangle); Assert.IsFalse(testRectangle == differingRectangle); } /// /// Verifies that the inequality operator of the unified rectangle is working /// [Test] public void TestInequalityOperator() { RectangleF testRectangle = new RectangleF(1.2f, 3.4f, 5.6f, 7.8f); RectangleF equivalentRectangle = new RectangleF(1.2f, 3.4f, 5.6f, 7.8f); RectangleF differingRectangle = new RectangleF(3.0f, 6.0f, 3.7f, 5.2f); Assert.IsFalse(testRectangle != equivalentRectangle); Assert.IsTrue(testRectangle != differingRectangle); } /// /// Tests the Equals() method of the unified rectangle class when it has to perform /// a downcast to obtain the comparison rectangle /// [Test] public void TestEqualsWithDowncast() { RectangleF testRectangle = new RectangleF(1.2f, 3.4f, 5.6f, 7.8f); RectangleF equivalentRectangle = new RectangleF(1.2f, 3.4f, 5.6f, 7.8f); RectangleF differingRectangle = new RectangleF(3.0f, 6.0f, 3.7f, 5.2f); Assert.IsTrue(testRectangle.Equals((object)equivalentRectangle)); Assert.IsFalse(testRectangle.Equals((object)differingRectangle)); } /// /// Tests the Equals() method of the unified rectangle class against a different type /// [Test] public void TestEqualsWithDifferentType() { RectangleF testRectangle = new RectangleF(1.2f, 3.4f, 5.6f, 7.8f); Assert.IsFalse(testRectangle.Equals(DateTime.MinValue)); } /// /// Tests the Equals() method of the unified rectangle class against a null pointer /// [Test] public void TestEqualsWithNullReference() { RectangleF testRectangle = new RectangleF(1.2f, 3.4f, 5.6f, 7.8f); Assert.IsFalse(testRectangle.Equals(null)); } /// /// Tests the GetHashCode() method of the unified rectangle class /// [Test] public void TestGetHashCode() { RectangleF testRectangle = new RectangleF(1.2f, 3.4f, 5.6f, 7.8f); RectangleF equivalentRectangle = new RectangleF(1.2f, 3.4f, 5.6f, 7.8f); Assert.AreEqual(testRectangle.GetHashCode(), equivalentRectangle.GetHashCode()); } /// /// Tests the ToString() method of the unified rectangle class /// [Test] public void TestToString() { Assert.IsNotNull(RectangleF.Empty.ToString()); } } } // namespace Nuclex.UserInterface #endif // UNITTEST