From 321f04e9caf04589320a99a897441d4e1baefff9 Mon Sep 17 00:00:00 2001 From: Martin Odersky Date: Fri, 12 Jun 2015 17:56:06 +0200 Subject: More explicit test of trait parameter initialization order As suggested by @retronym --- tests/run/traitParamInit.scala | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 tests/run/traitParamInit.scala (limited to 'tests/run/traitParamInit.scala') 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.($ta)") + val t_val = Trace("T.val") +} + +trait U(a: Any) extends T { + val ua = a + Trace(s"U.($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.(ta)", "T.val", "ua", "U.(ua)")) + + new U(Trace("ua")) with T(Trace("ta")) {} + check(List("ta", "T.(ta)", "T.val", "ua", "U.(ua)")) + } +} -- cgit v1.2.3