From 0935e4355aa6e6c280b073ef54560fc202717210 Mon Sep 17 00:00:00 2001 From: Roland Tritsch Date: Sun, 3 Jul 2022 12:07:17 +0100 Subject: [PATCH 1/3] Refresh excluding packages and files. --- README.md | 12 ++++++++++-- .../coverage-excluded-files/build.sbt | 13 +++++++++++++ .../project/build.properties | 1 + .../project/plugins.sbt | 16 ++++++++++++++++ .../src/main/scala/GoodCoverage.scala | 7 +++++++ .../src/main/scala/two/GoodCoverage.scala | 9 +++++++++ .../src/test/scala/GoodCoverageSpec.scala | 19 +++++++++++++++++++ .../scoverage/coverage-excluded-files/test | 7 +++++++ .../coverage-excluded-packages/build.sbt | 13 +++++++++++++ .../project/build.properties | 1 + .../project/plugins.sbt | 16 ++++++++++++++++ .../src/main/scala/GoodCoverage.scala | 7 +++++++ .../src/main/scala/two/GoodCoverage.scala | 9 +++++++++ .../src/test/scala/GoodCoverageSpec.scala | 19 +++++++++++++++++++ .../scoverage/coverage-excluded-packages/test | 7 +++++++ .../coverage-off/project/build.properties | 1 + src/sbt-test/scoverage/coverage-off/test | 2 +- .../scala3-coverage-excluded-files/build.sbt | 13 +++++++++++++ .../project/build.properties | 1 + .../project/plugins.sbt | 16 ++++++++++++++++ .../src/main/scala/GoodCoverage.scala | 7 +++++++ .../src/main/scala/two/GoodCoverage.scala | 9 +++++++++ .../src/test/scala/GoodCoverageSpec.scala | 19 +++++++++++++++++++ .../scala3-coverage-excluded-files/test | 9 +++++++++ 24 files changed, 230 insertions(+), 3 deletions(-) create mode 100644 src/sbt-test/scoverage/coverage-excluded-files/build.sbt create mode 100644 src/sbt-test/scoverage/coverage-excluded-files/project/build.properties create mode 100644 src/sbt-test/scoverage/coverage-excluded-files/project/plugins.sbt create mode 100644 src/sbt-test/scoverage/coverage-excluded-files/src/main/scala/GoodCoverage.scala create mode 100644 src/sbt-test/scoverage/coverage-excluded-files/src/main/scala/two/GoodCoverage.scala create mode 100644 src/sbt-test/scoverage/coverage-excluded-files/src/test/scala/GoodCoverageSpec.scala create mode 100644 src/sbt-test/scoverage/coverage-excluded-files/test create mode 100644 src/sbt-test/scoverage/coverage-excluded-packages/build.sbt create mode 100644 src/sbt-test/scoverage/coverage-excluded-packages/project/build.properties create mode 100644 src/sbt-test/scoverage/coverage-excluded-packages/project/plugins.sbt create mode 100644 src/sbt-test/scoverage/coverage-excluded-packages/src/main/scala/GoodCoverage.scala create mode 100644 src/sbt-test/scoverage/coverage-excluded-packages/src/main/scala/two/GoodCoverage.scala create mode 100644 src/sbt-test/scoverage/coverage-excluded-packages/src/test/scala/GoodCoverageSpec.scala create mode 100644 src/sbt-test/scoverage/coverage-excluded-packages/test create mode 100644 src/sbt-test/scoverage/coverage-off/project/build.properties create mode 100644 src/sbt-test/scoverage/scala3-coverage-excluded-files/build.sbt create mode 100644 src/sbt-test/scoverage/scala3-coverage-excluded-files/project/build.properties create mode 100644 src/sbt-test/scoverage/scala3-coverage-excluded-files/project/plugins.sbt create mode 100644 src/sbt-test/scoverage/scala3-coverage-excluded-files/src/main/scala/GoodCoverage.scala create mode 100644 src/sbt-test/scoverage/scala3-coverage-excluded-files/src/main/scala/two/GoodCoverage.scala create mode 100644 src/sbt-test/scoverage/scala3-coverage-excluded-files/src/test/scala/GoodCoverageSpec.scala create mode 100644 src/sbt-test/scoverage/scala3-coverage-excluded-files/test diff --git a/README.md b/README.md index 06ffa4c4..3ca7f2fa 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ $ sbt coverageAggregate **NOTE**: You do not need to run `coverageReport` before `coverageAggregate`; it aggregates over the sub-projects' coverage data directly, not the report xml. -### Exclude classes and packages +### Exclude classes and packages and files You can exclude classes from being considered for coverage measurement by providing semicolon-separated list of regular expressions. @@ -75,6 +75,15 @@ The regular expressions are matched against the fully qualified class name, and must match the entire string to take effect. Any matched classes will not be instrumented or included in the coverage report. +You can also exclude files and file paths. + +```scala +coverageExcludedFiles := ".*\\/two\\/GoodCoverage\.scala;.*\\/three\\/.*" +``` + +Note: This only works for Scala2. Right now Scala3 does not support +a way to exclude packages or files from being instrumented. + You can also mark sections of code with comments like: ```scala @@ -118,7 +127,6 @@ Can also be set through the sbt set directive set coverageDataDir := file("/tmp") ``` - ## Trouble-shooting failing tests scoverage does a lot of file writing behind the scenes in order to track which diff --git a/src/sbt-test/scoverage/coverage-excluded-files/build.sbt b/src/sbt-test/scoverage/coverage-excluded-files/build.sbt new file mode 100644 index 00000000..b1e84c61 --- /dev/null +++ b/src/sbt-test/scoverage/coverage-excluded-files/build.sbt @@ -0,0 +1,13 @@ +version := "0.1" + +scalaVersion := "2.13.6" + +libraryDependencies += "org.scalameta" %% "munit" % "0.7.29" % Test + +coverageExcludedFiles := ".*\\/two\\/GoodCoverage\\.scala" + +resolvers ++= { + if (sys.props.get("plugin.version").exists(_.endsWith("-SNAPSHOT"))) + Seq(Resolver.sonatypeRepo("snapshots")) + else Seq.empty +} diff --git a/src/sbt-test/scoverage/coverage-excluded-files/project/build.properties b/src/sbt-test/scoverage/coverage-excluded-files/project/build.properties new file mode 100644 index 00000000..c8fcab54 --- /dev/null +++ b/src/sbt-test/scoverage/coverage-excluded-files/project/build.properties @@ -0,0 +1 @@ +sbt.version=1.6.2 diff --git a/src/sbt-test/scoverage/coverage-excluded-files/project/plugins.sbt b/src/sbt-test/scoverage/coverage-excluded-files/project/plugins.sbt new file mode 100644 index 00000000..8d349239 --- /dev/null +++ b/src/sbt-test/scoverage/coverage-excluded-files/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/coverage-excluded-files/src/main/scala/GoodCoverage.scala b/src/sbt-test/scoverage/coverage-excluded-files/src/main/scala/GoodCoverage.scala new file mode 100644 index 00000000..fed56c82 --- /dev/null +++ b/src/sbt-test/scoverage/coverage-excluded-files/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/coverage-excluded-files/src/main/scala/two/GoodCoverage.scala b/src/sbt-test/scoverage/coverage-excluded-files/src/main/scala/two/GoodCoverage.scala new file mode 100644 index 00000000..587e11e1 --- /dev/null +++ b/src/sbt-test/scoverage/coverage-excluded-files/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/coverage-excluded-files/src/test/scala/GoodCoverageSpec.scala b/src/sbt-test/scoverage/coverage-excluded-files/src/test/scala/GoodCoverageSpec.scala new file mode 100644 index 00000000..44eec1c9 --- /dev/null +++ b/src/sbt-test/scoverage/coverage-excluded-files/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/coverage-excluded-files/test b/src/sbt-test/scoverage/coverage-excluded-files/test new file mode 100644 index 00000000..7822d7ab --- /dev/null +++ b/src/sbt-test/scoverage/coverage-excluded-files/test @@ -0,0 +1,7 @@ +# run scoverage using the coverage task +> clean +> coverage +> test +> coverageReport +# There should be no directory for the excluded files +-$ exists target/scala-2.13/scoverage-report/two diff --git a/src/sbt-test/scoverage/coverage-excluded-packages/build.sbt b/src/sbt-test/scoverage/coverage-excluded-packages/build.sbt new file mode 100644 index 00000000..0e1bcdfd --- /dev/null +++ b/src/sbt-test/scoverage/coverage-excluded-packages/build.sbt @@ -0,0 +1,13 @@ +version := "0.1" + +scalaVersion := "2.13.6" + +libraryDependencies += "org.scalameta" %% "munit" % "0.7.29" % Test + +coverageExcludedPackages := "two.*" + +resolvers ++= { + if (sys.props.get("plugin.version").exists(_.endsWith("-SNAPSHOT"))) + Seq(Resolver.sonatypeRepo("snapshots")) + else Seq.empty +} diff --git a/src/sbt-test/scoverage/coverage-excluded-packages/project/build.properties b/src/sbt-test/scoverage/coverage-excluded-packages/project/build.properties new file mode 100644 index 00000000..c8fcab54 --- /dev/null +++ b/src/sbt-test/scoverage/coverage-excluded-packages/project/build.properties @@ -0,0 +1 @@ +sbt.version=1.6.2 diff --git a/src/sbt-test/scoverage/coverage-excluded-packages/project/plugins.sbt b/src/sbt-test/scoverage/coverage-excluded-packages/project/plugins.sbt new file mode 100644 index 00000000..8d349239 --- /dev/null +++ b/src/sbt-test/scoverage/coverage-excluded-packages/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/coverage-excluded-packages/src/main/scala/GoodCoverage.scala b/src/sbt-test/scoverage/coverage-excluded-packages/src/main/scala/GoodCoverage.scala new file mode 100644 index 00000000..fed56c82 --- /dev/null +++ b/src/sbt-test/scoverage/coverage-excluded-packages/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/coverage-excluded-packages/src/main/scala/two/GoodCoverage.scala b/src/sbt-test/scoverage/coverage-excluded-packages/src/main/scala/two/GoodCoverage.scala new file mode 100644 index 00000000..587e11e1 --- /dev/null +++ b/src/sbt-test/scoverage/coverage-excluded-packages/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/coverage-excluded-packages/src/test/scala/GoodCoverageSpec.scala b/src/sbt-test/scoverage/coverage-excluded-packages/src/test/scala/GoodCoverageSpec.scala new file mode 100644 index 00000000..44eec1c9 --- /dev/null +++ b/src/sbt-test/scoverage/coverage-excluded-packages/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/coverage-excluded-packages/test b/src/sbt-test/scoverage/coverage-excluded-packages/test new file mode 100644 index 00000000..72f81f6c --- /dev/null +++ b/src/sbt-test/scoverage/coverage-excluded-packages/test @@ -0,0 +1,7 @@ +# run scoverage using the coverage task +> clean +> coverage +> test +> coverageReport +# There should be no directory for the excluded package +-$ exists target/scala-2.13/scoverage-report/two diff --git a/src/sbt-test/scoverage/coverage-off/project/build.properties b/src/sbt-test/scoverage/coverage-off/project/build.properties new file mode 100644 index 00000000..c8fcab54 --- /dev/null +++ b/src/sbt-test/scoverage/coverage-off/project/build.properties @@ -0,0 +1 @@ +sbt.version=1.6.2 diff --git a/src/sbt-test/scoverage/coverage-off/test b/src/sbt-test/scoverage/coverage-off/test index a5490c85..851d51d6 100644 --- a/src/sbt-test/scoverage/coverage-off/test +++ b/src/sbt-test/scoverage/coverage-off/test @@ -7,4 +7,4 @@ > coverageOff > test # There should be no scoverage-data directory --$ exists target/scala-2.12/scoverage-data +-$ exists target/scala-2.13/scoverage-data diff --git a/src/sbt-test/scoverage/scala3-coverage-excluded-files/build.sbt b/src/sbt-test/scoverage/scala3-coverage-excluded-files/build.sbt new file mode 100644 index 00000000..1534002f --- /dev/null +++ b/src/sbt-test/scoverage/scala3-coverage-excluded-files/build.sbt @@ -0,0 +1,13 @@ +version := "0.1" + +scalaVersion := "3.2.0-RC1" + +libraryDependencies += "org.scalameta" %% "munit" % "0.7.29" % Test + +coverageExcludedFiles := ".*\\/two\\/GoodCoverage\\.scala" + +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-coverage-excluded-files/project/build.properties b/src/sbt-test/scoverage/scala3-coverage-excluded-files/project/build.properties new file mode 100644 index 00000000..c8fcab54 --- /dev/null +++ b/src/sbt-test/scoverage/scala3-coverage-excluded-files/project/build.properties @@ -0,0 +1 @@ +sbt.version=1.6.2 diff --git a/src/sbt-test/scoverage/scala3-coverage-excluded-files/project/plugins.sbt b/src/sbt-test/scoverage/scala3-coverage-excluded-files/project/plugins.sbt new file mode 100644 index 00000000..8d349239 --- /dev/null +++ b/src/sbt-test/scoverage/scala3-coverage-excluded-files/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-coverage-excluded-files/src/main/scala/GoodCoverage.scala b/src/sbt-test/scoverage/scala3-coverage-excluded-files/src/main/scala/GoodCoverage.scala new file mode 100644 index 00000000..ac6582bb --- /dev/null +++ b/src/sbt-test/scoverage/scala3-coverage-excluded-files/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-coverage-excluded-files/src/main/scala/two/GoodCoverage.scala b/src/sbt-test/scoverage/scala3-coverage-excluded-files/src/main/scala/two/GoodCoverage.scala new file mode 100644 index 00000000..587e11e1 --- /dev/null +++ b/src/sbt-test/scoverage/scala3-coverage-excluded-files/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-coverage-excluded-files/src/test/scala/GoodCoverageSpec.scala b/src/sbt-test/scoverage/scala3-coverage-excluded-files/src/test/scala/GoodCoverageSpec.scala new file mode 100644 index 00000000..44eec1c9 --- /dev/null +++ b/src/sbt-test/scoverage/scala3-coverage-excluded-files/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-coverage-excluded-files/test b/src/sbt-test/scoverage/scala3-coverage-excluded-files/test new file mode 100644 index 00000000..b19476ca --- /dev/null +++ b/src/sbt-test/scoverage/scala3-coverage-excluded-files/test @@ -0,0 +1,9 @@ +# run scoverage using the coverage task +> clean +> coverage +> test +> coverageReport +# There should be no directory for the excluded files +#-$ exists target/scala-3.2.0-RC1/scoverage-report/two +# But right now there is, because Scala3 does not support excluding files +$ exists target/scala-3.2.0-RC1/scoverage-report/two From 6c5ad7194c7d19d53621adfd04be6de5a8939c1d Mon Sep 17 00:00:00 2001 From: Roland Tritsch Date: Sun, 3 Jul 2022 12:14:10 +0100 Subject: [PATCH 2/3] Make regex more expressive. --- src/sbt-test/scoverage/coverage-excluded-packages/build.sbt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sbt-test/scoverage/coverage-excluded-packages/build.sbt b/src/sbt-test/scoverage/coverage-excluded-packages/build.sbt index 0e1bcdfd..85ca957d 100644 --- a/src/sbt-test/scoverage/coverage-excluded-packages/build.sbt +++ b/src/sbt-test/scoverage/coverage-excluded-packages/build.sbt @@ -4,7 +4,7 @@ scalaVersion := "2.13.6" libraryDependencies += "org.scalameta" %% "munit" % "0.7.29" % Test -coverageExcludedPackages := "two.*" +coverageExcludedPackages := "two\\..*" resolvers ++= { if (sys.props.get("plugin.version").exists(_.endsWith("-SNAPSHOT"))) From 940baa354c2d94725e588e7fa197465623412703 Mon Sep 17 00:00:00 2001 From: Roland Tritsch Date: Mon, 4 Jul 2022 14:00:46 +0100 Subject: [PATCH 3/3] PR feedback: Restore current behaviour (for excludedFiles). --- README.md | 6 ++++-- src/sbt-test/scoverage/coverage-excluded-files/build.sbt | 2 +- .../scoverage/scala3-coverage-excluded-files/build.sbt | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 3ca7f2fa..7a14dad3 100644 --- a/README.md +++ b/README.md @@ -78,10 +78,12 @@ instrumented or included in the coverage report. You can also exclude files and file paths. ```scala -coverageExcludedFiles := ".*\\/two\\/GoodCoverage\.scala;.*\\/three\\/.*" +coverageExcludedFiles := ".*\\/two\\/GoodCoverage;.*\\/three\\/.*" ``` -Note: This only works for Scala2. Right now Scala3 does not support +Note: The `.scala` file extension needs to be omitted from the filename, if one is given. + +Note: These two options only work for Scala2. Right now Scala3 does not support a way to exclude packages or files from being instrumented. You can also mark sections of code with comments like: diff --git a/src/sbt-test/scoverage/coverage-excluded-files/build.sbt b/src/sbt-test/scoverage/coverage-excluded-files/build.sbt index b1e84c61..510da746 100644 --- a/src/sbt-test/scoverage/coverage-excluded-files/build.sbt +++ b/src/sbt-test/scoverage/coverage-excluded-files/build.sbt @@ -4,7 +4,7 @@ scalaVersion := "2.13.6" libraryDependencies += "org.scalameta" %% "munit" % "0.7.29" % Test -coverageExcludedFiles := ".*\\/two\\/GoodCoverage\\.scala" +coverageExcludedFiles := ".*\\/two\\/GoodCoverage" resolvers ++= { if (sys.props.get("plugin.version").exists(_.endsWith("-SNAPSHOT"))) diff --git a/src/sbt-test/scoverage/scala3-coverage-excluded-files/build.sbt b/src/sbt-test/scoverage/scala3-coverage-excluded-files/build.sbt index 1534002f..b6fed517 100644 --- a/src/sbt-test/scoverage/scala3-coverage-excluded-files/build.sbt +++ b/src/sbt-test/scoverage/scala3-coverage-excluded-files/build.sbt @@ -4,7 +4,7 @@ scalaVersion := "3.2.0-RC1" libraryDependencies += "org.scalameta" %% "munit" % "0.7.29" % Test -coverageExcludedFiles := ".*\\/two\\/GoodCoverage\\.scala" +coverageExcludedFiles := ".*\\/two\\/GoodCoverage" resolvers ++= { if (sys.props.get("plugin.version").exists(_.endsWith("-SNAPSHOT")))