using System.Numerics; using AcDream.App.UI; namespace AcDream.App.Tests.UI; public class UiRootInputTests { [Fact] public void WantsMouse_TrueOverWidget_FalseOverEmptySpace() { var root = new UiRoot { Width = 800, Height = 600 }; var panel = new UiPanel { Left = 10, Top = 10, Width = 100, Height = 50 }; root.AddChild(panel); root.OnMouseMove(50, 30); // inside the panel Assert.True(root.WantsMouse); root.OnMouseMove(500, 400); // empty space Assert.False(root.WantsMouse); } [Fact] public void WindowDrag_RepositionsDraggablePanel_StopsOnRelease() { var root = new UiRoot { Width = 800, Height = 600 }; var panel = new UiPanel { Left = 10, Top = 10, Width = 100, Height = 50, Draggable = true }; root.AddChild(panel); root.OnMouseDown(UiMouseButton.Left, 20, 20); // grab at (10,10) into the panel root.OnMouseMove(120, 90); // drag Assert.Equal(110f, panel.Left); // 120 - 10 Assert.Equal(80f, panel.Top); // 90 - 10 root.OnMouseUp(UiMouseButton.Left, 120, 90); root.OnMouseMove(300, 300); // released — must not move Assert.Equal(110f, panel.Left); Assert.Equal(80f, panel.Top); } [Fact] public void NonDraggablePanel_DoesNotMoveOnDrag() { var root = new UiRoot { Width = 800, Height = 600 }; var panel = new UiPanel { Left = 10, Top = 10, Width = 100, Height = 50 }; // Draggable defaults false root.AddChild(panel); root.OnMouseDown(UiMouseButton.Left, 20, 20); root.OnMouseMove(120, 90); Assert.Equal(10f, panel.Left); Assert.Equal(10f, panel.Top); } }