env GO111MODULE=on
[short] skip

# Populate go.sum.
go mod tidy
cp go.mod go.mod.orig

go list -test all
stdout rsc.io/quote
stdout golang.org/x/text/language

# why a package?
go mod why golang.org/x/text/language
cmp stdout why-language.txt

# why a module?
go mod why -m golang.org...
cmp stdout why-text-module.txt

# why a package used only in tests?
go mod why rsc.io/testonly
cmp stdout why-testonly.txt

# why a module used only in a test of a dependency?
go mod why -m rsc.io/testonly
cmp stdout why-testonly.txt

# test package not needed
go mod why golang.org/x/text/unused
cmp stdout why-unused.txt

# vendor doesn't use packages used only in tests.
go mod why -vendor rsc.io/testonly
cmp stdout why-vendor.txt

# vendor doesn't use modules used only in tests.
go mod why -vendor -m rsc.io/testonly
cmp stdout why-vendor-module.txt

# test multiple packages
go mod why golang.org/x/text/language golang.org/x/text/unused
cmp stdout why-both.txt

# test multiple modules
go mod why -m rsc.io/quote rsc.io/sampler
cmp stdout why-both-module.txt

# package in a module that isn't even in the module graph
# (https://golang.org/issue/26977)
go mod why rsc.io/fortune
cmp stdout why-missing.txt

# None of these command should have changed the go.mod file.
cmp go.mod go.mod.orig

-- go.mod --
module mymodule
require rsc.io/quote v1.5.2

-- x/x.go --
package x
import _ "mymodule/z"

-- y/y.go --
package y

-- y/y_test.go --
package y
import _ "rsc.io/quote"

-- z/z.go --
package z
import _ "mymodule/y"


-- why-language.txt --
# golang.org/x/text/language
mymodule/y
mymodule/y.test
rsc.io/quote
rsc.io/sampler
golang.org/x/text/language
-- why-unused.txt --
# golang.org/x/text/unused
(main module does not need package golang.org/x/text/unused)
-- why-text-module.txt --
# golang.org/x/text
mymodule/y
mymodule/y.test
rsc.io/quote
rsc.io/sampler
golang.org/x/text/language
-- why-testonly.txt --
# rsc.io/testonly
mymodule/y
mymodule/y.test
rsc.io/quote
rsc.io/sampler
rsc.io/sampler.test
rsc.io/testonly
-- why-vendor.txt --
# rsc.io/testonly
(main module does not need to vendor package rsc.io/testonly)
-- why-vendor-module.txt --
# rsc.io/testonly
(main module does not need to vendor module rsc.io/testonly)
-- why-both.txt --
# golang.org/x/text/language
mymodule/y
mymodule/y.test
rsc.io/quote
rsc.io/sampler
golang.org/x/text/language

# golang.org/x/text/unused
(main module does not need package golang.org/x/text/unused)
-- why-both-module.txt --
# rsc.io/quote
mymodule/y
mymodule/y.test
rsc.io/quote

# rsc.io/sampler
mymodule/y
mymodule/y.test
rsc.io/quote
rsc.io/sampler
-- why-missing.txt --
# rsc.io/fortune
(main module does not need package rsc.io/fortune)