# This test makes sure workspace mode's handling of the module graph # is compatible with module pruning. The graph we load from either of # the workspace modules should be the same, even if their graphs # don't overlap. # # This is the module graph in the test: # # example.com/a -> example.com/b v1.0.0 -> example.com/q v1.1.0 # example.com/p -> example.com/q v1.0.0 # # If we didn't load the whole graph and didn't load the dependencies of b # when loading p, we would end up loading q v1.0.0, rather than v1.1.0, # which is selected by MVS. # TODO(#48331): We currently load the wrong version of q. Fix this. go list -m -f '{{.Version}}' example.com/q stdout '^v1.1.0$' -- go.work -- go 1.18 use ( ./a ./p ) -- a/go.mod -- module example.com/a go 1.18 require example.com/b v1.0.0 replace example.com/b v1.0.0 => ../b -- a/foo.go -- package main import "example.com/b" func main() { b.B() } -- b/go.mod -- module example.com/b go 1.18 require example.com/q v1.1.0 replace example.com/q v1.0.0 => ../q1_0_0 replace example.com/q v1.1.0 => ../q1_1_0 -- b/b.go -- package b func B() { } -- b/b_test.go -- package b import "example.com/q" func TestB() { q.PrintVersion() } -- p/go.mod -- module example.com/p go 1.18 require example.com/q v1.0.0 replace example.com/q v1.0.0 => ../q1_0_0 replace example.com/q v1.1.0 => ../q1_1_0 -- p/main.go -- package main import "example.com/q" func main() { q.PrintVersion() } -- q1_0_0/go.mod -- module example.com/q go 1.18 -- q1_0_0/q.go -- package q import "fmt" func PrintVersion() { fmt.Println("version 1.0.0") } -- q1_1_0/go.mod -- module example.com/q go 1.18 -- q1_1_0/q.go -- package q import "fmt" func PrintVersion() { fmt.Println("version 1.1.0") }