1
0
mirror of https://github.com/golang/go synced 2024-11-11 23:20:24 -07:00

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í <mvdan@mvdan.cc>
Trust: Jay Conrod <jayconrod@google.com>
Run-TryBot: Daniel Martí <mvdan@mvdan.cc>
TryBot-Result: Go Bot <gobot@golang.org>
Reviewed-by: Jay Conrod <jayconrod@google.com>
This commit is contained in:
Daniel Martí 2021-01-30 11:41:29 +00:00
parent 05250429ae
commit c59b17e5a2
3 changed files with 59 additions and 3 deletions

View File

@ -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)
}
}

View File

@ -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

View File

@ -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()
}