# This file demonstrates the effect of lazy loading on the selected
# versions of test dependencies.

# The package import graph used in this test looks like:
#
# m ---- a
#  \     |
#   \    a_test ---- b
#    \               |
#     x              b_test
#     |                    \
#     x_test -------------- c
#
# And the module dependency graph looks like:
#
# m -- a.1 -- b.1 -- c.2
#  \
#   x.1 ------------ c.1

# Control case: in Go 1.15, the version of c imported by 'go test x' is the
# version required by module b, even though b_test is not relevant to the main
# module. (The main module imports a, and a_test imports b, but all of the
# packages and tests in the main module can be built without b.)

go list -m c
stdout '^c v0.2.0 '

[!short] go test -v x
[!short] stdout ' c v0.2.0$'

# With lazy loading, the go.mod requirements are the same,
# but the irrelevant dependency on c v0.2.0 should be pruned out,
# leaving only the relevant dependency on c v0.1.0.

go mod edit -go=1.16
go list -m c
stdout '^c v0.2.0'  # TODO(#36460): v0.1.0

[!short] go test -v x
[!short] stdout ' c v0.2.0$'  # TODO(#36460): v0.1.0

-- m.go --
package m

import (
	_ "a"
	_ "x"
)
-- go.mod --
module m

go 1.15

require (
	a v0.1.0
	x v0.1.0
)

replace (
	a v0.1.0 => ./a1
	b v0.1.0 => ./b1
	c v0.1.0 => ./c1
	c v0.2.0 => ./c2
	x v0.1.0 => ./x1
)
-- a1/go.mod --
module a

go 1.16

require b v0.1.0
-- a1/a.go --
package a
-- a1/a_test.go --
package a_test

import _ "b"
-- b1/go.mod --
module b

go 1.16

require c v0.2.0
-- b1/b.go --
package b
-- b1/b_test.go --
package b_test

import (
	"c"
	"testing"
)

func TestCVersion(t *testing.T) {
	t.Log(c.Version)
}
-- c1/go.mod --
module c

go 1.16
-- c1/c.go --
package c

const Version = "v0.1.0"
-- c2/go.mod --
module c

go 1.16
-- c2/c.go --
package c

const Version = "v0.2.0"
-- x1/go.mod --
module x

go 1.16

require c v0.1.0
-- x1/x.go --
package x
-- x1/x_test.go --
package x_test

import (
	"c"
	"testing"
)

func TestCVersion(t *testing.T) {
	t.Log("c", c.Version)
}
