From 188fbc22a7a8cdedfa77f2eaf785976048854c7a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marcin=20Zi=C4=85bek?= Date: Sat, 18 Sep 2021 23:40:21 +0200 Subject: [PATCH] Added structural tests for: Row, Stack. --- QuestPDF.UnitTests/ExternalLinkTests.cs | 15 ++ QuestPDF.UnitTests/GridTests.cs | 54 +++--- QuestPDF.UnitTests/InternalLinkTests.cs | 15 ++ QuestPDF.UnitTests/InternalLocationTests.cs | 15 ++ QuestPDF.UnitTests/RowTests.cs | 157 +++++++++++++++++- QuestPDF.UnitTests/StackTests.cs | 82 ++++++++- .../{CanvasMock.cs => MockCanvas.cs} | 29 +--- .../TestEngine/OperationRecordingCanvas.cs | 25 +++ .../Operations/CanvasDrawImageOperation.cs | 4 +- .../CanvasDrawRectangleOperation.cs | 4 +- .../Operations/CanvasDrawTextOperation.cs | 4 +- .../Operations/CanvasTranslateOperation.cs | 4 +- .../Operations/ChildDrawOperation.cs | 4 +- .../Operations/ChildMeasureOperation.cs | 4 +- .../Operations/ElementMeasureOperation.cs | 4 +- QuestPDF.UnitTests/TestEngine/TestPlan.cs | 96 ++++++----- QuestPDF.UnitTests/TestsBase.cs | 1 + QuestPDF/Elements/Grid.cs | 2 +- QuestPDF/Elements/Stack.cs | 2 +- 19 files changed, 408 insertions(+), 113 deletions(-) create mode 100644 QuestPDF.UnitTests/ExternalLinkTests.cs create mode 100644 QuestPDF.UnitTests/InternalLinkTests.cs create mode 100644 QuestPDF.UnitTests/InternalLocationTests.cs rename QuestPDF.UnitTests/TestEngine/{CanvasMock.cs => MockCanvas.cs} (64%) create mode 100644 QuestPDF.UnitTests/TestEngine/OperationRecordingCanvas.cs diff --git a/QuestPDF.UnitTests/ExternalLinkTests.cs b/QuestPDF.UnitTests/ExternalLinkTests.cs new file mode 100644 index 0000000..cd6853d --- /dev/null +++ b/QuestPDF.UnitTests/ExternalLinkTests.cs @@ -0,0 +1,15 @@ +using NUnit.Framework; +using QuestPDF.Elements; +using QuestPDF.UnitTests.TestEngine; + +namespace QuestPDF.UnitTests +{ + [TestFixture] + public class ExternalLinkTests + { + [Test] + public void Measure() => SimpleContainerTests.Measure(); + + // TODO: consider tests for the Draw method + } +} \ No newline at end of file diff --git a/QuestPDF.UnitTests/GridTests.cs b/QuestPDF.UnitTests/GridTests.cs index 4b7ad3d..f5d6cf0 100644 --- a/QuestPDF.UnitTests/GridTests.cs +++ b/QuestPDF.UnitTests/GridTests.cs @@ -40,30 +40,30 @@ namespace QuestPDF.UnitTests // assert var expected = new Container(); - expected.Container().Stack(stack => + expected.Stack(stack => { stack.Item().Row(row => { - row.RelativeColumn(6).Container().Element(childA); - row.RelativeColumn(4).Container().Element(childB); + row.RelativeColumn(6).Element(childA); + row.RelativeColumn(4).Element(childB); row.RelativeColumn(2); }); stack.Item().Row(row => { - row.RelativeColumn(4).Container().Element(childC); - row.RelativeColumn(2).Container().Element(childD); + row.RelativeColumn(4).Element(childC); + row.RelativeColumn(2).Element(childD); row.RelativeColumn(6); }); stack.Item().Row(row => { - row.RelativeColumn(8).Container().Element(childE); + row.RelativeColumn(8).Element(childE); row.RelativeColumn(4); }); }); - structure.Should().BeEquivalentTo(expected); + TestPlan.CompareOperations(structure, expected); } [Test] @@ -94,33 +94,33 @@ namespace QuestPDF.UnitTests // assert var expected = new Container(); - expected.Container().Stack(stack => + expected.Stack(stack => { stack.Item().Row(row => { row.RelativeColumn(1); - row.RelativeColumn(6).Container().Element(childA); - row.RelativeColumn(4).Container().Element(childB); + row.RelativeColumn(6).Element(childA); + row.RelativeColumn(4).Element(childB); row.RelativeColumn(1); }); stack.Item().Row(row => { row.RelativeColumn(3); - row.RelativeColumn(4).Container().Element(childC); - row.RelativeColumn(2).Container().Element(childD); + row.RelativeColumn(4).Element(childC); + row.RelativeColumn(2).Element(childD); row.RelativeColumn(3); }); stack.Item().Row(row => { row.RelativeColumn(2); - row.RelativeColumn(8).Container().Element(childE); + row.RelativeColumn(8).Element(childE); row.RelativeColumn(2); }); }); - structure.Should().BeEquivalentTo(expected); + TestPlan.CompareOperations(structure, expected); } [Test] @@ -151,30 +151,30 @@ namespace QuestPDF.UnitTests // assert var expected = new Container(); - expected.Container().Stack(stack => + expected.Stack(stack => { stack.Item().Row(row => { row.RelativeColumn(2); - row.RelativeColumn(6).Container().Element(childA); - row.RelativeColumn(4).Container().Element(childB); + row.RelativeColumn(6).Element(childA); + row.RelativeColumn(4).Element(childB); }); stack.Item().Row(row => { row.RelativeColumn(6); - row.RelativeColumn(4).Container().Element(childC); - row.RelativeColumn(2).Container().Element(childD); + row.RelativeColumn(4).Element(childC); + row.RelativeColumn(2).Element(childD); }); stack.Item().Row(row => { row.RelativeColumn(4); - row.RelativeColumn(8).Container().Element(childE); + row.RelativeColumn(8).Element(childE); }); }); - structure.Should().BeEquivalentTo(expected); + TestPlan.CompareOperations(structure, expected); } #endregion @@ -211,7 +211,7 @@ namespace QuestPDF.UnitTests // assert var expected = new Container(); - expected.Container().Stack(stack => + expected.Stack(stack => { stack.Spacing(20); @@ -220,8 +220,8 @@ namespace QuestPDF.UnitTests row.Spacing(30); row.RelativeColumn(3); - row.RelativeColumn(5).Container().Element(childA); - row.RelativeColumn(5).Container().Element(childB); + row.RelativeColumn(5).Element(childA); + row.RelativeColumn(5).Element(childB); row.RelativeColumn(3); }); @@ -230,7 +230,7 @@ namespace QuestPDF.UnitTests row.Spacing(30); row.RelativeColumn(3); - row.RelativeColumn(10).Container().Element(childC); + row.RelativeColumn(10).Element(childC); row.RelativeColumn(3); }); @@ -239,12 +239,12 @@ namespace QuestPDF.UnitTests row.Spacing(30); row.RelativeColumn(2); - row.RelativeColumn(12).Container().Element(childD); + row.RelativeColumn(12).Element(childD); row.RelativeColumn(2); }); }); - structure.Should().BeEquivalentTo(expected); + TestPlan.CompareOperations(structure, expected); } #endregion diff --git a/QuestPDF.UnitTests/InternalLinkTests.cs b/QuestPDF.UnitTests/InternalLinkTests.cs new file mode 100644 index 0000000..bd52d1c --- /dev/null +++ b/QuestPDF.UnitTests/InternalLinkTests.cs @@ -0,0 +1,15 @@ +using NUnit.Framework; +using QuestPDF.Elements; +using QuestPDF.UnitTests.TestEngine; + +namespace QuestPDF.UnitTests +{ + [TestFixture] + public class InternalLinkTests + { + [Test] + public void Measure() => SimpleContainerTests.Measure(); + + // TODO: consider tests for the Draw method + } +} \ No newline at end of file diff --git a/QuestPDF.UnitTests/InternalLocationTests.cs b/QuestPDF.UnitTests/InternalLocationTests.cs new file mode 100644 index 0000000..8a21fcb --- /dev/null +++ b/QuestPDF.UnitTests/InternalLocationTests.cs @@ -0,0 +1,15 @@ +using NUnit.Framework; +using QuestPDF.Elements; +using QuestPDF.UnitTests.TestEngine; + +namespace QuestPDF.UnitTests +{ + [TestFixture] + public class InternalLocationTests + { + [Test] + public void Measure() => SimpleContainerTests.Measure(); + + // TODO: consider tests for the Draw method + } +} \ No newline at end of file diff --git a/QuestPDF.UnitTests/RowTests.cs b/QuestPDF.UnitTests/RowTests.cs index c49c84d..9b8a970 100644 --- a/QuestPDF.UnitTests/RowTests.cs +++ b/QuestPDF.UnitTests/RowTests.cs @@ -1,6 +1,7 @@ using NUnit.Framework; using QuestPDF.Drawing.SpacePlan; using QuestPDF.Elements; +using QuestPDF.Fluent; using QuestPDF.Infrastructure; using QuestPDF.UnitTests.TestEngine; @@ -109,8 +110,158 @@ namespace QuestPDF.UnitTests #endregion - // TODO: add tests for the spacing property - // TODO: add tests for the tree builder method - // TODO: add tests for relative column + #region Structure + + [Test] + public void Structure_RelativeColumnsHandling() + { + // arrange + var childA = TestPlan.CreateUniqueElement(); + var childB = TestPlan.CreateUniqueElement(); + var childC = TestPlan.CreateUniqueElement(); + var childD = TestPlan.CreateUniqueElement(); + var childE = TestPlan.CreateUniqueElement(); + + const int spacing = 25; + var availableSpace = new Size(1100, 400); + + // act + var value = new Container(); + + value.Row(row => + { + row.Spacing(spacing); + + row.ConstantColumn(150).Element(childA); + row.ConstantColumn(250).Element(childB); + row.RelativeColumn(1).Element(childC); + row.RelativeColumn(2).Element(childD); + row.RelativeColumn(3).Element(childE); + }); + + // assert + var expected = new Container(); + + expected.Row(row => + { + row.Spacing(spacing); + + row.ConstantColumn(150).Element(childA); + row.ConstantColumn(250).Element(childB); + row.ConstantColumn(100).Element(childC); + row.ConstantColumn(200).Element(childD); + row.ConstantColumn(300).Element(childE); + }); + + TestPlan.CompareOperations(value, expected, availableSpace); + } + + [Test] + public void Structure_Tree() + { + // arrange + var childA = TestPlan.CreateUniqueElement(); + var childB = TestPlan.CreateUniqueElement(); + var childC = TestPlan.CreateUniqueElement(); + var childD = TestPlan.CreateUniqueElement(); + var childE = TestPlan.CreateUniqueElement(); + + const int spacing = 25; + var availableSpace = new Size(1200, 400); + + // act + var value = new Container(); + + value.Row(row => + { + row.Spacing(spacing); + + row.ConstantColumn(150).Element(childA); + row.ConstantColumn(200).Element(childB); + row.ConstantColumn(250).Element(childC); + row.RelativeColumn(2).Element(childD); + row.RelativeColumn(3).Element(childE); + }); + + // assert + var expected = new SimpleRow + { + Left = new SimpleRow + { + Left = new SimpleRow + { + Left = new Constrained + { + MinWidth = 150, + MaxWidth = 150, + Child = childA + }, + Right = new Constrained + { + MinWidth = 25, + MaxWidth = 25 + } + }, + Right = new SimpleRow + { + Left = new Constrained + { + MinWidth = 200, + MaxWidth = 200, + Child = childB + }, + Right = new Constrained + { + MinWidth = 25, + MaxWidth = 25 + } + } + }, + Right = new SimpleRow + { + Left = new SimpleRow + { + Left = new Constrained + { + MinWidth = 250, + MaxWidth = 250, + Child = childC + }, + Right = new Constrained + { + MinWidth = 25, + MaxWidth = 25 + } + }, + Right = new SimpleRow + { + Left = new Constrained + { + MinWidth = 200, + MaxWidth = 200, + Child = childD + }, + Right = new SimpleRow + { + Left = new Constrained + { + MinWidth = 25, + MaxWidth = 25 + }, + Right = new Constrained + { + MinWidth = 300, + MaxWidth = 300, + Child = childE + } + } + } + } + }; + + TestPlan.CompareOperations(value, expected, availableSpace); + } + + #endregion } } \ No newline at end of file diff --git a/QuestPDF.UnitTests/StackTests.cs b/QuestPDF.UnitTests/StackTests.cs index 134810b..6e261f5 100644 --- a/QuestPDF.UnitTests/StackTests.cs +++ b/QuestPDF.UnitTests/StackTests.cs @@ -1,6 +1,8 @@ -using NUnit.Framework; +using FluentAssertions; +using NUnit.Framework; using QuestPDF.Drawing.SpacePlan; using QuestPDF.Elements; +using QuestPDF.Fluent; using QuestPDF.Infrastructure; using QuestPDF.UnitTests.TestEngine; @@ -229,7 +231,81 @@ namespace QuestPDF.UnitTests #endregion - // TODO: add tests for the spacing property - // TODO: add tests for the tree builder method + #region Structure + + [Test] + public void Structure_Simple() + { + // arrange + var childA = TestPlan.CreateUniqueElement(); + var childB = TestPlan.CreateUniqueElement(); + var childC = TestPlan.CreateUniqueElement(); + var childD = TestPlan.CreateUniqueElement(); + var childE = TestPlan.CreateUniqueElement(); + + const int spacing = 20; + + // act + var structure = new Container(); + + structure.Stack(stack => + { + stack.Spacing(spacing); + + stack.Item().Element(childA); + stack.Item().Element(childB); + stack.Item().Element(childC); + stack.Item().Element(childD); + stack.Item().Element(childE); + }); + + // assert + var expected = new Padding + { + Bottom = -spacing, + + Child = new SimpleStack + { + First = new SimpleStack + { + First = new Padding + { + Bottom = spacing, + Child = childA + }, + Second = new Padding + { + Bottom = spacing, + Child = childB + } + }, + Second = new SimpleStack + { + First = new Padding + { + Bottom = spacing, + Child = childC + }, + Second = new SimpleStack + { + First = new Padding + { + Bottom = spacing, + Child = childD + }, + Second = new Padding + { + Bottom = spacing, + Child = childE + } + } + } + } + }; + + TestPlan.CompareOperations(structure, expected); + } + + #endregion } } \ No newline at end of file diff --git a/QuestPDF.UnitTests/TestEngine/CanvasMock.cs b/QuestPDF.UnitTests/TestEngine/MockCanvas.cs similarity index 64% rename from QuestPDF.UnitTests/TestEngine/CanvasMock.cs rename to QuestPDF.UnitTests/TestEngine/MockCanvas.cs index e399678..fbed591 100644 --- a/QuestPDF.UnitTests/TestEngine/CanvasMock.cs +++ b/QuestPDF.UnitTests/TestEngine/MockCanvas.cs @@ -4,7 +4,7 @@ using SkiaSharp; namespace QuestPDF.UnitTests.TestEngine { - internal class CanvasMock : ICanvas + internal class MockCanvas : ICanvas { public Action TranslateFunc { get; set; } public Action RotateFunc { get; set; } @@ -21,29 +21,8 @@ namespace QuestPDF.UnitTests.TestEngine public void DrawText(string text, Position position, TextStyle style) => DrawTextFunc(text, position, style); public void DrawImage(SKImage image, Position position, Size size) => DrawImageFunc(image, position, size); - public void DrawExternalLink(string url, Size size) - { - throw new NotImplementedException(); - } - - public void DrawLocationLink(string locationName, Size size) - { - throw new NotImplementedException(); - } - - public void DrawLocation(string locationName) - { - throw new NotImplementedException(); - } - - public void DrawLink(string url, Size size) - { - throw new NotImplementedException(); - } - - public Size MeasureText(string text, TextStyle style) - { - return new Size(text.Length * style.Size, style.Size); - } + public void DrawExternalLink(string url, Size size) => throw new NotImplementedException(); + public void DrawLocationLink(string locationName, Size size) => throw new NotImplementedException(); + public void DrawLocation(string locationName) => throw new NotImplementedException(); } } \ No newline at end of file diff --git a/QuestPDF.UnitTests/TestEngine/OperationRecordingCanvas.cs b/QuestPDF.UnitTests/TestEngine/OperationRecordingCanvas.cs new file mode 100644 index 0000000..3617052 --- /dev/null +++ b/QuestPDF.UnitTests/TestEngine/OperationRecordingCanvas.cs @@ -0,0 +1,25 @@ +using System; +using System.Collections.Generic; +using QuestPDF.Infrastructure; +using QuestPDF.UnitTests.TestEngine.Operations; +using SkiaSharp; + +namespace QuestPDF.UnitTests.TestEngine +{ + internal class OperationRecordingCanvas : ICanvas + { + public ICollection Operations { get; } = new List(); + + public void Translate(Position vector) => Operations.Add(new CanvasTranslateOperation(vector)); + public void Rotate(float angle) => Operations.Add(new CanvasRotateOperation(angle)); + public void Scale(float scaleX, float scaleY) => Operations.Add(new CanvasScaleOperation(scaleX, scaleY)); + + public void DrawRectangle(Position vector, Size size, string color) => Operations.Add(new CanvasDrawRectangleOperation(vector, size, color)); + public void DrawText(string text, Position position, TextStyle style) => Operations.Add(new CanvasDrawTextOperation(text, position, style)); + public void DrawImage(SKImage image, Position position, Size size) => Operations.Add(new CanvasDrawImageOperation(position, size)); + + public void DrawExternalLink(string url, Size size) => throw new NotImplementedException(); + public void DrawLocationLink(string locationName, Size size) => throw new NotImplementedException(); + public void DrawLocation(string locationName) => throw new NotImplementedException(); + } +} \ No newline at end of file diff --git a/QuestPDF.UnitTests/TestEngine/Operations/CanvasDrawImageOperation.cs b/QuestPDF.UnitTests/TestEngine/Operations/CanvasDrawImageOperation.cs index 7f0bdde..682a668 100644 --- a/QuestPDF.UnitTests/TestEngine/Operations/CanvasDrawImageOperation.cs +++ b/QuestPDF.UnitTests/TestEngine/Operations/CanvasDrawImageOperation.cs @@ -2,12 +2,12 @@ namespace QuestPDF.UnitTests.TestEngine.Operations { - internal class CanvasDrawImageOperationBase : OperationBase + internal class CanvasDrawImageOperation : OperationBase { public Position Position { get; } public Size Size { get; } - public CanvasDrawImageOperationBase(Position position, Size size) + public CanvasDrawImageOperation(Position position, Size size) { Position = position; Size = size; diff --git a/QuestPDF.UnitTests/TestEngine/Operations/CanvasDrawRectangleOperation.cs b/QuestPDF.UnitTests/TestEngine/Operations/CanvasDrawRectangleOperation.cs index a648b2c..0b1cd98 100644 --- a/QuestPDF.UnitTests/TestEngine/Operations/CanvasDrawRectangleOperation.cs +++ b/QuestPDF.UnitTests/TestEngine/Operations/CanvasDrawRectangleOperation.cs @@ -2,13 +2,13 @@ namespace QuestPDF.UnitTests.TestEngine.Operations { - internal class CanvasDrawRectangleOperationBase : OperationBase + internal class CanvasDrawRectangleOperation : OperationBase { public Position Position { get; } public Size Size { get; } public string Color { get; } - public CanvasDrawRectangleOperationBase(Position position, Size size, string color) + public CanvasDrawRectangleOperation(Position position, Size size, string color) { Position = position; Size = size; diff --git a/QuestPDF.UnitTests/TestEngine/Operations/CanvasDrawTextOperation.cs b/QuestPDF.UnitTests/TestEngine/Operations/CanvasDrawTextOperation.cs index 74b2b60..dd9b2ef 100644 --- a/QuestPDF.UnitTests/TestEngine/Operations/CanvasDrawTextOperation.cs +++ b/QuestPDF.UnitTests/TestEngine/Operations/CanvasDrawTextOperation.cs @@ -2,13 +2,13 @@ namespace QuestPDF.UnitTests.TestEngine.Operations { - internal class CanvasDrawTextOperationBase : OperationBase + internal class CanvasDrawTextOperation : OperationBase { public string Text { get; } public Position Position { get; } public TextStyle Style { get; } - public CanvasDrawTextOperationBase(string text, Position position, TextStyle style) + public CanvasDrawTextOperation(string text, Position position, TextStyle style) { Text = text; Position = position; diff --git a/QuestPDF.UnitTests/TestEngine/Operations/CanvasTranslateOperation.cs b/QuestPDF.UnitTests/TestEngine/Operations/CanvasTranslateOperation.cs index 0e387a7..0599c1f 100644 --- a/QuestPDF.UnitTests/TestEngine/Operations/CanvasTranslateOperation.cs +++ b/QuestPDF.UnitTests/TestEngine/Operations/CanvasTranslateOperation.cs @@ -2,11 +2,11 @@ namespace QuestPDF.UnitTests.TestEngine.Operations { - internal class CanvasTranslateOperationBase : OperationBase + internal class CanvasTranslateOperation : OperationBase { public Position Position { get; } - public CanvasTranslateOperationBase(Position position) + public CanvasTranslateOperation(Position position) { Position = position; } diff --git a/QuestPDF.UnitTests/TestEngine/Operations/ChildDrawOperation.cs b/QuestPDF.UnitTests/TestEngine/Operations/ChildDrawOperation.cs index d1928e0..792aca8 100644 --- a/QuestPDF.UnitTests/TestEngine/Operations/ChildDrawOperation.cs +++ b/QuestPDF.UnitTests/TestEngine/Operations/ChildDrawOperation.cs @@ -2,12 +2,12 @@ namespace QuestPDF.UnitTests.TestEngine.Operations { - public class ChildDrawOperationBase : OperationBase + public class ChildDrawOperation : OperationBase { public string ChildId { get; } public Size Input { get; } - public ChildDrawOperationBase(string childId, Size input) + public ChildDrawOperation(string childId, Size input) { ChildId = childId; Input = input; diff --git a/QuestPDF.UnitTests/TestEngine/Operations/ChildMeasureOperation.cs b/QuestPDF.UnitTests/TestEngine/Operations/ChildMeasureOperation.cs index 323c2dd..bc7b141 100644 --- a/QuestPDF.UnitTests/TestEngine/Operations/ChildMeasureOperation.cs +++ b/QuestPDF.UnitTests/TestEngine/Operations/ChildMeasureOperation.cs @@ -3,13 +3,13 @@ using QuestPDF.Infrastructure; namespace QuestPDF.UnitTests.TestEngine.Operations { - internal class ChildMeasureOperationBase : OperationBase + internal class ChildMeasureOperation : OperationBase { public string ChildId { get; } public Size Input { get; } public ISpacePlan Output { get; } - public ChildMeasureOperationBase(string childId, Size input, ISpacePlan output) + public ChildMeasureOperation(string childId, Size input, ISpacePlan output) { ChildId = childId; Input = input; diff --git a/QuestPDF.UnitTests/TestEngine/Operations/ElementMeasureOperation.cs b/QuestPDF.UnitTests/TestEngine/Operations/ElementMeasureOperation.cs index 8e4df23..cb8f0a8 100644 --- a/QuestPDF.UnitTests/TestEngine/Operations/ElementMeasureOperation.cs +++ b/QuestPDF.UnitTests/TestEngine/Operations/ElementMeasureOperation.cs @@ -2,9 +2,9 @@ namespace QuestPDF.UnitTests.TestEngine.Operations { - public class ElementMeasureOperationBase : OperationBase + public class ElementMeasureOperation : OperationBase { - public ElementMeasureOperationBase(Size input) + public ElementMeasureOperation(Size input) { } diff --git a/QuestPDF.UnitTests/TestEngine/TestPlan.cs b/QuestPDF.UnitTests/TestEngine/TestPlan.cs index cfe176d..329d67c 100644 --- a/QuestPDF.UnitTests/TestEngine/TestPlan.cs +++ b/QuestPDF.UnitTests/TestEngine/TestPlan.cs @@ -1,7 +1,9 @@ using System; using System.Collections.Generic; using System.Text.Json; +using FluentAssertions; using NUnit.Framework; +using QuestPDF.Drawing; using QuestPDF.Drawing.SpacePlan; using QuestPDF.Elements; using QuestPDF.Infrastructure; @@ -12,6 +14,8 @@ namespace QuestPDF.UnitTests.TestEngine internal class TestPlan { private const string DefaultChildName = "child"; + + private static Random Random { get; } = new Random(); private Element Element { get; set; } private ICanvas Canvas { get; } @@ -44,24 +48,20 @@ namespace QuestPDF.UnitTests.TestEngine private ICanvas CreateCanvas() { - return new CanvasMock + return new MockCanvas { TranslateFunc = position => { - var expected = GetExpected(); + var expected = GetExpected(); Assert.AreEqual(expected.Position.X, position.X, "Translate X"); Assert.AreEqual(expected.Position.Y, position.Y, "Translate Y"); - - //position.Should().BeEquivalentTo(expected.Position); }, RotateFunc = angle => { var expected = GetExpected(); Assert.AreEqual(expected.Angle, angle, "Rotate angle"); - - //position.Should().BeEquivalentTo(expected.Position); }, ScaleFunc = (scaleX, scaleY) => { @@ -69,12 +69,10 @@ namespace QuestPDF.UnitTests.TestEngine Assert.AreEqual(expected.ScaleX, scaleX, "Scale X"); Assert.AreEqual(expected.ScaleY, scaleY, "Scale Y"); - - //position.Should().BeEquivalentTo(expected.Position); }, DrawRectFunc = (position, size, color) => { - var expected = GetExpected(); + var expected = GetExpected(); Assert.AreEqual(expected.Position.X, position.X, "Draw rectangle: X"); Assert.AreEqual(expected.Position.Y, position.Y, "Draw rectangle: Y"); @@ -83,14 +81,10 @@ namespace QuestPDF.UnitTests.TestEngine Assert.AreEqual(expected.Size.Height, size.Height, "Draw rectangle: height"); Assert.AreEqual(expected.Color, color, "Draw rectangle: color"); - - /*position.Should().BeEquivalentTo(expected.Position); - size.Should().BeEquivalentTo(expected.Size); - color.Should().Be(expected.Color);*/ }, DrawTextFunc = (text, position, style) => { - var expected = GetExpected(); + var expected = GetExpected(); Assert.AreEqual(expected.Text, text); @@ -100,23 +94,16 @@ namespace QuestPDF.UnitTests.TestEngine Assert.AreEqual(expected.Style.Color, style.Color, "Draw text: color"); Assert.AreEqual(expected.Style.FontType, style.FontType, "Draw text: font"); Assert.AreEqual(expected.Style.Size, style.Size, "Draw text: size"); - - /*text.Should().Be(expected.Text); - position.Should().BeEquivalentTo(expected.Position); - style.Should().BeEquivalentTo(expected.Style);*/ }, DrawImageFunc = (image, position, size) => { - var expected = GetExpected(); + var expected = GetExpected(); Assert.AreEqual(expected.Position.X, position.X, "Draw image: X"); Assert.AreEqual(expected.Position.Y, position.Y, "Draw image: Y"); Assert.AreEqual(expected.Size.Width, size.Width, "Draw image: width"); Assert.AreEqual(expected.Size.Height, size.Height, "Draw image: height"); - - /*position.Should().BeEquivalentTo(expected.Position); - size.Should().BeEquivalentTo(expected.Size);*/ } }; } @@ -130,29 +117,23 @@ namespace QuestPDF.UnitTests.TestEngine Id = id, MeasureFunc = availableSpace => { - var expected = GetExpected(); + var expected = GetExpected(); Assert.AreEqual(expected.ChildId, id); Assert.AreEqual(expected.Input.Width, availableSpace.Width, $"Measure: width of child '{expected.ChildId}'"); Assert.AreEqual(expected.Input.Height, availableSpace.Height, $"Measure: height of child '{expected.ChildId}'"); - // id.Should().Be(expected.ChildId); - // availableSpace.Should().Be(expected.Input); - return expected.Output; }, DrawFunc = availableSpace => { - var expected = GetExpected(); + var expected = GetExpected(); Assert.AreEqual(expected.ChildId, id); Assert.AreEqual(expected.Input.Width, availableSpace.Width, $"Draw: width of child '{expected.ChildId}'"); Assert.AreEqual(expected.Input.Height, availableSpace.Height, $"Draw: width of child '{expected.ChildId}'"); - - /*id.Should().Be(expected.ChildId); - availableSpace.Should().Be(expected.Input);*/ } }; } @@ -182,7 +163,7 @@ namespace QuestPDF.UnitTests.TestEngine public TestPlan ExpectChildMeasure(string child, Size expectedInput, ISpacePlan returns) { - return AddOperation(new ChildMeasureOperationBase(child, expectedInput, returns)); + return AddOperation(new ChildMeasureOperation(child, expectedInput, returns)); } public TestPlan ExpectChildDraw(Size expectedInput) @@ -192,17 +173,17 @@ namespace QuestPDF.UnitTests.TestEngine public TestPlan ExpectChildDraw(string child, Size expectedInput) { - return AddOperation(new ChildDrawOperationBase(child, expectedInput)); + return AddOperation(new ChildDrawOperation(child, expectedInput)); } public TestPlan ExpectCanvasTranslate(Position position) { - return AddOperation(new CanvasTranslateOperationBase(position)); + return AddOperation(new CanvasTranslateOperation(position)); } public TestPlan ExpectCanvasTranslate(float left, float top) { - return AddOperation(new CanvasTranslateOperationBase(new Position(left, top))); + return AddOperation(new CanvasTranslateOperation(new Position(left, top))); } public TestPlan ExpectCanvasScale(float scaleX, float scaleY) @@ -217,17 +198,17 @@ namespace QuestPDF.UnitTests.TestEngine public TestPlan ExpectCanvasDrawRectangle(Position position, Size size, string color) { - return AddOperation(new CanvasDrawRectangleOperationBase(position, size, color)); + return AddOperation(new CanvasDrawRectangleOperation(position, size, color)); } public TestPlan ExpectCanvasDrawText(string text, Position position, TextStyle style) { - return AddOperation(new CanvasDrawTextOperationBase(text, position, style)); + return AddOperation(new CanvasDrawTextOperation(text, position, style)); } public TestPlan ExpectCanvasDrawImage(Position position, Size size) { - return AddOperation(new CanvasDrawImageOperationBase(position, size)); + return AddOperation(new CanvasDrawImageOperation(position, size)); } public TestPlan CheckMeasureResult(ISpacePlan expected) @@ -272,10 +253,47 @@ namespace QuestPDF.UnitTests.TestEngine public static Element CreateUniqueElement() { - return new Text + var value = Random.Next(0x1000000); + + return new Background { - Value = Guid.NewGuid().ToString("N") + Color = $"#{value:X6}" }; } + + public static void CompareOperations(Element value, Element expected, Size? availableSpace = null) + { + CompareMeasureOperations(value, expected, availableSpace); + CompareDrawOperations(value, expected, availableSpace); + } + + private static void CompareMeasureOperations(Element value, Element expected, Size? availableSpace = null) + { + availableSpace ??= new Size(400, 300); + + var canvas = new FreeCanvas(); + value.HandleVisitor(x => x.Initialize(null, canvas)); + var valueMeasure = value.Measure(availableSpace); + + expected.HandleVisitor(x => x.Initialize(null, canvas)); + var expectedMeasure = expected.Measure(availableSpace); + + valueMeasure.Should().BeEquivalentTo(expectedMeasure); + } + + private static void CompareDrawOperations(Element value, Element expected, Size? availableSpace = null) + { + availableSpace ??= new Size(400, 300); + + var valueCanvas = new OperationRecordingCanvas(); + value.HandleVisitor(x => x.Initialize(null, valueCanvas)); + value.Draw(availableSpace); + + var expectedCanvas = new OperationRecordingCanvas(); + expected.HandleVisitor(x => x.Initialize(null, expectedCanvas)); + expected.Draw(availableSpace); + + valueCanvas.Operations.Should().BeEquivalentTo(expectedCanvas.Operations); + } } } \ No newline at end of file diff --git a/QuestPDF.UnitTests/TestsBase.cs b/QuestPDF.UnitTests/TestsBase.cs index c5fcc48..0a477d4 100644 --- a/QuestPDF.UnitTests/TestsBase.cs +++ b/QuestPDF.UnitTests/TestsBase.cs @@ -12,6 +12,7 @@ namespace QuestPDF.UnitTests AssertionOptions.AssertEquivalencyUsing(options => options .IncludingNestedObjects() .IncludingInternalProperties() + .IncludingInternalFields() .AllowingInfiniteRecursion() .RespectingRuntimeTypes() .WithTracing() diff --git a/QuestPDF/Elements/Grid.cs b/QuestPDF/Elements/Grid.cs index 5f08722..4649ac4 100644 --- a/QuestPDF/Elements/Grid.cs +++ b/QuestPDF/Elements/Grid.cs @@ -16,7 +16,7 @@ namespace QuestPDF.Elements { public const int DefaultColumnsCount = 12; - public List Children { get; set; } = new List(); + public List Children { get; } = new List(); public Queue ChildrenQueue { get; set; } = new Queue(); public int ColumnsCount { get; set; } = DefaultColumnsCount; diff --git a/QuestPDF/Elements/Stack.cs b/QuestPDF/Elements/Stack.cs index 43227b0..7df26ed 100644 --- a/QuestPDF/Elements/Stack.cs +++ b/QuestPDF/Elements/Stack.cs @@ -92,7 +92,7 @@ namespace QuestPDF.Elements internal class Stack : IComponent { - public ICollection Children { get; internal set; } = new List(); + public ICollection Children { get; } = new List(); public float Spacing { get; set; } = 0; public void Compose(IContainer container)