# Return an error if the user tries to list a go source file directly in $GOROOT/src.
# Tests golang.org/issue/36587

env GOROOT=$WORK/goroot
env GOPATH=$WORK/gopath

go env GOROOT
stdout $WORK[/\\]goroot

# switch to GOROOT/src
cd $GOROOT/src

# In module mode, 'go list ./...' should not treat .go files in GOROOT/src as an
# importable package, since that directory has no valid import path.
env GO111MODULE=on
go list ...
stdout -count=1 '^.+$'
stdout '^fmt$'
! stdout foo

go list ./...
stdout -count=1 '^.+$'
stdout '^fmt$'
! stdout foo

go list std
stdout -count=1 '^.+$'
stdout '^fmt$'

! go list .
stderr '^GOROOT/src is not an importable package$'

# In GOPATH mode, 'go list ./...' should synthesize a legacy GOPATH-mode path —
# not a standard-library or empty path — for the errant package.
env GO111MODULE=off
go list ./...
stdout -count=2 '^.+$' # Both 'fmt' and GOROOT/src should be listed.
stdout '^fmt$'
[!windows] stdout ^_$WORK/goroot/src$
[windows] stdout goroot/src$ # On windows the ":" in the volume name is mangled

go list ...
! stdout goroot/src

go list std
! stdout goroot/src

go list .
[!windows] stdout ^_$WORK/goroot/src$
[windows] stdout goroot/src$

# switch to GOPATH/src
cd $GOPATH/src

# GO111MODULE=off,GOPATH
env GO111MODULE=off
go list ./...
[!windows] stdout ^_$WORK/gopath/src$
[windows] stdout gopath/src$

go list all
! stdout gopath/src

-- $WORK/goroot/src/go.mod --
module std

go 1.14
-- $WORK/goroot/src/foo.go --
package foo
-- $WORK/goroot/src/fmt/fmt.go --
package fmt
-- $WORK/goroot/src/cmd/README --
This directory must exist in order for the 'cmd' pattern to have something to
match against.
-- $GOPATH/src/foo.go --
package foo
