Skip to content

Commit d08e781

Browse files
committed
Print Doubles with two fraction digits using US locale
1 parent f07302a commit d08e781

File tree

4 files changed

+38
-16
lines changed

4 files changed

+38
-16
lines changed
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
package scoverage
2+
3+
import java.text.{DecimalFormat, DecimalFormatSymbols}
4+
import java.util.Locale
5+
6+
object DoubleFormat {
7+
private[this] val twoFractionDigitsFormat: DecimalFormat = {
8+
val fmt = new DecimalFormat()
9+
fmt.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US))
10+
fmt.setMinimumIntegerDigits(1)
11+
fmt.setMinimumFractionDigits(2)
12+
fmt.setMaximumFractionDigits(2)
13+
fmt.setGroupingUsed(false)
14+
fmt
15+
}
16+
17+
def twoFractionDigits(d: Double) = twoFractionDigitsFormat.format(d)
18+
19+
}

scalac-scoverage-plugin/src/main/scala/scoverage/coverage.scala

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ package scoverage
22

33
import java.io.File
44

5+
import scoverage.DoubleFormat.twoFractionDigits
6+
57
import scala.collection.mutable
68

79
/**
@@ -24,14 +26,14 @@ case class Coverage()
2426

2527

2628
def avgClassesPerPackage = classCount / packageCount.toDouble
27-
def avgClassesPerPackageFormatted: String = "%.2f".format(avgClassesPerPackage)
29+
def avgClassesPerPackageFormatted: String = twoFractionDigits(avgClassesPerPackage)
2830

2931
def avgMethodsPerClass = methodCount / classCount.toDouble
30-
def avgMethodsPerClassFormatted: String = "%.2f".format(avgMethodsPerClass)
32+
def avgMethodsPerClassFormatted: String = twoFractionDigits(avgMethodsPerClass)
3133

3234
def loc = files.map(_.loc).sum
3335
def linesPerFile = loc / fileCount.toDouble
34-
def linesPerFileFormatted: String = "%.2f".format(linesPerFile)
36+
def linesPerFileFormatted: String = twoFractionDigits(linesPerFile)
3537

3638
// returns the classes by least coverage
3739
def risks(limit: Int) = classes.toSeq.sortBy(_.statementCount).reverse.sortBy(_.statementCoverage).take(limit)
@@ -158,7 +160,7 @@ trait CoverageMetrics {
158160
def invokedStatementCount = invokedStatements.size
159161
def statementCoverage: Double = if (statementCount == 0) 1 else invokedStatementCount / statementCount.toDouble
160162
def statementCoveragePercent = statementCoverage * 100
161-
def statementCoverageFormatted: String = "%.2f".format(statementCoveragePercent)
163+
def statementCoverageFormatted: String = twoFractionDigits(statementCoveragePercent)
162164
def branches: Iterable[Statement] = statements.filter(_.branch)
163165
def branchCount: Int = branches.size
164166
def branchCoveragePercent = branchCoverage * 100
@@ -179,7 +181,7 @@ trait CoverageMetrics {
179181
invokedBranchesCount / branchCount.toDouble
180182
}
181183
}
182-
def branchCoverageFormatted: String = "%.2f".format(branchCoveragePercent)
184+
def branchCoverageFormatted: String = twoFractionDigits(branchCoveragePercent)
183185
}
184186

185187
trait ClassCoverage {

scalac-scoverage-plugin/src/main/scala/scoverage/report/CoberturaXmlWriter.scala

Lines changed: 9 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package scoverage.report
22

33
import java.io.File
44

5+
import scoverage.DoubleFormat.twoFractionDigits
56
import scoverage._
67

78
import scala.xml.{Node, PrettyPrinter}
@@ -13,8 +14,6 @@ class CoberturaXmlWriter(sourceDirectories: Seq[File], outputDir: File) extends
1314
this(Seq(baseDir), outputDir)
1415
}
1516

16-
def format(double: Double): String = "%.2f".format(double)
17-
1817
def write(coverage: Coverage): Unit = {
1918
val file = new File(outputDir, "cobertura.xml")
2019
IOUtils.writeToFile(file, "<?xml version=\"1.0\"?>\n<!DOCTYPE coverage SYSTEM \"http://cobertura.sourceforge.net/xml/coverage-04.dtd\">\n" +
@@ -24,8 +23,8 @@ class CoberturaXmlWriter(sourceDirectories: Seq[File], outputDir: File) extends
2423
def method(method: MeasuredMethod): Node = {
2524
<method name={method.name}
2625
signature="()V"
27-
line-rate={format(method.statementCoverage)}
28-
branch-rate={format(method.branchCoverage)}>
26+
line-rate={twoFractionDigits(method.statementCoverage)}
27+
branch-rate={twoFractionDigits(method.branchCoverage)}>
2928
<lines>
3029
{method.statements.map(stmt =>
3130
<line
@@ -40,8 +39,8 @@ class CoberturaXmlWriter(sourceDirectories: Seq[File], outputDir: File) extends
4039
def klass(klass: MeasuredClass): Node = {
4140
<class name={klass.fullClassName}
4241
filename={relativeSource(klass.source).replace(File.separator, "/")}
43-
line-rate={format(klass.statementCoverage)}
44-
branch-rate={format(klass.branchCoverage)}
42+
line-rate={twoFractionDigits(klass.statementCoverage)}
43+
branch-rate={twoFractionDigits(klass.branchCoverage)}
4544
complexity="0">
4645
<methods>
4746
{klass.methods.map(method)}
@@ -59,8 +58,8 @@ class CoberturaXmlWriter(sourceDirectories: Seq[File], outputDir: File) extends
5958

6059
def pack(pack: MeasuredPackage): Node = {
6160
<package name={pack.name}
62-
line-rate={format(pack.statementCoverage)}
63-
branch-rate={format(pack.branchCoverage)}
61+
line-rate={twoFractionDigits(pack.statementCoverage)}
62+
branch-rate={twoFractionDigits(pack.branchCoverage)}
6463
complexity="0">
6564
<classes>
6665
{pack.classes.map(klass)}
@@ -73,12 +72,12 @@ class CoberturaXmlWriter(sourceDirectories: Seq[File], outputDir: File) extends
7372
}
7473

7574
def xml(coverage: Coverage): Node = {
76-
<coverage line-rate={format(coverage.statementCoverage)}
75+
<coverage line-rate={twoFractionDigits(coverage.statementCoverage)}
7776
lines-valid={coverage.statementCount.toString}
7877
lines-covered={coverage.invokedStatementCount.toString}
7978
branches-valid={coverage.branchCount.toString}
8079
branches-covered={coverage.invokedBranchesCount.toString}
81-
branch-rate={format(coverage.branchCoverage)}
80+
branch-rate={twoFractionDigits(coverage.branchCoverage)}
8281
complexity="0"
8382
version="1.0"
8483
timestamp={System.currentTimeMillis.toString}>

scalac-scoverage-plugin/src/main/scala/scoverage/report/ScoverageXmlMerger.scala

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,7 @@
11
package scoverage.report
22

3+
import scoverage.DoubleFormat.twoFractionDigits
4+
35
import scala.xml.Node
46

57
/** @author Stephen Samuel */
@@ -12,7 +14,7 @@ object ScoverageXmlMerger {
1214
def merge(node1: Node, node2: Node): Node = {
1315
val statementCount = (node1 \ "@statement-count").text.toInt + (node2 \ "@statement-count").text.toInt
1416
val statementsInvoked = (node1 \ "@statements-invoked").text.toInt + (node2 \ "@statements-invoked").text.toInt
15-
val statementRate = "%.2f".format(statementsInvoked.toDouble / statementCount.toDouble * 100.0d)
17+
val statementRate = twoFractionDigits(statementsInvoked.toDouble / statementCount.toDouble * 100.0d)
1618
val packages = (node1 \\ "packages") ++ (node2 \\ "packages")
1719
<scoverage statement-count={statementCount.toString}
1820
statements-invoked={statementsInvoked.toString}

0 commit comments

Comments
 (0)