RelativePanelTests.cs 6.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171
  1. using Avalonia.Controls.Shapes;
  2. using Avalonia.UnitTests;
  3. using Xunit;
  4. namespace Avalonia.Controls.UnitTests
  5. {
  6. public class RelativePanelTests : ScopedTestBase
  7. {
  8. [Fact]
  9. public void Lays_Out_1_Child_Next_the_other()
  10. {
  11. using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
  12. var rect1 = new Rectangle { Height = 20, Width = 20 };
  13. var rect2 = new Rectangle { Height = 20, Width = 20 };
  14. var target = new RelativePanel
  15. {
  16. VerticalAlignment = Layout.VerticalAlignment.Top,
  17. HorizontalAlignment = Layout.HorizontalAlignment.Left,
  18. Children =
  19. {
  20. rect1, rect2
  21. }
  22. };
  23. RelativePanel.SetAlignLeftWithPanel(rect1 , true);
  24. RelativePanel.SetRightOf(rect2, rect1);
  25. target.Measure(new Size(400, 400));
  26. target.Arrange(new Rect(target.DesiredSize));
  27. Assert.Equal(new Size(40, 20), target.Bounds.Size);
  28. Assert.Equal(new Rect(0, 0, 20, 20), target.Children[0].Bounds);
  29. Assert.Equal(new Rect(20, 0, 20, 20), target.Children[1].Bounds);
  30. }
  31. [Fact]
  32. public void Lays_Out_1_Child_Below_the_other()
  33. {
  34. using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
  35. var rect1 = new Rectangle { Height = 20, Width = 20 };
  36. var rect2 = new Rectangle { Height = 20, Width = 20 };
  37. var target = new RelativePanel
  38. {
  39. VerticalAlignment = Layout.VerticalAlignment.Top,
  40. HorizontalAlignment = Layout.HorizontalAlignment.Left,
  41. Children =
  42. {
  43. rect1, rect2
  44. }
  45. };
  46. RelativePanel.SetAlignLeftWithPanel(rect1, true);
  47. RelativePanel.SetBelow(rect2, rect1);
  48. target.Measure(new Size(400, 400));
  49. target.Arrange(new Rect(target.DesiredSize));
  50. Assert.Equal(new Size(20, 40), target.Bounds.Size);
  51. Assert.Equal(new Rect(0, 0, 20, 20), target.Children[0].Bounds);
  52. Assert.Equal(new Rect(0, 20, 20, 20), target.Children[1].Bounds);
  53. }
  54. [Fact]
  55. public void RelativePanel_Can_Center()
  56. {
  57. using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
  58. var rect1 = new Rectangle { Height = 20, Width = 20 };
  59. var rect2 = new Rectangle { Height = 20, Width = 20 };
  60. var target = new RelativePanel
  61. {
  62. VerticalAlignment = Layout.VerticalAlignment.Center,
  63. HorizontalAlignment = Layout.HorizontalAlignment.Center,
  64. Children =
  65. {
  66. rect1, rect2
  67. }
  68. };
  69. RelativePanel.SetAlignLeftWithPanel(rect1, true);
  70. RelativePanel.SetBelow(rect2, rect1);
  71. target.Measure(new Size(400, 400));
  72. target.Arrange(new Rect(target.DesiredSize));
  73. Assert.Equal(new Size(20, 40), target.Bounds.Size);
  74. Assert.Equal(new Rect(0, 0, 20, 20), target.Children[0].Bounds);
  75. Assert.Equal(new Rect(0, 20, 20, 20), target.Children[1].Bounds);
  76. }
  77. [Fact]
  78. public void LeftOf_Measures_Correctly()
  79. {
  80. using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
  81. var rect1 = new Rectangle { Height = 20, Width = 20 };
  82. var rect2 = new Rectangle { Height = 20, Width = 20 };
  83. var target = new RelativePanel
  84. {
  85. VerticalAlignment = Layout.VerticalAlignment.Center,
  86. HorizontalAlignment = Layout.HorizontalAlignment.Center,
  87. Children =
  88. {
  89. rect1, rect2
  90. }
  91. };
  92. RelativePanel.SetLeftOf(rect2, rect1);
  93. target.Measure(new Size(400, 400));
  94. target.Arrange(new Rect(target.DesiredSize));
  95. Assert.Equal(new Size(20, 20), target.Bounds.Size);
  96. Assert.Equal(new Rect(0, 0, 20, 20), target.Children[0].Bounds);
  97. Assert.Equal(new Rect(-20, 0, 20, 20), target.Children[1].Bounds);
  98. }
  99. [Fact]
  100. public void Above_Measures_Correctly()
  101. {
  102. using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
  103. var rect1 = new Rectangle { Height = 20, Width = 20 };
  104. var rect2 = new Rectangle { Height = 20, Width = 20 };
  105. var target = new RelativePanel
  106. {
  107. VerticalAlignment = Layout.VerticalAlignment.Center,
  108. HorizontalAlignment = Layout.HorizontalAlignment.Center,
  109. Children =
  110. {
  111. rect1, rect2
  112. }
  113. };
  114. RelativePanel.SetAbove(rect2, rect1);
  115. target.Measure(new Size(400, 400));
  116. target.Arrange(new Rect(target.DesiredSize));
  117. Assert.Equal(new Size(20, 20), target.Bounds.Size);
  118. Assert.Equal(new Rect(0, 0, 20, 20), target.Children[0].Bounds);
  119. Assert.Equal(new Rect(0, -20, 20, 20), target.Children[1].Bounds);
  120. }
  121. [Theory]
  122. [InlineData(100, 100, 100, 100)]
  123. [InlineData(100, double.PositiveInfinity, 100, 40)]
  124. [InlineData(double.PositiveInfinity, 100, 20, 100)]
  125. [InlineData(double.PositiveInfinity, double.PositiveInfinity, 20, 40)]
  126. public void StretchedPanel_Measures_Correctly(double availableWidth, double availableHeight, double desiredWidth, double desiredHeight)
  127. {
  128. using var app = UnitTestApplication.Start(TestServices.MockPlatformRenderInterface);
  129. var rect1 = new Rectangle { Height = 20, Width = 20 };
  130. var rect2 = new Rectangle { Height = 20, Width = 20 };
  131. var target = new RelativePanel
  132. {
  133. VerticalAlignment = Layout.VerticalAlignment.Stretch,
  134. HorizontalAlignment = Layout.HorizontalAlignment.Stretch,
  135. Children =
  136. {
  137. rect1, rect2
  138. }
  139. };
  140. RelativePanel.SetBelow(rect2, rect1);
  141. target.Measure(new Size(availableWidth, availableHeight));
  142. target.Arrange(new Rect(target.DesiredSize));
  143. Assert.Equal(desiredWidth, target.DesiredSize.Width);
  144. Assert.Equal(desiredHeight, target.DesiredSize.Height);
  145. }
  146. }
  147. }