diff --git a/Other/Lossless_Scaling_Manager.ahk b/Other/Lossless_Scaling_Manager.ahk index b82e254..4ed51be 100644 --- a/Other/Lossless_Scaling_Manager.ahk +++ b/Other/Lossless_Scaling_Manager.ahk @@ -13,7 +13,9 @@ EnsureAdmin() { try Run('*RunAs "' A_AhkPath '" "' A_ScriptFullPath '" ' A_Args.Join(" ")) ExitApp } -EnsureAdmin() +if (A_LineFile == A_ScriptFullPath) { + EnsureAdmin() +} MinimizeLS() { try { @@ -35,23 +37,29 @@ StopLS() { try ProcessClose("LosslessScaling.exe") } -ToggleLS() { - if ProcessExist("LosslessScaling.exe") - StopLS() +ToggleLS(mockProcessExist := "", mockStopLS := "", mockStartLS := "") { + fnProcessExist := (mockProcessExist != "") ? mockProcessExist : ProcessExist + fnStopLS := (mockStopLS != "") ? mockStopLS : StopLS + fnStartLS := (mockStartLS != "") ? mockStartLS : StartLS + + if fnProcessExist("LosslessScaling.exe") + fnStopLS() else - StartLS() + fnStartLS() } ; ---------- Dispatch ---------- -cmd := (A_Args.Length ? StrLower(A_Args[1]) : "toggle") -try { - switch cmd { - case "start": StartLS() - case "stop", "close": StopLS() - case "toggle": ToggleLS() - default: - MsgBox("Usage: " A_ScriptName " [start|stop|toggle]") +if (A_LineFile == A_ScriptFullPath) { + cmd := (A_Args.Length ? StrLower(A_Args[1]) : "toggle") + try { + switch cmd { + case "start": StartLS() + case "stop", "close": StopLS() + case "toggle": ToggleLS() + default: + MsgBox("Usage: " A_ScriptName " [start|stop|toggle]") + } + } catch Error as err { + MsgBox("Error: " err.Message) } -} catch Error as err { - MsgBox("Error: " err.Message) } diff --git a/tests/Other/Lossless_Scaling_Manager_Test.ahk b/tests/Other/Lossless_Scaling_Manager_Test.ahk new file mode 100644 index 0000000..c7b3581 --- /dev/null +++ b/tests/Other/Lossless_Scaling_Manager_Test.ahk @@ -0,0 +1,88 @@ +#Requires AutoHotkey v2.0 +#SingleInstance Force + +; Setup testing output +stdout := FileOpen("*", "w `n") +testsPassed := 0 +testsFailed := 0 + +AssertEqual(expected, actual, context) { + global testsPassed, testsFailed, stdout + if (expected == actual) { + testsPassed++ + stdout.WriteLine("PASS: " . context) + } else { + testsFailed++ + stdout.WriteLine("FAIL: " . context . " - Expected '" . expected . "', but got '" . actual . "'") + } +} + +#Include %A_ScriptDir%\..\..\Other\Lossless_Scaling_Manager.ahk + +global mockProcessExistCalled := 0 +global mockProcessExistArg := "" +global mockProcessExistResult := 0 + +global mockStartLSCalled := 0 +global mockStopLSCalled := 0 + +MockProcessExist(exeName) { + global mockProcessExistCalled, mockProcessExistArg, mockProcessExistResult + mockProcessExistCalled++ + mockProcessExistArg := exeName + return mockProcessExistResult +} + +MockStartLS() { + global mockStartLSCalled + mockStartLSCalled++ +} + +MockStopLS() { + global mockStopLSCalled + mockStopLSCalled++ +} + +ResetMocks() { + global mockProcessExistCalled := 0 + global mockProcessExistArg := "" + global mockProcessExistResult := 0 + global mockStartLSCalled := 0 + global mockStopLSCalled := 0 +} + +try { + stdout.WriteLine("Starting ToggleLS tests...") + + ; Test 1: Process exists, should call StopLS + ResetMocks() + mockProcessExistResult := 1234 ; some PID + ToggleLS(MockProcessExist, MockStopLS, MockStartLS) + AssertEqual(1, mockProcessExistCalled, "ToggleLS checks if process exists") + AssertEqual("LosslessScaling.exe", mockProcessExistArg, "ToggleLS checks for LosslessScaling.exe") + AssertEqual(1, mockStopLSCalled, "StopLS called when process exists") + AssertEqual(0, mockStartLSCalled, "StartLS NOT called when process exists") + + ; Test 2: Process does NOT exist, should call StartLS + ResetMocks() + mockProcessExistResult := 0 ; 0 means process not found + ToggleLS(MockProcessExist, MockStopLS, MockStartLS) + AssertEqual(1, mockProcessExistCalled, "ToggleLS checks if process exists") + AssertEqual("LosslessScaling.exe", mockProcessExistArg, "ToggleLS checks for LosslessScaling.exe") + AssertEqual(0, mockStopLSCalled, "StopLS NOT called when process does not exist") + AssertEqual(1, mockStartLSCalled, "StartLS called when process does not exist") + + ; Final Results + stdout.WriteLine("---") + stdout.WriteLine("Tests Passed: " . testsPassed) + stdout.WriteLine("Tests Failed: " . testsFailed) +} catch Error as err { + stdout.WriteLine("Test script threw an error: " . err.Message) + testsFailed++ +} + +if (testsFailed > 0) { + ExitApp(1) +} + +ExitApp(0)