// 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(`
// 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(`
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) {
{
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(`
{
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(`
// }
// }
// }
-// 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
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 {
var totalStmts, coveredStmts uint64
for _, importpath := range pkgs {
p := fm.pm[importpath]
+ if p == nil {
+ continue
+ }
if !aggregate {
totalStmts, coveredStmts = 0, 0
}