diff --git a/src/functionalTest/resources/projects/scala-single-module/build.gradle b/src/functionalTest/resources/projects/scala-single-module/build.gradle index 6ae71be..c9856a8 100644 --- a/src/functionalTest/resources/projects/scala-single-module/build.gradle +++ b/src/functionalTest/resources/projects/scala-single-module/build.gradle @@ -26,6 +26,7 @@ test { scoverage { minimumRate = 0.3 + coverageType = "Line" } if (hasProperty("excludedFile")) { diff --git a/src/main/groovy/org/scoverage/OverallCheckTask.groovy b/src/main/groovy/org/scoverage/OverallCheckTask.groovy index da83c12..4d7eaf5 100644 --- a/src/main/groovy/org/scoverage/OverallCheckTask.groovy +++ b/src/main/groovy/org/scoverage/OverallCheckTask.groovy @@ -15,10 +15,12 @@ import java.text.NumberFormat * Handles different types of coverage Scoverage can measure. */ enum CoverageType { - Line('cobertura.xml', 'line-rate', 1.0), - Statement('scoverage.xml', 'statement-rate', 100.0), - Branch('scoverage.xml', 'branch-rate', 100.0) + Line('Line', 'cobertura.xml', 'line-rate', 1.0), + Statement('Statement', 'scoverage.xml', 'statement-rate', 100.0), + Branch('Branch', 'scoverage.xml', 'branch-rate', 100.0) + /** Name of enum option the way it appears in the build configuration */ + String configurationName /** Name of file with coverage data */ String fileName /** Name of param in XML file with coverage value */ @@ -26,7 +28,8 @@ enum CoverageType { /** Used to normalize coverage value */ private double factor - private CoverageType(String fileName, String paramName, double factor) { + private CoverageType(String configurationName, String fileName, String paramName, double factor) { + this.configurationName = configurationName this.fileName = fileName this.paramName = paramName this.factor = factor @@ -36,6 +39,12 @@ enum CoverageType { Double normalize(Double value) { return value / factor } + + static CoverageType find(String configurationName) { + CoverageType.values().find { + it.configurationName.toLowerCase() == configurationName.toLowerCase() + } + } } /** @@ -46,7 +55,7 @@ class OverallCheckTask extends DefaultTask { /** Type of coverage to check. Available options: Line, Statement and Branch */ @Input - final Property coverageType = project.objects.property(CoverageType) + final Property coverageType = project.objects.property(String) @Input final Property minimumRate = project.objects.property(BigDecimal) @@ -61,7 +70,11 @@ class OverallCheckTask extends DefaultTask { void requireLineCoverage() { NumberFormat nf = NumberFormat.getInstance(locale.get()) - Exception failure = checkLineCoverage(nf, reportDir.get(), coverageType.get(), minimumRate.get().doubleValue()) + CoverageType coverageType = CoverageType.find(this.coverageType.get()) + if (coverageType == null) { + throw new GradleException("Unknown coverage type ${this.coverageType.get()}") + } + Exception failure = checkLineCoverage(nf, reportDir.get(), coverageType, minimumRate.get().doubleValue()) if (failure) throw failure } diff --git a/src/main/groovy/org/scoverage/ScoverageExtension.groovy b/src/main/groovy/org/scoverage/ScoverageExtension.groovy index 8ee680b..372b3dd 100644 --- a/src/main/groovy/org/scoverage/ScoverageExtension.groovy +++ b/src/main/groovy/org/scoverage/ScoverageExtension.groovy @@ -40,7 +40,7 @@ class ScoverageExtension { final Property deleteReportsOnAggregation - final Property coverageType + final Property coverageType final Property minimumRate ScoverageExtension(Project project) { @@ -87,8 +87,8 @@ class ScoverageExtension { deleteReportsOnAggregation = project.objects.property(Boolean) deleteReportsOnAggregation.set(false) - coverageType = project.objects.property(CoverageType) - coverageType.set(CoverageType.Statement) + coverageType = project.objects.property(String) + coverageType.set(CoverageType.Statement.configurationName) minimumRate = project.objects.property(BigDecimal) minimumRate.set(0.75)