summaryrefslogtreecommitdiff
path: root/test-nsc/files/run/mixins.scala
diff options
context:
space:
mode:
Diffstat (limited to 'test-nsc/files/run/mixins.scala')
-rwxr-xr-xtest-nsc/files/run/mixins.scala94
1 files changed, 94 insertions, 0 deletions
diff --git a/test-nsc/files/run/mixins.scala b/test-nsc/files/run/mixins.scala
new file mode 100755
index 0000000000..f896551108
--- /dev/null
+++ b/test-nsc/files/run/mixins.scala
@@ -0,0 +1,94 @@
+// $Id$
+
+// Test 1: "super" coming from mixins
+
+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");
+ }
+
+<<<<<<< mixins.scala
+ trait B {
+ println("B");
+=======
+ class B(x: Unit) {
+ Console.println("B");
+>>>>>>> 1.5
+ }
+
+<<<<<<< mixins.scala
+ class C extends A({ println("one"); }, { println("two"); })
+ with B {
+ println("C");
+=======
+ class C with A({ Console.println("one"); }, { Console.println("two"); })
+ with B({ Console.println("three"); }) {
+ Console.println("C");
+>>>>>>> 1.5
+ }
+
+ def test() = {
+ val c = new C();
+ }
+}
+
+// Main testing function
+
+object Test {
+ def main(args: Array[String]): Unit = {
+ Test1.test();
+ Test2.test();
+ Test3.test();
+ }
+}