aboutsummaryrefslogtreecommitdiff
path: root/tests/run/traitParamInit.scala
diff options
context:
space:
mode:
authorMartin Odersky <odersky@gmail.com>2015-06-12 17:56:06 +0200
committerMartin Odersky <odersky@gmail.com>2015-06-19 12:11:18 +0200
commit321f04e9caf04589320a99a897441d4e1baefff9 (patch)
treef59225b882c9a11421323c6847a01c544a0a774e /tests/run/traitParamInit.scala
parent0de976828e54b2e407f84bd098aea950ef52dbf1 (diff)
downloaddotty-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.scala30
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)"))
+ }
+}