From ac56ad2855ddba2ef993af92adda72327ff47f90 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Zyba=C5=82a?= Date: Wed, 18 May 2022 11:48:38 +0200 Subject: [PATCH 1/2] Add support for Scala 3 --- .../scala/scoverage/ScoverageSbtPlugin.scala | 10 ++------- src/sbt-test/scoverage/scala3-bad/build.sbt | 17 +++++++++++++++ .../scoverage/scala3-bad/project/plugins.sbt | 16 ++++++++++++++ .../src/main/scala/BadCoverage.scala | 10 +++++++++ .../src/test/scala/BadCoverageSpec.scala | 10 +++++++++ src/sbt-test/scoverage/scala3-bad/test | 5 +++++ src/sbt-test/scoverage/scala3-good/build.sbt | 21 +++++++++++++++++++ .../scoverage/scala3-good/project/plugins.sbt | 16 ++++++++++++++ .../src/main/scala/GoodCoverage.scala | 7 +++++++ .../src/main/scala/two/GoodCoverage.scala | 9 ++++++++ .../src/test/scala/GoodCoverageSpec.scala | 19 +++++++++++++++++ src/sbt-test/scoverage/scala3-good/test | 5 +++++ 12 files changed, 137 insertions(+), 8 deletions(-) create mode 100644 src/sbt-test/scoverage/scala3-bad/build.sbt create mode 100644 src/sbt-test/scoverage/scala3-bad/project/plugins.sbt create mode 100644 src/sbt-test/scoverage/scala3-bad/src/main/scala/BadCoverage.scala create mode 100644 src/sbt-test/scoverage/scala3-bad/src/test/scala/BadCoverageSpec.scala create mode 100644 src/sbt-test/scoverage/scala3-bad/test create mode 100644 src/sbt-test/scoverage/scala3-good/build.sbt create mode 100644 src/sbt-test/scoverage/scala3-good/project/plugins.sbt create mode 100644 src/sbt-test/scoverage/scala3-good/src/main/scala/GoodCoverage.scala create mode 100644 src/sbt-test/scoverage/scala3-good/src/main/scala/two/GoodCoverage.scala create mode 100644 src/sbt-test/scoverage/scala3-good/src/test/scala/GoodCoverageSpec.scala create mode 100644 src/sbt-test/scoverage/scala3-good/test diff --git a/src/main/scala/scoverage/ScoverageSbtPlugin.scala b/src/main/scala/scoverage/ScoverageSbtPlugin.scala index 98271a05..62a94166 100644 --- a/src/main/scala/scoverage/ScoverageSbtPlugin.scala +++ b/src/main/scala/scoverage/ScoverageSbtPlugin.scala @@ -155,15 +155,9 @@ object ScoverageSbtPlugin extends AutoPlugin { // rangepos is broken in some releases of scala so option to turn it off if (coverageHighlighting.value) Some("-Yrangepos") else None ).flatten - } else if ( - // TODO this is very temporary until support for this gets merged in. - // For now we restrict this to this exact SNAPSHOT version which needs - // to be published localled in order to test - coverageEnabled.value && scalaVersion.value == "3.1.2-RC1-bin-SNAPSHOT" - ) { + } else if (coverageEnabled.value) { Seq( - "-coverage", - s"${coverageDataDir.value.getAbsolutePath()}/scoverage-data" + s"-coverage-out:${coverageDataDir.value.getAbsolutePath()}/scoverage-data" ) } else { Nil diff --git a/src/sbt-test/scoverage/scala3-bad/build.sbt b/src/sbt-test/scoverage/scala3-bad/build.sbt new file mode 100644 index 00000000..404cbf15 --- /dev/null +++ b/src/sbt-test/scoverage/scala3-bad/build.sbt @@ -0,0 +1,17 @@ +version := "0.1" + +scalaVersion := "3.2.0-RC1-bin-20220523-6783853-NIGHTLY" // TODO: Should be updated to stable version on 3.2.0-RC1 release + +libraryDependencies += "org.scalameta" %% "munit" % "0.7.29" % Test + +coverageMinimum := 80 + +coverageFailOnMinimum := true + +coverageEnabled := true + +resolvers ++= { + if (sys.props.get("plugin.version").exists(_.endsWith("-SNAPSHOT"))) + Seq(Resolver.sonatypeRepo("snapshots")) + else Seq.empty +} diff --git a/src/sbt-test/scoverage/scala3-bad/project/plugins.sbt b/src/sbt-test/scoverage/scala3-bad/project/plugins.sbt new file mode 100644 index 00000000..8d349239 --- /dev/null +++ b/src/sbt-test/scoverage/scala3-bad/project/plugins.sbt @@ -0,0 +1,16 @@ +val pluginVersion = sys.props.getOrElse( + "plugin.version", + throw new RuntimeException( + """|The system property 'plugin.version' is not defined. + |Specify this property using the scriptedLaunchOpts -D.""".stripMargin + ) +) + +addSbtPlugin("org.scoverage" % "sbt-scoverage" % pluginVersion) + +resolvers ++= { + if (pluginVersion.endsWith("-SNAPSHOT")) + Seq(Resolver.sonatypeRepo("snapshots")) + else + Seq.empty +} diff --git a/src/sbt-test/scoverage/scala3-bad/src/main/scala/BadCoverage.scala b/src/sbt-test/scoverage/scala3-bad/src/main/scala/BadCoverage.scala new file mode 100644 index 00000000..29663d06 --- /dev/null +++ b/src/sbt-test/scoverage/scala3-bad/src/main/scala/BadCoverage.scala @@ -0,0 +1,10 @@ +object BadCoverage { + + def sum(num1: Int, num2: Int) = { + num1 + num2 + } + + def mult(num1: Int, num2: Int) = { + num1 * num2 + } +} diff --git a/src/sbt-test/scoverage/scala3-bad/src/test/scala/BadCoverageSpec.scala b/src/sbt-test/scoverage/scala3-bad/src/test/scala/BadCoverageSpec.scala new file mode 100644 index 00000000..1faa5e5a --- /dev/null +++ b/src/sbt-test/scoverage/scala3-bad/src/test/scala/BadCoverageSpec.scala @@ -0,0 +1,10 @@ +import munit.FunSuite + +/** Created by tbarke001c on 7/8/14. + */ +class BadCoverageSpec extends FunSuite { + + test("BadCoverage should sum two numbers") { + assertEquals(BadCoverage.sum(1, 2), 3) + } +} diff --git a/src/sbt-test/scoverage/scala3-bad/test b/src/sbt-test/scoverage/scala3-bad/test new file mode 100644 index 00000000..45cbbb60 --- /dev/null +++ b/src/sbt-test/scoverage/scala3-bad/test @@ -0,0 +1,5 @@ +# run scoverage +> clean +> coverage +> test +-> coverageReport diff --git a/src/sbt-test/scoverage/scala3-good/build.sbt b/src/sbt-test/scoverage/scala3-good/build.sbt new file mode 100644 index 00000000..7c100fc2 --- /dev/null +++ b/src/sbt-test/scoverage/scala3-good/build.sbt @@ -0,0 +1,21 @@ +version := "0.1" + +scalaVersion := "3.2.0-RC1-bin-20220523-6783853-NIGHTLY" // TODO: Should be updated to stable version on 3.2.0-RC1 release + +libraryDependencies += "org.scalameta" %% "munit" % "0.7.29" % Test + +coverageMinimum := 80 +coverageMinimumStmtTotal := 100 +coverageMinimumBranchTotal := 100 +coverageMinimumStmtPerPackage := 100 +coverageMinimumBranchPerPackage := 100 +coverageMinimumStmtPerFile := 100 +coverageMinimumBranchPerFile := 100 + +coverageFailOnMinimum := true + +resolvers ++= { + if (sys.props.get("plugin.version").exists(_.endsWith("-SNAPSHOT"))) + Seq(Resolver.sonatypeRepo("snapshots")) + else Seq.empty +} diff --git a/src/sbt-test/scoverage/scala3-good/project/plugins.sbt b/src/sbt-test/scoverage/scala3-good/project/plugins.sbt new file mode 100644 index 00000000..8d349239 --- /dev/null +++ b/src/sbt-test/scoverage/scala3-good/project/plugins.sbt @@ -0,0 +1,16 @@ +val pluginVersion = sys.props.getOrElse( + "plugin.version", + throw new RuntimeException( + """|The system property 'plugin.version' is not defined. + |Specify this property using the scriptedLaunchOpts -D.""".stripMargin + ) +) + +addSbtPlugin("org.scoverage" % "sbt-scoverage" % pluginVersion) + +resolvers ++= { + if (pluginVersion.endsWith("-SNAPSHOT")) + Seq(Resolver.sonatypeRepo("snapshots")) + else + Seq.empty +} diff --git a/src/sbt-test/scoverage/scala3-good/src/main/scala/GoodCoverage.scala b/src/sbt-test/scoverage/scala3-good/src/main/scala/GoodCoverage.scala new file mode 100644 index 00000000..ac6582bb --- /dev/null +++ b/src/sbt-test/scoverage/scala3-good/src/main/scala/GoodCoverage.scala @@ -0,0 +1,7 @@ +object GoodCoverage { + + def sum(num1: Int, num2: Int) = { + if (0 == num1) num2 else if (0 == num2) num1 else num1 + num2 + } + +} diff --git a/src/sbt-test/scoverage/scala3-good/src/main/scala/two/GoodCoverage.scala b/src/sbt-test/scoverage/scala3-good/src/main/scala/two/GoodCoverage.scala new file mode 100644 index 00000000..587e11e1 --- /dev/null +++ b/src/sbt-test/scoverage/scala3-good/src/main/scala/two/GoodCoverage.scala @@ -0,0 +1,9 @@ +package two + +object GoodCoverage { + + def sum(num1: Int, num2: Int) = { + if (0 == num1) num2 else if (0 == num2) num1 else num1 + num2 + } + +} diff --git a/src/sbt-test/scoverage/scala3-good/src/test/scala/GoodCoverageSpec.scala b/src/sbt-test/scoverage/scala3-good/src/test/scala/GoodCoverageSpec.scala new file mode 100644 index 00000000..44eec1c9 --- /dev/null +++ b/src/sbt-test/scoverage/scala3-good/src/test/scala/GoodCoverageSpec.scala @@ -0,0 +1,19 @@ +import munit.FunSuite + +/** Created by tbarke001c on 7/8/14. + */ +class GoodCoverageSpec extends FunSuite { + + test("GoodCoverage should sum two numbers") { + assertEquals(GoodCoverage.sum(1, 2), 3) + assertEquals(GoodCoverage.sum(0, 3), 3) + assertEquals(GoodCoverage.sum(3, 0), 3) + } + + test("two.GoodCoverage should sum two numbers") { + assertEquals(two.GoodCoverage.sum(1, 2), 3) + assertEquals(two.GoodCoverage.sum(0, 3), 3) + assertEquals(two.GoodCoverage.sum(3, 0), 3) + } + +} diff --git a/src/sbt-test/scoverage/scala3-good/test b/src/sbt-test/scoverage/scala3-good/test new file mode 100644 index 00000000..c5b157f6 --- /dev/null +++ b/src/sbt-test/scoverage/scala3-good/test @@ -0,0 +1,5 @@ +# run scoverage +> clean +> coverage +> test +> coverageReport From 8602ac55770e03bc5619fd718cef4444ca793f5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Filip=20Zyba=C5=82a?= Date: Thu, 26 May 2022 12:12:46 +0200 Subject: [PATCH 2/2] Add condition on Scala 3 version --- src/main/scala/scoverage/ScoverageSbtPlugin.scala | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/scala/scoverage/ScoverageSbtPlugin.scala b/src/main/scala/scoverage/ScoverageSbtPlugin.scala index 62a94166..fa4a6d52 100644 --- a/src/main/scala/scoverage/ScoverageSbtPlugin.scala +++ b/src/main/scala/scoverage/ScoverageSbtPlugin.scala @@ -80,6 +80,14 @@ object ScoverageSbtPlugin extends AutoPlugin { } .getOrElse(false) + private def isScala3SupportingScoverage(scalaVersion: String) = + CrossVersion + .partialVersion(scalaVersion) + .collect { + case (3, minor) if minor >= 2 => true + } + .getOrElse(false) + private lazy val coverageSettings = Seq( libraryDependencies ++= { if (coverageEnabled.value && isScala2(scalaVersion.value)) { @@ -155,7 +163,9 @@ object ScoverageSbtPlugin extends AutoPlugin { // rangepos is broken in some releases of scala so option to turn it off if (coverageHighlighting.value) Some("-Yrangepos") else None ).flatten - } else if (coverageEnabled.value) { + } else if ( + coverageEnabled.value && isScala3SupportingScoverage(scalaVersion.value) + ) { Seq( s"-coverage-out:${coverageDataDir.value.getAbsolutePath()}/scoverage-data" )