using System; using System.Collections.Generic; using System.Windows; using Paca.App.Core; using Xunit; namespace Paca.Tests.App; public class MultiDisplayLayoutEngineGateTests { [Fact] public void Gate269_MultiDisplayLayoutEngine_ClampsWindow_WithinSingleMonitorBounds() { var workArea = new Rect(0, 0, 1920, 1080); // Window 400x300 requested at (1800, 950) -> exceeds 1920 and 1080 var clamped = MultiDisplayLayoutEngine.ClampToWorkArea( requestedLeft: 1800, requestedTop: 950, windowWidth: 400, windowHeight: 300, workArea: workArea, margin: 16 ); Assert.Equal(1920 - 400 - 16, clamped.X); Assert.Equal(1080 - 300 - 16, clamped.Y); } [Fact] public void Gate270_MultiDisplayLayoutEngine_HandlesNegativeCoordinates_OnSecondaryLeftMonitor() { var leftMonitorWorkArea = new Rect(-1920, 0, 1920, 1080); // Window 400x300 requested at -2000 (beyond left edge) var clamped = MultiDisplayLayoutEngine.ClampToWorkArea( requestedLeft: -2000, requestedTop: 100, windowWidth: 400, windowHeight: 300, workArea: leftMonitorWorkArea, margin: 16 ); Assert.Equal(-1920 + 16, clamped.X); Assert.Equal(100, clamped.Y); } [Fact] public void Gate271_MultiDisplayLayoutEngine_ConvertsDpiToDips() { // Standard 96 DPI = 1.0 scale Assert.Equal(100.0, MultiDisplayLayoutEngine.PixelsToDips(100, 96)); // 144 DPI (150% scaling) -> 150 pixels = 100 DIPs Assert.Equal(100.0, MultiDisplayLayoutEngine.PixelsToDips(150, 144)); } [Fact] public void Gate272_MultiDisplayLayoutEngine_FindsBestScreen_ForWindow() { var screens = new List { new(0, 0, 1920, 1080), // Primary screen new(1920, 0, 1920, 1080) // Secondary screen to the right }; // Window placed mostly on secondary screen (e.g. x=2000) var bestScreen = MultiDisplayLayoutEngine.FindBestScreen(new Rect(2000, 200, 400, 300), screens); Assert.Equal(1920, bestScreen.X); } }