ArrangeTests.cs 4.5 KB

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