diff --git a/README.md b/README.md index 06ffa4c4..7a14dad3 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,17 @@ 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;.*\\/three\\/.*" +``` + +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: ```scala @@ -118,7 +129,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..510da746 --- /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" + +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..85ca957d --- /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..b6fed517 --- /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" + +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