summaryrefslogtreecommitdiffstats
path: root/src/cmd/go/testdata/script/gotoolchain_local.txt
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-16 19:25:22 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-16 19:25:22 +0000
commitf6ad4dcef54c5ce997a4bad5a6d86de229015700 (patch)
tree7cfa4e31ace5c2bd95c72b154d15af494b2bcbef /src/cmd/go/testdata/script/gotoolchain_local.txt
parentInitial commit. (diff)
downloadgolang-1.22-f6ad4dcef54c5ce997a4bad5a6d86de229015700.tar.xz
golang-1.22-f6ad4dcef54c5ce997a4bad5a6d86de229015700.zip
Adding upstream version 1.22.1.upstream/1.22.1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'src/cmd/go/testdata/script/gotoolchain_local.txt')
-rw-r--r--src/cmd/go/testdata/script/gotoolchain_local.txt256
1 files changed, 256 insertions, 0 deletions
diff --git a/src/cmd/go/testdata/script/gotoolchain_local.txt b/src/cmd/go/testdata/script/gotoolchain_local.txt
new file mode 100644
index 0000000..db7e082
--- /dev/null
+++ b/src/cmd/go/testdata/script/gotoolchain_local.txt
@@ -0,0 +1,256 @@
+# This test uses the fake toolchain switch support in cmd/go/internal/toolchain.Switch
+# to exercise all the version selection logic without needing actual toolchains.
+# See gotoolchain_net.txt and gotoolchain_path.txt for tests of network and PATH toolchains.
+
+env TESTGO_VERSION=go1.500
+env TESTGO_VERSION_SWITCH=switch
+
+# GOTOOLCHAIN=auto runs default toolchain without a go.mod or go.work
+env GOTOOLCHAIN=auto
+go version
+stdout go1.500
+
+# GOTOOLCHAIN=path runs default toolchain without a go.mod or go.work
+env GOTOOLCHAIN=path
+go version
+stdout go1.500
+
+# GOTOOLCHAIN=asdf is a syntax error
+env GOTOOLCHAIN=asdf
+! go version
+stderr '^go: invalid GOTOOLCHAIN "asdf"$'
+
+# GOTOOLCHAIN=version is used directly.
+env GOTOOLCHAIN=go1.600
+go version
+stdout go1.600
+
+env GOTOOLCHAIN=go1.400
+go version
+stdout go1.400
+
+# GOTOOLCHAIN=version+auto sets a minimum.
+env GOTOOLCHAIN=go1.600+auto
+go version
+stdout go1.600
+
+env GOTOOLCHAIN=go1.400.0+auto
+go version
+stdout go1.400.0
+
+# GOTOOLCHAIN=version+path sets a minimum too.
+env GOTOOLCHAIN=go1.600+path
+go version
+stdout go1.600
+
+env GOTOOLCHAIN=go1.400+path
+go version
+stdout go1.400
+
+# Create a go.mod file and test interactions with auto and path.
+
+# GOTOOLCHAIN=auto uses go line if newer than local toolchain.
+env GOTOOLCHAIN=auto
+go mod init m
+go mod edit -go=1.700 -toolchain=none
+go version
+stdout 1.700
+
+go mod edit -go=1.300 -toolchain=none
+go version
+stdout 1.500 # local toolchain is newer
+
+go mod edit -go=1.700 -toolchain=go1.300
+go version
+stdout go1.700 # toolchain too old, ignored
+
+go mod edit -go=1.300 -toolchain=default
+go version
+stdout go1.500
+
+go mod edit -go=1.700 -toolchain=default
+go version
+stdout go1.500 # toolchain local is like GOTOOLCHAIN=local and wins
+! go build
+stderr '^go: go.mod requires go >= 1.700 \(running go 1.500; go.mod sets toolchain default\)'
+
+# GOTOOLCHAIN=path does the same.
+env GOTOOLCHAIN=path
+go mod edit -go=1.700 -toolchain=none
+go version
+stdout 1.700
+
+go mod edit -go=1.300 -toolchain=none
+go version
+stdout 1.500 # local toolchain is newer
+
+go mod edit -go=1.700 -toolchain=go1.300
+go version
+stdout go1.700 # toolchain too old, ignored
+
+go mod edit -go=1.300 -toolchain=default
+go version
+stdout go1.500
+
+go mod edit -go=1.700 -toolchain=default
+go version
+stdout go1.500 # toolchain default applies even if older than go line
+! go build
+stderr '^go: go.mod requires go >= 1.700 \(running go 1.500; GOTOOLCHAIN=path; go.mod sets toolchain default\)'
+
+# GOTOOLCHAIN=min+auto with toolchain default uses min, not local
+
+env GOTOOLCHAIN=go1.400+auto
+go mod edit -go=1.300 -toolchain=default
+go version
+stdout 1.400 # not 1.500 local toolchain
+
+env GOTOOLCHAIN=go1.600+auto
+go mod edit -go=1.300 -toolchain=default
+go version
+stdout 1.600 # not 1.500 local toolchain
+
+# GOTOOLCHAIN names can have -suffix
+env GOTOOLCHAIN=go1.800-bigcorp
+go version
+stdout go1.800-bigcorp
+
+env GOTOOLCHAIN=auto
+go mod edit -go=1.999 -toolchain=go1.800-bigcorp
+go version
+stdout go1.999
+
+go mod edit -go=1.777 -toolchain=go1.800-bigcorp
+go version
+stdout go1.800-bigcorp
+
+# go.work takes priority over go.mod
+go mod edit -go=1.700 -toolchain=go1.999-wrong
+go work init
+go work edit -go=1.400 -toolchain=go1.600-right
+go version
+stdout go1.600-right
+
+go work edit -go=1.400 -toolchain=default
+go version
+stdout go1.500
+
+# go.work misconfiguration does not break go work edit
+# ('go 1.600 / toolchain local' forces use of 1.500 which can't normally load that go.work; allow work edit to fix it.)
+go work edit -go=1.600 -toolchain=default
+go version
+stdout go1.500
+
+go work edit -toolchain=none
+go version
+stdout go1.600
+
+rm go.work
+
+# go.mod misconfiguration does not break go mod edit
+go mod edit -go=1.600 -toolchain=default
+go version
+stdout go1.500
+
+go mod edit -toolchain=none
+go version
+stdout go1.600
+
+# toolchain built with a custom version should know how it compares to others
+
+env TESTGO_VERSION=go1.500-bigcorp
+go mod edit -go=1.499 -toolchain=none
+go version
+stdout go1.500-bigcorp
+
+go mod edit -go=1.499 -toolchain=go1.499
+go version
+stdout go1.500-bigcorp
+
+go mod edit -go=1.500 -toolchain=none
+go version
+stdout go1.500-bigcorp
+
+go mod edit -go=1.500 -toolchain=go1.500
+go version
+stdout go1.500-bigcorp
+
+go mod edit -go=1.501 -toolchain=none
+go version
+stdout go1.501
+
+ # If toolchain > go, we must upgrade to the indicated toolchain (not just the go version).
+go mod edit -go=1.499 -toolchain=go1.501
+go version
+stdout go1.501
+
+env TESTGO_VERSION='go1.500 (bigcorp)'
+go mod edit -go=1.499 -toolchain=none
+go version
+stdout 'go1.500 \(bigcorp\)'
+
+go mod edit -go=1.500 -toolchain=none
+go version
+stdout 'go1.500 \(bigcorp\)'
+
+go mod edit -go=1.501 -toolchain=none
+go version
+stdout go1.501
+
+# go install m@v and go run m@v should ignore go.mod and use m@v
+env TESTGO_VERSION=go1.2.3
+go mod edit -go=1.999 -toolchain=go1.998
+
+! go install rsc.io/fortune/nonexist@v0.0.1
+stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
+stderr '^go: rsc.io/fortune/nonexist@v0.0.1: module rsc.io/fortune@v0.0.1 found, but does not contain package rsc.io/fortune/nonexist'
+
+! go run rsc.io/fortune/nonexist@v0.0.1
+stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
+stderr '^go: rsc.io/fortune/nonexist@v0.0.1: module rsc.io/fortune@v0.0.1 found, but does not contain package rsc.io/fortune/nonexist'
+
+# go install should handle unknown flags to find m@v
+! go install -unknownflag rsc.io/fortune/nonexist@v0.0.1
+stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
+stderr '^flag provided but not defined: -unknownflag'
+
+! go install -unknownflag arg rsc.io/fortune/nonexist@v0.0.1
+stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
+stderr '^flag provided but not defined: -unknownflag'
+
+# go run cannot handle unknown boolean flags
+! go run -unknownflag rsc.io/fortune/nonexist@v0.0.1
+! stderr switching
+stderr '^flag provided but not defined: -unknownflag'
+
+! go run -unknownflag oops rsc.io/fortune/nonexist@v0.0.1
+! stderr switching
+stderr '^flag provided but not defined: -unknownflag'
+
+# go run can handle unknown flag with argument.
+! go run -unknown=flag rsc.io/fortune/nonexist@v0.0.1
+stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
+stderr '^flag provided but not defined: -unknown'
+
+# go install m@v should handle queries
+! go install rsc.io/fortune/nonexist@v0.0
+stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
+stderr '^go: rsc.io/fortune/nonexist@v0.0: module rsc.io/fortune@v0.0 found \(v0.0.1\), but does not contain package rsc.io/fortune/nonexist'
+
+# go run m@v should handle queries
+! go install rsc.io/fortune/nonexist@v0
+stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
+stderr '^go: rsc.io/fortune/nonexist@v0: module rsc.io/fortune@v0 found \(v0.0.1\), but does not contain package rsc.io/fortune/nonexist'
+
+# go install m@v should use local toolchain if not upgrading
+! go install rsc.io/fortune/nonexist@v1
+! stderr go1.22.9
+! stderr switching
+stderr '^go: downloading rsc.io/fortune v1.0.0$'
+stderr '^go: rsc.io/fortune/nonexist@v1: module rsc.io/fortune@v1 found \(v1.0.0\), but does not contain package rsc.io/fortune/nonexist'
+
+# go run m@v should use local toolchain if not upgrading
+! go run rsc.io/fortune/nonexist@v1
+! stderr go1.22.9
+! stderr switching
+stderr '^go: rsc.io/fortune/nonexist@v1: module rsc.io/fortune@v1 found \(v1.0.0\), but does not contain package rsc.io/fortune/nonexist'