Skip to content

Commit 7196db9

Browse files
committed
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 <[email protected]> Reviewed-by: David Chase <[email protected]>
1 parent 1683628 commit 7196db9

File tree

4 files changed

+38
-13
lines changed

4 files changed

+38
-13
lines changed

src/cmd/covdata/dump.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -325,7 +325,7 @@ func (d *dstate) Finish() {
325325
// d.format maybe nil here if the specified input dir was empty.
326326
if d.format != nil {
327327
if d.cmd == percentMode {
328-
d.format.EmitPercent(os.Stdout, "", false, false)
328+
d.format.EmitPercent(os.Stdout, nil, "", false, false)
329329
}
330330
if d.cmd == funcMode {
331331
d.format.EmitFuncs(os.Stdout)

src/internal/coverage/cfile/testsupport.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ func ProcessCoverTestDir(dir string, cfile string, cm string, cpkg string, w io.
103103
}
104104

105105
// Emit percent.
106-
if err := ts.cf.EmitPercent(w, cpkg, true, true); err != nil {
106+
if err := ts.cf.EmitPercent(w, nil, cpkg, true, true); err != nil {
107107
return err
108108
}
109109

src/internal/coverage/cformat/fmt_test.go

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ lit.go:99.0,100.0 1 0`)
6666

6767
// Percent output with no aggregation.
6868
noCoverPkg := ""
69-
if err := fm.EmitPercent(&b2, noCoverPkg, false, false); err != nil {
69+
if err := fm.EmitPercent(&b2, nil, noCoverPkg, false, false); err != nil {
7070
t.Fatalf("EmitPercent returned %v", err)
7171
}
7272
wantPercent := strings.Fields(`
@@ -81,7 +81,7 @@ lit.go:99.0,100.0 1 0`)
8181

8282
// Percent mode with aggregation.
8383
withCoverPkg := " in ./..."
84-
if err := fm.EmitPercent(&b3, withCoverPkg, false, true); err != nil {
84+
if err := fm.EmitPercent(&b3, nil, withCoverPkg, false, true); err != nil {
8585
t.Fatalf("EmitPercent returned %v", err)
8686
}
8787
wantPercent = strings.Fields(`
@@ -110,6 +110,24 @@ total (statements) 62.5%`)
110110
t.Logf("perc2 is %s\n", b3.String())
111111
t.Logf("funcs is %s\n", b4.String())
112112
}
113+
114+
// Percent output with specific packages selected.
115+
{
116+
var b strings.Builder
117+
selpkgs := []string{"foo/bar", "my/pack1"}
118+
if err := fm.EmitPercent(&b, selpkgs, noCoverPkg, false, false); err != nil {
119+
t.Fatalf("EmitPercent returned %v", err)
120+
}
121+
wantPercent := strings.Fields(`
122+
my/pack1 coverage: 66.7% of statements
123+
`)
124+
gotPercent := strings.Fields(b.String())
125+
if !slices.Equal(wantPercent, gotPercent) {
126+
t.Errorf("emit percent: got:\n%+v\nwant:\n%+v\n",
127+
gotPercent, wantPercent)
128+
}
129+
}
130+
113131
}
114132

115133
func TestEmptyPackages(t *testing.T) {
@@ -122,7 +140,7 @@ func TestEmptyPackages(t *testing.T) {
122140
{
123141
var b strings.Builder
124142
noCoverPkg := ""
125-
if err := fm.EmitPercent(&b, noCoverPkg, true, false); err != nil {
143+
if err := fm.EmitPercent(&b, nil, noCoverPkg, true, false); err != nil {
126144
t.Fatalf("EmitPercent returned %v", err)
127145
}
128146
wantPercent := strings.Fields(`
@@ -140,7 +158,7 @@ func TestEmptyPackages(t *testing.T) {
140158
{
141159
var b strings.Builder
142160
noCoverPkg := ""
143-
if err := fm.EmitPercent(&b, noCoverPkg, true, true); err != nil {
161+
if err := fm.EmitPercent(&b, nil, noCoverPkg, true, true); err != nil {
144162
t.Fatalf("EmitPercent returned %v", err)
145163
}
146164
wantPercent := strings.Fields(`

src/internal/coverage/cformat/format.go

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ package cformat
2323
// }
2424
// }
2525
// }
26-
// myformatter.EmitPercent(os.Stdout, "", true, true)
26+
// myformatter.EmitPercent(os.Stdout, nil, "", true, true)
2727
// myformatter.EmitTextual(somefile)
2828
//
2929
// These apis are linked into tests that are built with "-cover", and
@@ -199,17 +199,21 @@ func (fm *Formatter) EmitTextual(w io.Writer) error {
199199
return nil
200200
}
201201

202-
// EmitPercent writes out a "percentage covered" string to the writer 'w'.
203-
func (fm *Formatter) EmitPercent(w io.Writer, covpkgs string, noteEmpty bool, aggregate bool) error {
204-
pkgs := make([]string, 0, len(fm.pm))
205-
for importpath := range fm.pm {
206-
pkgs = append(pkgs, importpath)
202+
// EmitPercent writes out a "percentage covered" string to the writer
203+
// 'w', selecting the set of packages in 'pkgs' and suffixing the
204+
// printed string with 'inpkgs'.
205+
func (fm *Formatter) EmitPercent(w io.Writer, pkgs []string, inpkgs string, noteEmpty bool, aggregate bool) error {
206+
if len(pkgs) == 0 {
207+
pkgs = make([]string, 0, len(fm.pm))
208+
for importpath := range fm.pm {
209+
pkgs = append(pkgs, importpath)
210+
}
207211
}
208212

209213
rep := func(cov, tot uint64) error {
210214
if tot != 0 {
211215
if _, err := fmt.Fprintf(w, "coverage: %.1f%% of statements%s\n",
212-
100.0*float64(cov)/float64(tot), covpkgs); err != nil {
216+
100.0*float64(cov)/float64(tot), inpkgs); err != nil {
213217
return err
214218
}
215219
} else if noteEmpty {
@@ -224,6 +228,9 @@ func (fm *Formatter) EmitPercent(w io.Writer, covpkgs string, noteEmpty bool, ag
224228
var totalStmts, coveredStmts uint64
225229
for _, importpath := range pkgs {
226230
p := fm.pm[importpath]
231+
if p == nil {
232+
continue
233+
}
227234
if !aggregate {
228235
totalStmts, coveredStmts = 0, 0
229236
}

0 commit comments

Comments
 (0)