Explorar el Código

added more mouse under tests

Tig hace 3 meses
padre
commit
f6f052ac33

+ 129 - 0
Tests/UnitTests/View/Viewport/ViewportSettings.TransparentMouseTests.cs

@@ -0,0 +1,129 @@
+#nullable enable
+
+namespace Terminal.Gui.ViewTests;
+
+public class TransparentMouseTests
+{
+    private class MouseTrackingView : View
+    {
+        public bool MouseEventReceived { get; private set; }
+
+        protected override bool OnMouseEvent (MouseEventArgs mouseEvent)
+        {
+            MouseEventReceived = true;
+            return true;
+        }
+    }
+
+    [Fact]
+    public void TransparentMouse_Passes_Mouse_Events_To_Underlying_View ()
+    {
+        // Arrange
+        var top = new Toplevel ()
+        {
+            Id = "top",
+        };
+        Application.Top = top;
+
+        var underlying = new MouseTrackingView { Id = "underlying", X = 0, Y = 0, Width = 10, Height = 10 };
+        var overlay = new MouseTrackingView { Id = "overlay", X = 0, Y = 0, Width = 10, Height = 10, ViewportSettings = ViewportSettings.TransparentMouse };
+
+        top.Add (underlying);
+        top.Add (overlay);
+
+        top.BeginInit ();
+        top.EndInit ();
+        top.Layout ();
+
+        var mouseEvent = new MouseEventArgs
+        {
+            ScreenPosition = new (5, 5),
+            Flags = MouseFlags.Button1Clicked
+        };
+
+        // Act
+        Application.RaiseMouseEvent (mouseEvent);
+
+        // Assert
+        Assert.True (underlying.MouseEventReceived);
+
+        top.Dispose ();
+        Application.ResetState (true);
+    }
+
+    [Fact]
+    public void NonTransparentMouse_Consumes_Mouse_Events ()
+    {
+        // Arrange
+        var top = new Toplevel ();
+        Application.Top = top;
+
+        var underlying = new MouseTrackingView { X = 0, Y = 0, Width = 10, Height = 10 };
+        var overlay = new MouseTrackingView { X = 0, Y = 0, Width = 10, Height = 10, ViewportSettings = ViewportSettings.None };
+
+        top.Add (underlying);
+        top.Add (overlay);
+
+        top.BeginInit ();
+        top.EndInit ();
+        top.Layout ();
+
+        var mouseEvent = new MouseEventArgs
+        {
+            ScreenPosition = new Point (5, 5),
+            Flags = MouseFlags.Button1Clicked
+        };
+
+        // Act
+        Application.RaiseMouseEvent (mouseEvent);
+
+        // Assert
+        Assert.True (overlay.MouseEventReceived);
+        Assert.False (underlying.MouseEventReceived);
+
+        top.Dispose ();
+        Application.ResetState (true);
+    }
+
+    [Fact]
+    public void TransparentMouse_Stacked_TransparentMouse_Views ()
+    {
+        // Arrange
+        var top = new Toplevel ();
+        Application.Top = top;
+
+        var underlying = new MouseTrackingView { X = 0, Y = 0, Width = 10, Height = 10, ViewportSettings = ViewportSettings.TransparentMouse };
+        var overlay = new MouseTrackingView { X = 0, Y = 0, Width = 10, Height = 10, ViewportSettings = ViewportSettings.TransparentMouse };
+
+        top.Add (underlying);
+        top.Add (overlay);
+
+        top.BeginInit ();
+        top.EndInit ();
+        top.Layout ();
+
+        var mouseEvent = new MouseEventArgs
+        {
+            ScreenPosition = new Point (5, 5),
+            Flags = MouseFlags.Button1Clicked
+        };
+
+        bool topHandled = false;
+        top.MouseEvent += (sender, args) =>
+                          {
+                              topHandled = true;
+                              args.Handled = true;
+                          };
+
+        // Act
+        Application.RaiseMouseEvent (mouseEvent);
+
+        // Assert
+        Assert.False (overlay.MouseEventReceived);
+        Assert.False (underlying.MouseEventReceived);
+        Assert.True (topHandled);
+
+        top.Dispose ();
+        Application.ResetState (true);
+    }
+}