VisualLayerManagerTests.cs 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. using Avalonia.Controls.Primitives;
  2. using Avalonia.UnitTests;
  3. using Xunit;
  4. namespace Avalonia.Controls.UnitTests.Primitives
  5. {
  6. public class VisualLayerManagerTests : ScopedTestBase
  7. {
  8. [Fact]
  9. public void GetAdornerLayer_Returns_Dedicated_AdornerLayer_For_Controls_Inside_OverlayLayer()
  10. {
  11. var button = new Button();
  12. var vlm = new VisualLayerManager { EnableOverlayLayer = true, Child = button };
  13. var root = new TestRoot { Child = vlm };
  14. root.Measure(new Size(100, 100));
  15. root.Arrange(new Rect(0, 0, 100, 100));
  16. var overlayLayer = vlm.OverlayLayer;
  17. Assert.NotNull(overlayLayer);
  18. var overlayChild = new Border();
  19. overlayLayer.Children.Add(overlayChild);
  20. // The adorner layer for a control inside the OverlayLayer
  21. // should be the dedicated one, not the main VLM adorner layer.
  22. var overlayAdornerLayer = AdornerLayer.GetAdornerLayer(overlayChild);
  23. Assert.NotNull(overlayAdornerLayer);
  24. Assert.Same(overlayLayer.AdornerLayer, overlayAdornerLayer);
  25. // The main VLM adorner layer should be different.
  26. var mainAdornerLayer = AdornerLayer.GetAdornerLayer(button);
  27. Assert.NotNull(mainAdornerLayer);
  28. Assert.NotSame(overlayAdornerLayer, mainAdornerLayer);
  29. }
  30. [Fact]
  31. public void GetAdornerLayer_Returns_Same_AdornerLayer_For_VisualLayerManager()
  32. {
  33. var vlm = new VisualLayerManager();
  34. var root = new TestRoot { Child = vlm };
  35. root.Measure(new Size(100, 100));
  36. root.Arrange(new Rect(0, 0, 100, 100));
  37. var adornerLayer = vlm.AdornerLayer;
  38. Assert.NotNull(adornerLayer);
  39. // The adorner layer for a control inside the OverlayLayer
  40. // should be the dedicated one, not the main VLM adorner layer.
  41. var target = AdornerLayer.GetAdornerLayer(vlm);
  42. Assert.NotNull(target);
  43. Assert.Same(adornerLayer, target);
  44. }
  45. [Fact]
  46. public void GetAdornerLayer_Returns_Same_AdornerLayer_For_Child()
  47. {
  48. var button = new Button();
  49. var vlm = new VisualLayerManager() { Child = button };
  50. var root = new TestRoot { Child = vlm };
  51. root.Measure(new Size(100, 100));
  52. root.Arrange(new Rect(0, 0, 100, 100));
  53. var adornerLayer = vlm.AdornerLayer;
  54. Assert.NotNull(adornerLayer);
  55. // The adorner layer for a control inside the OverlayLayer
  56. // should be the dedicated one, not the main VLM adorner layer.
  57. var target = AdornerLayer.GetAdornerLayer(button);
  58. Assert.NotNull(target);
  59. Assert.Same(adornerLayer, target);
  60. }
  61. [Fact]
  62. public void GetOverlayLayer_Returns_Same_OverlayLayer_For_VisualLayerManager()
  63. {
  64. var vlm = new VisualLayerManager() { EnableOverlayLayer = true };
  65. var root = new TestRoot { Child = vlm };
  66. root.Measure(new Size(100, 100));
  67. root.Arrange(new Rect(0, 0, 100, 100));
  68. var overlayLayer = vlm.OverlayLayer;
  69. Assert.NotNull(overlayLayer);
  70. // The adorner layer for a control inside the OverlayLayer
  71. // should be the dedicated one, not the main VLM adorner layer.
  72. var target = OverlayLayer.GetOverlayLayer(vlm);
  73. Assert.NotNull(target);
  74. Assert.Same(overlayLayer, target);
  75. }
  76. [Fact]
  77. public void GetOverlayLayer_Returns_Same_OverlayLayer_For_Child()
  78. {
  79. var button = new Button();
  80. var vlm = new VisualLayerManager() { EnableOverlayLayer = true, Child = button };
  81. var root = new TestRoot { Child = vlm };
  82. root.Measure(new Size(100, 100));
  83. root.Arrange(new Rect(0, 0, 100, 100));
  84. var overlayLayer = vlm.OverlayLayer;
  85. Assert.NotNull(overlayLayer);
  86. // The adorner layer for a control inside the OverlayLayer
  87. // should be the dedicated one, not the main VLM adorner layer.
  88. var target = OverlayLayer.GetOverlayLayer(button);
  89. Assert.NotNull(target);
  90. Assert.Same(overlayLayer, target);
  91. }
  92. }
  93. }