|
|
|
@ -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() |
|
|
|
{ |
|
|
|
|