diff options
author | Martin Odersky <odersky@gmail.com> | 2015-06-12 17:56:06 +0200 |
---|---|---|
committer | Martin Odersky <odersky@gmail.com> | 2015-06-19 12:11:18 +0200 |
commit | 321f04e9caf04589320a99a897441d4e1baefff9 (patch) | |
tree | f59225b882c9a11421323c6847a01c544a0a774e /tests/run/traitParamInit.scala | |
parent | 0de976828e54b2e407f84bd098aea950ef52dbf1 (diff) | |
download | dotty-321f04e9caf04589320a99a897441d4e1baefff9.tar.gz dotty-321f04e9caf04589320a99a897441d4e1baefff9.tar.bz2 dotty-321f04e9caf04589320a99a897441d4e1baefff9.zip |
More explicit test of trait parameter initialization order
As suggested by @retronym
Diffstat (limited to 'tests/run/traitParamInit.scala')
-rw-r--r-- | tests/run/traitParamInit.scala | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/tests/run/traitParamInit.scala b/tests/run/traitParamInit.scala new file mode 100644 index 000000000..37d8a425d --- /dev/null +++ b/tests/run/traitParamInit.scala @@ -0,0 +1,30 @@ +object Trace { + private var results = List[Any]() + def apply[A](a: A) = {results ::= a; a} + def fetchAndClear(): Seq[Any] = try results.reverse finally results = Nil +} +trait T(a: Any) { + val ta = a + Trace(s"T.<init>($ta)") + val t_val = Trace("T.val") +} + +trait U(a: Any) extends T { + val ua = a + Trace(s"U.<init>($ua)") +} + +object Test { + def check(expected: Any) = { + val actual = Trace.fetchAndClear() + if (actual != expected) + sys.error(s"\n$actual\n$expected") + } + def main(args: Array[String]): Unit = { + new T(Trace("ta")) with U(Trace("ua")) {} + check(List("ta", "T.<init>(ta)", "T.val", "ua", "U.<init>(ua)")) + + new U(Trace("ua")) with T(Trace("ta")) {} + check(List("ta", "T.<init>(ta)", "T.val", "ua", "U.<init>(ua)")) + } +} |