From 8e6aecbd0b31309d75a6de5410756b345eb3293a Mon Sep 17 00:00:00 2001 From: Scott Williams Date: Wed, 31 May 2017 19:30:09 +0100 Subject: [PATCH] add unit tests --- .../Drawing/Paths/DrawPathCollection.cs | 179 ++++++++++++++++++ .../Drawing/Paths/FillPathCollection.cs | 131 +++++++++++++ 2 files changed, 310 insertions(+) create mode 100644 tests/ImageSharp.Tests/Drawing/Paths/DrawPathCollection.cs create mode 100644 tests/ImageSharp.Tests/Drawing/Paths/FillPathCollection.cs diff --git a/tests/ImageSharp.Tests/Drawing/Paths/DrawPathCollection.cs b/tests/ImageSharp.Tests/Drawing/Paths/DrawPathCollection.cs new file mode 100644 index 0000000000..5148236d8a --- /dev/null +++ b/tests/ImageSharp.Tests/Drawing/Paths/DrawPathCollection.cs @@ -0,0 +1,179 @@ + +namespace ImageSharp.Tests.Drawing.Paths +{ + using System; + + using ImageSharp.Drawing.Brushes; + + using Xunit; + using ImageSharp.Drawing; + using System.Numerics; + using SixLabors.Shapes; + using ImageSharp.Drawing.Processors; + using ImageSharp.Drawing.Pens; + using ImageSharp.PixelFormats; + + public class DrawPathCollection : IDisposable + { + float thickness = 7.2f; + GraphicsOptions noneDefault = new GraphicsOptions(); + Rgba32 color = Rgba32.HotPink; + SolidBrush brush = Brushes.Solid(Rgba32.HotPink); + Pen pen = new Pen(Rgba32.Gray, 99.9f); + IPath path1 = new SixLabors.Shapes.Path(new LinearLineSegment(new Vector2[] { + new Vector2(10,10), + new Vector2(20,10), + new Vector2(20,10), + new Vector2(30,10), + })); + + IPath path2 = new SixLabors.Shapes.Path(new LinearLineSegment(new Vector2[] { + new Vector2(10,10), + new Vector2(20,10), + new Vector2(20,10), + new Vector2(30,10), + })); + + IPathCollection pathCollection; + private ProcessorWatchingImage img; + + public DrawPathCollection() + { + this.pathCollection = new PathCollection(this.path1, this.path2); + this.img = new Paths.ProcessorWatchingImage(10, 10); + } + + public void Dispose() + { + img.Dispose(); + } + + [Fact] + public void CorrectlySetsBrushThicknessAndPath() + { + img.Draw(brush, thickness, pathCollection); + + Assert.NotEmpty(img.ProcessorApplications); + + for (var i = 0; i < 2; i++) + { + DrawPathProcessor processor = Assert.IsType>(img.ProcessorApplications[i].processor); + + Assert.Equal(GraphicsOptions.Default, processor.Options); + + ShapePath shapepath = Assert.IsType(processor.Path); + Assert.Contains(shapepath.Path, this.pathCollection); + + Pen pen = Assert.IsType>(processor.Pen); + Assert.Equal(brush, pen.Brush); + Assert.Equal(thickness, pen.Width); + } + } + + [Fact] + public void CorrectlySetsBrushThicknessPathAndOptions() + { + img.Draw(brush, thickness, pathCollection, noneDefault); + + Assert.NotEmpty(img.ProcessorApplications); + + for (var i = 0; i < 2; i++) + { + DrawPathProcessor processor = Assert.IsType>(img.ProcessorApplications[i].processor); + + Assert.Equal(noneDefault, processor.Options); + + ShapePath shapepath = Assert.IsType(processor.Path); + Assert.Contains(shapepath.Path, pathCollection); + + Pen pen = Assert.IsType>(processor.Pen); + Assert.Equal(brush, pen.Brush); + Assert.Equal(thickness, pen.Width); + } + } + + [Fact] + public void CorrectlySetsColorThicknessAndPath() + { + img.Draw(color, thickness, pathCollection); + + Assert.NotEmpty(img.ProcessorApplications); + for (var i = 0; i < 2; i++) + { + DrawPathProcessor processor = Assert.IsType>(img.ProcessorApplications[i].processor); + + Assert.Equal(GraphicsOptions.Default, processor.Options); + + ShapePath shapepath = Assert.IsType(processor.Path); + Assert.Contains(shapepath.Path, pathCollection); + + Pen pen = Assert.IsType>(processor.Pen); + Assert.Equal(thickness, pen.Width); + + SolidBrush brush = Assert.IsType>(pen.Brush); + Assert.Equal(color, brush.Color); + } + } + + [Fact] + public void CorrectlySetsColorThicknessPathAndOptions() + { + img.Draw(color, thickness, pathCollection, noneDefault); + + Assert.Equal(2, img.ProcessorApplications.Count); + for (var i = 0; i < 2; i++) + { + DrawPathProcessor processor = Assert.IsType>(img.ProcessorApplications[i].processor); + + Assert.Equal(noneDefault, processor.Options); + + ShapePath shapepath = Assert.IsType(processor.Path); + Assert.Contains(shapepath.Path, pathCollection); + + Pen pen = Assert.IsType>(processor.Pen); + Assert.Equal(thickness, pen.Width); + + SolidBrush brush = Assert.IsType>(pen.Brush); + Assert.Equal(color, brush.Color); + } + } + + [Fact] + public void CorrectlySetsPenAndPath() + { + img.Draw(pen, pathCollection); + + Assert.Equal(2, img.ProcessorApplications.Count); + for (var i = 0; i < 2; i++) + { + DrawPathProcessor processor = Assert.IsType>(img.ProcessorApplications[i].processor); + + Assert.Equal(GraphicsOptions.Default, processor.Options); + + ShapePath shapepath = Assert.IsType(processor.Path); + Assert.Contains(shapepath.Path, pathCollection); + + Assert.Equal(pen, processor.Pen); + } + } + + [Fact] + public void CorrectlySetsPenPathAndOptions() + { + img.Draw(pen, pathCollection, noneDefault); + + Assert.Equal(2, img.ProcessorApplications.Count); + for (var i = 0; i < 2; i++) + { + DrawPathProcessor processor = Assert.IsType>(img.ProcessorApplications[i].processor); + + Assert.Equal(noneDefault, processor.Options); + + ShapePath shapepath = Assert.IsType(processor.Path); + Assert.Contains(shapepath.Path, pathCollection); + + Assert.Equal(pen, processor.Pen); + } + } + } +} diff --git a/tests/ImageSharp.Tests/Drawing/Paths/FillPathCollection.cs b/tests/ImageSharp.Tests/Drawing/Paths/FillPathCollection.cs new file mode 100644 index 0000000000..e60ac0c13d --- /dev/null +++ b/tests/ImageSharp.Tests/Drawing/Paths/FillPathCollection.cs @@ -0,0 +1,131 @@ + +namespace ImageSharp.Tests.Drawing.Paths +{ + using System; + using ImageSharp; + using ImageSharp.Drawing.Brushes; + using Xunit; + using ImageSharp.Drawing; + using System.Numerics; + using SixLabors.Shapes; + using ImageSharp.Drawing.Processors; + using ImageSharp.PixelFormats; + + public class FillPathCollection : IDisposable + { + GraphicsOptions noneDefault = new GraphicsOptions(); + Rgba32 color = Rgba32.HotPink; + SolidBrush brush = Brushes.Solid(Rgba32.HotPink); + IPath path1 = new SixLabors.Shapes.Path(new LinearLineSegment(new Vector2[] { + new Vector2(10,10), + new Vector2(20,10), + new Vector2(20,10), + new Vector2(30,10), + })); + IPath path2 = new SixLabors.Shapes.Path(new LinearLineSegment(new Vector2[] { + new Vector2(10,10), + new Vector2(20,10), + new Vector2(20,10), + new Vector2(30,10), + })); + + IPathCollection pathCollection; + + private ProcessorWatchingImage img; + + public FillPathCollection() + { + this.pathCollection = new PathCollection(path1, path2); + this.img = new ProcessorWatchingImage(10, 10); + } + + public void Dispose() + { + img.Dispose(); + } + + [Fact] + public void CorrectlySetsBrushAndPath() + { + img.Fill(brush, pathCollection); + + Assert.Equal(2, img.ProcessorApplications.Count); + for (var i = 0; i < 2; i++) + { + FillRegionProcessor processor = Assert.IsType>(img.ProcessorApplications[i].processor); + + Assert.Equal(GraphicsOptions.Default, processor.Options); + + ShapeRegion region = Assert.IsType(processor.Region); + + // path is converted to a polygon before filling + Polygon polygon = Assert.IsType(region.Shape); + LinearLineSegment segments = Assert.IsType(polygon.LineSegments[0]); + + Assert.Equal(brush, processor.Brush); + } + } + + [Fact] + public void CorrectlySetsBrushPathOptions() + { + img.Fill(brush, pathCollection, noneDefault); + + Assert.Equal(2, img.ProcessorApplications.Count); + for (var i = 0; i < 2; i++) + { + FillRegionProcessor processor = Assert.IsType>(img.ProcessorApplications[i].processor); + + Assert.Equal(noneDefault, processor.Options); + + ShapeRegion region = Assert.IsType(processor.Region); + Polygon polygon = Assert.IsType(region.Shape); + LinearLineSegment segments = Assert.IsType(polygon.LineSegments[0]); + + Assert.Equal(brush, processor.Brush); + } + } + + [Fact] + public void CorrectlySetsColorAndPath() + { + img.Fill(color, pathCollection); + + Assert.Equal(2, img.ProcessorApplications.Count); + for (var i = 0; i < 2; i++) + { + FillRegionProcessor processor = Assert.IsType>(img.ProcessorApplications[i].processor); + + Assert.Equal(GraphicsOptions.Default, processor.Options); + + ShapeRegion region = Assert.IsType(processor.Region); + Polygon polygon = Assert.IsType(region.Shape); + LinearLineSegment segments = Assert.IsType(polygon.LineSegments[0]); + + SolidBrush brush = Assert.IsType>(processor.Brush); + Assert.Equal(color, brush.Color); + } + } + + [Fact] + public void CorrectlySetsColorPathAndOptions() + { + img.Fill(color, pathCollection, noneDefault); + + Assert.Equal(2, img.ProcessorApplications.Count); + for (var i = 0; i < 2; i++) + { + FillRegionProcessor processor = Assert.IsType>(img.ProcessorApplications[i].processor); + + Assert.Equal(noneDefault, processor.Options); + + ShapeRegion region = Assert.IsType(processor.Region); + Polygon polygon = Assert.IsType(region.Shape); + LinearLineSegment segments = Assert.IsType(polygon.LineSegments[0]); + + SolidBrush brush = Assert.IsType>(processor.Brush); + Assert.Equal(color, brush.Color); + } + } + } +}