diff --git a/scalac-scoverage-plugin/src/main/scala/scoverage/IOUtils.scala b/scalac-scoverage-plugin/src/main/scala/scoverage/IOUtils.scala index d09ad8ca..2cfa3e1f 100644 --- a/scalac-scoverage-plugin/src/main/scala/scoverage/IOUtils.scala +++ b/scalac-scoverage-plugin/src/main/scala/scoverage/IOUtils.scala @@ -71,13 +71,16 @@ object IOUtils { val isDebugReportFile = (file: File) => file.getName == Constants.XMLReportFilenameWithDebug // loads all the invoked statement ids from the given files - def invoked(files: Seq[File]): Set[Int] = { - val acc = mutable.Set[Int]() + def invoked(files: Seq[File]): Set[(Int, String)] = { + val acc = mutable.Set[(Int, String)]() files.foreach { file => val reader = Source.fromFile(file) for ( line <- reader.getLines() ) { if (!line.isEmpty) { - acc += line.toInt + acc += (line.split(" ").toList match { + case List(idx, clazz) => (idx.toInt, clazz) + case List(idx) => (idx.toInt, "") + }) } } reader.close() diff --git a/scalac-scoverage-plugin/src/main/scala/scoverage/coverage.scala b/scalac-scoverage-plugin/src/main/scala/scoverage/coverage.scala index dfe65258..0f5297a6 100644 --- a/scalac-scoverage-plugin/src/main/scala/scoverage/coverage.scala +++ b/scalac-scoverage-plugin/src/main/scala/scoverage/coverage.scala @@ -38,8 +38,8 @@ case class Coverage() // returns the classes by least coverage def risks(limit: Int) = classes.toSeq.sortBy(_.statementCount).reverse.sortBy(_.statementCoverage).take(limit) - def apply(ids: Iterable[Int]): Unit = ids foreach invoked - def invoked(id: Int): Unit = statementsById.get(id).foreach(_.invoked()) + def apply(ids: Iterable[(Int, String)]): Unit = ids foreach invoked + def invoked(id: (Int, String)): Unit = statementsById.get(id._1).foreach(_.invoked(id._2)) } trait MethodBuilders { @@ -119,9 +119,13 @@ case class Statement(location: Location, treeName: String, branch: Boolean, var count: Int = 0, - ignored: Boolean = false) extends java.io.Serializable { + ignored: Boolean = false, + tests: mutable.Set[String] = mutable.Set[String]()) extends java.io.Serializable { def source = location.sourcePath - def invoked(): Unit = count = count + 1 + def invoked(test: String): Unit = { + count = count + 1 + if(test != "") tests += test + } def isInvoked = count > 0 } diff --git a/scalac-scoverage-plugin/src/main/scala/scoverage/plugin.scala b/scalac-scoverage-plugin/src/main/scala/scoverage/plugin.scala index 1aa04d13..11839535 100644 --- a/scalac-scoverage-plugin/src/main/scala/scoverage/plugin.scala +++ b/scalac-scoverage-plugin/src/main/scala/scoverage/plugin.scala @@ -35,6 +35,8 @@ class ScoveragePlugin(val global: Global) extends Plugin { options.dataDir = opt.substring("dataDir:".length) } else if (opt.startsWith("extraAfterPhase:") || opt.startsWith("extraBeforePhase:")) { // skip here, these flags are processed elsewhere + } else if (opt == "reportTestName") { + options.reportTestName = true } else { error("Unknown option: " + opt) } @@ -82,6 +84,7 @@ class ScoverageOptions { var excludedFiles: Seq[String] = Nil var excludedSymbols: Seq[String] = Seq("scala.reflect.api.Exprs.Expr", "scala.reflect.api.Trees.Tree", "scala.reflect.macros.Universe.Tree") var dataDir: String = IOUtils.getTempPath + var reportTestName: Boolean = false } class ScoverageInstrumentationComponent(val global: Global, extraAfterPhase: Option[String], extraBeforePhase: Option[String]) @@ -161,14 +164,17 @@ class ScoverageInstrumentationComponent(val global: Global, extraAfterPhase: Opt ), newTermName("invoked") ), - List( - Literal( - Constant(id) - ), - Literal( - Constant(options.dataDir) - ) - ) + Literal( + Constant(id) + ) :: + Literal( + Constant(options.dataDir) + ) :: + (if(options.reportTestName) + List(Literal( + Constant(true) + )) + else Nil) ) } diff --git a/scalac-scoverage-plugin/src/main/scala/scoverage/report/StatementWriter.scala b/scalac-scoverage-plugin/src/main/scala/scoverage/report/StatementWriter.scala index be800229..fa859f2e 100644 --- a/scalac-scoverage-plugin/src/main/scala/scoverage/report/StatementWriter.scala +++ b/scalac-scoverage-plugin/src/main/scala/scoverage/report/StatementWriter.scala @@ -24,6 +24,7 @@ class StatementWriter(mFile: MeasuredFile) {