Skip to content

Commit bba6532

Browse files
authored
Merge pull request #196 from rafalmag/master
(#194) Fix numbers decimal separator
2 parents 84c9730 + 3e386b8 commit bba6532

File tree

3 files changed

+30
-34
lines changed

3 files changed

+30
-34
lines changed

Diff for: src/functionalTest/java/org/scoverage/ScoverageFunctionalTest.java

+2-4
Original file line numberDiff line numberDiff line change
@@ -11,8 +11,6 @@
1111

1212
import java.io.File;
1313
import java.io.IOException;
14-
import java.text.NumberFormat;
15-
import java.text.ParseException;
1614
import java.util.ArrayList;
1715
import java.util.Arrays;
1816
import java.util.List;
@@ -108,12 +106,12 @@ protected File resolve(File file, String relativePath) {
108106
return file.toPath().resolve(relativePath).toFile();
109107
}
110108

111-
private Double coverage(File reportDir, CoverageType coverageType) throws IOException, SAXException, ParseException {
109+
private Double coverage(File reportDir, CoverageType coverageType) throws IOException, SAXException, NumberFormatException {
112110

113111
File reportFile = reportDir.toPath().resolve(coverageType.getFileName()).toFile();
114112
Node xml = parser.parse(reportFile);
115113
Object attribute = xml.attribute(coverageType.getParamName());
116-
double rawValue = NumberFormat.getInstance().parse(attribute.toString()).doubleValue();
114+
double rawValue = Double.parseDouble(attribute.toString());
117115
return coverageType.normalize(rawValue) * 100.0;
118116
}
119117

Diff for: src/main/groovy/org/scoverage/CoverageChecker.groovy

+7-13
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ import org.gradle.api.logging.Logger
66
import org.gradle.internal.impldep.com.google.common.annotations.VisibleForTesting
77

88
import java.text.DecimalFormat
9-
import java.text.NumberFormat
9+
import java.text.DecimalFormatSymbols
1010

1111
/**
1212
* Handles different types of coverage Scoverage can measure.
@@ -56,38 +56,32 @@ class CoverageChecker {
5656
}
5757

5858
public void checkLineCoverage(File reportDir, CoverageType coverageType, double minimumRate) throws GradleException {
59-
NumberFormat defaultNf = NumberFormat.getInstance(Locale.getDefault())
60-
checkLineCoverage(reportDir, coverageType, minimumRate, defaultNf)
61-
}
62-
63-
public void checkLineCoverage(File reportDir, CoverageType coverageType, double minimumRate, NumberFormat nf) throws GradleException {
6459
logger.info("Checking coverage. Type: {}. Minimum rate: {}", coverageType, minimumRate)
6560

6661
XmlParser parser = new XmlParser()
6762
parser.setFeature('http://apache.org/xml/features/disallow-doctype-decl', false)
6863
parser.setFeature('http://apache.org/xml/features/nonvalidating/load-external-dtd', false)
6964

70-
DecimalFormat df = new DecimalFormat("#.##")
71-
7265
try {
7366
File reportFile = new File(reportDir, coverageType.fileName)
7467
Node xml = parser.parse(reportFile)
75-
Double coverageValue = nf.parse(xml.attribute(coverageType.paramName) as String).doubleValue()
68+
Double coverageValue = (xml.attribute(coverageType.paramName) as String).toDouble()
7669
Double overallRate = coverageType.normalize(coverageValue)
7770
def difference = (minimumRate - overallRate)
7871

7972
if (difference > 1e-7) {
80-
String is = df.format(overallRate * 100)
81-
String needed = df.format(minimumRate * 100)
82-
throw new GradleException(errorMsg(is, needed, coverageType))
73+
throw new GradleException(errorMsg(overallRate, minimumRate, coverageType))
8374
}
8475
} catch (FileNotFoundException fnfe) {
8576
throw new GradleException(fileNotFoundErrorMsg(coverageType), fnfe)
8677
}
8778
}
8879

8980
@VisibleForTesting
90-
protected static String errorMsg(String actual, String expected, CoverageType type) {
81+
protected static String errorMsg(double overallRate, double minimumRate, CoverageType type) {
82+
DecimalFormat df = new DecimalFormat("#.##", DecimalFormatSymbols.getInstance(Locale.US))
83+
String actual = df.format(overallRate * 100)
84+
String expected = df.format(minimumRate * 100)
9185
"Only $actual% of project is covered by tests instead of $expected% (coverageType: $type)"
9286
}
9387

Diff for: src/test/groovy/org/scoverage/CoverageCheckerTest.groovy

+21-17
Original file line numberDiff line numberDiff line change
@@ -10,15 +10,13 @@ import org.junit.rules.TemporaryFolder
1010
import org.slf4j.LoggerFactory
1111

1212
import java.nio.file.Paths
13-
import java.text.NumberFormat
1413

14+
import static org.junit.Assert.assertEquals
1515
import static org.junit.Assert.assertThat
1616
import static org.junit.jupiter.api.Assertions.assertThrows
1717

1818
class CoverageCheckerTest {
1919

20-
private NumberFormat numberFormat = NumberFormat.getInstance(Locale.US)
21-
2220
private File reportDir = Paths.get(getClass().getClassLoader().getResource("checkTask").toURI()).toFile()
2321

2422
private CoverageChecker checker = new CoverageChecker(LoggerFactory.getLogger(CoverageCheckerTest.class))
@@ -31,68 +29,74 @@ class CoverageCheckerTest {
3129
@Test
3230
void failsWhenReportFileIsNotFound() {
3331
assertFailure(CoverageChecker.fileNotFoundErrorMsg(CoverageType.Line), {
34-
checker.checkLineCoverage(tempDir.getRoot(), CoverageType.Line, 0.0, numberFormat)
32+
checker.checkLineCoverage(tempDir.getRoot(), CoverageType.Line, 0.0)
3533
})
3634
}
3735

3836
// line coverage
3937

4038
@Test
4139
void failsWhenLineRateIsBelowTarget() {
42-
assertFailure(CoverageChecker.errorMsg("66", "100", CoverageType.Line), {
43-
checker.checkLineCoverage(reportDir, CoverageType.Line, 1.0, numberFormat)
40+
assertFailure(CoverageChecker.errorMsg(0.66, 1.0, CoverageType.Line), {
41+
checker.checkLineCoverage(reportDir, CoverageType.Line, 1.0)
4442
})
4543
}
4644

4745
@Test
4846
void doesNotFailWhenLineRateIsAtTarget() {
49-
checker.checkLineCoverage(reportDir, CoverageType.Line, 0.66, numberFormat)
47+
checker.checkLineCoverage(reportDir, CoverageType.Line, 0.66)
5048
}
5149

5250
@Test
5351
void doesNotFailWhenLineRateIsAboveTarget() {
54-
checker.checkLineCoverage(reportDir, CoverageType.Line, 0.6, numberFormat)
52+
checker.checkLineCoverage(reportDir, CoverageType.Line, 0.6)
5553
}
5654

5755
// Statement coverage
5856

5957
@Test
6058
void failsWhenStatementRateIsBelowTarget() {
61-
assertFailure(CoverageChecker.errorMsg(numberFormat.format(new Double(33.33)), "100", CoverageType.Statement), {
62-
checker.checkLineCoverage(reportDir, CoverageType.Statement, 1.0, numberFormat)
59+
assertFailure(CoverageChecker.errorMsg(0.3333, 1.0, CoverageType.Statement), {
60+
checker.checkLineCoverage(reportDir, CoverageType.Statement, 1.0)
6361
})
6462
}
6563

6664
@Test
6765
void doesNotFailWhenStatementRateIsAtTarget() {
68-
checker.checkLineCoverage(reportDir, CoverageType.Statement, 0.33, numberFormat)
66+
checker.checkLineCoverage(reportDir, CoverageType.Statement, 0.33)
6967
}
7068

7169
@Test
7270
void doesNotFailWhenStatementRateIsAboveTarget() {
73-
checker.checkLineCoverage(reportDir, CoverageType.Statement, 0.3, numberFormat)
71+
checker.checkLineCoverage(reportDir, CoverageType.Statement, 0.3)
7472
}
7573

7674
// Branch coverage
7775

7876
@Test
7977
void failsWhenBranchRateIsBelowTarget() {
80-
assertFailure(CoverageChecker.errorMsg("50", "100", CoverageType.Branch), {
81-
checker.checkLineCoverage(reportDir, CoverageType.Branch, 1.0, numberFormat)
78+
assertFailure(CoverageChecker.errorMsg(0.5, 1.0, CoverageType.Branch), {
79+
checker.checkLineCoverage(reportDir, CoverageType.Branch, 1.0)
8280
})
8381
}
8482

8583
@Test
8684
void doesNotFailWhenBranchRateIsAtTarget() {
87-
checker.checkLineCoverage(reportDir, CoverageType.Branch, 0.5, numberFormat)
85+
checker.checkLineCoverage(reportDir, CoverageType.Branch, 0.5)
8886
}
8987

9088
@Test
9189
void doesNotFailWhenBranchRateIsAboveTarget() {
92-
checker.checkLineCoverage(reportDir, CoverageType.Branch, 0.45, numberFormat)
90+
checker.checkLineCoverage(reportDir, CoverageType.Branch, 0.45)
91+
}
92+
93+
@Test
94+
void printsErrorMsgInEnglishWithUpTwoDecimalPointsPrecision() {
95+
assertEquals("Only 54.32% of project is covered by tests instead of 90% (coverageType: Branch)",
96+
CoverageChecker.errorMsg(0.54321, 0.9, CoverageType.Branch))
9397
}
9498

95-
private void assertFailure(String message, Executable executable) {
99+
private static void assertFailure(String message, Executable executable) {
96100
GradleException e = assertThrows(GradleException.class, executable)
97101
assertThat(e, new CauseMatcher(message))
98102
}

0 commit comments

Comments
 (0)