# https://golang.org/issue/44106
# 'go get' should fetch the transitive dependencies of packages regardless of
# tags, but shouldn't error out if the package is missing tag-guarded
# dependencies.

# Control case: just adding the top-level module to the go.mod file does not
# fetch its dependencies.

go mod edit -require example.net/tools@v0.1.0
! go list -deps example.net/cmd/tool
stderr '^module example\.net/cmd provides package example\.net/cmd/tool and is replaced but not required; to add it:\n\tgo get example\.net/cmd@v0\.1\.0$'
go mod edit -droprequire example.net/tools


# 'go get -d' makes a best effort to fetch those dependencies, but shouldn't
# error out if dependencies of tag-guarded files are missing.

go get -d example.net/tools@v0.1.0
! stderr 'no Go source files'

! go list example.net/tools
stderr '^package example.net/tools: build constraints exclude all Go files in .*[/\\]tools$'

go list -tags=tools -e -deps example.net/tools
stdout '^example.net/cmd/tool$'
stdout '^example.net/missing$'

go list -deps example.net/cmd/tool

! go list example.net/missing
stderr '^no required module provides package example.net/missing; to add it:\n\tgo get example.net/missing$'


# https://golang.org/issue/33526: 'go get' without '-d' should succeed
# for a module whose root is a constrained-out package.
#
# Ideally it should silently succeed, but today it logs the "no Go source files"
# error and succeeds anyway.

go get example.net/tools@v0.1.0
! stderr .

! go build example.net/tools
stderr '^package example.net/tools: build constraints exclude all Go files in .*[/\\]tools$'


# https://golang.org/issue/29268
# 'go get' should fetch modules whose roots contain test-only packages, but
# without the -t flag shouldn't error out if the test has missing dependencies.

go get -d example.net/testonly@v0.1.0

# With the -t flag, the test dependencies must resolve successfully.
! go get -d -t example.net/testonly@v0.1.0
stderr '^example.net/testonly tested by\n\texample.net/testonly\.test imports\n\texample.net/missing: cannot find module providing package example.net/missing$'


# 'go get -d' should succeed for a module path that does not contain a package,
# but fail for a non-package subdirectory of a module.

! go get -d example.net/missing/subdir@v0.1.0
stderr '^go get: module example.net/missing@v0.1.0 found \(replaced by ./missing\), but does not contain package example.net/missing/subdir$'

go get -d example.net/missing@v0.1.0


# Getting the subdirectory should continue to fail even if the corresponding
# module is already present in the build list.

! go get -d example.net/missing/subdir@v0.1.0
stderr '^go get: module example.net/missing@v0.1.0 found \(replaced by ./missing\), but does not contain package example.net/missing/subdir$'


-- go.mod --
module example.net/m

go 1.15

replace (
	example.net/tools v0.1.0 => ./tools
	example.net/cmd v0.1.0 => ./cmd
	example.net/testonly v0.1.0 => ./testonly
	example.net/missing v0.1.0 => ./missing
)

-- tools/go.mod --
module example.net/tools

go 1.15

// Requirements intentionally omitted.

-- tools/tools.go --
// +build tools

package tools

import (
	_ "example.net/cmd/tool"
	_ "example.net/missing"
)

-- cmd/go.mod --
module example.net/cmd

go 1.16
-- cmd/tool/tool.go --
package main

func main() {}

-- testonly/go.mod --
module example.net/testonly

go 1.15
-- testonly/testonly_test.go --
package testonly_test

import _ "example.net/missing"

func Test(t *testing.T) {}

-- missing/go.mod --
module example.net/missing

go 1.15
-- missing/README.txt --
There are no Go source files here.
-- missing/subdir/README.txt --
There are no Go source files here either.
