From 84e2b36b2cc8db80646ed33c1dba0158d3e182ef Mon Sep 17 00:00:00 2001 From: k1LoW Date: Tue, 2 Jul 2024 23:45:36 +0900 Subject: [PATCH] Support wildcard paths in `coverage.paths:` Fix: https://github.com/k1LoW/octocov/issues/387 --- report/report.go | 16 +++++++++---- report/report_test.go | 52 +++++++++++++++++++++++++++++++------------ 2 files changed, 50 insertions(+), 18 deletions(-) diff --git a/report/report.go b/report/report.go index f221408a..da587dc0 100644 --- a/report/report.go +++ b/report/report.go @@ -15,6 +15,7 @@ import ( "strings" "time" + "github.com/bmatcuk/doublestar/v4" "github.com/goccy/go-json" "github.com/hashicorp/go-multierror" "github.com/k1LoW/octocov/config" @@ -298,11 +299,18 @@ func (r *Report) Load(path string) error { return nil } -func (r *Report) MeasureCoverage(paths, exclude []string) error { - if len(paths) == 0 { - return fmt.Errorf("coverage report not found: %s", paths) +func (r *Report) MeasureCoverage(patterns, exclude []string) error { + if len(patterns) == 0 { + return fmt.Errorf("coverage report not found: %s", patterns) + } + var paths []string + for _, pattern := range patterns { + p, err := doublestar.FilepathGlob(pattern) + if err != nil { + return err + } + paths = append(paths, p...) } - var cerr *multierror.Error for _, path := range paths { cov, rp, err := challengeParseReport(path) diff --git a/report/report_test.go b/report/report_test.go index 6d9e6354..4828908c 100644 --- a/report/report_test.go +++ b/report/report_test.go @@ -90,6 +90,28 @@ func TestMeasureCoverage(t *testing.T) { 2, false, }, + { + []string{ + filepath.Join(coverageTestdataDir(t), "**", "*.out"), + }, + 1, + false, + }, + { + []string{ + filepath.Join(coverageTestdataDir(t), "**", "*.info"), + filepath.Join(coverageTestdataDir(t), "**", "*.out"), + }, + 2, + false, + }, + { + []string{ + filepath.Join(coverageTestdataDir(t), "..", "**", "*.info"), + }, + 1, + false, + }, { []string{ filepath.Join(testdataDir(t), "reports", "k1LoW", "tbls", "report.json"), @@ -107,21 +129,23 @@ func TestMeasureCoverage(t *testing.T) { true, }, } - for _, tt := range tests { - r := &Report{} - if err := r.MeasureCoverage(tt.paths, nil); err != nil { - if !tt.wantErr { - t.Error(err) + for i, tt := range tests { + t.Run(fmt.Sprintf("%v", i), func(t *testing.T) { + r := &Report{} + if err := r.MeasureCoverage(tt.paths, nil); err != nil { + if !tt.wantErr { + t.Error(err) + } + return } - continue - } - if tt.wantErr { - t.Error("want error") - } - got := len(r.covPaths) - if got != tt.want { - t.Errorf("got %v\nwant %v", got, tt.want) - } + if tt.wantErr { + t.Error("want error") + } + got := len(r.covPaths) + if got != tt.want { + t.Errorf("got %v\nwant %v", got, tt.want) + } + }) } }