| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 | 
							- using Avalonia.Controls;
 
- using Avalonia.Layout;
 
- using Avalonia.UnitTests;
 
- using Xunit;
 
- using Xunit.Sdk;
 
- namespace Avalonia.Base.UnitTests.Layout
 
- {
 
-     public class LayoutableTests_LayoutRounding
 
-     {
 
-         [Theory]
 
-         [InlineData(100, 100)]
 
-         [InlineData(101, 101.33333333333333)]
 
-         [InlineData(103, 103.33333333333333)]
 
-         public void Measure_Adjusts_DesiredSize_Upwards_When_Constraint_Allows(double desiredSize, double expectedSize)
 
-         {
 
-             var target = new TestLayoutable(new Size(desiredSize, desiredSize));
 
-             var root = CreateRoot(1.5, target);
 
-             root.LayoutManager.ExecuteInitialLayoutPass();
 
-             Assert.Equal(new Size(expectedSize, expectedSize), target.DesiredSize);
 
-         }
 
-         [Fact]
 
-         public void Measure_Constrains_Adjusted_DesiredSize_To_Constraint()
 
-         {
 
-             var target = new TestLayoutable(new Size(101, 101));
 
-             var root = CreateRoot(1.5, target, constraint: new Size(101, 101));
 
-             root.LayoutManager.ExecuteInitialLayoutPass();
 
-             // Desired width/height with layout rounding is 101.3333 but constraint is 101,101 so
 
-             // layout rounding should be ignored.
 
-             Assert.Equal(new Size(101, 101), target.DesiredSize);
 
-         }
 
-         [Fact]
 
-         public void Measure_Adjusts_DesiredSize_Upwards_When_Margin_Present()
 
-         {
 
-             var target = new TestLayoutable(new Size(101, 101), margin: 1);
 
-             var root = CreateRoot(1.5, target);
 
-             root.LayoutManager.ExecuteInitialLayoutPass();
 
-             // - 1 pixel margin is rounded up to 1.3333; for both sides it is 2.6666
 
-             // - Size of 101 gets rounded up to 101.3333
 
-             // - Final size = 101.3333 + 2.6666 = 104
 
-             AssertEqual(new Size(104, 104), target.DesiredSize);
 
-         }
 
-         [Fact]
 
-         public void Arrange_Adjusts_Bounds_Upwards_With_Margin()
 
-         {
 
-             var target = new TestLayoutable(new Size(101, 101), margin: 1);
 
-             var root = CreateRoot(1.5, target);
 
-             root.LayoutManager.ExecuteInitialLayoutPass();
 
-             // - 1 pixel margin is rounded up to 1.3333
 
-             // - Size of 101 gets rounded up to 101.3333
 
-             AssertEqual(new Point(1.3333333333333333, 1.3333333333333333), target.Bounds.Position);
 
-             AssertEqual(new Size(101.33333333333333, 101.33333333333333), target.Bounds.Size);
 
-         }
 
-         [Theory]
 
-         [InlineData(16, 6, 5.333333333333333)]
 
-         [InlineData(18, 10, 4)]
 
-         public void Arranges_Center_Alignment_Correctly_With_Fractional_Scaling(
 
-             double containerWidth,
 
-             double childWidth,
 
-             double expectedX)
 
-         {
 
-             Border target;
 
-             var root = new TestRoot
 
-             {
 
-                 LayoutScaling = 1.5,
 
-                 UseLayoutRounding = true,
 
-                 Child = new Decorator
 
-                 {
 
-                     Width = containerWidth,
 
-                     Height = 100,
 
-                     Child = target = new Border
 
-                     {
 
-                         Width = childWidth,
 
-                         HorizontalAlignment = HorizontalAlignment.Center,
 
-                     }
 
-                 }
 
-             };
 
-             root.Measure(new Size(100, 100));
 
-             root.Arrange(new Rect(target.DesiredSize));
 
-             Assert.Equal(new Rect(expectedX, 0, childWidth, 100), target.Bounds);
 
-         }
 
-         private static TestRoot CreateRoot(
 
-             double scaling,
 
-             Control child,
 
-             Size? constraint = null)
 
-         {
 
-             return new TestRoot
 
-             {
 
-                 LayoutScaling = scaling,
 
-                 UseLayoutRounding = true,
 
-                 Child = child,
 
-                 ClientSize = constraint ?? new Size(1000, 1000),
 
-             };
 
-         }
 
-         private static void AssertEqual(Point expected, Point actual)
 
-         {
 
-             if (!expected.NearlyEquals(actual))
 
-             {
 
-                 throw new EqualException(expected, actual);
 
-             }
 
-         }
 
-         private static void AssertEqual(Size expected, Size actual)
 
-         {
 
-             if (!expected.NearlyEquals(actual))
 
-             {
 
-                 throw new EqualException(expected, actual);
 
-             }
 
-         }
 
-         private class TestLayoutable : Control
 
-         {
 
-             private Size _desiredSize;
 
-             public TestLayoutable(Size desiredSize, double margin = 0)
 
-             {
 
-                 _desiredSize = desiredSize;
 
-                 Margin = new Thickness(margin);
 
-             }
 
-             protected override Size MeasureOverride(Size availableSize) => _desiredSize;
 
-         }
 
-     }
 
- }
 
 
  |