Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
write ratios to two decimal places
  • Loading branch information
maiflai committed Jun 25, 2014
commit 9daa4374d6baee3dc84fda13e411d4f4e240c0b5
18 changes: 10 additions & 8 deletions src/main/scala/scoverage/report/CoberturaXmlWriter.scala
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,8 @@ import org.apache.commons.io.FileUtils
/** @author Stephen Samuel */
class CoberturaXmlWriter(baseDir: File, outputDir: File) {

def format(double: Double): String = "%.2f".format(double)

def write(coverage: Coverage): Unit = {
FileUtils.write(new File(outputDir.getAbsolutePath + "/cobertura.xml"),
"<?xml version=\"1.0\"?>\n<!DOCTYPE coverage SYSTEM \"http://cobertura.sourceforge.net/xml/coverage-04.dtd\">\n" +
Expand All @@ -17,8 +19,8 @@ class CoberturaXmlWriter(baseDir: File, outputDir: File) {
def method(method: MeasuredMethod): Node = {
<method name={method.name}
signature="()V"
line-rate={method.statementCoverage.toString}
branch-rate={method.branchCoverage.toString}>
line-rate={format(method.statementCoverage)}
branch-rate={format(method.branchCoverage)}>
<lines>
{method.statements.map(stmt =>
<line
Expand All @@ -38,8 +40,8 @@ class CoberturaXmlWriter(baseDir: File, outputDir: File) {
case false => baseDir.getAbsolutePath + File.separatorChar
}
klass.source.replace(absPath, "")}
line-rate={klass.statementCoverage.toString}
branch-rate={klass.branchCoverage.toString}
line-rate={format(klass.statementCoverage)}
branch-rate={format(klass.branchCoverage)}
complexity="0">
<methods>
{klass.methods.map(method)}
Expand All @@ -57,8 +59,8 @@ class CoberturaXmlWriter(baseDir: File, outputDir: File) {

def pack(pack: MeasuredPackage): Node = {
<package name={pack.name}
line-rate={pack.statementCoverage.toString}
branch-rate={pack.branchCoverage.toString}
line-rate={format(pack.statementCoverage)}
branch-rate={format(pack.branchCoverage)}
complexity="0">
<classes>
{pack.classes.map(klass)}
Expand All @@ -67,12 +69,12 @@ class CoberturaXmlWriter(baseDir: File, outputDir: File) {
}

def xml(coverage: Coverage): Node = {
<coverage line-rate={coverage.statementCoverage.toString}
<coverage line-rate={format(coverage.statementCoverage)}
lines-covered={coverage.statementCount.toString}
lines-valid={coverage.invokedStatementCount.toString}
branches-covered={coverage.branchCount.toString}
branches-valid={coverage.invokedBranchesCount.toString}
branch-rate={coverage.branchCoverage.toString}
branch-rate={format(coverage.branchCoverage)}
complexity="0"
version="1.0"
timestamp={System.currentTimeMillis.toString}>
Expand Down
48 changes: 41 additions & 7 deletions src/test/scala/scoverage/CoberturaXmlWriterTest.scala
Original file line number Diff line number Diff line change
@@ -1,19 +1,31 @@
package scoverage

import java.io.File
import java.util.UUID
import javax.xml.parsers.DocumentBuilderFactory

import org.apache.commons.io.FileUtils
import org.scalatest.{BeforeAndAfter, FunSuite, OneInstancePerTest}
import org.xml.sax.{ErrorHandler, SAXParseException}
import java.io.File
import scoverage.report.CoberturaXmlWriter
import org.scalatest.{FunSuite, BeforeAndAfter, OneInstancePerTest}
import org.apache.commons.io.FileUtils

import scala.xml.XML

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

def tempDir(): File = {
val dir = new File(FileUtils.getTempDirectory, UUID.randomUUID().toString)
dir.mkdirs()
dir.deleteOnExit()
dir
}

def fileIn(dir: File) = new File(dir, "cobertura.xml")

test("cobertura output validates") {

val file = new File(FileUtils.getTempDirectoryPath + "/cobertura.xml")
file.deleteOnExit()
val dir = tempDir()

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

val writer = new CoberturaXmlWriter(new File(""), FileUtils.getTempDirectory)
val writer = new CoberturaXmlWriter(new File(""), tempDir)
writer.write(coverage)

val domFactory = DocumentBuilderFactory.newInstance()
Expand All @@ -57,6 +69,28 @@ class CoberturaXmlWriterTest extends FunSuite with BeforeAndAfter with OneInstan
assert(false)
}
})
builder.parse(file)
builder.parse(fileIn(dir))
}

test("coverage rates are written as 2dp decimal values rather than percentage") {

val dir = tempDir()

val coverage = Coverage()
coverage.add(MeasuredStatement("a.scala", Location("com.sksamuel.scoverage", "A", ClassType.Object, "create"),
1, 2, 3, 12, "", "", "", false))
coverage.add(MeasuredStatement("a.scala", Location("com.sksamuel.scoverage", "A", ClassType.Object, "create2"),
2, 2, 3, 16, "", "", "", true))
coverage.add(MeasuredStatement("a.scala", Location("com.sksamuel.scoverage", "A", ClassType.Object, "create3"),
3, 3, 3, 20, "", "", "", true, 1))

val writer = new CoberturaXmlWriter(new File(""), dir)
writer.write(coverage)

val xml = XML.loadFile(fileIn(dir))

assert(xml \\ "coverage" \@ "line-rate" === "0.33", "line-rate")
assert(xml \\ "coverage" \@ "branch-rate" === "0.50", "branch-rate")

}
}