cp go.mod go.mod.orig

# For modules whose go.mod file does not include a 'go' directive,
# we assume the language and dependency semantics of Go 1.16,
# but do not trigger “automatic vendoring” mode (-mod=vendor),
# which was added in Go 1.14 and was not triggered
# under the same conditions in Go 1.16 (which would instead
# default to -mod=readonly when no 'go' directive is present).

# For Go 1.16 modules, 'all' should prune out dependencies of tests,
# even if the 'go' directive is missing.

go list -mod=readonly all
stdout '^example.com/dep$'
! stdout '^example.com/testdep$'
cp stdout list-1.txt
cmp go.mod go.mod.orig

# We should only default to -mod=vendor if the 'go' directive is explicit in the
# go.mod file. Otherwise, we don't actually know whether the module was written
# against Go 1.11 or 1.16. We would have to update the go.mod file to clarify,
# and as of Go 1.16 we don't update the go.mod file by default.
#
# If we set -mod=vendor explicitly, we shouldn't apply the Go 1.14
# consistency check, because — again — we don't know whether we're in a 1.11
# module or a bad-script-edited 1.16 module.

! go list -mod=vendor all
! stderr '^go: inconsistent vendoring'
stderr 'cannot find package "\." in:\n\t.*[/\\]vendor[/\\]example.com[/\\]badedit$'

# When we set -mod=mod, the go version should be updated immediately,
# to the current version, converting the requirements from eager to lazy.
#
# Since we don't know which requirements are actually relevant to the main
# module, all requirements are added as roots, making the requirements untidy.

go list -mod=mod all
! stdout '^example.com/testdep$'
cmp stdout list-1.txt
cmpenv go.mod go.mod.untidy

go mod tidy
cmpenv go.mod go.mod.tidy

# On the other hand, if we jump straight to 'go mod tidy',
# the requirements remain tidy from the start.

cp go.mod.orig go.mod
go mod tidy
cmpenv go.mod go.mod.tidy


# The updated version should have been written back to go.mod, so now the 'go'
# directive is explicit. -mod=vendor should trigger by default, and the stronger
# Go 1.14 consistency check should apply.
! go list all
stderr '^go: inconsistent vendoring'
! stderr badedit


-- go.mod --
module example.com/m

require example.com/dep v0.1.0

replace (
	example.com/dep v0.1.0 => ./dep
	example.com/testdep v0.1.0 => ./testdep
)
-- go.mod.untidy --
module example.com/m

go $goversion

require example.com/dep v0.1.0

require example.com/testdep v0.1.0 // indirect

replace (
	example.com/dep v0.1.0 => ./dep
	example.com/testdep v0.1.0 => ./testdep
)
-- go.mod.tidy --
module example.com/m

go $goversion

require example.com/dep v0.1.0

replace (
	example.com/dep v0.1.0 => ./dep
	example.com/testdep v0.1.0 => ./testdep
)
-- vendor/example.com/dep/dep.go --
package dep
import _ "example.com/badedit"
-- vendor/modules.txt --
HAHAHA this is broken.

-- m.go --
package m

import _ "example.com/dep"

const x = 1_000

-- dep/go.mod --
module example.com/dep

require example.com/testdep v0.1.0
-- dep/dep.go --
package dep
-- dep/dep_test.go --
package dep_test

import _ "example.com/testdep"

-- testdep/go.mod --
module example.com/testdep
-- testdep/testdep.go --
package testdep
