blob: 4ce9fb167bd658976535182d8d3370f40a747419 [file] [log] [blame]
cp go.mod go.mod.old
go mod tidy
cmp go.mod go.mod.old
# 'go list -m all' includes modules that cover the test dependencies of
# the packages imported by the main module.
go list -m all
stdout 'example.com/b v0.1.0'
stdout 'example.com/c v0.1.0'
cmp go.mod go.mod.old
# 'go test' (or equivalent) of any package in 'all' should use its existing
# dependencies without updating the go.mod file.
go list all # Control case: example.com/b really is in 'all'.
stdout '^example.com/b$'
cmp go.mod go.mod.old # Already tidy, so dependencies shouldn't change.
go list -test -deps example.com/b
stdout '^example.com/b$'
stdout '^example.com/c$'
! stdout '^example.com/d$'
[!short] go test -c example.com/b
cmp go.mod go.mod.old # Should have resolved the above without modifying go.mod.
# TODO(#36460):
# 'go list -m all' should include modules that cover the test dependencies of
# the packages imported by the main module, found via a deepening scan.
# 'go test' of any package in 'all' should use its existing dependencies without
# updating the go.mod file. This requires that we consider _dependencies of_ the
# explicit dependencies of the main module, and that we not record those
# dependencies explicitly after loading them.
-- go.mod --
module example.com/lazy
go 1.14
require example.com/a v0.1.0
replace (
example.com/a v0.1.0 => ./a
example.com/b v0.1.0 => ./b1
example.com/b v0.2.0 => ./b2
example.com/c v0.1.0 => ./c
example.com/d v0.1.0 => ./d
)
-- lazy.go --
package lazy
import (
_ "example.com/a/x"
)
-- a/go.mod --
module example.com/a
go 1.14
require example.com/b v0.1.0
-- a/x/x.go --
package x
-- a/x/x_test.go --
package x
import (
"testing"
_ "example.com/b"
)
func TestUsingB(t *testing.T) {
// …
}
-- b1/go.mod --
module example.com/b
go 1.14
require example.com/c v0.1.0
-- b1/b.go --
package b
-- b1/b_test.go --
package b
import _ "example.com/c"
-- b2/go.mod --
module example.com/b
go 1.14
require example.com/c v0.1.0
-- b2/b.go --
package b
-- b2/b_test.go --
package b
import _ "example.com/c"
This file should not be used, so this syntax error should be ignored.
-- c/go.mod --
module example.com/c
go 1.14
require example.com/d v0.1.0
-- c/c.go --
package c
-- c/c_test.go --
package c
import _ "example.com/d"
This file should not be used, so this syntax error should be ignored.
-- d/go.mod --
module example.com/d
go 1.14
-- d/d.go --
package d
This file should not be used, so this syntax error should be ignored.