Skip to content
Permalink

Comparing changes

This is a direct comparison between two commits made in this repository or its related repositories. View the default comparison for this range or learn more about diff comparisons.

Open a pull request

Create a new pull request by comparing changes across two branches. If you need to, you can also . Learn more about diff comparisons here.
base repository: scoverage/scoverage-maven-plugin
Failed to load repositories. Confirm that selected base ref is valid, then try again.
Loading
base: ce6ee05d59afac3d873e0b8cd85138a877f73573
Choose a base ref
..
head repository: scoverage/scoverage-maven-plugin
Failed to load repositories. Confirm that selected head ref is valid, then try again.
Loading
compare: 73e91d1eaaa30ca5855ce58ffde4ea187e3a87d1
Choose a head ref
1 change: 1 addition & 0 deletions src/it/test_coverage_minima/invoker.properties
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
invoker.goals=clean scoverage:check site -e -ntp
16 changes: 16 additions & 0 deletions src/it/test_coverage_minima/module01/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<parent>
<groupId>it.scoverage-maven-plugin</groupId>
<artifactId>test_coverage_minima</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>module01</artifactId>
<name>Test SCoverage Coverage Minima : Module 1</name>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package pkg01

class HelloService1
{
def hello =
{
"Hello from module 1"
}

}

object HelloService1 extends HelloService1
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package pkg01

import org.junit.Test;
import org.junit.Assert.assertEquals

class HelloServiceTest
{
@Test
def test1()
{
assertEquals("Hello from module 1", HelloService1.hello)
}

}
16 changes: 16 additions & 0 deletions src/it/test_coverage_minima/module02/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">

<parent>
<groupId>it.scoverage-maven-plugin</groupId>
<artifactId>test_coverage_minima</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../pom.xml</relativePath>
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>module02</artifactId>
<name>Test SCoverage Coverage Minima : Module 2</name>

</project>
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package pkg01

class HelloService1
{
def hello =
{
"Hello from module 1"
}

}

object HelloService1 extends HelloService1
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
package pkg02

class HelloService1
{
def hello =
{
"Hello from module 1"
}

}

object HelloService1 extends HelloService1
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
package pkg01

import org.junit.Test;
import org.junit.Assert.assertEquals

class HelloServiceTest
{
@Test
def test1()
{
assertEquals("Hello from module 1", HelloService1.hello)
}

}
67 changes: 67 additions & 0 deletions src/it/test_coverage_minima/pom.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<groupId>it.scoverage-maven-plugin</groupId>
<artifactId>integration_tests_parent</artifactId>
<version>1.0-SNAPSHOT</version>
<relativePath>../integration_tests_parent/pom.xml</relativePath>
</parent>

<artifactId>test_coverage_minima</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>pom</packaging>
<name>Test Scoverage coverage minima</name>
<description>Test Scoverage coverage minima</description>

<properties>
<scala.compat.version>2.13</scala.compat.version>
<scala.minor.version>12</scala.minor.version>
</properties>

<modules>
<module>module01</module>
<module>module02</module>
</modules>

<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
</plugin>
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
</plugin>
<plugin>
<groupId>@project.groupId@</groupId>
<artifactId>@project.artifactId@</artifactId>
<configuration>
<aggregate>true</aggregate> <!-- for aggregated report -->
<minimumCoverage>95</minimumCoverage>
<minimumCoverageBranchTotal>90</minimumCoverageBranchTotal>
<minimumCoverageStmtPerPackage>90</minimumCoverageStmtPerPackage>
<minimumCoverageBranchPerPackage>85</minimumCoverageBranchPerPackage>
<minimumCoverageStmtPerFile>85</minimumCoverageStmtPerFile>
<minimumCoverageBranchPerFile>80</minimumCoverageBranchPerFile>
<failOnMinimumCoverage>false</failOnMinimumCoverage>
</configuration>
<executions>
<execution>
<goals>
<goal>check</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
38 changes: 38 additions & 0 deletions src/it/test_coverage_minima/validate.groovy
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
def checkModule(logText, module, coverageLog) {
assert new File(basedir, module + "/target/scoverage.xml").exists()
assert new File(basedir, module + "/target/site/scoverage/index.html").exists()
def entry = logText.find {
it.startsWith("scoverage-maven-plugin:") &&
it.contains(":check (default-cli) @ " + module + " ---\n")
}
assert entry != null
assert entry.endsWith(" @ " + module + " ---" + coverageLog + "[INFO] ")
}

try {
// check coverage minima
def logText = (new File(basedir, "build.log")).text.split(/\n\[INFO\] \-\-\- /)

checkModule(logText, "module01",
"""
|[INFO] Coverage is above minimum [100.00% >= 95.00%]: Statement:Total
|[INFO] Coverage is above minimum [100.00% >= 90.00%]: Branch:Total
|""".stripMargin()
)
checkModule(logText, "module02",
"""
|[ERROR] Coverage is below minimum [50.00% < 95.00%]: Statement:Total
|[INFO] Coverage is above minimum [100.00% >= 90.00%]: Branch:Total
|[ERROR] Coverage is below minimum [0.00% < 90.00%]: Statement:Package:pkg02
|[ERROR] Coverage is below minimum [0.00% < 85.00%]: Branch:Package:pkg02
|[ERROR] Coverage is below minimum [0.00% < 85.00%]: Statement:File:HelloService1.scala
|[ERROR] Coverage is below minimum [0.00% < 80.00%]: Branch:File:HelloService1.scala
|""".stripMargin()
)

return true

} catch (Throwable e) {
e.printStackTrace()
return false
}
49 changes: 33 additions & 16 deletions src/main/java/org/scoverage/plugin/SCoverageCheckMojo.java
Original file line number Diff line number Diff line change
@@ -223,22 +223,22 @@ public void execute() throws MojoFailureException
int invokedBranchesCount = coverage.invokedBranchesCount();
int invokedStatementCount = coverage.invokedStatementCount();

getLog().info( String.format( "Statement coverage.: %s%%", coverage.statementCoverageFormatted() ) );
getLog().info( String.format( "Branch coverage....: %s%%", coverage.branchCoverageFormatted() ) );
getLog().debug( String.format( "invokedBranchesCount:%d / branchCount:%d, invokedStatementCount:%d / statementCount:%d",
invokedBranchesCount, branchCount, invokedStatementCount, statementCount ) );

boolean ok = checkCoverage( getLog(), "Total", coverage,
minimumCoverage, minimumCoverageBranchTotal );
minimumCoverage, minimumCoverageBranchTotal, true );
for ( MeasuredPackage pkgCoverage : CollectionConverters.asJava( coverage.packages() ) )
{
ok &= checkCoverage( getLog(), "Package:" + pkgCoverage.name(), pkgCoverage,
minimumCoverageStmtPerPackage, minimumCoverageBranchPerPackage );
if ( !checkCoverage( getLog(), "Package:" + pkgCoverage.name(), pkgCoverage,
minimumCoverageStmtPerPackage, minimumCoverageBranchPerPackage, false ) )
ok = false;
}
for ( MeasuredFile fileCoverage : CollectionConverters.asJava( coverage.files() ) )
{
ok &= checkCoverage( getLog(), "File:" + fileCoverage.filename(), fileCoverage,
minimumCoverageStmtPerFile, minimumCoverageBranchPerFile );
if ( !checkCoverage( getLog(), "File:" + fileCoverage.filename(), fileCoverage,
minimumCoverageStmtPerFile, minimumCoverageBranchPerFile, false ) )
ok = false;
}

if ( !ok && failOnMinimumCoverage )
@@ -258,14 +258,17 @@ private static boolean is100( Double d )
}

private static boolean checkCoverage( Log logger, String metric, CoverageMetrics metrics,
double minimumStmt, double minimimBranch )
double minimumStmt, double minimimBranch, boolean logSuccessInfo )
{
return
checkCoverage( logger, "Statement:" + metric, minimumStmt, metrics.statementCoveragePercent() ) &&
checkCoverage( logger, "Branch:" + metric, minimimBranch, metrics.branchCoveragePercent() );
boolean stmt = checkCoverage( logger, "Statement:" + metric,
minimumStmt, metrics.statementCoveragePercent(), logSuccessInfo );
boolean branch = checkCoverage( logger, "Branch:" + metric,
minimimBranch, metrics.branchCoveragePercent(), logSuccessInfo );
return stmt && branch;
}

private static boolean checkCoverage( Log logger, String metric, double minimum, double actual )
private static boolean checkCoverage( Log logger, String metric,
double minimum, double actual, boolean logSuccessInfo )
{
if ( minimum <= 0 )
{
@@ -274,7 +277,7 @@ private static boolean checkCoverage( Log logger, String metric, double minimum,

if ( is100( minimum ) && is100( actual ) )
{
logger.debug( String.format( "Coverage is 100%: %s!", metric ));
logSuccess( logger, String.format( "Coverage is 100%: %s!", metric ), logSuccessInfo );
return true;
}

@@ -284,15 +287,29 @@ private static boolean checkCoverage( Log logger, String metric, double minimum,

if ( ok )
{
logger.debug( String.format( "Coverage is above minimum [%s%% >= %s%%]: %s",
actualFormatted, minimumFormatted, metric ) );
String message = String.format( "Coverage is above minimum [%s%% >= %s%%]: %s",
actualFormatted, minimumFormatted, metric );
logSuccess( logger, message, logSuccessInfo );
}
else
{
logger.error( String.format( "Coverage is below minimum [%s%% < %s%%]: %s",
actualFormatted, minimumFormatted, metric ) );
actualFormatted, minimumFormatted, metric ) );
}

return ok;
}

private static void logSuccess( Log logger, String message, boolean logSuccessInfo )
{
if ( logSuccessInfo )
{
logger.info(message);
}
else
{
logger.debug(message);
}
}

}