# This test only checks that basic PATH lookups work. # The full test of toolchain version selection is in gotoolchain.txt. [short] skip env TESTGO_VERSION=go1.21pre3 # Compile a fake toolchain to put in the path under various names. env GOTOOLCHAIN= mkdir $WORK/bin go build -o $WORK/bin/go1.50.0$GOEXE ./fakego.go # adds .exe extension implicitly on Windows [!GOOS:plan9] env PATH=$WORK/bin [GOOS:plan9] env path=$WORK/bin go version stdout go1.21pre3 # GOTOOLCHAIN=go1.50.0 env GOTOOLCHAIN=go1.50.0 ! go version stderr 'running go1.50.0 from PATH' # GOTOOLCHAIN=path with toolchain line env GOTOOLCHAIN=local go mod init m go mod edit -toolchain=go1.50.0 grep go1.50.0 go.mod env GOTOOLCHAIN=path ! go version stderr 'running go1.50.0 from PATH' # GOTOOLCHAIN=path with go line env GOTOOLCHAIN=local go mod edit -toolchain=none -go=1.50.0 grep 'go 1.50.0' go.mod ! grep toolchain go.mod env GOTOOLCHAIN=path ! go version stderr 'running go1.50.0 from PATH' # GOTOOLCHAIN=auto with toolchain line env GOTOOLCHAIN=local go mod edit -toolchain=go1.50.0 -go=1.21 grep 'go 1.21$' go.mod grep 'toolchain go1.50.0' go.mod env GOTOOLCHAIN=auto ! go version stderr 'running go1.50.0 from PATH' # GOTOOLCHAIN=auto with go line env GOTOOLCHAIN=local go mod edit -toolchain=none -go=1.50.0 grep 'go 1.50.0$' go.mod ! grep toolchain go.mod env GOTOOLCHAIN=auto ! go version stderr 'running go1.50.0 from PATH' # NewerToolchain should find Go 1.50.0. env GOTOOLCHAIN=local go mod edit -toolchain=none -go=1.22 grep 'go 1.22$' go.mod ! grep toolchain go.mod env GOTOOLCHAIN=path ! go run rsc.io/fortune@v0.0.1 stderr 'running go1.50.0 from PATH' -- fakego.go -- package main import ( "fmt" "os" "path/filepath" "strings" ) func main() { exe, _ := os.Executable() name := filepath.Base(exe) name = strings.TrimSuffix(name, ".exe") fmt.Fprintf(os.Stderr, "running %s from PATH\n", name) os.Exit(1) // fail in case we are running this accidentally (like in "go mod edit") }