From 0ebf2d14a3284ce4f85035b5f2806cd446e91243 Mon Sep 17 00:00:00 2001 From: jvican Date: Tue, 2 May 2017 14:38:10 +0200 Subject: [PATCH] Fix more tests using compiler iterations --- .../unstable-existential-names/build.sbt | 32 +++++++++++++----- .../project/CompileState.scala | 4 +++ .../apiinfo/unstable-existential-names/test | 3 +- .../inc-pickled-existential/build.sbt | 33 +++++++++++++------ .../project/CompileState.scala | 4 +++ .../inc-pickled-existential/test | 3 +- .../inc-pickled-refinement/build.sbt | 31 ++++++++++++----- .../project/CompileState.scala | 4 +++ .../inc-pickled-refinement/test | 3 +- 9 files changed, 87 insertions(+), 30 deletions(-) create mode 100644 sbt/src/sbt-test/apiinfo/unstable-existential-names/project/CompileState.scala create mode 100644 sbt/src/sbt-test/compiler-project/inc-pickled-existential/project/CompileState.scala create mode 100644 sbt/src/sbt-test/compiler-project/inc-pickled-refinement/project/CompileState.scala diff --git a/sbt/src/sbt-test/apiinfo/unstable-existential-names/build.sbt b/sbt/src/sbt-test/apiinfo/unstable-existential-names/build.sbt index 90c322356..ae689f73d 100644 --- a/sbt/src/sbt-test/apiinfo/unstable-existential-names/build.sbt +++ b/sbt/src/sbt-test/apiinfo/unstable-existential-names/build.sbt @@ -1,12 +1,26 @@ import sbt.internal.inc.Analysis +import complete.DefaultParsers._ -// checks number of compilation iterations performed since last `clean` run -InputKey[Unit]("check-number-of-compiler-iterations") := { - val args = Def.spaceDelimited().parsed - val a = (compile in Compile).value.asInstanceOf[Analysis] - assert(args.size == 1) - val expectedIterationsNumber = args(0).toInt - val allCompilationsSize = a.compilations.allCompilations.size - assert(allCompilationsSize == expectedIterationsNumber, - "allCompilationsSize == %d (expected %d)".format(allCompilationsSize, expectedIterationsNumber)) +// Reset compiler iterations, necessary because tests run in batch mode +val recordPreviousIterations = taskKey[Unit]("Record previous iterations.") +recordPreviousIterations := { + CompileState.previousIterations = { + val previousAnalysis = (previousCompile in Compile).value.analysis + if (previousAnalysis.isEmpty) { + streams.value.log.info("No previous analysis detected") + 0 + } else { + previousAnalysis.get match { + case a: Analysis => a.compilations.allCompilations.size + } + } + } +} + +val checkIterations = inputKey[Unit]("Verifies the accumulated number of iterations of incremental compilation.") + +checkIterations := { + val expected: Int = (Space ~> NatBasic).parsed + val actual: Int = ((compile in Compile).value match { case a: Analysis => a.compilations.allCompilations.size }) - CompileState.previousIterations + assert(expected == actual, s"Expected $expected compilations, got $actual") } diff --git a/sbt/src/sbt-test/apiinfo/unstable-existential-names/project/CompileState.scala b/sbt/src/sbt-test/apiinfo/unstable-existential-names/project/CompileState.scala new file mode 100644 index 000000000..078db9c7b --- /dev/null +++ b/sbt/src/sbt-test/apiinfo/unstable-existential-names/project/CompileState.scala @@ -0,0 +1,4 @@ +// This is necessary because tests are run in batch mode +object CompileState { + @volatile var previousIterations: Int = -1 +} diff --git a/sbt/src/sbt-test/apiinfo/unstable-existential-names/test b/sbt/src/sbt-test/apiinfo/unstable-existential-names/test index 4a895eb1c..1eff3117d 100644 --- a/sbt/src/sbt-test/apiinfo/unstable-existential-names/test +++ b/sbt/src/sbt-test/apiinfo/unstable-existential-names/test @@ -2,6 +2,7 @@ # do not introduce unnecessary compile iterations # introduces first compile iteration +> recordPreviousIterations > compile # this change is local to a method and does not change the api so introduces # only one additional compile iteration @@ -9,4 +10,4 @@ $ copy-file changes/Foo1.scala src/main/scala/Foo.scala # second iteration > compile # check if there are only two compile iterations being performed -> checkNumberOfCompilerIterations 2 +> checkIterations 2 diff --git a/sbt/src/sbt-test/compiler-project/inc-pickled-existential/build.sbt b/sbt/src/sbt-test/compiler-project/inc-pickled-existential/build.sbt index 59de073d7..c1e5d8839 100644 --- a/sbt/src/sbt-test/compiler-project/inc-pickled-existential/build.sbt +++ b/sbt/src/sbt-test/compiler-project/inc-pickled-existential/build.sbt @@ -1,15 +1,28 @@ import sbt.internal.inc.Analysis +import complete.DefaultParsers._ logLevel := Level.Debug -// dumps analysis into target/analysis-dump.txt file -InputKey[Unit]("check-number-of-compiler-iterations") := { - val args = Def.spaceDelimited().parsed - val a = (compile in Compile).value.asInstanceOf[Analysis] - assert(args.size == 1) - val expectedIterationsNumber = args(0).toInt - assert( - a.compilations.allCompilations.size == expectedIterationsNumber, - "a.compilations.allCompilations.size = %d (expected %d)".format( - a.compilations.allCompilations.size, expectedIterationsNumber)) +// Reset compiler iterations, necessary because tests run in batch mode +val recordPreviousIterations = taskKey[Unit]("Record previous iterations.") +recordPreviousIterations := { + CompileState.previousIterations = { + val previousAnalysis = (previousCompile in Compile).value.analysis + if (previousAnalysis.isEmpty) { + streams.value.log.info("No previous analysis detected") + 0 + } else { + previousAnalysis.get match { + case a: Analysis => a.compilations.allCompilations.size + } + } + } +} + +val checkIterations = inputKey[Unit]("Verifies the accumulated number of iterations of incremental compilation.") + +checkIterations := { + val expected: Int = (Space ~> NatBasic).parsed + val actual: Int = ((compile in Compile).value match { case a: Analysis => a.compilations.allCompilations.size }) - CompileState.previousIterations + assert(expected == actual, s"Expected $expected compilations, got $actual") } diff --git a/sbt/src/sbt-test/compiler-project/inc-pickled-existential/project/CompileState.scala b/sbt/src/sbt-test/compiler-project/inc-pickled-existential/project/CompileState.scala new file mode 100644 index 000000000..078db9c7b --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/inc-pickled-existential/project/CompileState.scala @@ -0,0 +1,4 @@ +// This is necessary because tests are run in batch mode +object CompileState { + @volatile var previousIterations: Int = -1 +} diff --git a/sbt/src/sbt-test/compiler-project/inc-pickled-existential/test b/sbt/src/sbt-test/compiler-project/inc-pickled-existential/test index b671a0166..cd9556fa5 100644 --- a/sbt/src/sbt-test/compiler-project/inc-pickled-existential/test +++ b/sbt/src/sbt-test/compiler-project/inc-pickled-existential/test @@ -2,6 +2,7 @@ # do not introduce unnecessary compile iterations # introduces first compile iteration +> recordPreviousIterations > compile # this change is local to a method and does not change the api so introduces # only one additional compile iteration @@ -9,4 +10,4 @@ $ copy-file changes/B1.scala src/main/scala/B.scala # second iteration > compile # check if there are only two compile iterations being performed -> checkNumberOfCompilerIterations 2 +> checkIterations 2 diff --git a/sbt/src/sbt-test/compiler-project/inc-pickled-refinement/build.sbt b/sbt/src/sbt-test/compiler-project/inc-pickled-refinement/build.sbt index 4a78ef4e7..ae689f73d 100644 --- a/sbt/src/sbt-test/compiler-project/inc-pickled-refinement/build.sbt +++ b/sbt/src/sbt-test/compiler-project/inc-pickled-refinement/build.sbt @@ -1,11 +1,26 @@ import sbt.internal.inc.Analysis +import complete.DefaultParsers._ -InputKey[Unit]("check-number-of-compiler-iterations") := { - val args = Def.spaceDelimited().parsed - val a = (compile in Compile).value.asInstanceOf[Analysis] - assert(args.size == 1) - val expectedIterationsNumber = args(0).toInt - assert(a.compilations.allCompilations.size == expectedIterationsNumber, - "a.compilations.allCompilations.size = %d (expected %d)".format( - a.compilations.allCompilations.size, expectedIterationsNumber)) +// Reset compiler iterations, necessary because tests run in batch mode +val recordPreviousIterations = taskKey[Unit]("Record previous iterations.") +recordPreviousIterations := { + CompileState.previousIterations = { + val previousAnalysis = (previousCompile in Compile).value.analysis + if (previousAnalysis.isEmpty) { + streams.value.log.info("No previous analysis detected") + 0 + } else { + previousAnalysis.get match { + case a: Analysis => a.compilations.allCompilations.size + } + } + } +} + +val checkIterations = inputKey[Unit]("Verifies the accumulated number of iterations of incremental compilation.") + +checkIterations := { + val expected: Int = (Space ~> NatBasic).parsed + val actual: Int = ((compile in Compile).value match { case a: Analysis => a.compilations.allCompilations.size }) - CompileState.previousIterations + assert(expected == actual, s"Expected $expected compilations, got $actual") } diff --git a/sbt/src/sbt-test/compiler-project/inc-pickled-refinement/project/CompileState.scala b/sbt/src/sbt-test/compiler-project/inc-pickled-refinement/project/CompileState.scala new file mode 100644 index 000000000..078db9c7b --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/inc-pickled-refinement/project/CompileState.scala @@ -0,0 +1,4 @@ +// This is necessary because tests are run in batch mode +object CompileState { + @volatile var previousIterations: Int = -1 +} diff --git a/sbt/src/sbt-test/compiler-project/inc-pickled-refinement/test b/sbt/src/sbt-test/compiler-project/inc-pickled-refinement/test index 110af1ccb..7a83d8efd 100644 --- a/sbt/src/sbt-test/compiler-project/inc-pickled-refinement/test +++ b/sbt/src/sbt-test/compiler-project/inc-pickled-refinement/test @@ -4,6 +4,7 @@ # https://github.com/sbt/sbt/issues/610 # introduces first compile iteration +> recordPreviousIterations > compile # this change is local to method and does not change api so introduces # only one additional compile iteration @@ -11,4 +12,4 @@ $ copy-file changes/Impl1.scala src/main/scala/Impl.scala # second iteration > compile # check if there are only two compile iterations performed -> checkNumberOfCompilerIterations 2 +> checkIterations 2