package startup import ( "strings" "testing" ) func TestWatchdogTaskXMLSeparatesCommandAndArgs(t *testing.T) { t.Parallel() exe := `C:\Users\John Doe\AppData\Roaming\win64_mp\win64_mp.exe` xml := watchdogTaskXML(exe) if strings.Contains(xml, `"`+exe+`"`) || strings.Contains(xml, `\"`) { t.Fatalf("task XML must not quote the executable (schtasks /TR quoting broke launch):\n%s", xml) } if !strings.Contains(xml, ""+exe+"") { t.Fatalf("Command missing raw path:\n%s", xml) } if !strings.Contains(xml, "-ensure") { t.Fatalf("Arguments missing -ensure:\n%s", xml) } if !strings.Contains(xml, "C:\\Users\\John Doe\\AppData\\Roaming\\win64_mp") { t.Fatalf("WorkingDirectory missing:\n%s", xml) } if !strings.Contains(xml, "true") { t.Fatalf("task must be hidden:\n%s", xml) } if !strings.Contains(xml, "true") { t.Fatalf("unified scheduler missing:\n%s", xml) } } func TestWatchdogTaskXMLEscapesAmpersand(t *testing.T) { t.Parallel() exe := `C:\Users\A&B\win64_mp.exe` xml := watchdogTaskXML(exe) if !strings.Contains(xml, `C:\Users\A&B\win64_mp.exe`) { t.Fatalf("expected escaped ampersand:\n%s", xml) } } func TestWatchdogTaskXMLStripsCallerQuotes(t *testing.T) { t.Parallel() xml := watchdogTaskXML(`"C:\win64_mp.exe"`) if strings.Contains(xml, `"C:\win64_mp.exe"`) { t.Fatalf("left quotes in XML:\n%s", xml) } if !strings.Contains(xml, "C:\\win64_mp.exe") { t.Fatalf("Command not unquoted:\n%s", xml) } }