diff options
| author | Than McIntosh <thanm@google.com> | 2024-06-12 21:54:53 +0000 |
|---|---|---|
| committer | Than McIntosh <thanm@google.com> | 2024-06-14 11:45:22 +0000 |
| commit | 7196db9e66529cb3e81cbc401557358047543c2f (patch) | |
| tree | 1c9c09bb9a39489b221d899a22ccd99cda8a2efe /src/internal/coverage | |
| parent | 1683628d29ca77f9c44804c987c3570c89ffd29d (diff) | |
| download | go-7196db9e66529cb3e81cbc401557358047543c2f.tar.xz | |
internal/coverage: refactor EmitPercent in preparation for bugfix
Refactor cformat.EmitPercent to accept a package filter (list of
packages to report). This is a no-op in terms of exposed coverage
functionality, but we will need this feature in a subsequent patch.
Updates #65570.
Change-Id: I04ddc624a634837ea31c12ec395aa1295a0ea1f1
Reviewed-on: https://go-review.googlesource.com/c/go/+/592204
LUCI-TryBot-Result: Go LUCI <golang-scoped@luci-project-accounts.iam.gserviceaccount.com>
Reviewed-by: David Chase <drchase@google.com>
Diffstat (limited to 'src/internal/coverage')
| -rw-r--r-- | src/internal/coverage/cfile/testsupport.go | 2 | ||||
| -rw-r--r-- | src/internal/coverage/cformat/fmt_test.go | 26 | ||||
| -rw-r--r-- | src/internal/coverage/cformat/format.go | 21 |
3 files changed, 37 insertions, 12 deletions
diff --git a/src/internal/coverage/cfile/testsupport.go b/src/internal/coverage/cfile/testsupport.go index a5119187a2..72d09150cf 100644 --- a/src/internal/coverage/cfile/testsupport.go +++ b/src/internal/coverage/cfile/testsupport.go @@ -103,7 +103,7 @@ func ProcessCoverTestDir(dir string, cfile string, cm string, cpkg string, w io. } // Emit percent. - if err := ts.cf.EmitPercent(w, cpkg, true, true); err != nil { + if err := ts.cf.EmitPercent(w, nil, cpkg, true, true); err != nil { return err } diff --git a/src/internal/coverage/cformat/fmt_test.go b/src/internal/coverage/cformat/fmt_test.go index f5ed01b3b0..d296939d5c 100644 --- a/src/internal/coverage/cformat/fmt_test.go +++ b/src/internal/coverage/cformat/fmt_test.go @@ -66,7 +66,7 @@ lit.go:99.0,100.0 1 0`) // Percent output with no aggregation. noCoverPkg := "" - if err := fm.EmitPercent(&b2, noCoverPkg, false, false); err != nil { + if err := fm.EmitPercent(&b2, nil, noCoverPkg, false, false); err != nil { t.Fatalf("EmitPercent returned %v", err) } wantPercent := strings.Fields(` @@ -81,7 +81,7 @@ lit.go:99.0,100.0 1 0`) // Percent mode with aggregation. withCoverPkg := " in ./..." - if err := fm.EmitPercent(&b3, withCoverPkg, false, true); err != nil { + if err := fm.EmitPercent(&b3, nil, withCoverPkg, false, true); err != nil { t.Fatalf("EmitPercent returned %v", err) } wantPercent = strings.Fields(` @@ -110,6 +110,24 @@ total (statements) 62.5%`) t.Logf("perc2 is %s\n", b3.String()) t.Logf("funcs is %s\n", b4.String()) } + + // Percent output with specific packages selected. + { + var b strings.Builder + selpkgs := []string{"foo/bar", "my/pack1"} + if err := fm.EmitPercent(&b, selpkgs, noCoverPkg, false, false); err != nil { + t.Fatalf("EmitPercent returned %v", err) + } + wantPercent := strings.Fields(` + my/pack1 coverage: 66.7% of statements +`) + gotPercent := strings.Fields(b.String()) + if !slices.Equal(wantPercent, gotPercent) { + t.Errorf("emit percent: got:\n%+v\nwant:\n%+v\n", + gotPercent, wantPercent) + } + } + } func TestEmptyPackages(t *testing.T) { @@ -122,7 +140,7 @@ func TestEmptyPackages(t *testing.T) { { var b strings.Builder noCoverPkg := "" - if err := fm.EmitPercent(&b, noCoverPkg, true, false); err != nil { + if err := fm.EmitPercent(&b, nil, noCoverPkg, true, false); err != nil { t.Fatalf("EmitPercent returned %v", err) } wantPercent := strings.Fields(` @@ -140,7 +158,7 @@ func TestEmptyPackages(t *testing.T) { { var b strings.Builder noCoverPkg := "" - if err := fm.EmitPercent(&b, noCoverPkg, true, true); err != nil { + if err := fm.EmitPercent(&b, nil, noCoverPkg, true, true); err != nil { t.Fatalf("EmitPercent returned %v", err) } wantPercent := strings.Fields(` diff --git a/src/internal/coverage/cformat/format.go b/src/internal/coverage/cformat/format.go index dcbe584c0b..0f9e981df8 100644 --- a/src/internal/coverage/cformat/format.go +++ b/src/internal/coverage/cformat/format.go @@ -23,7 +23,7 @@ package cformat // } // } // } -// myformatter.EmitPercent(os.Stdout, "", true, true) +// myformatter.EmitPercent(os.Stdout, nil, "", true, true) // myformatter.EmitTextual(somefile) // // These apis are linked into tests that are built with "-cover", and @@ -199,17 +199,21 @@ func (fm *Formatter) EmitTextual(w io.Writer) error { return nil } -// EmitPercent writes out a "percentage covered" string to the writer 'w'. -func (fm *Formatter) EmitPercent(w io.Writer, covpkgs string, noteEmpty bool, aggregate bool) error { - pkgs := make([]string, 0, len(fm.pm)) - for importpath := range fm.pm { - pkgs = append(pkgs, importpath) +// EmitPercent writes out a "percentage covered" string to the writer +// 'w', selecting the set of packages in 'pkgs' and suffixing the +// printed string with 'inpkgs'. +func (fm *Formatter) EmitPercent(w io.Writer, pkgs []string, inpkgs string, noteEmpty bool, aggregate bool) error { + if len(pkgs) == 0 { + pkgs = make([]string, 0, len(fm.pm)) + for importpath := range fm.pm { + pkgs = append(pkgs, importpath) + } } rep := func(cov, tot uint64) error { if tot != 0 { if _, err := fmt.Fprintf(w, "coverage: %.1f%% of statements%s\n", - 100.0*float64(cov)/float64(tot), covpkgs); err != nil { + 100.0*float64(cov)/float64(tot), inpkgs); err != nil { return err } } else if noteEmpty { @@ -224,6 +228,9 @@ func (fm *Formatter) EmitPercent(w io.Writer, covpkgs string, noteEmpty bool, ag var totalStmts, coveredStmts uint64 for _, importpath := range pkgs { p := fm.pm[importpath] + if p == nil { + continue + } if !aggregate { totalStmts, coveredStmts = 0, 0 } |
