mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/go: improve handling of no-test packages for coverage
This patch improves the way the go command handles coverage testing of packages that have functions but don't have any test files. Up to this point if you ran "go test -cover" on such a package, you would see: ? mymod/mypack [no test files] While "no test files" is true, it is also very unhelpful; if the package contains functions, it would be better instead to capture the fact that these functions are not executed when "go test -cover" is run on the package. With this patch, for the same no-test package "go test -cover" will output: mymod/mypack coverage: 0.0% of statements The inclusion of such packages in coverage reporting also extends to "-coverprofile" as well (we'll see entries for the "mypack" functions in this case. Note that if a package has no functions at all, then we'll still fall back to reporting "no test files" in this case; it doesn't make sense to report "0.0% statements covered" if there are no statements. Updates #27261. Updates #58770. Updates #18909. Fixes #24570. Cq-Include-Trybots: luci.golang.try:gotip-linux-amd64-longtest,gotip-windows-amd64-longtest Change-Id: I8e916425f4f2beec65861df78265e93db5ce001a Reviewed-on: https://go-review.googlesource.com/c/go/+/495447 LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com> Reviewed-by: Bryan Mills <bcmills@google.com>
This commit is contained in:
parent
1e69040920
commit
d1cb5c0605
10 changed files with 276 additions and 28 deletions
|
|
@ -4,6 +4,12 @@
|
|||
|
||||
package covcmd
|
||||
|
||||
import (
|
||||
"crypto/sha256"
|
||||
"fmt"
|
||||
"internal/coverage"
|
||||
)
|
||||
|
||||
// CoverPkgConfig is a bundle of information passed from the Go
|
||||
// command to the cover command during "go build -cover" runs. The
|
||||
// Go command creates and fills in a struct as below, then passes
|
||||
|
|
@ -78,3 +84,14 @@ type CoverFixupConfig struct {
|
|||
// Counter granularity (perblock or perfunc).
|
||||
CounterGranularity string
|
||||
}
|
||||
|
||||
// MetaFileForPackage returns the expected name of the meta-data file
|
||||
// for the package whose import path is 'importPath' in cases where
|
||||
// we're using meta-data generated by the cover tool, as opposed to a
|
||||
// meta-data file created at runtime.
|
||||
func MetaFileForPackage(importPath string) string {
|
||||
var r [32]byte
|
||||
sum := sha256.Sum256([]byte(importPath))
|
||||
copy(r[:], sum[:])
|
||||
return coverage.MetaFilePref + fmt.Sprintf(".%x", r)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue