From b65e619e2e49935e5e180430357835d263023d3f Mon Sep 17 00:00:00 2001 From: Stu Date: Tue, 24 Jun 2014 22:32:22 +0100 Subject: [PATCH 1/3] Cobertura requires raw ratio values --- .../scoverage/report/CoberturaXmlWriter.scala | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/main/scala/scoverage/report/CoberturaXmlWriter.scala b/src/main/scala/scoverage/report/CoberturaXmlWriter.scala index 449f7d2a..4cd562b6 100644 --- a/src/main/scala/scoverage/report/CoberturaXmlWriter.scala +++ b/src/main/scala/scoverage/report/CoberturaXmlWriter.scala @@ -17,8 +17,8 @@ class CoberturaXmlWriter(baseDir: File, outputDir: File) { def method(method: MeasuredMethod): Node = { + line-rate={method.statementCoverage.toString} + branch-rate={method.branchCoverage.toString}> {method.statements.map(stmt => baseDir.getAbsolutePath + File.separatorChar } klass.source.replace(absPath, "")} - line-rate={klass.statementCoverageFormatted} - branch-rate={klass.branchCoverageFormatted} + line-rate={klass.statementCoverage.toString} + branch-rate={klass.branchCoverage.toString} complexity="0"> {klass.methods.map(method)} @@ -57,8 +57,8 @@ class CoberturaXmlWriter(baseDir: File, outputDir: File) { def pack(pack: MeasuredPackage): Node = { {pack.classes.map(klass)} @@ -67,12 +67,12 @@ class CoberturaXmlWriter(baseDir: File, outputDir: File) { } def xml(coverage: Coverage): Node = { - From 9daa4374d6baee3dc84fda13e411d4f4e240c0b5 Mon Sep 17 00:00:00 2001 From: Stu Date: Wed, 25 Jun 2014 21:25:38 +0100 Subject: [PATCH 2/3] write ratios to two decimal places --- .../scoverage/report/CoberturaXmlWriter.scala | 18 +++---- .../scoverage/CoberturaXmlWriterTest.scala | 48 ++++++++++++++++--- 2 files changed, 51 insertions(+), 15 deletions(-) diff --git a/src/main/scala/scoverage/report/CoberturaXmlWriter.scala b/src/main/scala/scoverage/report/CoberturaXmlWriter.scala index 4cd562b6..d065df91 100644 --- a/src/main/scala/scoverage/report/CoberturaXmlWriter.scala +++ b/src/main/scala/scoverage/report/CoberturaXmlWriter.scala @@ -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"), "\n\n" + @@ -17,8 +19,8 @@ class CoberturaXmlWriter(baseDir: File, outputDir: File) { def method(method: MeasuredMethod): Node = { + line-rate={format(method.statementCoverage)} + branch-rate={format(method.branchCoverage)}> {method.statements.map(stmt => 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"> {klass.methods.map(method)} @@ -57,8 +59,8 @@ class CoberturaXmlWriter(baseDir: File, outputDir: File) { def pack(pack: MeasuredPackage): Node = { {pack.classes.map(klass)} @@ -67,12 +69,12 @@ class CoberturaXmlWriter(baseDir: File, outputDir: File) { } def xml(coverage: Coverage): Node = { - diff --git a/src/test/scala/scoverage/CoberturaXmlWriterTest.scala b/src/test/scala/scoverage/CoberturaXmlWriterTest.scala index b7c3a0bd..6300014b 100644 --- a/src/test/scala/scoverage/CoberturaXmlWriterTest.scala +++ b/src/test/scala/scoverage/CoberturaXmlWriterTest.scala @@ -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"), @@ -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() @@ -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") + } } From 4eab6d272e95d299554093e387461b5b4c620ae9 Mon Sep 17 00:00:00 2001 From: Stu Date: Sun, 29 Jun 2014 11:32:01 +0100 Subject: [PATCH 3/3] missed rename of test file location --- src/test/scala/scoverage/CoberturaXmlWriterTest.scala | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/test/scala/scoverage/CoberturaXmlWriterTest.scala b/src/test/scala/scoverage/CoberturaXmlWriterTest.scala index 6300014b..ce07f710 100644 --- a/src/test/scala/scoverage/CoberturaXmlWriterTest.scala +++ b/src/test/scala/scoverage/CoberturaXmlWriterTest.scala @@ -45,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(""), tempDir) + val writer = new CoberturaXmlWriter(new File(""), dir) writer.write(coverage) val domFactory = DocumentBuilderFactory.newInstance()