Skip to content

Cobertura requires raw ratio values #42

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 3 commits into from
Jul 20, 2014
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
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.statementCoverageFormatted}
branch-rate={method.branchCoverageFormatted}>
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.statementCoverageFormatted}
branch-rate={klass.branchCoverageFormatted}
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.statementCoverageFormatted}
branch-rate={pack.branchCoverageFormatted}
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.statementCoverageFormatted}
<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.branchCoverageFormatted}
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(""), dir)
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")

}
}