Commit 3f1da2c7 authored by mrbean-bremen's avatar mrbean-bremen
Browse files

Added bounds tests for some elements

parent b6abd3cb
...@@ -12,7 +12,7 @@ namespace Svg ...@@ -12,7 +12,7 @@ namespace Svg
get get
{ {
var path = this.Path(null); var path = this.Path(null);
if (Transforms != null) if (Transforms != null && Transforms.Count > 0)
{ {
path = (GraphicsPath)path.Clone(); path = (GraphicsPath)path.Clone();
path.Transform(Transforms.GetMatrix()); path.Transform(Transforms.GetMatrix());
......
using Microsoft.VisualStudio.TestTools.UnitTesting;
using System.Drawing;
namespace Svg.UnitTests
{
/// <summary>
/// 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.
/// </summary>
[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, 29.5f, 10.5f, 20.5f);
// all reactangles from TestRectangleBounds()
AssertEqualBounds("rects", 19.5f, 39.5f, 10.5f, 20.5f);
}
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<SvgVisualElement>(elementId);
}
}
}
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<svg xmlns="http://www.w3.org/2000/svg" version="1.1" x="0px" y="0px" viewBox="0 0 100 100" enable-background="new 0 0 34.06945 33.11168" xml:space="preserve" id="svg2">
<defs id="defs30"/>
<g id="lines">
<line id="line" x1="10" x2="30" y1="20" y2="40" />
<line id="line-xlate" x1="10" x2="30" y1="20" y2="40" transform="translate(5, 5)" />
<line id="line-xform" x1="10" x2="30" y1="20" y2="40" transform="rotate(180), translate(-50, 0)" />
</g>
<g id="rects">
<rect id="rect" x="10" y="30" width="10" height="20" />
<rect id="rect-xlate" x="10" y="30" width="10" height="20" transform="translate(10, 10)" />
<rect id="rect-rot" x="10" y="30" width="10" height="20" transform="rotate(90)" />
</g>
</svg>
...@@ -54,6 +54,7 @@ ...@@ -54,6 +54,7 @@
</CodeAnalysisDependentAssemblyPaths> </CodeAnalysisDependentAssemblyPaths>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<Compile Include="BoundsTests.cs" />
<Compile Include="CssQueryTest.cs" /> <Compile Include="CssQueryTest.cs" />
<Compile Include="LargeEmbeddedImageTest.cs" /> <Compile Include="LargeEmbeddedImageTest.cs" />
<Compile Include="MarkerEndTest.cs" /> <Compile Include="MarkerEndTest.cs" />
...@@ -95,6 +96,9 @@ ...@@ -95,6 +96,9 @@
<ItemGroup> <ItemGroup>
<EmbeddedResource Include="Resources\Issue_TextElement\Text.svg" /> <EmbeddedResource Include="Resources\Issue_TextElement\Text.svg" />
</ItemGroup> </ItemGroup>
<ItemGroup>
<EmbeddedResource Include="Resources\Issue281_Bounds\BoundsTest.svg" />
</ItemGroup>
<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
<!-- To modify your build process, add your task inside one of the targets below and uncomment it. <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
Other similar extension points exist, see Microsoft.Common.targets. Other similar extension points exist, see Microsoft.Common.targets.
......
Supports Markdown
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment