added osutils.IsProbablyGoRun

This commit is contained in:
Gani Georgiev
2025-09-06 18:14:20 +03:00
parent a088cf6379
commit 40f2ba731c
6 changed files with 60 additions and 8 deletions
+14
View File
@@ -63,3 +63,17 @@ func YesNoPrompt(message string, fallback bool) bool {
}
}
}
// IsProbablyGoRun loosely checks if the current executable is running
// as a result of "go run".
func IsProbablyGoRun() bool {
runDirs := []string{os.TempDir(), os.Getenv("GOCACHE")}
for _, dir := range runDirs {
if dir != "" && strings.HasPrefix(os.Args[0], dir) {
return true
}
}
return false
}
+37
View File
@@ -64,3 +64,40 @@ func TestYesNoPrompt(t *testing.T) {
})
}
}
func TestIsProbablyGoRun(t *testing.T) {
scenarios := []struct {
arg string
envs map[string]string
expected bool
}{
{"", nil, false},
{"a/b/c", nil, false},
{"/a/b/c", nil, false},
{"/a/b/c", map[string]string{"GOCACHE": "/b/"}, false},
{"/a/b/c", map[string]string{"GOCACHE": "/a/"}, true},
{os.TempDir() + "/a/b/c", nil, true},
}
originalArgs := os.Args
defer func() {
os.Args = originalArgs
}()
for _, s := range scenarios {
t.Run(s.arg, func(t *testing.T) {
os.Args = []string{s.arg}
for k, v := range s.envs {
defer os.Setenv(k, os.Getenv(k))
os.Setenv(k, v)
}
result := osutils.IsProbablyGoRun()
if result != s.expected {
t.Fatalf("Expected %v, got %v", s.expected, result)
}
})
}
}