ArrangeTests.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. using Avalonia.Controls;
  2. using Avalonia.Layout;
  3. using Xunit;
  4. namespace Avalonia.Base.UnitTests.Layout
  5. {
  6. public class ArrangeTests
  7. {
  8. [Fact]
  9. public void Bounds_Should_Not_Include_Margin()
  10. {
  11. var target = new Decorator
  12. {
  13. Width = 100,
  14. Height = 100,
  15. Margin = new Thickness(5),
  16. };
  17. Assert.False(target.IsMeasureValid);
  18. target.Measure(Size.Infinity);
  19. target.Arrange(new Rect(target.DesiredSize));
  20. Assert.Equal(new Rect(5, 5, 100, 100), target.Bounds);
  21. }
  22. [Fact]
  23. public void Margin_Should_Be_Subtracted_From_Arrange_FinalSize()
  24. {
  25. var target = new TestControl
  26. {
  27. Width = 100,
  28. Height = 100,
  29. Margin = new Thickness(8),
  30. };
  31. target.Measure(Size.Infinity);
  32. target.Arrange(new Rect(target.DesiredSize));
  33. Assert.Equal(new Size(100, 100), target.ArrangeFinalSize);
  34. }
  35. [Fact]
  36. public void ArrangeOverride_Receives_Desired_Size_When_Centered()
  37. {
  38. var target = new TestControl
  39. {
  40. MeasureResult = new Size(100, 100),
  41. HorizontalAlignment = HorizontalAlignment.Center,
  42. VerticalAlignment = VerticalAlignment.Center,
  43. Margin = new Thickness(8),
  44. };
  45. target.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
  46. target.Arrange(new Rect(0, 0, 200, 200));
  47. Assert.Equal(new Size(100, 100), target.ArrangeFinalSize);
  48. }
  49. [Fact]
  50. public void ArrangeOverride_Receives_Available_Size_Minus_Margin_When_Stretched()
  51. {
  52. var target = new TestControl
  53. {
  54. MeasureResult = new Size(100, 100),
  55. HorizontalAlignment = HorizontalAlignment.Stretch,
  56. VerticalAlignment = VerticalAlignment.Stretch,
  57. Margin = new Thickness(8),
  58. };
  59. target.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
  60. target.Arrange(new Rect(0, 0, 200, 200));
  61. Assert.Equal(new Size(184, 184), target.ArrangeFinalSize);
  62. }
  63. [Fact]
  64. public void ArrangeOverride_Receives_Requested_Size_When_Arranged_To_DesiredSize()
  65. {
  66. var target = new TestControl
  67. {
  68. MeasureResult = new Size(100, 100),
  69. HorizontalAlignment = HorizontalAlignment.Center,
  70. VerticalAlignment = VerticalAlignment.Center,
  71. Margin = new Thickness(8),
  72. };
  73. target.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
  74. target.Arrange(new Rect(target.DesiredSize));
  75. Assert.Equal(new Size(100, 100), target.ArrangeFinalSize);
  76. }
  77. [Fact]
  78. public void Arrange_With_IsMeasureValid_False_Calls_Measure()
  79. {
  80. var target = new TestControl();
  81. Assert.False(target.IsMeasureValid);
  82. target.Arrange(new Rect(0, 0, 120, 120));
  83. Assert.True(target.IsMeasureValid);
  84. Assert.Equal(new Size(120, 120), target.MeasureConstraint);
  85. }
  86. [Fact]
  87. public void Arrange_With_IsMeasureValid_False_Calls_Measure_With_Previous_Size_If_Available()
  88. {
  89. var target = new TestControl();
  90. Assert.False(target.IsMeasureValid);
  91. target.Arrange(new Rect(0, 0, 120, 120));
  92. target.InvalidateMeasure();
  93. target.Arrange(new Rect(0, 0, 100, 100));
  94. Assert.True(target.IsMeasureValid);
  95. Assert.Equal(new Size(120, 120), target.MeasureConstraint);
  96. }
  97. private class TestControl : Decorator
  98. {
  99. public Size MeasureConstraint { get; private set; }
  100. public Size MeasureResult { get; set; }
  101. public Size ArrangeFinalSize { get; private set; }
  102. protected override Size MeasureOverride(Size constraint)
  103. {
  104. MeasureConstraint = constraint;
  105. return MeasureResult;
  106. }
  107. protected override Size ArrangeOverride(Size finalSize)
  108. {
  109. ArrangeFinalSize = finalSize;
  110. return base.ArrangeOverride(finalSize);
  111. }
  112. }
  113. }
  114. }