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

[gccgo] skip

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
