From: Daniel Martí Date: Sat, 30 Jan 2021 11:41:29 +0000 (+0000) Subject: cmd/go: make -coverpkg=all skip test-only packages X-Git-Tag: go1.17beta1~1012 X-Git-Url: http://www.git.cypherpunks.su/?a=commitdiff_plain;h=c59b17e5a2244f7a99c440a07a1c174344da0ad8;p=gostls13.git cmd/go: make -coverpkg=all skip test-only packages Otherwise, the added test would fail in an unnecessary way: go build example.com/cov/onlytest: no non-test Go files ... The test script is mimicking other cover_pkgall_*.txt scripts, so it similarly tests both GOPATH and module modes. Fixes #27333. Change-Id: Ie60be569b31d49b173a78556c0669a87ada6799e Reviewed-on: https://go-review.googlesource.com/c/go/+/288292 Trust: Daniel Martí Trust: Jay Conrod Run-TryBot: Daniel Martí TryBot-Result: Go Bot Reviewed-by: Jay Conrod --- diff --git a/src/cmd/go/internal/load/test.go b/src/cmd/go/internal/load/test.go index eb8aef3ee2..374a2f9a4f 100644 --- a/src/cmd/go/internal/load/test.go +++ b/src/cmd/go/internal/load/test.go @@ -290,10 +290,12 @@ func TestPackagesAndErrors(ctx context.Context, p *Package, cover *TestCover) (p seen[p1] = true } for _, p1 := range cover.Pkgs { - if !seen[p1] { - seen[p1] = true - pmain.Internal.Imports = append(pmain.Internal.Imports, p1) + if seen[p1] { + // Don't add duplicate imports. + continue } + seen[p1] = true + pmain.Internal.Imports = append(pmain.Internal.Imports, p1) } } diff --git a/src/cmd/go/internal/test/test.go b/src/cmd/go/internal/test/test.go index ea9dfbe4e8..230ea2d318 100644 --- a/src/cmd/go/internal/test/test.go +++ b/src/cmd/go/internal/test/test.go @@ -716,6 +716,12 @@ func runTest(ctx context.Context, cmd *base.Command, args []string) { } } + // A package which only has test files can't be imported + // as a dependency, nor can it be instrumented for coverage. + if len(p.GoFiles)+len(p.CgoFiles) == 0 { + continue + } + // Silently ignore attempts to run coverage on // sync/atomic when using atomic coverage mode. // Atomic coverage mode uses sync/atomic, so diff --git a/src/cmd/go/testdata/script/cover_pkgall_imports.txt b/src/cmd/go/testdata/script/cover_pkgall_imports.txt new file mode 100644 index 0000000000..4e51726b29 --- /dev/null +++ b/src/cmd/go/testdata/script/cover_pkgall_imports.txt @@ -0,0 +1,48 @@ +# This test checks that -coverpkg=all can be used +# when the package pattern includes packages +# which only have tests. +# Verifies golang.org/issue/27333, golang.org/issue/43242. + +[short] skip +cd $GOPATH/src/example.com/cov + +env GO111MODULE=on +go test -coverpkg=all ./... + +env GO111MODULE=off +go test -coverpkg=all ./... + +-- $GOPATH/src/example.com/cov/go.mod -- +module example.com/cov + +-- $GOPATH/src/example.com/cov/notest/notest.go -- +package notest + +func Foo() {} + +-- $GOPATH/src/example.com/cov/onlytest/onlytest_test.go -- +package onlytest_test + +import ( + "testing" + + "example.com/cov/notest" +) + +func TestFoo(t *testing.T) { + notest.Foo() +} + +-- $GOPATH/src/example.com/cov/withtest/withtest.go -- +package withtest + +func Bar() {} + +-- $GOPATH/src/example.com/cov/withtest/withtest_test.go -- +package withtest + +import "testing" + +func TestBar(t *testing.T) { + Bar() +}