From bdfc16b5f4207465eb1e6bb7e401076bfc5910d3 Mon Sep 17 00:00:00 2001 From: Grzegorz Kossakowski Date: Sun, 9 Dec 2012 21:50:48 -0800 Subject: [PATCH] Add test for pickled existential types bug (#616) This test fails at the moment because there's one unnecessary compile iteration performed. Thus the test is marked as pending. Since the test is compiler version specific, I set it to 2.9.2 (latest stable version). --- .../inc-pickled-existential/build.sbt | 12 ++++++++++++ .../inc-pickled-existential/changes/B1.scala | 5 +++++ .../compiler-project/inc-pickled-existential/pending | 12 ++++++++++++ .../inc-pickled-existential/src/main/scala/A.scala | 9 +++++++++ .../inc-pickled-existential/src/main/scala/B.scala | 5 +++++ .../src/main/scala/Module.scala | 3 +++ 6 files changed, 46 insertions(+) create mode 100644 sbt/src/sbt-test/compiler-project/inc-pickled-existential/build.sbt create mode 100644 sbt/src/sbt-test/compiler-project/inc-pickled-existential/changes/B1.scala create mode 100644 sbt/src/sbt-test/compiler-project/inc-pickled-existential/pending create mode 100644 sbt/src/sbt-test/compiler-project/inc-pickled-existential/src/main/scala/A.scala create mode 100644 sbt/src/sbt-test/compiler-project/inc-pickled-existential/src/main/scala/B.scala create mode 100644 sbt/src/sbt-test/compiler-project/inc-pickled-existential/src/main/scala/Module.scala 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 new file mode 100644 index 000000000..7bd63492a --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/inc-pickled-existential/build.sbt @@ -0,0 +1,12 @@ +logLevel := Level.Debug + +scalaVersion := "2.9.2" + +// dumps analysis into target/analysis-dump.txt file +InputKey[Unit]("check-number-of-compiler-iterations") <<= inputTask { (argTask: TaskKey[Seq[String]]) => + (argTask, compile in Compile) map { (args: Seq[String], a: sbt.inc.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)) + } +} diff --git a/sbt/src/sbt-test/compiler-project/inc-pickled-existential/changes/B1.scala b/sbt/src/sbt-test/compiler-project/inc-pickled-existential/changes/B1.scala new file mode 100644 index 000000000..1507ef84e --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/inc-pickled-existential/changes/B1.scala @@ -0,0 +1,5 @@ +package test6 + +class B extends A { + def wibble = println("fooo") +} diff --git a/sbt/src/sbt-test/compiler-project/inc-pickled-existential/pending b/sbt/src/sbt-test/compiler-project/inc-pickled-existential/pending new file mode 100644 index 000000000..8f70a72da --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/inc-pickled-existential/pending @@ -0,0 +1,12 @@ +# Tests if existential types are pickled correctly so they +# do not introduce unnecessary compile iterations + +# introduces first compile iteration +> compile +# this change is local to a method and does not change the api so introduces +# only one additional compile iteration +$ copy-file changes/B1.scala src/main/scala/B.scala +# second iteration +> compile +# check if there are only two compile iterations being performed +> check-number-of-compiler-iterations 2 diff --git a/sbt/src/sbt-test/compiler-project/inc-pickled-existential/src/main/scala/A.scala b/sbt/src/sbt-test/compiler-project/inc-pickled-existential/src/main/scala/A.scala new file mode 100644 index 000000000..10fec64f7 --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/inc-pickled-existential/src/main/scala/A.scala @@ -0,0 +1,9 @@ +package test6 + +trait A { + object Foo extends Module[Foo[_]] + + class Foo[TResult] + + def b = new B +} diff --git a/sbt/src/sbt-test/compiler-project/inc-pickled-existential/src/main/scala/B.scala b/sbt/src/sbt-test/compiler-project/inc-pickled-existential/src/main/scala/B.scala new file mode 100644 index 000000000..0660c69ee --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/inc-pickled-existential/src/main/scala/B.scala @@ -0,0 +1,5 @@ +package test6 + +class B extends A { + def wibble = println("foo") +} diff --git a/sbt/src/sbt-test/compiler-project/inc-pickled-existential/src/main/scala/Module.scala b/sbt/src/sbt-test/compiler-project/inc-pickled-existential/src/main/scala/Module.scala new file mode 100644 index 000000000..d900f1b1f --- /dev/null +++ b/sbt/src/sbt-test/compiler-project/inc-pickled-existential/src/main/scala/Module.scala @@ -0,0 +1,3 @@ +package test6 + +class Module[T]