]> Cypherpunks repositories - gostls13.git/commitdiff
cmd/go: make -coverpkg=all skip test-only packages
authorDaniel Martí <mvdan@mvdan.cc>
Sat, 30 Jan 2021 11:41:29 +0000 (11:41 +0000)
committerDaniel Martí <mvdan@mvdan.cc>
Tue, 23 Mar 2021 18:14:47 +0000 (18:14 +0000)
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>
src/cmd/go/internal/load/test.go
src/cmd/go/internal/test/test.go
src/cmd/go/testdata/script/cover_pkgall_imports.txt [new file with mode: 0644]

index eb8aef3ee28126d289e39a91f57ca285051e339e..374a2f9a4ffbbae9bd90e39f3a7121a3ac1285e1 100644 (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)
                }
        }
 
index ea9dfbe4e8a370e6b0156db8708ef815fd8358cb..230ea2d3189d15f7b14a157661f116030a53a3c7 100644 (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
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 (file)
index 0000000..4e51726
--- /dev/null
@@ -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()
+}