...
1env GO111MODULE=off
2
3# go env should default to the right places
4env AppData=$HOME/windowsappdata
5env home=$HOME/plan9home
6go env GOENV
7[GOOS:aix] stdout $HOME/.config/go/env
8[GOOS:darwin] stdout $HOME'/Library/Application Support/go/env'
9[GOOS:freebsd] stdout $HOME/.config/go/env
10[GOOS:linux] stdout $HOME/.config/go/env
11[GOOS:netbsd] stdout $HOME/.config/go/env
12[GOOS:openbsd] stdout $HOME/.config/go/env
13[GOOS:plan9] stdout $HOME/plan9home/lib/go/env
14[GOOS:windows] stdout $HOME\\windowsappdata\\go\\env
15
16# Now override it to something writable.
17env GOENV=$WORK/envdir/go/env
18go env GOENV
19stdout envdir[\\/]go[\\/]env
20
21# go env shows all variables
22go env
23stdout GOARCH=
24stdout GOOS=
25stdout GOROOT=
26
27# go env ignores invalid flag in GOFLAGS environment variable
28env GOFLAGS='=true'
29go env
30
31# checking errors
32! go env -w
33stderr 'go: no KEY=VALUE arguments given'
34! go env -u
35stderr 'go: ''go env -u'' requires an argument'
36
37# go env -w changes default setting
38env root=
39[GOOS:windows] env root=c:
40env GOPATH=
41go env -w GOPATH=$root/non-exist/gopath
42! stderr .+
43grep GOPATH=$root/non-exist/gopath $WORK/envdir/go/env
44go env GOPATH
45stdout /non-exist/gopath
46
47# go env -w does not override OS environment, and warns about that
48env GOPATH=$root/other
49go env -w GOPATH=$root/non-exist/gopath2
50stderr 'warning: go env -w GOPATH=... does not override conflicting OS environment variable'
51go env GOPATH
52stdout $root/other
53
54# but go env -w does do the update, and unsetting the env var exposes the change
55env GOPATH=
56go env GOPATH
57stdout $root/non-exist/gopath2
58
59# unsetting with go env -u does not warn about OS environment overrides,
60# nor does it warn about variables that haven't been set by go env -w.
61env GOPATH=$root/other
62go env -u GOPATH
63! stderr .+
64go env -u GOPATH
65! stderr .+
66
67# go env -w rejects unknown or bad variables
68! go env -w GOGC=off
69stderr 'unknown go command variable GOGC'
70! go env -w GOEXE=.bat
71stderr 'GOEXE cannot be modified'
72! go env -w GOVERSION=customversion
73stderr 'GOVERSION cannot be modified'
74! go env -w GOROOT=./go
75stderr 'GOROOT cannot be modified'
76! go env -w GOENV=/env
77stderr 'GOENV can only be set using the OS environment'
78! go env -w GODEBUG=gctrace=1
79stderr 'GODEBUG can only be set using the OS environment'
80
81# go env -w can set multiple variables
82env CC=
83go env CC
84! stdout ^xyc$
85go env -w GOOS=$GOOS CC=xyc
86grep CC=xyc $GOENV
87# file is maintained in sorted order
88grep 'CC=xyc\nGOOS=' $GOENV
89go env CC
90stdout ^xyc$
91
92# go env -u unsets effect of go env -w.
93go env -u CC
94go env CC
95! stdout ^xyc$
96
97# go env -w rejects double-set variables
98! go env -w GOOS=$GOOS GOOS=$GOOS
99stderr 'multiple values for key: GOOS'
100
101# go env -w rejects missing variables
102! go env -w GOOS
103stderr 'arguments must be KEY=VALUE: invalid argument: GOOS'
104
105# go env -w rejects invalid GO111MODULE values, as otherwise cmd/go would break
106! go env -w GO111MODULE=badvalue
107stderr 'invalid GO111MODULE value "badvalue"'
108
109# go env -w rejects invalid GOPATH values
110! go env -w GOPATH=~/go
111stderr 'GOPATH entry cannot start with shell metacharacter'
112
113! go env -w GOPATH=./go
114stderr 'GOPATH entry is relative; must be absolute path'
115
116# go env -w rejects invalid GOTMPDIR values
117! go env -w GOTMPDIR=x
118stderr 'go: GOTMPDIR must be an absolute path'
119
120# go env -w should accept absolute GOTMPDIR value
121# and should not create it
122[GOOS:windows] go env -w GOTMPDIR=$WORK\x\y\z
123[!GOOS:windows] go env -w GOTMPDIR=$WORK/x/y/z
124! exists $WORK/x/y/z
125# we should be able to clear an env
126go env -u GOTMPDIR
127go env GOTMPDIR
128stdout ^$
129
130[GOOS:windows] go env -w GOTMPDIR=$WORK\x\y\z
131[!GOOS:windows] go env -w GOTMPDIR=$WORK/x/y/z
132go env -w GOTMPDIR=
133go env GOTMPDIR
134stdout ^$
135
136# go env -w rejects relative CC values
137[!GOOS:windows] go env -w CC=/usr/bin/clang
138go env -w CC=clang
139[!GOOS:windows] ! go env -w CC=./clang
140[!GOOS:windows] ! go env -w CC=bin/clang
141[!GOOS:windows] stderr 'go: CC entry is relative; must be absolute path'
142
143[GOOS:windows] go env -w CC=$WORK\bin\clang
144[GOOS:windows] ! go env -w CC=.\clang
145[GOOS:windows] ! go env -w CC=bin\clang
146[GOOS:windows] stderr 'go: CC entry is relative; must be absolute path'
147
148# go env -w rejects relative CXX values
149[!GOOS:windows] go env -w CC=/usr/bin/cpp
150go env -w CXX=cpp
151[!GOOS:windows] ! go env -w CXX=./cpp
152[!GOOS:windows] ! go env -w CXX=bin/cpp
153[!GOOS:windows] stderr 'go: CXX entry is relative; must be absolute path'
154
155[GOOS:windows] go env -w CXX=$WORK\bin\cpp
156[GOOS:windows] ! go env -w CXX=.\cpp
157[GOOS:windows] ! go env -w CXX=bin\cpp
158[GOOS:windows] stderr 'go: CXX entry is relative; must be absolute path'
159
160# go env -w/-u checks validity of GOOS/ARCH combinations
161env GOOS=
162env GOARCH=
163# check -w doesn't allow invalid GOOS
164! go env -w GOOS=linuxx
165stderr 'unsupported GOOS/GOARCH pair linuxx'
166# check -w doesn't allow invalid GOARCH
167! go env -w GOARCH=amd644
168stderr 'unsupported GOOS/GOARCH.*/amd644$'
169# check -w doesn't allow invalid GOOS with valid GOARCH
170! go env -w GOOS=linuxx GOARCH=amd64
171stderr 'unsupported GOOS/GOARCH pair linuxx'
172# check a valid GOOS and GOARCH values but an incompatible combinations
173! go env -w GOOS=android GOARCH=s390x
174stderr 'unsupported GOOS/GOARCH pair android/s390x'
175# check that -u considers explicit envs
176go env -w GOOS=linux GOARCH=mips
177env GOOS=windows
178! go env -u GOOS
179stderr 'unsupported GOOS/GOARCH.*windows/mips$'
180env GOOS=
181
182# go env -w should reject relative paths in GOMODCACHE environment.
183! go env -w GOMODCACHE=~/test
184stderr 'go: GOMODCACHE entry is relative; must be absolute path: "~/test"'
185! go env -w GOMODCACHE=./test
186stderr 'go: GOMODCACHE entry is relative; must be absolute path: "./test"'
187
188# go env -w checks validity of GOEXPERIMENT
189env GOEXPERIMENT=
190! go env -w GOEXPERIMENT=badexp
191stderr 'unknown GOEXPERIMENT badexp'
192go env -w GOEXPERIMENT=fieldtrack
193
194# go env -w and go env -u work on unknown fields already in the go/env file
195cp bad.env $GOENV
196go env GOENV
197cat $GOENV
198go env
199! stdout UNKNOWN
200go env UNKNOWN
201stdout yes
202go env -w UNKNOWN=maybe
203go env UNKNOWN
204stdout maybe
205go env -u UNKNOWN
206go env UNKNOWN
207! stdout . # gone
208
209-- bad.env --
210UNKNOWN=yes
View as plain text