summaryrefslogtreecommitdiff
path: root/test/files/run/mixins.scala
diff options
context:
space:
mode:
Diffstat (limited to 'test/files/run/mixins.scala')
-rw-r--r--test/files/run/mixins.scala85
1 files changed, 85 insertions, 0 deletions
diff --git a/test/files/run/mixins.scala b/test/files/run/mixins.scala
new file mode 100644
index 0000000000..bbc20d33d2
--- /dev/null
+++ b/test/files/run/mixins.scala
@@ -0,0 +1,85 @@
+// $Id$
+
+// Test 1: "super" coming from mixins
+
+import Console._;
+
+object Test1 {
+ class A {
+ def f = "A::f";
+ }
+
+ class B extends A {
+ override def f = "B::f";
+ }
+
+ trait M1 extends A {
+ override def f = "M1::" + super.f;
+ }
+
+ class C extends B with M1 {
+ override def f = super[M1].f;
+ }
+
+ def test(): Unit = {
+ val c = new C;
+ Console.println(c.f);
+ }
+}
+
+// Test 2: qualified "super" inside of the host class
+
+object Test2 {
+ class M1 {
+ def f = "M1::f";
+ }
+
+ trait M2 {
+ def f = "M2::f";
+ }
+
+ trait M3 {
+ def f = "M3::f";
+ }
+
+ class Host extends M1 with M2 with M3 {
+ override def f = super[M1].f + " " + super[M2].f + " " + super[M3].f
+ }
+
+ def test(): Unit = {
+ val h = new Host;
+ Console.println(h.f)
+ }
+}
+
+// Test 3: mixin evaluation order (bug 120)
+
+object Test3 {
+
+ class A(x: Unit, y: Unit) {
+ Console.println("A");
+ }
+
+ trait B {
+ println("B");
+ }
+
+ class C extends A({ println("one"); }, { println("two"); })
+ with B {
+ println("C");
+ }
+
+ def test() = {
+ val c = new C();
+ }
+}
+
+// Main testing function
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ Test1.test();
+ Test2.test();
+ Test3.test();
+ }
+}