From 93f215d8eaca8fa1dd9f04fb562055f338afae02 Mon Sep 17 00:00:00 2001 From: Steven Kirk Date: Tue, 13 Oct 2020 16:47:50 +0200 Subject: [PATCH] More tests for #4822. Tested WPF's `Path` to confirm expected results: https://github.com/wieslawsoltes/WpfUnitTests --- .../Shapes/PathTests.cs | 108 +++++++++++++++++- 1 file changed, 106 insertions(+), 2 deletions(-) diff --git a/tests/Avalonia.Controls.UnitTests/Shapes/PathTests.cs b/tests/Avalonia.Controls.UnitTests/Shapes/PathTests.cs index 2a0bcc8d39..a10a03a5ae 100644 --- a/tests/Avalonia.Controls.UnitTests/Shapes/PathTests.cs +++ b/tests/Avalonia.Controls.UnitTests/Shapes/PathTests.cs @@ -1,5 +1,4 @@ -using System.Runtime.InteropServices; -using Avalonia.Controls.Shapes; +using Avalonia.Controls.Shapes; using Avalonia.Media; using Avalonia.UnitTests; using Xunit; @@ -36,6 +35,111 @@ namespace Avalonia.Controls.UnitTests.Shapes root.Child = null; } + [Theory] + [InlineData(Stretch.None, 100, 200)] + [InlineData(Stretch.Fill, 500, 500)] + [InlineData(Stretch.Uniform, 250, 500)] + [InlineData(Stretch.UniformToFill, 500, 500)] + public void Calculates_Correct_DesiredSize_For_Finite_Bounds(Stretch stretch, double expectedWidth, double expectedHeight) + { + using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface); + + var target = new Path() + { + Data = new RectangleGeometry { Rect = new Rect(0, 0, 100, 200) }, + Stretch = stretch, + }; + + target.Measure(new Size(500, 500)); + + Assert.Equal(new Size(expectedWidth, expectedHeight), target.DesiredSize); + } + + [Theory] + [InlineData(Stretch.None)] + [InlineData(Stretch.Fill)] + [InlineData(Stretch.Uniform)] + [InlineData(Stretch.UniformToFill)] + public void Calculates_Correct_DesiredSize_For_Infinite_Bounds(Stretch stretch) + { + using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface); + + var target = new Path() + { + Data = new RectangleGeometry { Rect = new Rect(0, 0, 100, 200) }, + Stretch = stretch, + }; + + target.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity)); + + Assert.Equal(new Size(100, 200), target.DesiredSize); + } + + [Fact] + public void Measure_Does_Not_Update_RenderedGeometry_Transform() + { + using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface); + + var target = new Path + { + Data = new RectangleGeometry { Rect = new Rect(0, 0, 100, 200) }, + Stretch = Stretch.Fill, + }; + + target.Measure(new Size(500, 500)); + + Assert.Null(target.RenderedGeometry.Transform); + } + + [Theory] + [InlineData(Stretch.None, 1, 1)] + [InlineData(Stretch.Fill, 5, 2.5)] + [InlineData(Stretch.Uniform, 2.5, 2.5)] + [InlineData(Stretch.UniformToFill, 5, 5)] + public void Arrange_Updates_RenderedGeometry_Transform(Stretch stretch, double expectedScaleX, double expectedScaleY) + { + using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface); + + var target = new Path + { + Data = new RectangleGeometry { Rect = new Rect(0, 0, 100, 200) }, + Stretch = stretch, + }; + + target.Measure(new Size(500, 500)); + target.Arrange(new Rect(0, 0, 500, 500)); + + if (expectedScaleX == 1 && expectedScaleY == 1) + { + Assert.Null(target.RenderedGeometry.Transform); + } + else + { + Assert.Equal(Matrix.CreateScale(expectedScaleX, expectedScaleY), target.RenderedGeometry.Transform.Value); + } + } + + [Fact] + public void Measure_Without_Arrange_Does_Not_Clear_RenderedGeometry_Transform() + { + using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface); + + var target = new Path + { + Data = new RectangleGeometry { Rect = new Rect(0, 0, 100, 100) }, + Stretch = Stretch.Fill, + }; + + target.Measure(new Size(200, 200)); + target.Arrange(new Rect(0, 0, 200, 200)); + + Assert.Equal(Matrix.CreateScale(2, 2), target.RenderedGeometry.Transform.Value); + + target.Measure(new Size(300, 300)); + + Assert.Equal(Matrix.CreateScale(2, 2), target.RenderedGeometry.Transform.Value); + } + [Fact] public void Arrange_Without_Measure_Updates_RenderedGeometry_Transform() {