Skip to content

Commit

Permalink
Generate coverage report also if only unit test files changed (#20)
Browse files Browse the repository at this point in the history
Fixes #18
  • Loading branch information
fgrosse authored Apr 26, 2024
1 parent a284a4c commit a732f05
Show file tree
Hide file tree
Showing 11 changed files with 209 additions and 9 deletions.
2 changes: 1 addition & 1 deletion CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
1 change: 0 additions & 1 deletion action.yml
Original file line number Diff line number Diff line change
Expand Up @@ -60,7 +60,6 @@ runs:
files: |
**.go
files_ignore: |
**_test.go
vendor/**
- name: Code coverage report
Expand Down
4 changes: 2 additions & 2 deletions cmd/go-coverage-report/coverage_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -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()
Expand Down
35 changes: 33 additions & 2 deletions cmd/go-coverage-report/report.go
Original file line number Diff line number Diff line change
Expand Up @@ -125,10 +125,32 @@ func (r *Report) addDetails(report *strings.Builder) {
fmt.Fprintln(report, "<summary>Coverage by file</summary>")
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, "</details>")
}

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]
Expand Down Expand Up @@ -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, "</details>")
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 {
Expand Down
41 changes: 38 additions & 3 deletions cmd/go-coverage-report/report_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -33,6 +33,8 @@ func TestReport_Markdown(t *testing.T) {
<summary>Coverage by file</summary>
### 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 | |
Expand All @@ -43,3 +45,36 @@ _Please note that the "Total", "Covered", and "Missed" counts above refer to ***
</details>`
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: |
---
<details>
<summary>Coverage by file</summary>
### Changed unit test files
- github.com/fgrosse/prioqueue/min_heap_test.go
</details>`
assert.Equal(t, expected, actual)
}
1 change: 1 addition & 0 deletions cmd/go-coverage-report/testdata/02-changed-files.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[ "min_heap_test.go"]
67 changes: 67 additions & 0 deletions cmd/go-coverage-report/testdata/02-new-coverage.txt
Original file line number Diff line number Diff line change
@@ -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
67 changes: 67 additions & 0 deletions cmd/go-coverage-report/testdata/02-old-coverage.txt
Original file line number Diff line number Diff line change
@@ -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

0 comments on commit a732f05

Please sign in to comment.