|
|
|
@ -1,7 +1,8 @@ |
|
|
|
// Copyright (c) The Avalonia Project. All rights reserved.
|
|
|
|
// Licensed under the MIT license. See licence.md file in the project root for full license information.
|
|
|
|
|
|
|
|
using Avalonia.Controls; |
|
|
|
using System.Linq; |
|
|
|
using Avalonia.Layout; |
|
|
|
using Xunit; |
|
|
|
|
|
|
|
namespace Avalonia.Controls.UnitTests |
|
|
|
@ -147,6 +148,151 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
Assert.Equal(new Rect(50, 0, 50, 120), target.Children[2].Bounds); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Arranges_Vertical_Children_With_Correct_Bounds() |
|
|
|
{ |
|
|
|
var target = new StackPanel |
|
|
|
{ |
|
|
|
Orientation = Orientation.Vertical, |
|
|
|
Children = |
|
|
|
{ |
|
|
|
new TestControl |
|
|
|
{ |
|
|
|
HorizontalAlignment = HorizontalAlignment.Left, |
|
|
|
MeasureSize = new Size(50, 10), |
|
|
|
}, |
|
|
|
new TestControl |
|
|
|
{ |
|
|
|
HorizontalAlignment = HorizontalAlignment.Left, |
|
|
|
MeasureSize = new Size(150, 10), |
|
|
|
}, |
|
|
|
new TestControl |
|
|
|
{ |
|
|
|
HorizontalAlignment = HorizontalAlignment.Center, |
|
|
|
MeasureSize = new Size(50, 10), |
|
|
|
}, |
|
|
|
new TestControl |
|
|
|
{ |
|
|
|
HorizontalAlignment = HorizontalAlignment.Center, |
|
|
|
MeasureSize = new Size(150, 10), |
|
|
|
}, |
|
|
|
new TestControl |
|
|
|
{ |
|
|
|
HorizontalAlignment = HorizontalAlignment.Right, |
|
|
|
MeasureSize = new Size(50, 10), |
|
|
|
}, |
|
|
|
new TestControl |
|
|
|
{ |
|
|
|
HorizontalAlignment = HorizontalAlignment.Right, |
|
|
|
MeasureSize = new Size(150, 10), |
|
|
|
}, |
|
|
|
new TestControl |
|
|
|
{ |
|
|
|
HorizontalAlignment = HorizontalAlignment.Stretch, |
|
|
|
MeasureSize = new Size(50, 10), |
|
|
|
}, |
|
|
|
new TestControl |
|
|
|
{ |
|
|
|
HorizontalAlignment = HorizontalAlignment.Stretch, |
|
|
|
MeasureSize = new Size(150, 10), |
|
|
|
}, |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
target.Measure(new Size(100, 150)); |
|
|
|
Assert.Equal(new Size(100, 80), target.DesiredSize); |
|
|
|
|
|
|
|
target.Arrange(new Rect(target.DesiredSize)); |
|
|
|
|
|
|
|
var bounds = target.Children.Select(x => x.Bounds).ToArray(); |
|
|
|
|
|
|
|
Assert.Equal( |
|
|
|
new[] |
|
|
|
{ |
|
|
|
new Rect(0, 0, 50, 10), |
|
|
|
new Rect(0, 10, 150, 10), |
|
|
|
new Rect(25, 20, 50, 10), |
|
|
|
new Rect(-25, 30, 150, 10), |
|
|
|
new Rect(50, 40, 50, 10), |
|
|
|
new Rect(-50, 50, 150, 10), |
|
|
|
new Rect(0, 60, 100, 10), |
|
|
|
new Rect(0, 70, 150, 10), |
|
|
|
|
|
|
|
}, bounds); |
|
|
|
} |
|
|
|
|
|
|
|
[Fact] |
|
|
|
public void Arranges_Horizontal_Children_With_Correct_Bounds() |
|
|
|
{ |
|
|
|
var target = new StackPanel |
|
|
|
{ |
|
|
|
Orientation = Orientation.Horizontal, |
|
|
|
Children = |
|
|
|
{ |
|
|
|
new TestControl |
|
|
|
{ |
|
|
|
VerticalAlignment = VerticalAlignment.Top, |
|
|
|
MeasureSize = new Size(10, 50), |
|
|
|
}, |
|
|
|
new TestControl |
|
|
|
{ |
|
|
|
VerticalAlignment = VerticalAlignment.Top, |
|
|
|
MeasureSize = new Size(10, 150), |
|
|
|
}, |
|
|
|
new TestControl |
|
|
|
{ |
|
|
|
VerticalAlignment = VerticalAlignment.Center, |
|
|
|
MeasureSize = new Size(10, 50), |
|
|
|
}, |
|
|
|
new TestControl |
|
|
|
{ |
|
|
|
VerticalAlignment = VerticalAlignment.Center, |
|
|
|
MeasureSize = new Size(10, 150), |
|
|
|
}, |
|
|
|
new TestControl |
|
|
|
{ |
|
|
|
VerticalAlignment = VerticalAlignment.Bottom, |
|
|
|
MeasureSize = new Size(10, 50), |
|
|
|
}, |
|
|
|
new TestControl |
|
|
|
{ |
|
|
|
VerticalAlignment = VerticalAlignment.Bottom, |
|
|
|
MeasureSize = new Size(10, 150), |
|
|
|
}, |
|
|
|
new TestControl |
|
|
|
{ |
|
|
|
VerticalAlignment = VerticalAlignment.Stretch, |
|
|
|
MeasureSize = new Size(10, 50), |
|
|
|
}, |
|
|
|
new TestControl |
|
|
|
{ |
|
|
|
VerticalAlignment = VerticalAlignment.Stretch, |
|
|
|
MeasureSize = new Size(10, 150), |
|
|
|
}, |
|
|
|
} |
|
|
|
}; |
|
|
|
|
|
|
|
target.Measure(new Size(150, 100)); |
|
|
|
Assert.Equal(new Size(80, 100), target.DesiredSize); |
|
|
|
|
|
|
|
target.Arrange(new Rect(target.DesiredSize)); |
|
|
|
|
|
|
|
var bounds = target.Children.Select(x => x.Bounds).ToArray(); |
|
|
|
|
|
|
|
Assert.Equal( |
|
|
|
new[] |
|
|
|
{ |
|
|
|
new Rect(0, 0, 10, 50), |
|
|
|
new Rect(10, 0, 10, 150), |
|
|
|
new Rect(20, 25, 10, 50), |
|
|
|
new Rect(30, -25, 10, 150), |
|
|
|
new Rect(40, 50, 10, 50), |
|
|
|
new Rect(50, -50, 10, 150), |
|
|
|
new Rect(60, 0, 10, 100), |
|
|
|
new Rect(70, 0, 10, 150), |
|
|
|
}, bounds); |
|
|
|
} |
|
|
|
|
|
|
|
[Theory] |
|
|
|
[InlineData(Orientation.Horizontal)] |
|
|
|
[InlineData(Orientation.Vertical)] |
|
|
|
@ -185,5 +331,17 @@ namespace Avalonia.Controls.UnitTests |
|
|
|
|
|
|
|
Assert.Equal(sizeWithTwoChildren, sizeWithThreeChildren); |
|
|
|
} |
|
|
|
|
|
|
|
private class TestControl : Control |
|
|
|
{ |
|
|
|
public Size MeasureConstraint { get; private set; } |
|
|
|
public Size MeasureSize { get; set; } |
|
|
|
|
|
|
|
protected override Size MeasureOverride(Size availableSize) |
|
|
|
{ |
|
|
|
MeasureConstraint = availableSize; |
|
|
|
return MeasureSize; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|