Skip to content

Commit

Permalink
Introduce "Ignored Statements" count in HTML report
Browse files Browse the repository at this point in the history
This count only includes statements excluded using the $COVERAGE-OFF$ tag,
not those excluded using the sbt "coverageExcludedPackages" or maven
"excludedPackages", etc. flags.
  • Loading branch information
rigoford committed Apr 22, 2015
1 parent a5f5b34 commit 0e00774
Show file tree
Hide file tree
Showing 3 changed files with 33 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -121,7 +121,8 @@ object Serializer {

val coverage = Coverage()
for ( statement <- statements )
if (!statement.ignored) coverage.add(statement)
if (statement.ignored) coverage.addIgnoredStatement(statement)
else coverage.add(statement)
coverage
}

Expand Down
18 changes: 17 additions & 1 deletion scalac-scoverage-plugin/src/main/scala/scoverage/coverage.scala
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,11 @@ case class Coverage()
override def statements = statementsById.values
def add(stmt: Statement): Unit = statementsById.put(stmt.id, stmt)

private val ignoredStatementsById = mutable.Map[Int, Statement]()
override def ignoredStatements = ignoredStatementsById.values
def addIgnoredStatement(stmt: Statement): Unit = ignoredStatementsById.put(stmt.id, stmt)


def avgClassesPerPackage = classCount / packageCount.toDouble
def avgClassesPerPackageFormatted: String = "%.2f".format(avgClassesPerPackage)

Expand Down Expand Up @@ -65,23 +70,30 @@ trait FileBuilders {
def fileCount: Int = files.size
}

case class MeasuredMethod(name: String, statements: Iterable[Statement]) extends CoverageMetrics
case class MeasuredMethod(name: String, statements: Iterable[Statement]) extends CoverageMetrics {
override def ignoredStatements: Iterable[Statement] = ???
}

case class MeasuredClass(name: String, statements: Iterable[Statement])
extends CoverageMetrics with MethodBuilders {
def source: String = statements.head.source
def simpleName = name.split('.').last
def loc = statements.map(_.line).max

override def ignoredStatements: Iterable[Statement] = ???
}

case class MeasuredPackage(name: String, statements: Iterable[Statement])
extends CoverageMetrics with ClassCoverage with ClassBuilders with FileBuilders {
override def ignoredStatements: Iterable[Statement] = ???
}

case class MeasuredFile(source: String, statements: Iterable[Statement])
extends CoverageMetrics with ClassCoverage with ClassBuilders {
def filename = new File(source).getName
def loc = statements.map(_.line).max

override def ignoredStatements: Iterable[Statement] = ???
}

case class Statement(source: String,
Expand Down Expand Up @@ -127,6 +139,10 @@ object ClassRef {
trait CoverageMetrics {
def statements: Iterable[Statement]
def statementCount: Int = statements.size

def ignoredStatements: Iterable[Statement]
def ignoredStatementCount: Int = ignoredStatements.size

def invokedStatements: Iterable[Statement] = statements.filter(_.count > 0)
def invokedStatementCount = invokedStatements.size
def statementCoverage: Double = if (statementCount == 0) 1 else invokedStatementCount / statementCount.toDouble
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -494,6 +494,20 @@ class ScoverageHtmlWriter(sourceDirectories: Seq[File], outputDir: File) extends
{coverage.invokedBranchesCount.toString}
</td>
</tr>
<tr>
<td>
Ignored statements:
</td>
<td>
{coverage.ignoredStatementCount.toString}
</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
<tr>
<td>
Statement coverage:
Expand Down

0 comments on commit 0e00774

Please sign in to comment.