diff options
Diffstat (limited to 'sbt-bridge/src/sbt-test/source-dependencies/restore-classes')
6 files changed, 64 insertions, 0 deletions
diff --git a/sbt-bridge/src/sbt-test/source-dependencies/restore-classes/build.sbt b/sbt-bridge/src/sbt-test/source-dependencies/restore-classes/build.sbt new file mode 100644 index 000000000..2231204ea --- /dev/null +++ b/sbt-bridge/src/sbt-test/source-dependencies/restore-classes/build.sbt @@ -0,0 +1,12 @@ +import complete.DefaultParsers._ + +crossTarget in Compile := target.value + +val checkIterations = inputKey[Unit]("Verifies the accumlated number of iterations of incremental compilation.") + +checkIterations := { + val expected: Int = (Space ~> NatBasic).parsed + val actual: Int = (compile in Compile).value.compilations.allCompilations.size + assert(expected == actual, s"Expected $expected compilations, got $actual") +} + diff --git a/sbt-bridge/src/sbt-test/source-dependencies/restore-classes/changes/A1.scala b/sbt-bridge/src/sbt-test/source-dependencies/restore-classes/changes/A1.scala new file mode 100644 index 000000000..2a499fa7b --- /dev/null +++ b/sbt-bridge/src/sbt-test/source-dependencies/restore-classes/changes/A1.scala @@ -0,0 +1,3 @@ +object A { + val x = 3 +} diff --git a/sbt-bridge/src/sbt-test/source-dependencies/restore-classes/changes/A2.scala b/sbt-bridge/src/sbt-test/source-dependencies/restore-classes/changes/A2.scala new file mode 100644 index 000000000..10d738255 --- /dev/null +++ b/sbt-bridge/src/sbt-test/source-dependencies/restore-classes/changes/A2.scala @@ -0,0 +1,5 @@ +object A { + val x = "a" +} + +class C diff --git a/sbt-bridge/src/sbt-test/source-dependencies/restore-classes/changes/B.scala b/sbt-bridge/src/sbt-test/source-dependencies/restore-classes/changes/B.scala new file mode 100644 index 000000000..945e97bb3 --- /dev/null +++ b/sbt-bridge/src/sbt-test/source-dependencies/restore-classes/changes/B.scala @@ -0,0 +1,4 @@ +object B { + val y: Int = A.x +} + diff --git a/sbt-bridge/src/sbt-test/source-dependencies/restore-classes/project/DottyInjectedPlugin.scala b/sbt-bridge/src/sbt-test/source-dependencies/restore-classes/project/DottyInjectedPlugin.scala new file mode 100644 index 000000000..3433779b6 --- /dev/null +++ b/sbt-bridge/src/sbt-test/source-dependencies/restore-classes/project/DottyInjectedPlugin.scala @@ -0,0 +1,17 @@ +import sbt._ +import Keys._ + +object DottyInjectedPlugin extends AutoPlugin { + override def requires = plugins.JvmPlugin + override def trigger = allRequirements + + override val projectSettings = Seq( + scalaVersion := "0.1-SNAPSHOT", + scalaOrganization := "ch.epfl.lamp", + scalacOptions += "-language:Scala2", + scalaBinaryVersion := "2.11", + autoScalaLibrary := false, + libraryDependencies ++= Seq("org.scala-lang" % "scala-library" % "2.11.5"), + scalaCompilerBridgeSource := ("ch.epfl.lamp" % "dotty-bridge" % "0.1.1-SNAPSHOT" % "component").sources() + ) +} diff --git a/sbt-bridge/src/sbt-test/source-dependencies/restore-classes/test b/sbt-bridge/src/sbt-test/source-dependencies/restore-classes/test new file mode 100644 index 000000000..028d6226c --- /dev/null +++ b/sbt-bridge/src/sbt-test/source-dependencies/restore-classes/test @@ -0,0 +1,23 @@ +$ copy-file changes/A1.scala A.scala +$ copy-file changes/B.scala B.scala +# B depends on A +# 1 iteration +> compile + +$ copy-file changes/A2.scala A.scala + +# will successfully compile A.scala in the first step but fail to compile B.scala in the second +# because type of A.x changed. The original classes should be restored after this failure. +# 2 iterations, but none are recorded in the Analysis +-> compile + +# the class file for C should be deleted: +# it was only added by A2, but compilation hasn't succeeded yet +$ absent target/classes/C.class + + +$ copy-file changes/A1.scala A.scala +# if the classes were correctly restored, another compilation shouldn't be necessary +> compile +# so, there should only be the original 1 iteration recorded in the Analysis +> checkIterations 1 |