A cross-platform UI framework for .NET
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

182 lines
6.1 KiB

using Avalonia.Controls.Shapes;
using Avalonia.Media;
using Avalonia.UnitTests;
using Xunit;
namespace Avalonia.Controls.UnitTests.Shapes
{
public class PathTests : ScopedTestBase
{
[Fact]
public void Path_With_Null_Data_Does_Not_Throw_On_Measure()
{
var target = new Path();
target.Measure(Size.Infinity);
}
[Fact]
public void Subscribes_To_Geometry_Changes()
{
using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
var geometry = new EllipseGeometry { Rect = new Rect(0, 0, 10, 10) };
var target = new Path { Data = geometry };
var root = new TestRoot(target);
target.Measure(Size.Infinity);
Assert.True(target.IsMeasureValid);
geometry.Rect = new Rect(0, 0, 20, 20);
Assert.False(target.IsMeasureValid);
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 Arrange_Reserves_All_Of_Arrange_Rect()
{
using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
RectangleGeometry geometry;
var target = new Path
{
Data = geometry = new RectangleGeometry { Rect = new Rect(0, 0, 100, 200) },
Stretch = Stretch.Uniform,
};
target.Measure(new Size(400, 400));
target.Arrange(new Rect(0, 0, 400, 400));
Assert.Equal(new Rect(0, 0, 100, 200), geometry.Rect);
Assert.Equal(Matrix.CreateScale(2, 2), target.RenderedGeometry.Transform.Value);
Assert.Equal(new Rect(0, 0, 400, 400), target.Bounds);
}
[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()
{
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.Arrange(new Rect(0, 0, 300, 300));
Assert.Equal(Matrix.CreateScale(3, 3), target.RenderedGeometry.Transform.Value);
}
}
}