diff --git a/Lib/v2/WindowManager.ahk b/Lib/v2/WindowManager.ahk index 874447c..f5662a7 100644 --- a/Lib/v2/WindowManager.ahk +++ b/Lib/v2/WindowManager.ahk @@ -33,13 +33,11 @@ MakeFullscreen(winTitle) { MaximizeWindow(winTitle) } -WaitForWindow(winTitle, timeout := 30) { - try { - WinWait(winTitle, , timeout) - return true - } catch TimeoutError { - return false - } +WaitForWindow(winTitle, timeout := 30, api := "") { + if !api + api := SystemWindowAPI() + + return api.WinWait(winTitle, , timeout) != 0 } WaitForProcess(processName, timeout := 30) { @@ -93,6 +91,7 @@ RestoreWindowBorders(winTitle) { } class SystemWindowAPI { + WinWait(winTitle, winText?, timeout?) => WinWait(winTitle, winText?, timeout?) WinGetStyle(winTitle) => WinGetStyle(winTitle) WinSetStyle(style, winTitle) => WinSetStyle(style, winTitle) WinMove(x, y, w, h, winTitle) => WinMove(x, y, w, h, winTitle) diff --git a/ahk/test_WindowManager.ahk b/ahk/test_WindowManager.ahk index 41cf9e0..3633063 100644 --- a/ahk/test_WindowManager.ahk +++ b/ahk/test_WindowManager.ahk @@ -10,6 +10,11 @@ class MockWindowAPI { this.monitors := [] } + WinWait(winTitle, winText:="", timeout:="") { + this.calls.Push({method: "WinWait", args: [winTitle, winText, timeout]}) + return 0 ; Simulate timeout + } + WinGetStyle(winTitle) { this.calls.Push({method: "WinGetStyle", args: [winTitle]}) return this.mockStyle @@ -149,12 +154,50 @@ TestGetMonitorAtPos_MultipleMonitors() { return true } + +TestWaitForWindow_Timeout() { + mockApi := MockWindowAPI() + + res := WaitForWindow("FakeWindow", 0.1, mockApi) + + ; Verify result + if (res != false) { + FileOpen("*", "w `n").Write("Fail: Expected false, got " res "`n") + return false + } + + ; Verify calls + if (mockApi.calls.Length != 1) { + FileOpen("*", "w `n").Write("Fail: Expected 1 call, got " mockApi.calls.Length "`n") + return false + } + + if (mockApi.calls[1].method != "WinWait") { + FileOpen("*", "w `n").Write("Fail: First call was not WinWait`n") + return false + } + + if (mockApi.calls[1].args[1] != "FakeWindow") { + FileOpen("*", "w `n").Write("Fail: Expected winTitle 'FakeWindow', got '" mockApi.calls[1].args[1] "'`n") + return false + } + + if (mockApi.calls[1].args[3] != 0.1) { + FileOpen("*", "w `n").Write("Fail: Expected timeout 0.1, got '" mockApi.calls[1].args[3] "'`n") + return false + } + + FileOpen("*", "w `n").Write("Pass: WaitForWindow_Timeout`n") + return true +} + TestToggleFakeFullscreen_MakeFullscreen() TestToggleFakeFullscreen_RestoreWindow() TestGetMonitorAtPos_InsideMonitor() TestGetMonitorAtPos_OutsideMonitors() TestGetMonitorAtPos_MultipleMonitors() +TestWaitForWindow_Timeout() FileOpen("*", "w `n").Write("All tests complete.`n") ExitApp