ViewportSettings.TransparentMouseTests.cs 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129
  1. #nullable enable
  2. namespace UnitTests.ViewTests;
  3. public class TransparentMouseTests
  4. {
  5. private class MouseTrackingView : View
  6. {
  7. public bool MouseEventReceived { get; private set; }
  8. protected override bool OnMouseEvent (MouseEventArgs mouseEvent)
  9. {
  10. MouseEventReceived = true;
  11. return true;
  12. }
  13. }
  14. [Fact]
  15. public void TransparentMouse_Passes_Mouse_Events_To_Underlying_View ()
  16. {
  17. // Arrange
  18. var top = new Toplevel ()
  19. {
  20. Id = "top",
  21. };
  22. Application.TopRunnable = top;
  23. var underlying = new MouseTrackingView { Id = "underlying", X = 0, Y = 0, Width = 10, Height = 10 };
  24. var overlay = new MouseTrackingView { Id = "overlay", X = 0, Y = 0, Width = 10, Height = 10, ViewportSettings = ViewportSettingsFlags.TransparentMouse };
  25. top.Add (underlying);
  26. top.Add (overlay);
  27. top.BeginInit ();
  28. top.EndInit ();
  29. top.Layout ();
  30. var mouseEvent = new MouseEventArgs
  31. {
  32. ScreenPosition = new (5, 5),
  33. Flags = MouseFlags.Button1Clicked
  34. };
  35. // Act
  36. Application.RaiseMouseEvent (mouseEvent);
  37. // Assert
  38. Assert.True (underlying.MouseEventReceived);
  39. top.Dispose ();
  40. Application.ResetState (true);
  41. }
  42. [Fact]
  43. public void NonTransparentMouse_Consumes_Mouse_Events ()
  44. {
  45. // Arrange
  46. var top = new Toplevel ();
  47. Application.TopRunnable = top;
  48. var underlying = new MouseTrackingView { X = 0, Y = 0, Width = 10, Height = 10 };
  49. var overlay = new MouseTrackingView { X = 0, Y = 0, Width = 10, Height = 10, ViewportSettings = ViewportSettingsFlags.None };
  50. top.Add (underlying);
  51. top.Add (overlay);
  52. top.BeginInit ();
  53. top.EndInit ();
  54. top.Layout ();
  55. var mouseEvent = new MouseEventArgs
  56. {
  57. ScreenPosition = new Point (5, 5),
  58. Flags = MouseFlags.Button1Clicked
  59. };
  60. // Act
  61. Application.RaiseMouseEvent (mouseEvent);
  62. // Assert
  63. Assert.True (overlay.MouseEventReceived);
  64. Assert.False (underlying.MouseEventReceived);
  65. top.Dispose ();
  66. Application.ResetState (true);
  67. }
  68. [Fact]
  69. public void TransparentMouse_Stacked_TransparentMouse_Views ()
  70. {
  71. // Arrange
  72. var top = new Toplevel ();
  73. Application.TopRunnable = top;
  74. var underlying = new MouseTrackingView { X = 0, Y = 0, Width = 10, Height = 10, ViewportSettings = ViewportSettingsFlags.TransparentMouse };
  75. var overlay = new MouseTrackingView { X = 0, Y = 0, Width = 10, Height = 10, ViewportSettings = ViewportSettingsFlags.TransparentMouse };
  76. top.Add (underlying);
  77. top.Add (overlay);
  78. top.BeginInit ();
  79. top.EndInit ();
  80. top.Layout ();
  81. var mouseEvent = new MouseEventArgs
  82. {
  83. ScreenPosition = new Point (5, 5),
  84. Flags = MouseFlags.Button1Clicked
  85. };
  86. bool topHandled = false;
  87. top.MouseEvent += (sender, args) =>
  88. {
  89. topHandled = true;
  90. args.Handled = true;
  91. };
  92. // Act
  93. Application.RaiseMouseEvent (mouseEvent);
  94. // Assert
  95. Assert.False (overlay.MouseEventReceived);
  96. Assert.False (underlying.MouseEventReceived);
  97. Assert.True (topHandled);
  98. top.Dispose ();
  99. Application.ResetState (true);
  100. }
  101. }