env GO111MODULE=on

# Regression test for https://golang.org/issue/34769.
# Missing standard-library imports should refer to GOROOT rather than
# complaining about a malformed module path.
# This is especially important when GOROOT is set incorrectly,
# since such an error will occur for every package in std.

# Building a nonexistent std package directly should fail usefully.

! go build -mod=readonly nonexist
! stderr 'import lookup disabled'
! stderr 'missing dot'
stderr '^package nonexist is not in std \('$GOROOT'[/\\]src[/\\]nonexist\)$'

! go build nonexist
! stderr 'import lookup disabled'
! stderr 'missing dot'
stderr '^package nonexist is not in std \('$GOROOT'[/\\]src[/\\]nonexist\)$'

# Building a nonexistent std package indirectly should also fail usefully.

! go build -mod=readonly ./importnonexist
! stderr 'import lookup disabled'
! stderr 'missing dot'
stderr '^importnonexist[/\\]x.go:2:8: package nonexist is not in std \('$GOROOT'[/\\]src[/\\]nonexist\)$'

! go build ./importnonexist
! stderr 'import lookup disabled'
! stderr 'missing dot'
stderr '^importnonexist[/\\]x.go:2:8: package nonexist is not in std \('$GOROOT'[/\\]src[/\\]nonexist\)$'

# Building an *actual* std package should fail if GOROOT is set to something bogus.

[!short] go build ./importjson  # Prove that it works when GOROOT is valid.

env GOROOT=$WORK/not-a-valid-goroot
! go build ./importjson
! stderr 'import lookup disabled'
! stderr 'missing dot'
stderr 'importjson[/\\]x.go:2:8: package encoding/json is not in std \('$WORK'[/\\]not-a-valid-goroot[/\\]src[/\\]encoding[/\\]json\)$'

-- go.mod --
module example.com
go 1.14
-- importnonexist/x.go --
package importnonexist
import _ "nonexist"
-- importjson/x.go --
package importjson
import _ "encoding/json"
-- $WORK/not-a-valid-goroot/README --
This directory is not a valid GOROOT.
