using Microsoft.VisualStudio.TestTools.UnitTesting; using System.Drawing; namespace Svg.UnitTests { /// /// Test class to test bounds for elements without vs. with transformations /// (see issue 281). Only some basic elements are tested - this should be sufficient /// to verify the functionality for all path-based elements. /// [TestClass] public class BoundsTests : SvgTestHelper { private const string BoundsTestSvg = "Issue281_Bounds.BoundsTest.svg"; private static SvgDocument testDocument; [TestMethod] public void TestLineBounds() { // x1="10" x2="30" y1="20" y2="40", default line thickness is 1 AssertEqualBounds("line", 9.5f, 19.5f, 21, 21); // additional translation(5, 5) AssertEqualBounds("line-xlate", 14.5f, 24.5f, 21, 21); // additional rotation(180) and translation(-50, 0) AssertEqualBounds("line-xform", 19.5f, -40.5f, 21, 21); } [TestMethod] public void TestRectangleBounds() { // x="10" y="30" width="10" height="20" AssertEqualBounds("rect", 9.5f, 29.5f, 10.5f, 20.5f); // additional translation(10, 10) AssertEqualBounds("rect-xlate", 19.5f, 39.5f, 10.5f, 20.5f); // additional rotation(90) AssertEqualBounds("rect-rot", -50, 9.5f, 20.5f, 10.5f); } [TestMethod] public void TestGroupBounds() { // all lines from TestLineBounds() AssertEqualBounds("lines", 9.5f, -40.5f, 31, 86); // all rectangles from TestRectangleBounds() AssertEqualBounds("rects", -50f, 9.5f, 80, 50.5f); } [TestMethod] public void TestTranslatedGroupBounds() { AssertEqualBounds("lines-translated", -12.5f, -7, 31, 86); } [TestMethod] public void TestScaledGroupBounds() { AssertEqualBounds("lines-scaled", 19, -81, 62, 172); } [TestMethod] public void TestRotatedGroupBounds() { AssertEqualBounds("lines-rotated", -45.5f, 9.5f, 86, 31); } private void AssertEqualBounds(string elementId, float x, float y, float width, float height) { const float Epsilon = 0.01f; var element = GetElement(elementId); var elementBounds = element.Bounds; Assert.AreEqual(x, elementBounds.X, Epsilon); Assert.AreEqual(y, elementBounds.Y, Epsilon); Assert.AreEqual(width, elementBounds.Width, Epsilon); Assert.AreEqual(height, elementBounds.Height, Epsilon); } private SvgVisualElement GetElement(string elementId) { if (testDocument == null) { testDocument = OpenSvg(GetXMLDocFromResource(GetFullResourceString(BoundsTestSvg))); } return testDocument.GetElementById(elementId); } } }