Skip to content

Commit e55882c

Browse files
committed
Coverage minima: add more fine-grained control
Along with existing overall coverage, add parameters for statement and branch minima at the package and file level.
1 parent 756c68f commit e55882c

File tree

3 files changed

+62
-0
lines changed

3 files changed

+62
-0
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,10 @@ Read [SBT SCoverage Plugin documentation](https://github.com/scoverage/sbt-scove
337337
<configuration>
338338
<minimumCoverage>95</minimumCoverage>
339339
<minimumCoverageBranchTotal>90</minimumCoverageBranchTotal>
340+
<minimumCoverageStmtPerPackage>90</minimumCoverageStmtPerPackage>
341+
<minimumCoverageBranchPerPackage>85</minimumCoverageBranchPerPackage>
342+
<minimumCoverageStmtPerFile>85</minimumCoverageStmtPerFile>
343+
<minimumCoverageBranchPerFile>80</minimumCoverageBranchPerFile>
340344
<failOnMinimumCoverage>true</failOnMinimumCoverage>
341345
</configuration>
342346
<executions>

src/it/test_coverage_minima/validate.groovy

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,10 @@ try {
2323
"""
2424
|[ERROR] Coverage is below minimum [50.00% < 95.00%]: Statement:Total
2525
|[INFO] Coverage is above minimum [100.00% >= 90.00%]: Branch:Total
26+
|[ERROR] Coverage is below minimum [0.00% < 90.00%]: Statement:Package:pkg02
27+
|[ERROR] Coverage is below minimum [0.00% < 85.00%]: Branch:Package:pkg02
28+
|[ERROR] Coverage is below minimum [0.00% < 85.00%]: Statement:File:HelloService1.scala
29+
|[ERROR] Coverage is below minimum [0.00% < 80.00%]: Branch:File:HelloService1.scala
2630
|""".stripMargin()
2731
)
2832

src/main/java/org/scoverage/plugin/SCoverageCheckMojo.java

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
import scoverage.domain.Coverage;
3737
import scoverage.domain.CoverageMetrics;
3838
import scoverage.domain.DoubleFormat;
39+
import scoverage.domain.MeasuredFile;
40+
import scoverage.domain.MeasuredPackage;
3941
import scoverage.reporter.IOUtils;
4042
import scoverage.serialize.Serializer;
4143

@@ -94,6 +96,46 @@ public class SCoverageCheckMojo
9496
@Parameter( property = "scoverage.minimumCoverageBranchTotal", defaultValue = "0" )
9597
private Double minimumCoverageBranchTotal;
9698

99+
/**
100+
* Required minimum per-package statement coverage.
101+
* <br>
102+
* <br>
103+
* See <a href="https://github.com/scoverage/sbt-scoverage#minimum-coverage">https://github.com/scoverage/sbt-scoverage#minimum-coverage</a> for additional documentation.
104+
* <br>
105+
*/
106+
@Parameter( property = "scoverage.minimumCoverageStmtPerPackage", defaultValue = "0" )
107+
private Double minimumCoverageStmtPerPackage;
108+
109+
/**
110+
* Required minimum per-package branch coverage.
111+
* <br>
112+
* <br>
113+
* See <a href="https://github.com/scoverage/sbt-scoverage#minimum-coverage">https://github.com/scoverage/sbt-scoverage#minimum-coverage</a> for additional documentation.
114+
* <br>
115+
*/
116+
@Parameter( property = "scoverage.minimumCoverageBranchPerPackage", defaultValue = "0" )
117+
private Double minimumCoverageBranchPerPackage;
118+
119+
/**
120+
* Required minimum per-file statement coverage.
121+
* <br>
122+
* <br>
123+
* See <a href="https://github.com/scoverage/sbt-scoverage#minimum-coverage">https://github.com/scoverage/sbt-scoverage#minimum-coverage</a> for additional documentation.
124+
* <br>
125+
*/
126+
@Parameter( property = "scoverage.minimumCoverageStmtPerFile", defaultValue = "0" )
127+
private Double minimumCoverageStmtPerFile;
128+
129+
/**
130+
* Required minimum per-file branch coverage.
131+
* <br>
132+
* <br>
133+
* See <a href="https://github.com/scoverage/sbt-scoverage#minimum-coverage">https://github.com/scoverage/sbt-scoverage#minimum-coverage</a> for additional documentation.
134+
* <br>
135+
*/
136+
@Parameter( property = "scoverage.minimumCoverageBranchPerFile", defaultValue = "0" )
137+
private Double minimumCoverageBranchPerFile;
138+
97139
/**
98140
* Fail the build if minimum coverage was not reached.
99141
* <br>
@@ -186,6 +228,18 @@ public void execute() throws MojoFailureException
186228

187229
boolean ok = checkCoverage( getLog(), "Total", coverage,
188230
minimumCoverage, minimumCoverageBranchTotal, true );
231+
for ( MeasuredPackage pkgCoverage : CollectionConverters.asJava( coverage.packages() ) )
232+
{
233+
if ( !checkCoverage( getLog(), "Package:" + pkgCoverage.name(), pkgCoverage,
234+
minimumCoverageStmtPerPackage, minimumCoverageBranchPerPackage, false ) )
235+
ok = false;
236+
}
237+
for ( MeasuredFile fileCoverage : CollectionConverters.asJava( coverage.files() ) )
238+
{
239+
if ( !checkCoverage( getLog(), "File:" + fileCoverage.filename(), fileCoverage,
240+
minimumCoverageStmtPerFile, minimumCoverageBranchPerFile, false ) )
241+
ok = false;
242+
}
189243

190244
if ( !ok && failOnMinimumCoverage )
191245
{

0 commit comments

Comments
 (0)