]> Cypherpunks.ru repositories - gostls13.git/blob - src/cmd/go/testdata/script/gotoolchain_local.txt
cmd/go: additional doc-inspired tests and bug fixes
[gostls13.git] / src / cmd / go / testdata / script / gotoolchain_local.txt
1 # This test uses the fake toolchain switch support in cmd/go/internal/toolchain.Switch
2 # to exercise all the version selection logic without needing actual toolchains.
3 # See gotoolchain_net.txt and gotoolchain_path.txt for tests of network and PATH toolchains.
4
5 env TESTGO_VERSION=go1.500
6 env TESTGO_VERSION_SWITCH=switch
7
8 # Default setting should be auto
9 env GOTOOLCHAIN=
10 go env GOTOOLCHAIN
11 stdout auto
12 go env
13 stdout GOTOOLCHAIN=.?auto.?  # maybe quoted
14
15 # GOTOOLCHAIN=auto runs default toolchain without a go.mod or go.work
16 go version
17 stdout go1.500
18
19 # GOTOOLCHAIN=path runs default toolchain without a go.mod or go.work
20 env GOTOOLCHAIN=path
21 go version
22 stdout go1.500
23
24 # GOTOOLCHAIN=asdf is a syntax error
25 env GOTOOLCHAIN=asdf
26 ! go version
27 stderr '^go: invalid GOTOOLCHAIN "asdf"$'
28
29 # GOTOOLCHAIN=version is used directly.
30 env GOTOOLCHAIN=go1.600
31 go version
32 stdout go1.600
33
34 env GOTOOLCHAIN=go1.400
35 go version
36 stdout go1.400
37
38 # GOTOOLCHAIN=version+auto sets a minimum.
39 env GOTOOLCHAIN=go1.600+auto
40 go version
41 stdout go1.600
42
43 env GOTOOLCHAIN=go1.400+auto
44 go version
45 stdout go1.400
46
47 # GOTOOLCHAIN=version+path sets a minimum too.
48 env GOTOOLCHAIN=go1.600+path
49 go version
50 stdout go1.600
51
52 env GOTOOLCHAIN=go1.400+path
53 go version
54 stdout go1.400
55
56 # Create a go.mod file and test interactions with auto and path.
57
58 # GOTOOLCHAIN=auto uses go line if newer than local toolchain.
59 env GOTOOLCHAIN=auto
60 go mod init m
61 go mod edit -go=1.700 -toolchain=none
62 go version
63 stdout 1.700
64
65 go mod edit -go=1.300 -toolchain=none
66 go version
67 stdout 1.500 # local toolchain is newer
68
69 go mod edit -go=1.700 -toolchain=go1.300
70 go version
71 stdout go1.700 # toolchain too old, ignored
72
73 go mod edit -go=1.300 -toolchain=default
74 go version
75 stdout go1.500
76
77 go mod edit -go=1.700 -toolchain=default
78 go version
79 stdout go1.500 # toolchain local is like GOTOOLCHAIN=local and wins
80 ! go build
81 stderr '^go: go.mod requires go >= 1.700 \(running go 1.500; go.mod sets toolchain default\)'
82
83 # GOTOOLCHAIN=path does the same.
84 env GOTOOLCHAIN=path
85 go mod edit -go=1.700 -toolchain=none
86 go version
87 stdout 1.700
88
89 go mod edit -go=1.300 -toolchain=none
90 go version
91 stdout 1.500 # local toolchain is newer
92
93 go mod edit -go=1.700 -toolchain=go1.300
94 go version
95 stdout go1.700 # toolchain too old, ignored
96
97 go mod edit -go=1.300 -toolchain=default
98 go version
99 stdout go1.500
100
101 go mod edit -go=1.700 -toolchain=default
102 go version
103 stdout go1.500 # toolchain default applies even if older than go line
104 ! go build
105 stderr '^go: go.mod requires go >= 1.700 \(running go 1.500; GOTOOLCHAIN=path; go.mod sets toolchain default\)'
106
107 # GOTOOLCHAIN=min+auto with toolchain default uses min, not local
108
109 env GOTOOLCHAIN=go1.400+auto
110 go mod edit -go=1.300 -toolchain=default
111 go version
112 stdout 1.400 # not 1.500 local toolchain
113
114 env GOTOOLCHAIN=go1.600+auto
115 go mod edit -go=1.300 -toolchain=default
116 go version
117 stdout 1.600 # not 1.500 local toolchain
118
119 # GOTOOLCHAIN names can have -suffix
120 env GOTOOLCHAIN=go1.800-bigcorp
121 go version
122 stdout go1.800-bigcorp
123
124 env GOTOOLCHAIN=auto
125 go mod edit -go=1.999 -toolchain=go1.800-bigcorp
126 go version
127 stdout go1.999
128
129 go mod edit -go=1.777 -toolchain=go1.800-bigcorp
130 go version
131 stdout go1.800-bigcorp
132
133 # go.work takes priority over go.mod
134 go mod edit -go=1.700 -toolchain=go1.999-wrong
135 go work init
136 go work edit -go=1.400 -toolchain=go1.600-right
137 go version
138 stdout go1.600-right
139
140 go work edit -go=1.400 -toolchain=default
141 go version
142 stdout go1.500
143
144 # go.work misconfiguration does not break go work edit
145 # ('go 1.600 / toolchain local' forces use of 1.500 which can't normally load that go.work; allow work edit to fix it.)
146 go work edit -go=1.600 -toolchain=default
147 go version
148 stdout go1.500
149
150 go work edit -toolchain=none
151 go version
152 stdout go1.600
153
154 rm go.work
155
156 # go.mod misconfiguration does not break go mod edit
157 go mod edit -go=1.600 -toolchain=default
158 go version
159 stdout go1.500
160
161 go mod edit -toolchain=none
162 go version
163 stdout go1.600
164
165 # toolchain built with a custom version should know how it compares to others
166
167 env TESTGO_VERSION=go1.500-bigcorp
168 go mod edit -go=1.499 -toolchain=none
169 go version
170 stdout go1.500-bigcorp
171
172 go mod edit -go=1.500 -toolchain=none
173 go version
174 stdout go1.500-bigcorp
175
176 go mod edit -go=1.501 -toolchain=none
177 go version
178 stdout go1.501
179
180 env TESTGO_VERSION='go1.500 (bigcorp)'
181 go mod edit -go=1.499 -toolchain=none
182 go version
183 stdout 'go1.500 \(bigcorp\)'
184
185 go mod edit -go=1.500 -toolchain=none
186 go version
187 stdout 'go1.500 \(bigcorp\)'
188
189 go mod edit -go=1.501 -toolchain=none
190 go version
191 stdout go1.501
192
193 # go install m@v and go run m@v should ignore go.mod and use m@v
194 env TESTGO_VERSION=go1.2.3
195 go mod edit -go=1.999 -toolchain=go1.998
196
197 ! go install rsc.io/fortune/nonexist@v0.0.1
198 stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
199 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'
200
201 ! go run rsc.io/fortune/nonexist@v0.0.1
202 stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
203 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'
204
205 # go install should handle unknown flags to find m@v
206 ! go install -unknownflag rsc.io/fortune/nonexist@v0.0.1
207 stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
208 stderr '^flag provided but not defined: -unknownflag'
209
210 ! go install -unknownflag arg rsc.io/fortune/nonexist@v0.0.1
211 stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
212 stderr '^flag provided but not defined: -unknownflag'
213
214 # go run cannot handle unknown boolean flags
215 ! go run -unknownflag rsc.io/fortune/nonexist@v0.0.1
216 ! stderr switching
217 stderr '^flag provided but not defined: -unknownflag'
218
219 ! go run -unknownflag oops rsc.io/fortune/nonexist@v0.0.1
220 ! stderr switching
221 stderr '^flag provided but not defined: -unknownflag'
222
223 # go run can handle unknown flag with argument.
224 ! go run -unknown=flag rsc.io/fortune/nonexist@v0.0.1
225 stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
226 stderr '^flag provided but not defined: -unknown'
227
228 # go install m@v should handle queries
229 ! go install rsc.io/fortune/nonexist@v0.0
230 stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
231 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'
232
233 # go run m@v should handle queries
234 ! go install rsc.io/fortune/nonexist@v0
235 stderr '^go: rsc.io/fortune@v0.0.1 requires go >= 1.21rc999; switching to go1.22.9$'
236 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'
237
238 # go install m@v should use local toolchain if not upgrading
239 ! go install rsc.io/fortune/nonexist@v1
240 ! stderr go1.22.9
241 ! stderr switching
242 stderr '^go: downloading rsc.io/fortune v1.0.0$'
243 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'
244
245 # go run m@v should use local toolchain if not upgrading
246 ! go run rsc.io/fortune/nonexist@v1
247 ! stderr go1.22.9
248 ! stderr switching
249 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'