# 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' makes a best effort to fetch those dependencies, but shouldn't
# error out if dependencies of tag-guarded files are missing.

go get 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 example.net/testonly@v0.1.0

# With the -t flag, the test dependencies must resolve successfully.
! go get -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' should succeed for a module path that does not contain a package,
# but fail for a non-package subdirectory of a module.

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

go get 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 example.net/missing/subdir@v0.1.0
stderr '^go: 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.
