env GO111MODULE=on

# golang.org/issue/31248: required modules imposed by dependency versions
# older than the selected version must still be taken into account.

env GOFLAGS=-mod=readonly

# Indirect dependencies required via older-than-selected versions must exist in
# the module graph, but do not need to be listed explicitly in the go.mod file
# (since they are implied).
go mod graph
stdout i@v0.1.0

# The modules must also appear in the build list, not just the graph.
go list -m all
stdout '^i v0.1.0'

# The packages provided by those dependencies must resolve.
go list all
stdout '^i$'

-- go.mod --
module main

go 1.13

require (
	a v0.0.0
	b v0.0.0
	c v0.0.0
)

// Apply replacements so that the test can be self-contained.
// (It's easier to see all of the modules here than to go
// rooting around in testdata/mod.)
replace (
	a => ./a
	b => ./b
	c => ./c
	x v0.1.0 => ./x1
	x v0.2.0 => ./x2
	i => ./i
)
-- main.go --
package main

import (
	_ "a"
	_ "b"
	_ "c"
)

func main() {}
-- a/go.mod --
module a
go 1.13
require x v0.1.0
-- a/a.go --
package a
-- b/go.mod --
module b
go 1.13
require x v0.2.0
-- b/b.go --
package b
-- c/go.mod --
module c
go 1.13
-- c/c.go --
package c
import _ "i"
-- x1/go.mod --
module x
go1.13
require i v0.1.0
-- x2/go.mod --
module x
go1.13
-- i/go.mod --
-- i/i.go --
package i
