csharpc-sharpdotnetxamlavaloniauicross-platformcross-platform-xamlavaloniaguimulti-platformuser-interfacedotnetcore
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.
192 lines
6.6 KiB
192 lines
6.6 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.NotNull(target.RenderedGeometry);
|
|
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));
|
|
|
|
Assert.NotNull(target.RenderedGeometry);
|
|
|
|
if (expectedScaleX == 1 && expectedScaleY == 1)
|
|
{
|
|
Assert.Null(target.RenderedGeometry.Transform);
|
|
}
|
|
else
|
|
{
|
|
Assert.NotNull(target.RenderedGeometry.Transform);
|
|
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.NotNull(target.RenderedGeometry);
|
|
Assert.NotNull(target.RenderedGeometry.Transform);
|
|
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.NotNull(target.RenderedGeometry);
|
|
Assert.NotNull(target.RenderedGeometry.Transform);
|
|
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.NotNull(target.RenderedGeometry);
|
|
Assert.NotNull(target.RenderedGeometry.Transform);
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
|