mirror of
https://github.com/golang/go
synced 2024-11-22 10:04:42 -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
|
||||
// no-op flag to check for overall exec support.
|
||||
exe, err := os.Executable()
|
||||
exe, err := exePath()
|
||||
if err != nil {
|
||||
return fmt.Errorf("can't probe for exec support: %w", err)
|
||||
}
|
||||
@ -71,6 +71,24 @@ var tryExec = sync.OnceValue(func() error {
|
||||
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
|
||||
|
||||
// MustHaveExecPath checks that the current system can start the named executable
|
||||
|
Loading…
Reference in New Issue
Block a user