-
Notifications
You must be signed in to change notification settings - Fork 127
Open
Description
There are cases when coverage is mistakenly reported as 100%, even if it is not true:
package org.example
import com.typesafe.scalalogging.Logger
import java.util.concurrent.CompletableFuture
class Class(logger: Logger) {
def brokenCoverage1(input: Option[String]): String = {
input match {
case Some(value) => value
case None => ""
}
}
def brokenCoverage2(input: Option[String]): String = {
input match {
case Some(value) => {
value
}
case None => ""
}
}
def brokenCoverage3(): Unit = {
CompletableFuture.completedFuture("").whenComplete { (_, throwable) =>
Option(throwable) match {
case Some(_) => logger.error("Error completing future")
case None => ()
}
}
}
def brokenCoverage4(): Unit = {
CompletableFuture.completedFuture("").whenComplete { (_, throwable) =>
Option(throwable) match {
case Some(_) => {
logger.error("Error completing future")
}
case None => ()
}
}
}
def brokenCoverage5(input: Option[String]): String = {
input match {
case Some(_) => s"something"
case None => ""
}
}
def brokenCoverage6(input: Option[String]): String = {
input match {
case Some(value) => s"something $value"
case None => ""
}
}
def brokenCoverage7(input: Option[String]): String = {
input match {
case Some(value) => {
s"something $value"
}
case None => ""
}
}
}
package org.example
import com.typesafe.scalalogging.Logger
import org.scalatest.funsuite.AnyFunSuite
import org.scalatest.matchers.should
import org.slf4j.LoggerFactory
class ScoverageSpec extends AnyFunSuite with should.Matchers {
test("scoverage") {
val logger: Logger = Logger(LoggerFactory.getLogger("[Gomez]"))
new Class(logger).brokenCoverage1(None) shouldBe ""
new Class(logger).brokenCoverage2(None) shouldBe ""
new Class(logger).brokenCoverage3() shouldBe ()
new Class(logger).brokenCoverage4() shouldBe ()
new Class(logger).brokenCoverage5(None) shouldBe ""
new Class(logger).brokenCoverage6(None) shouldBe ""
new Class(logger).brokenCoverage7(None) shouldBe ""
}
}
Running sbt coverage test coverageReport
does not fail as it should, but reports 100% coverage. I have reproduced the bug here: https://github.com/andreisilviudragnea/scoverage-bugs
Metadata
Metadata
Assignees
Labels
No labels