mirror of
https://github.com/golang/go
synced 2024-11-26 03:57:57 -07:00
internal/testenv: add Executable
Tests commonly use code to get os.Executable value, and some cache the resulting value. To reduce code duplication, add a helper that does just that. Change-Id: I9dd7eb24e24a3abd92be2b87227e823f0fca5cb3 Reviewed-on: https://go-review.googlesource.com/c/go/+/609301 Reviewed-by: Cherry Mui <cherryyz@google.com> Reviewed-by: Ian Lance Taylor <iant@google.com> LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Alan Donovan <adonovan@google.com> Auto-Submit: Ian Lance Taylor <iant@google.com>
This commit is contained in:
parent
7303a283c4
commit
b4d4744059
@ -62,7 +62,7 @@ var tryExec = sync.OnceValue(func() error {
|
|||||||
|
|
||||||
// We know that this is a test executable. We should be able to run it with a
|
// We know that this is a test executable. We should be able to run it with a
|
||||||
// no-op flag to check for overall exec support.
|
// no-op flag to check for overall exec support.
|
||||||
exe, err := os.Executable()
|
exe, err := exePath()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return fmt.Errorf("can't probe for exec support: %w", err)
|
return fmt.Errorf("can't probe for exec support: %w", err)
|
||||||
}
|
}
|
||||||
@ -71,6 +71,24 @@ var tryExec = sync.OnceValue(func() error {
|
|||||||
return cmd.Run()
|
return cmd.Run()
|
||||||
})
|
})
|
||||||
|
|
||||||
|
// Executable is a wrapper around [MustHaveExec] and [os.Executable].
|
||||||
|
// It returns the path name for the executable that started the current process,
|
||||||
|
// or skips the test if the current system can't start new processes,
|
||||||
|
// or fails the test if the path can not be obtained.
|
||||||
|
func Executable(t testing.TB) string {
|
||||||
|
MustHaveExec(t)
|
||||||
|
|
||||||
|
exe, err := exePath()
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("os.Executable error: %v", err)
|
||||||
|
}
|
||||||
|
return exe
|
||||||
|
}
|
||||||
|
|
||||||
|
var exePath = sync.OnceValues(func() (string, error) {
|
||||||
|
return os.Executable()
|
||||||
|
})
|
||||||
|
|
||||||
var execPaths sync.Map // path -> error
|
var execPaths sync.Map // path -> error
|
||||||
|
|
||||||
// MustHaveExecPath checks that the current system can start the named executable
|
// MustHaveExecPath checks that the current system can start the named executable
|
||||||
|
Loading…
Reference in New Issue
Block a user