diff --git a/CHANGELOG.md b/CHANGELOG.md
index 6e7c50a..fadfe7a 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,7 +5,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [Unreleased]
-_Nothing yet_
+- Show coverage report also if only test files changed (#18)
## [v1.0.0] - 2024-03-18
- Initial release
diff --git a/action.yml b/action.yml
index afcaf80..e23c595 100644
--- a/action.yml
+++ b/action.yml
@@ -60,7 +60,6 @@ runs:
files: |
**.go
files_ignore: |
- **_test.go
vendor/**
- name: Code coverage report
diff --git a/cmd/go-coverage-report/coverage_test.go b/cmd/go-coverage-report/coverage_test.go
index 1b9d8bb..1a82a58 100644
--- a/cmd/go-coverage-report/coverage_test.go
+++ b/cmd/go-coverage-report/coverage_test.go
@@ -8,7 +8,7 @@ import (
)
func TestParse(t *testing.T) {
- cov, err := ParseCoverage("testdata/new-coverage.txt")
+ cov, err := ParseCoverage("testdata/01-new-coverage.txt")
require.NoError(t, err)
assert.EqualValues(t, 102, cov.TotalStmt)
@@ -18,7 +18,7 @@ func TestParse(t *testing.T) {
}
func TestCoverage_ByPackage(t *testing.T) {
- cov, err := ParseCoverage("testdata/new-coverage.txt")
+ cov, err := ParseCoverage("testdata/01-new-coverage.txt")
require.NoError(t, err)
pkgs := cov.ByPackage()
diff --git a/cmd/go-coverage-report/report.go b/cmd/go-coverage-report/report.go
index 573ec06..479e38c 100644
--- a/cmd/go-coverage-report/report.go
+++ b/cmd/go-coverage-report/report.go
@@ -125,10 +125,32 @@ func (r *Report) addDetails(report *strings.Builder) {
fmt.Fprintln(report, "Coverage by file")
fmt.Fprintln(report)
+ var codeFiles, unitTestFiles []string
+ for _, f := range r.ChangedFiles {
+ if strings.HasSuffix(f, "_test.go") {
+ unitTestFiles = append(unitTestFiles, f)
+ } else {
+ codeFiles = append(codeFiles, f)
+ }
+ }
+
+ if len(codeFiles) > 0 {
+ r.addCodeFileDetails(report, codeFiles)
+ }
+ if len(unitTestFiles) > 0 {
+ r.addTestFileDetails(report, unitTestFiles)
+ }
+
+ fmt.Fprint(report, "")
+}
+
+func (r *Report) addCodeFileDetails(report *strings.Builder, files []string) {
+ fmt.Fprintln(report, "### Changed files (no unit tests)")
+ fmt.Fprintln(report)
fmt.Fprintln(report, "| Changed File | Coverage Δ | Total | Covered | Missed | :robot: |")
fmt.Fprintln(report, "|--------------|------------|-------|---------|--------|---------|")
- for _, name := range r.ChangedFiles {
+ for _, name := range files {
var oldPercent, newPercent float64
oldProfile := r.Old.Files[name]
@@ -170,8 +192,17 @@ func (r *Report) addDetails(report *strings.Builder) {
"above refer to ***code statements*** instead of lines of code. The value in brackets "+
"refers to the test coverage of that file in the old version of the code._")
fmt.Fprintln(report)
+}
- fmt.Fprint(report, "")
+func (r *Report) addTestFileDetails(report *strings.Builder, files []string) {
+ fmt.Fprintln(report, "### Changed unit test files")
+ fmt.Fprintln(report)
+
+ for _, name := range files {
+ fmt.Fprintf(report, "- %s\n", name)
+ }
+
+ fmt.Fprintln(report)
}
func (r *Report) JSON() string {
diff --git a/cmd/go-coverage-report/report_test.go b/cmd/go-coverage-report/report_test.go
index b8c3ee5..dede414 100644
--- a/cmd/go-coverage-report/report_test.go
+++ b/cmd/go-coverage-report/report_test.go
@@ -8,13 +8,13 @@ import (
)
func TestReport_Markdown(t *testing.T) {
- oldCov, err := ParseCoverage("testdata/old-coverage.txt")
+ oldCov, err := ParseCoverage("testdata/01-old-coverage.txt")
require.NoError(t, err)
- newCov, err := ParseCoverage("testdata/new-coverage.txt")
+ newCov, err := ParseCoverage("testdata/01-new-coverage.txt")
require.NoError(t, err)
- changedFiles, err := ParseChangedFiles("testdata/changed-files.json", "github.com/fgrosse/prioqueue")
+ changedFiles, err := ParseChangedFiles("testdata/01-changed-files.json", "github.com/fgrosse/prioqueue")
require.NoError(t, err)
report := NewReport(oldCov, newCov, changedFiles)
@@ -33,6 +33,8 @@ func TestReport_Markdown(t *testing.T) {
Coverage by file
+### Changed files (no unit tests)
+
| Changed File | Coverage Δ | Total | Covered | Missed | :robot: |
|--------------|------------|-------|---------|--------|---------|
| github.com/fgrosse/prioqueue/foo/bar/baz.go | 0.00% (ø) | 0 | 0 | 0 | |
@@ -43,3 +45,36 @@ _Please note that the "Total", "Covered", and "Missed" counts above refer to ***
`
assert.Equal(t, expected, actual)
}
+
+func TestReport_Markdown_OnlyChangedUnitTests(t *testing.T) {
+ oldCov, err := ParseCoverage("testdata/02-old-coverage.txt")
+ require.NoError(t, err)
+
+ newCov, err := ParseCoverage("testdata/02-new-coverage.txt")
+ require.NoError(t, err)
+
+ changedFiles, err := ParseChangedFiles("testdata/02-changed-files.json", "github.com/fgrosse/prioqueue")
+ require.NoError(t, err)
+
+ report := NewReport(oldCov, newCov, changedFiles)
+ actual := report.Markdown()
+
+ expected := `### Merging this branch will **increase** overall coverage
+
+| Impacted Packages | Coverage Δ | :robot: |
+|-------------------|------------|---------|
+| github.com/fgrosse/prioqueue | 99.02% (**+8.82%**) | :thumbsup: |
+
+---
+
+
+
+Coverage by file
+
+### Changed unit test files
+
+- github.com/fgrosse/prioqueue/min_heap_test.go
+
+ `
+ assert.Equal(t, expected, actual)
+}
diff --git a/cmd/go-coverage-report/testdata/changed-files.json b/cmd/go-coverage-report/testdata/01-changed-files.json
similarity index 100%
rename from cmd/go-coverage-report/testdata/changed-files.json
rename to cmd/go-coverage-report/testdata/01-changed-files.json
diff --git a/cmd/go-coverage-report/testdata/new-coverage.txt b/cmd/go-coverage-report/testdata/01-new-coverage.txt
similarity index 100%
rename from cmd/go-coverage-report/testdata/new-coverage.txt
rename to cmd/go-coverage-report/testdata/01-new-coverage.txt
diff --git a/cmd/go-coverage-report/testdata/old-coverage.txt b/cmd/go-coverage-report/testdata/01-old-coverage.txt
similarity index 100%
rename from cmd/go-coverage-report/testdata/old-coverage.txt
rename to cmd/go-coverage-report/testdata/01-old-coverage.txt
diff --git a/cmd/go-coverage-report/testdata/02-changed-files.json b/cmd/go-coverage-report/testdata/02-changed-files.json
new file mode 100644
index 0000000..ad06281
--- /dev/null
+++ b/cmd/go-coverage-report/testdata/02-changed-files.json
@@ -0,0 +1 @@
+[ "min_heap_test.go"]
diff --git a/cmd/go-coverage-report/testdata/02-new-coverage.txt b/cmd/go-coverage-report/testdata/02-new-coverage.txt
new file mode 100644
index 0000000..3dc3e52
--- /dev/null
+++ b/cmd/go-coverage-report/testdata/02-new-coverage.txt
@@ -0,0 +1,67 @@
+mode: set
+github.com/fgrosse/prioqueue/max_heap.go:38.36,40.14 2 1
+github.com/fgrosse/prioqueue/max_heap.go:40.14,42.3 1 1
+github.com/fgrosse/prioqueue/max_heap.go:43.2,43.10 1 1
+github.com/fgrosse/prioqueue/max_heap.go:48.43,50.14 2 1
+github.com/fgrosse/prioqueue/max_heap.go:50.14,52.3 1 1
+github.com/fgrosse/prioqueue/max_heap.go:54.2,54.21 1 1
+github.com/fgrosse/prioqueue/max_heap.go:59.35,60.23 1 1
+github.com/fgrosse/prioqueue/max_heap.go:60.23,62.3 1 1
+github.com/fgrosse/prioqueue/max_heap.go:63.2,63.19 1 1
+github.com/fgrosse/prioqueue/max_heap.go:67.29,69.2 1 1
+github.com/fgrosse/prioqueue/max_heap.go:75.27,77.2 1 1
+github.com/fgrosse/prioqueue/max_heap.go:82.35,84.2 1 1
+github.com/fgrosse/prioqueue/max_heap.go:89.42,92.2 2 1
+github.com/fgrosse/prioqueue/max_heap.go:95.49,98.2 2 1
+github.com/fgrosse/prioqueue/max_heap.go:101.40,107.12 3 1
+github.com/fgrosse/prioqueue/max_heap.go:107.12,109.46 2 1
+github.com/fgrosse/prioqueue/max_heap.go:109.46,112.4 1 1
+github.com/fgrosse/prioqueue/max_heap.go:114.3,115.13 2 1
+github.com/fgrosse/prioqueue/max_heap.go:126.55,128.14 2 1
+github.com/fgrosse/prioqueue/max_heap.go:128.14,130.3 1 1
+github.com/fgrosse/prioqueue/max_heap.go:132.2,132.21 1 1
+github.com/fgrosse/prioqueue/max_heap.go:136.35,137.23 1 1
+github.com/fgrosse/prioqueue/max_heap.go:137.23,139.3 1 1
+github.com/fgrosse/prioqueue/max_heap.go:141.2,151.13 6 1
+github.com/fgrosse/prioqueue/max_heap.go:156.31,159.6 3 1
+github.com/fgrosse/prioqueue/max_heap.go:159.6,162.28 2 1
+github.com/fgrosse/prioqueue/max_heap.go:162.28,163.9 1 1
+github.com/fgrosse/prioqueue/max_heap.go:166.3,166.58 1 1
+github.com/fgrosse/prioqueue/max_heap.go:166.58,168.4 1 1
+github.com/fgrosse/prioqueue/max_heap.go:170.3,170.41 1 1
+github.com/fgrosse/prioqueue/max_heap.go:170.41,172.9 1 1
+github.com/fgrosse/prioqueue/max_heap.go:176.3,179.8 2 1
+github.com/fgrosse/prioqueue/min_heap.go:42.36,44.14 2 1
+github.com/fgrosse/prioqueue/min_heap.go:44.14,46.3 1 1
+github.com/fgrosse/prioqueue/min_heap.go:48.2,48.16 1 1
+github.com/fgrosse/prioqueue/min_heap.go:48.16,50.3 1 0
+github.com/fgrosse/prioqueue/min_heap.go:52.2,52.10 1 1
+github.com/fgrosse/prioqueue/min_heap.go:57.51,59.14 2 1
+github.com/fgrosse/prioqueue/min_heap.go:59.14,61.3 1 1
+github.com/fgrosse/prioqueue/min_heap.go:63.2,63.21 1 1
+github.com/fgrosse/prioqueue/min_heap.go:68.35,69.23 1 1
+github.com/fgrosse/prioqueue/min_heap.go:69.23,71.3 1 1
+github.com/fgrosse/prioqueue/min_heap.go:72.2,72.19 1 1
+github.com/fgrosse/prioqueue/min_heap.go:76.29,78.2 1 1
+github.com/fgrosse/prioqueue/min_heap.go:84.27,86.2 1 1
+github.com/fgrosse/prioqueue/min_heap.go:91.35,93.2 1 1
+github.com/fgrosse/prioqueue/min_heap.go:98.42,101.2 2 1
+github.com/fgrosse/prioqueue/min_heap.go:104.53,107.2 2 1
+github.com/fgrosse/prioqueue/min_heap.go:110.40,116.12 3 1
+github.com/fgrosse/prioqueue/min_heap.go:116.12,118.46 2 1
+github.com/fgrosse/prioqueue/min_heap.go:118.46,121.4 1 1
+github.com/fgrosse/prioqueue/min_heap.go:123.3,124.13 2 1
+github.com/fgrosse/prioqueue/min_heap.go:135.55,137.14 2 1
+github.com/fgrosse/prioqueue/min_heap.go:137.14,139.3 1 1
+github.com/fgrosse/prioqueue/min_heap.go:141.2,141.21 1 1
+github.com/fgrosse/prioqueue/min_heap.go:145.35,146.23 1 1
+github.com/fgrosse/prioqueue/min_heap.go:146.23,148.3 1 1
+github.com/fgrosse/prioqueue/min_heap.go:150.2,160.13 6 1
+github.com/fgrosse/prioqueue/min_heap.go:165.31,168.6 3 1
+github.com/fgrosse/prioqueue/min_heap.go:168.6,171.28 2 1
+github.com/fgrosse/prioqueue/min_heap.go:171.28,172.9 1 1
+github.com/fgrosse/prioqueue/min_heap.go:175.3,175.58 1 1
+github.com/fgrosse/prioqueue/min_heap.go:175.58,177.4 1 1
+github.com/fgrosse/prioqueue/min_heap.go:179.3,179.41 1 1
+github.com/fgrosse/prioqueue/min_heap.go:179.41,181.9 1 1
+github.com/fgrosse/prioqueue/min_heap.go:185.3,188.8 2 1
diff --git a/cmd/go-coverage-report/testdata/02-old-coverage.txt b/cmd/go-coverage-report/testdata/02-old-coverage.txt
new file mode 100644
index 0000000..f73d768
--- /dev/null
+++ b/cmd/go-coverage-report/testdata/02-old-coverage.txt
@@ -0,0 +1,67 @@
+mode: set
+github.com/fgrosse/prioqueue/max_heap.go:38.36,40.14 2 1
+github.com/fgrosse/prioqueue/max_heap.go:40.14,42.3 1 1
+github.com/fgrosse/prioqueue/max_heap.go:43.2,43.10 1 1
+github.com/fgrosse/prioqueue/max_heap.go:48.43,50.14 2 1
+github.com/fgrosse/prioqueue/max_heap.go:50.14,52.3 1 1
+github.com/fgrosse/prioqueue/max_heap.go:54.2,54.21 1 1
+github.com/fgrosse/prioqueue/max_heap.go:59.35,60.23 1 1
+github.com/fgrosse/prioqueue/max_heap.go:60.23,62.3 1 1
+github.com/fgrosse/prioqueue/max_heap.go:63.2,63.19 1 1
+github.com/fgrosse/prioqueue/max_heap.go:67.29,69.2 1 1
+github.com/fgrosse/prioqueue/max_heap.go:75.27,77.2 1 1
+github.com/fgrosse/prioqueue/max_heap.go:82.35,84.2 1 1
+github.com/fgrosse/prioqueue/max_heap.go:89.42,92.2 2 1
+github.com/fgrosse/prioqueue/max_heap.go:95.49,98.2 2 1
+github.com/fgrosse/prioqueue/max_heap.go:101.40,107.12 3 1
+github.com/fgrosse/prioqueue/max_heap.go:107.12,109.46 2 1
+github.com/fgrosse/prioqueue/max_heap.go:109.46,112.4 1 1
+github.com/fgrosse/prioqueue/max_heap.go:114.3,115.13 2 1
+github.com/fgrosse/prioqueue/max_heap.go:126.55,128.14 2 1
+github.com/fgrosse/prioqueue/max_heap.go:128.14,130.3 1 1
+github.com/fgrosse/prioqueue/max_heap.go:132.2,132.21 1 1
+github.com/fgrosse/prioqueue/max_heap.go:136.35,137.23 1 1
+github.com/fgrosse/prioqueue/max_heap.go:137.23,139.3 1 1
+github.com/fgrosse/prioqueue/max_heap.go:141.2,151.13 6 1
+github.com/fgrosse/prioqueue/max_heap.go:156.31,159.6 3 1
+github.com/fgrosse/prioqueue/max_heap.go:159.6,162.28 2 1
+github.com/fgrosse/prioqueue/max_heap.go:162.28,163.9 1 1
+github.com/fgrosse/prioqueue/max_heap.go:166.3,166.58 1 1
+github.com/fgrosse/prioqueue/max_heap.go:166.58,168.4 1 1
+github.com/fgrosse/prioqueue/max_heap.go:170.3,170.41 1 1
+github.com/fgrosse/prioqueue/max_heap.go:170.41,172.9 1 1
+github.com/fgrosse/prioqueue/max_heap.go:176.3,179.8 2 1
+github.com/fgrosse/prioqueue/min_heap.go:42.36,44.14 2 0
+github.com/fgrosse/prioqueue/min_heap.go:44.14,46.3 1 0
+github.com/fgrosse/prioqueue/min_heap.go:48.2,48.16 1 0
+github.com/fgrosse/prioqueue/min_heap.go:48.16,50.3 1 0
+github.com/fgrosse/prioqueue/min_heap.go:52.2,52.10 1 0
+github.com/fgrosse/prioqueue/min_heap.go:57.51,59.14 2 1
+github.com/fgrosse/prioqueue/min_heap.go:59.14,61.3 1 0
+github.com/fgrosse/prioqueue/min_heap.go:63.2,63.21 1 1
+github.com/fgrosse/prioqueue/min_heap.go:68.35,69.23 1 1
+github.com/fgrosse/prioqueue/min_heap.go:69.23,71.3 1 0
+github.com/fgrosse/prioqueue/min_heap.go:72.2,72.19 1 1
+github.com/fgrosse/prioqueue/min_heap.go:76.29,78.2 1 1
+github.com/fgrosse/prioqueue/min_heap.go:84.27,86.2 1 1
+github.com/fgrosse/prioqueue/min_heap.go:91.35,93.2 1 1
+github.com/fgrosse/prioqueue/min_heap.go:98.42,101.2 2 1
+github.com/fgrosse/prioqueue/min_heap.go:104.53,107.2 2 1
+github.com/fgrosse/prioqueue/min_heap.go:110.40,116.12 3 1
+github.com/fgrosse/prioqueue/min_heap.go:116.12,118.46 2 1
+github.com/fgrosse/prioqueue/min_heap.go:118.46,121.4 1 1
+github.com/fgrosse/prioqueue/min_heap.go:123.3,124.13 2 1
+github.com/fgrosse/prioqueue/min_heap.go:135.55,137.14 2 1
+github.com/fgrosse/prioqueue/min_heap.go:137.14,139.3 1 0
+github.com/fgrosse/prioqueue/min_heap.go:141.2,141.21 1 1
+github.com/fgrosse/prioqueue/min_heap.go:145.35,146.23 1 1
+github.com/fgrosse/prioqueue/min_heap.go:146.23,148.3 1 0
+github.com/fgrosse/prioqueue/min_heap.go:150.2,160.13 6 1
+github.com/fgrosse/prioqueue/min_heap.go:165.31,168.6 3 1
+github.com/fgrosse/prioqueue/min_heap.go:168.6,171.28 2 1
+github.com/fgrosse/prioqueue/min_heap.go:171.28,172.9 1 1
+github.com/fgrosse/prioqueue/min_heap.go:175.3,175.58 1 1
+github.com/fgrosse/prioqueue/min_heap.go:175.58,177.4 1 1
+github.com/fgrosse/prioqueue/min_heap.go:179.3,179.41 1 1
+github.com/fgrosse/prioqueue/min_heap.go:179.41,181.9 1 1
+github.com/fgrosse/prioqueue/min_heap.go:185.3,188.8 2 1