diff --git a/src/main/scala/com/buransky/plugins/scoverage/xml/XmlScoverageReportConstructingParser.scala b/src/main/scala/com/buransky/plugins/scoverage/xml/XmlScoverageReportConstructingParser.scala index d77c5e4..6eb0149 100644 --- a/src/main/scala/com/buransky/plugins/scoverage/xml/XmlScoverageReportConstructingParser.scala +++ b/src/main/scala/com/buransky/plugins/scoverage/xml/XmlScoverageReportConstructingParser.scala @@ -143,7 +143,10 @@ class XmlScoverageReportConstructingParser(source: Source, pathSanitizer: PathSa val childNodes = children.map(_.toStatementCoverage) childNodes match { - case Nil => coverage.get + case Nil => coverage match { + case None => FileStatementCoverage("Nothing", 0, 0, List.empty[CoveredStatement]) + case _ => coverage.get + } case _ => DirectoryStatementCoverage(name, childNodes) } } @@ -224,4 +227,4 @@ class XmlScoverageReportConstructingParser(source: Source, pathSanitizer: PathSa private def coveredStatements(statements: Iterable[CoveredStatement]) = statements.count(_.hitCount > 0) -} \ No newline at end of file +} diff --git a/src/test/scala/com/buransky/plugins/scoverage/xml/XmlScoverageReportConstructingParserSpec.scala b/src/test/scala/com/buransky/plugins/scoverage/xml/XmlScoverageReportConstructingParserSpec.scala index d4ab1e1..6f212f6 100644 --- a/src/test/scala/com/buransky/plugins/scoverage/xml/XmlScoverageReportConstructingParserSpec.scala +++ b/src/test/scala/com/buransky/plugins/scoverage/xml/XmlScoverageReportConstructingParserSpec.scala @@ -34,6 +34,16 @@ import com.buransky.plugins.scoverage.NodeStatementCoverage class XmlScoverageReportConstructingParserSpec extends FlatSpec with Matchers { behavior of "parse source" + it must "parse empty coverage file correctly" in { + val sanitizer = new PathSanitizer() { + def getSourceRelativePath(path: Seq[String]): Option[Seq[String]] = { + // do nothing + Some(path) + } + } + assertReportFile(XmlReportFile1.emptyCoverage, 0, sanitizer)(assertEmptyCoverage) + } + it must "parse old broken Scoverage 0.95 file correctly" in { val sanitizer = new PathSanitizer() { def getSourceRelativePath(path: Seq[String]): Option[Seq[String]] = { @@ -130,4 +140,15 @@ class XmlScoverageReportConstructingParserSpec extends FlatSpec with Matchers { node.children } + + private def assertEmptyCoverage(projectCoverage: ProjectStatementCoverage): Unit = { + // Assert structure + projectCoverage.name should equal("") + + val projectChildren = projectCoverage.children.toList + projectChildren.length should equal(0) + projectCoverage.coveredStatementsCount should equal(0) + projectCoverage.statementCount should equal(0) + projectCoverage.coveredStatementsCount should equal(0) + } } diff --git a/src/test/scala/com/buransky/plugins/scoverage/xml/data/XmlReportFile1.scala b/src/test/scala/com/buransky/plugins/scoverage/xml/data/XmlReportFile1.scala index 82ec85c..abdb615 100644 --- a/src/test/scala/com/buransky/plugins/scoverage/xml/data/XmlReportFile1.scala +++ b/src/test/scala/com/buransky/plugins/scoverage/xml/data/XmlReportFile1.scala @@ -834,4 +834,10 @@ object XmlReportFile1 { | | """.stripMargin + + val emptyCoverage = + """ + | + |""".stripMargin }