Skip to content

Commit 9daa437

Browse files
committed
write ratios to two decimal places
1 parent b65e619 commit 9daa437

File tree

2 files changed

+51
-15
lines changed

2 files changed

+51
-15
lines changed

src/main/scala/scoverage/report/CoberturaXmlWriter.scala

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,8 @@ import org.apache.commons.io.FileUtils
88
/** @author Stephen Samuel */
99
class CoberturaXmlWriter(baseDir: File, outputDir: File) {
1010

11+
def format(double: Double): String = "%.2f".format(double)
12+
1113
def write(coverage: Coverage): Unit = {
1214
FileUtils.write(new File(outputDir.getAbsolutePath + "/cobertura.xml"),
1315
"<?xml version=\"1.0\"?>\n<!DOCTYPE coverage SYSTEM \"http://cobertura.sourceforge.net/xml/coverage-04.dtd\">\n" +
@@ -17,8 +19,8 @@ class CoberturaXmlWriter(baseDir: File, outputDir: File) {
1719
def method(method: MeasuredMethod): Node = {
1820
<method name={method.name}
1921
signature="()V"
20-
line-rate={method.statementCoverage.toString}
21-
branch-rate={method.branchCoverage.toString}>
22+
line-rate={format(method.statementCoverage)}
23+
branch-rate={format(method.branchCoverage)}>
2224
<lines>
2325
{method.statements.map(stmt =>
2426
<line
@@ -38,8 +40,8 @@ class CoberturaXmlWriter(baseDir: File, outputDir: File) {
3840
case false => baseDir.getAbsolutePath + File.separatorChar
3941
}
4042
klass.source.replace(absPath, "")}
41-
line-rate={klass.statementCoverage.toString}
42-
branch-rate={klass.branchCoverage.toString}
43+
line-rate={format(klass.statementCoverage)}
44+
branch-rate={format(klass.branchCoverage)}
4345
complexity="0">
4446
<methods>
4547
{klass.methods.map(method)}
@@ -57,8 +59,8 @@ class CoberturaXmlWriter(baseDir: File, outputDir: File) {
5759

5860
def pack(pack: MeasuredPackage): Node = {
5961
<package name={pack.name}
60-
line-rate={pack.statementCoverage.toString}
61-
branch-rate={pack.branchCoverage.toString}
62+
line-rate={format(pack.statementCoverage)}
63+
branch-rate={format(pack.branchCoverage)}
6264
complexity="0">
6365
<classes>
6466
{pack.classes.map(klass)}
@@ -67,12 +69,12 @@ class CoberturaXmlWriter(baseDir: File, outputDir: File) {
6769
}
6870

6971
def xml(coverage: Coverage): Node = {
70-
<coverage line-rate={coverage.statementCoverage.toString}
72+
<coverage line-rate={format(coverage.statementCoverage)}
7173
lines-covered={coverage.statementCount.toString}
7274
lines-valid={coverage.invokedStatementCount.toString}
7375
branches-covered={coverage.branchCount.toString}
7476
branches-valid={coverage.invokedBranchesCount.toString}
75-
branch-rate={coverage.branchCoverage.toString}
77+
branch-rate={format(coverage.branchCoverage)}
7678
complexity="0"
7779
version="1.0"
7880
timestamp={System.currentTimeMillis.toString}>

src/test/scala/scoverage/CoberturaXmlWriterTest.scala

Lines changed: 41 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,31 @@
11
package scoverage
22

3+
import java.io.File
4+
import java.util.UUID
35
import javax.xml.parsers.DocumentBuilderFactory
6+
7+
import org.apache.commons.io.FileUtils
8+
import org.scalatest.{BeforeAndAfter, FunSuite, OneInstancePerTest}
49
import org.xml.sax.{ErrorHandler, SAXParseException}
5-
import java.io.File
610
import scoverage.report.CoberturaXmlWriter
7-
import org.scalatest.{FunSuite, BeforeAndAfter, OneInstancePerTest}
8-
import org.apache.commons.io.FileUtils
11+
12+
import scala.xml.XML
913

1014
/** @author Stephen Samuel */
1115
class CoberturaXmlWriterTest extends FunSuite with BeforeAndAfter with OneInstancePerTest {
1216

17+
def tempDir(): File = {
18+
val dir = new File(FileUtils.getTempDirectory, UUID.randomUUID().toString)
19+
dir.mkdirs()
20+
dir.deleteOnExit()
21+
dir
22+
}
23+
24+
def fileIn(dir: File) = new File(dir, "cobertura.xml")
25+
1326
test("cobertura output validates") {
1427

15-
val file = new File(FileUtils.getTempDirectoryPath + "/cobertura.xml")
16-
file.deleteOnExit()
28+
val dir = tempDir()
1729

1830
val coverage = Coverage()
1931
coverage.add(MeasuredStatement("a.scala", Location("com.sksamuel.scoverage", "A", ClassType.Object, "create"),
@@ -33,7 +45,7 @@ class CoberturaXmlWriterTest extends FunSuite with BeforeAndAfter with OneInstan
3345
coverage.add(MeasuredStatement("d.scala", Location("com.sksamuel.scoverage4", "D", ClassType.Object, "delete2"),
3446
8, 2, 3, 14, "", "", "", false, 0))
3547

36-
val writer = new CoberturaXmlWriter(new File(""), FileUtils.getTempDirectory)
48+
val writer = new CoberturaXmlWriter(new File(""), tempDir)
3749
writer.write(coverage)
3850

3951
val domFactory = DocumentBuilderFactory.newInstance()
@@ -57,6 +69,28 @@ class CoberturaXmlWriterTest extends FunSuite with BeforeAndAfter with OneInstan
5769
assert(false)
5870
}
5971
})
60-
builder.parse(file)
72+
builder.parse(fileIn(dir))
73+
}
74+
75+
test("coverage rates are written as 2dp decimal values rather than percentage") {
76+
77+
val dir = tempDir()
78+
79+
val coverage = Coverage()
80+
coverage.add(MeasuredStatement("a.scala", Location("com.sksamuel.scoverage", "A", ClassType.Object, "create"),
81+
1, 2, 3, 12, "", "", "", false))
82+
coverage.add(MeasuredStatement("a.scala", Location("com.sksamuel.scoverage", "A", ClassType.Object, "create2"),
83+
2, 2, 3, 16, "", "", "", true))
84+
coverage.add(MeasuredStatement("a.scala", Location("com.sksamuel.scoverage", "A", ClassType.Object, "create3"),
85+
3, 3, 3, 20, "", "", "", true, 1))
86+
87+
val writer = new CoberturaXmlWriter(new File(""), dir)
88+
writer.write(coverage)
89+
90+
val xml = XML.loadFile(fileIn(dir))
91+
92+
assert(xml \\ "coverage" \@ "line-rate" === "0.33", "line-rate")
93+
assert(xml \\ "coverage" \@ "branch-rate" === "0.50", "branch-rate")
94+
6195
}
6296
}

0 commit comments

Comments
 (0)