From 918bb8e858bf877908288cb3ce6c5593c13c03b5 Mon Sep 17 00:00:00 2001 From: mathieut Date: Tue, 12 Jul 2016 00:25:43 +0200 Subject: [PATCH 1/2] Avoid removing settings overrides done during the session when executing toggleCoverage #146 --- src/main/scala/scoverage/ScoverageSbtPlugin.scala | 5 ++++- src/sbt-test/scoverage/preserve-set/build.sbt | 14 ++++++++++++++ .../scoverage/preserve-set/project/plugins.sbt | 15 +++++++++++++++ .../preserve-set/src/main/scala/PreserveSet.scala | 6 ++++++ .../src/test/scala/PreserveSetSpec.scala | 10 ++++++++++ src/sbt-test/scoverage/preserve-set/test | 11 +++++++++++ 6 files changed, 60 insertions(+), 1 deletion(-) create mode 100644 src/sbt-test/scoverage/preserve-set/build.sbt create mode 100644 src/sbt-test/scoverage/preserve-set/project/plugins.sbt create mode 100644 src/sbt-test/scoverage/preserve-set/src/main/scala/PreserveSet.scala create mode 100644 src/sbt-test/scoverage/preserve-set/src/test/scala/PreserveSetSpec.scala create mode 100644 src/sbt-test/scoverage/preserve-set/test diff --git a/src/main/scala/scoverage/ScoverageSbtPlugin.scala b/src/main/scala/scoverage/ScoverageSbtPlugin.scala index b0e6feea..4a0ac6b4 100644 --- a/src/main/scala/scoverage/ScoverageSbtPlugin.scala +++ b/src/main/scala/scoverage/ScoverageSbtPlugin.scala @@ -49,6 +49,7 @@ object ScoverageSbtPlugin extends AutoPlugin { */ private def toggleCoverage(status: Boolean): State => State = { state => val extracted = Project.extract(state) + val currentProjRef = extracted.currentRef val newSettings = extracted.structure.allProjectRefs flatMap { proj => Seq( coverageEnabled in proj := status, @@ -60,7 +61,9 @@ object ScoverageSbtPlugin extends AutoPlugin { } ) } - extracted.append(newSettings, state) + val appendSettings = Load.transformSettings(Load.projectScope(currentProjRef), currentProjRef.build, extracted.rootProject, newSettings) + val newSessionSettings = extracted.session.appendRaw(appendSettings) + SessionSettings.reapply(newSessionSettings, state) } private lazy val coverageReport0 = Def.task { diff --git a/src/sbt-test/scoverage/preserve-set/build.sbt b/src/sbt-test/scoverage/preserve-set/build.sbt new file mode 100644 index 00000000..71a84289 --- /dev/null +++ b/src/sbt-test/scoverage/preserve-set/build.sbt @@ -0,0 +1,14 @@ +import sbt.complete.DefaultParsers._ + +version := "0.1" + +scalaVersion := "2.10.4" + +libraryDependencies += "org.specs2" %% "specs2" % "2.3.13" % "test" + +val checkScalaVersion = inputKey[Unit]("Input task to compare the value of scalaVersion setting with a given input.") +checkScalaVersion := { + val arg: String = (Space ~> StringBasic).parsed + if (scalaVersion.value != arg) error(s"scalaVersion [${scalaVersion.value}] not equal to expected [$arg]") + () +} diff --git a/src/sbt-test/scoverage/preserve-set/project/plugins.sbt b/src/sbt-test/scoverage/preserve-set/project/plugins.sbt new file mode 100644 index 00000000..0b154c5c --- /dev/null +++ b/src/sbt-test/scoverage/preserve-set/project/plugins.sbt @@ -0,0 +1,15 @@ +// The Typesafe repository +resolvers += "Typesafe repository" at "http://repo.typesafe.com/typesafe/releases/" + +//scoverage needs this +resolvers += Classpaths.sbtPluginReleases + +{ + val pluginVersion = System.getProperty("plugin.version") + if(pluginVersion == null) + throw new RuntimeException("""|The system property 'plugin.version' is not defined. + |Specify this property using the scriptedLaunchOpts -D.""".stripMargin) + else addSbtPlugin("org.scoverage" %% "sbt-scoverage" % pluginVersion) +} + + diff --git a/src/sbt-test/scoverage/preserve-set/src/main/scala/PreserveSet.scala b/src/sbt-test/scoverage/preserve-set/src/main/scala/PreserveSet.scala new file mode 100644 index 00000000..07e53033 --- /dev/null +++ b/src/sbt-test/scoverage/preserve-set/src/main/scala/PreserveSet.scala @@ -0,0 +1,6 @@ +object PreserveSet { + + def sum(num1: Int, num2: Int) = { + num1 + num2 + } +} diff --git a/src/sbt-test/scoverage/preserve-set/src/test/scala/PreserveSetSpec.scala b/src/sbt-test/scoverage/preserve-set/src/test/scala/PreserveSetSpec.scala new file mode 100644 index 00000000..a7722e39 --- /dev/null +++ b/src/sbt-test/scoverage/preserve-set/src/test/scala/PreserveSetSpec.scala @@ -0,0 +1,10 @@ +import org.specs2.mutable._ + +class PreserveSetSpec extends Specification { + + "PreserveSet" should { + "sum two numbers" in { + PreserveSet.sum(1, 2) mustEqual 3 + } + } +} diff --git a/src/sbt-test/scoverage/preserve-set/test b/src/sbt-test/scoverage/preserve-set/test new file mode 100644 index 00000000..ddde531b --- /dev/null +++ b/src/sbt-test/scoverage/preserve-set/test @@ -0,0 +1,11 @@ +# check scalaVersion setting +> checkScalaVersion "2.10.4" +# override scalaVersion setting +> set scalaVersion := {"2.10.5"} +> checkScalaVersion "2.10.5" +# activate coverage - override should still be present +> coverage +> checkScalaVersion "2.10.5" +# turn off coverage - override should still be present +> coverageOff +> checkScalaVersion "2.10.5" From e110f198e8630fe739d580bb88bb291cbb2348e9 Mon Sep 17 00:00:00 2001 From: mtrampont Date: Tue, 12 Jul 2016 16:24:28 +0200 Subject: [PATCH 2/2] Fix test: coverageReport must be called before coverageAggregate. --- src/sbt-test/scoverage/aggregate/test | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/sbt-test/scoverage/aggregate/test b/src/sbt-test/scoverage/aggregate/test index 09537afb..0d7a6a27 100644 --- a/src/sbt-test/scoverage/aggregate/test +++ b/src/sbt-test/scoverage/aggregate/test @@ -5,6 +5,10 @@ # There should be scoverage-data directory $ exists partA/target/scala-2.10/scoverage-data $ exists partB/target/scala-2.10/scoverage-data +> coverageReport +# There should be scoverage-report directory +$ exists partA/target/scala-2.10/scoverage-report +$ exists partB/target/scala-2.10/scoverage-report > coverageAggregate -# There should be scoverage-data directory +# There should be a root scoverage-report directory $ exists target/scala-2.10/scoverage-report