Skip to content

Commit 52d0940

Browse files
author
Joachim Hofer
committed
added option to display branch coverage in new Scala report, converted Java to Scala, fixed ScalaDoc warning, misc small other cleanup
1 parent f914fa3 commit 52d0940

File tree

8 files changed

+66
-79
lines changed

8 files changed

+66
-79
lines changed

build.sbt

+2-2
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@ name := "jacoco4sbt"
44

55
organization := "de.johoop"
66

7-
version := "2.1.1"
7+
version := "2.1.2-SNAPSHOT"
88

99
resolvers += "Sonatype Release" at "https://oss.sonatype.org/content/repositories/releases"
1010

11-
scalaVersion := "2.10.2"
11+
scalaVersion := "2.10.3"
1212

1313
libraryDependencies ++= Seq(
1414
"org.jacoco" % "org.jacoco.core" % "0.6.3.201306030806" artifacts(Artifact("org.jacoco.core", "jar", "jar")),

publish.sbt

+4
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,9 @@ pomExtra := (
4545
<id>paddymahoney</id>
4646
<name>Patrick Mahoney</name>
4747
</developer>
48+
<developer>
49+
<id>retronym</id>
50+
<name>Jason Zaugg</name>
51+
</developer>
4852
</developers>
4953
)

readme.md

+8-1
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,9 @@ See the **[Wiki](https://bitbucket.org/jmhofer/jacoco4sbt/wiki/)** for details.
66

77
## Change Log
88

9+
* *2.1.2*
10+
* Added a Scala-specific report format (contributed by Jason)
11+
912
* *2.1.1*
1013

1114
* Updated for sbt 0.13.0 (final)
@@ -27,7 +30,11 @@ See the **[Wiki](https://bitbucket.org/jmhofer/jacoco4sbt/wiki/)** for details.
2730

2831
## Contributors
2932

30-
Many thanks to [Andreas Flierl](https://bitbucket.org/asflierl), [Joost den Boer](https://bitbucket.org/diversit) and [Patrick Mahoney](https://bitbucket.org/paddymahoney) for their awesome contributions!
33+
Many thanks to
34+
[Andreas Flierl](https://bitbucket.org/asflierl),
35+
[Jason Zaugg](https://bitbucket.org/retronym),
36+
[Joost den Boer](https://bitbucket.org/diversit) and
37+
[Patrick Mahoney](https://bitbucket.org/paddymahoney) for their awesome contributions!
3138

3239
## License
3340

src/main/scala/de/johoop/jacoco4sbt/FormattedReport.scala

+2-11
Original file line numberDiff line numberDiff line change
@@ -12,22 +12,13 @@
1212
package de.johoop.jacoco4sbt
1313

1414
import org.jacoco.report.FileMultiReportOutput
15-
import org.jacoco.report.IMultiReportOutput
1615
import org.jacoco.report.IReportVisitor
1716
import org.jacoco.report.xml.XMLFormatter
1817
import org.jacoco.report.html.HTMLFormatter
1918
import org.jacoco.report.csv.CSVFormatter
2019
import java.io.File
2120
import java.io.FileOutputStream
2221

23-
object FormattedReport {
24-
def apply(format: String, encoding: String) = format match {
25-
case "html" => HTMLReport(encoding)
26-
case "xml" => XMLReport(encoding)
27-
case "csv" => CSVReport(encoding)
28-
}
29-
}
30-
3122
sealed abstract class FormattedReport {
3223
val encoding : String
3324
def visitor(directory: File) : IReportVisitor
@@ -41,9 +32,9 @@ case class HTMLReport(encoding: String = "utf-8") extends FormattedReport {
4132
}
4233
}
4334

44-
case class ScalaHTMLReport(encoding: String = "utf-8") extends FormattedReport {
35+
case class ScalaHTMLReport(encoding: String = "utf-8", withBranchCoverage: Boolean = false) extends FormattedReport {
4536
def visitor(directory: File) = {
46-
val formatter = new ScalaHtmlFormatter
37+
val formatter = new ScalaHtmlFormatter(withBranchCoverage)
4738
formatter setOutputEncoding encoding
4839
formatter createVisitor new FileMultiReportOutput(new File(directory, "html"))
4940
}

src/main/scala/de/johoop/jacoco4sbt/Report.scala

+2-4
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,6 @@ package de.johoop.jacoco4sbt
1313

1414
import org.jacoco.core.data._
1515
import org.jacoco.core.analysis._
16-
import org.jacoco.report._
17-
import html.HTMLFormatter
1816

1917
import java.io.File
2018
import java.io.FileInputStream
@@ -54,7 +52,7 @@ class Report(executionDataFile: File, classDirectories: Seq[File],
5452
val coverageBuilder = new CoverageBuilder
5553
val analyzer = new FilteringAnalyzer(executionDataStore, coverageBuilder)
5654

57-
classDirectories foreach { analyzer analyzeAll _ }
55+
classDirectories foreach (analyzer analyzeAll)
5856

5957
coverageBuilder getBundle reportTitle
6058
}
@@ -64,7 +62,7 @@ class Report(executionDataFile: File, classDirectories: Seq[File],
6462

6563
val visitor = reportFormat.visitor(reportDirectory)
6664

67-
visitor.visitInfo(sessionInfoStore.getInfos, executionDataStore.getContents);
65+
visitor.visitInfo(sessionInfoStore.getInfos, executionDataStore.getContents)
6866
visitor.visitBundle(bundleCoverage, new DirectoriesSourceFileLocator(sourceDirectories, sourceEncoding, tabWidth))
6967

7068
visitor.visitEnd()

src/main/scala/de/johoop/jacoco4sbt/ScalaHtmlFormatter.java

-60
This file was deleted.
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
package de.johoop.jacoco4sbt
2+
3+
import org.jacoco.core.analysis.ICoverageNode
4+
import org.jacoco.report.html.HTMLFormatter
5+
import org.jacoco.report.internal.html.resources.Styles
6+
import org.jacoco.report.internal.html.table._
7+
import scala.Some
8+
9+
/**
10+
* Omits displaying instruction and branch coverage in the coverage tables,
11+
* as Scala generates null checks which make these too noisy.
12+
*
13+
* TODO: Find a way to remove them from the annotated source code reports, too.
14+
*/
15+
class ScalaHtmlFormatter(withBranchCoverage: Boolean) extends HTMLFormatter {
16+
private var table: Option[Table] = None
17+
18+
setLanguageNames(new ScalaLanguageNames)
19+
20+
override def getTable: Table = {
21+
table getOrElse {
22+
val newTable = createTable
23+
table = Some(newTable)
24+
newTable
25+
}
26+
}
27+
28+
private def createTable: Table = {
29+
val t: Table = new Table
30+
t.add("Element", null, new LabelColumn, false)
31+
t.add("Missed Lines", Styles.BAR, new BarColumn(ICoverageNode.CounterEntity.LINE, getLocale), true)
32+
t.add("Total Lines", Styles.CTR1, CounterColumn.newTotal(ICoverageNode.CounterEntity.LINE, getLocale), false)
33+
if (withBranchCoverage) {
34+
t.add("Missed Branches", Styles.BAR, new BarColumn(ICoverageNode.CounterEntity.BRANCH, getLocale), false)
35+
t.add("Cov.", Styles.CTR2, new PercentageColumn(ICoverageNode.CounterEntity.BRANCH, getLocale), false)
36+
}
37+
addMissedTotalColumns(t, "Methods", ICoverageNode.CounterEntity.METHOD)
38+
addMissedTotalColumns(t, "Classes", ICoverageNode.CounterEntity.CLASS)
39+
40+
t
41+
}
42+
43+
private def addMissedTotalColumns(table: Table, label: String, entity: ICoverageNode.CounterEntity) {
44+
table.add("Missed", Styles.CTR1, CounterColumn.newMissed(entity, getLocale), false)
45+
table.add(label, Styles.CTR2, CounterColumn.newTotal(entity, getLocale), false)
46+
}
47+
}

src/main/scala/de/johoop/jacoco4sbt/filter/ScalaForwarderDetector.scala

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import scala.collection.JavaConverters._
1010
* - classes contains static forwarders to methods in the companion object (for convenient Java interop)
1111
* - methods in (boxed) value classes forward to the method body in the companion object
1212
* - implicit classes creates a factory method beside the class.
13-
* - lazy vals have an accessor that forwards to $lzycompute, which is the method
13+
* - lazy vals have an accessor that forwards to `\$lzycompute`, which is the method
1414
* with the interesting code.
1515
*/
1616
object ScalaForwarderDetector {

0 commit comments

Comments
 (0)