diff options
author | Lukas Rytz <lukas.rytz@typesafe.com> | 2015-05-01 11:42:55 +0200 |
---|---|---|
committer | Lukas Rytz <lukas.rytz@typesafe.com> | 2015-05-01 11:42:55 +0200 |
commit | faa32647ac69305dd2b111ca18b3f7fa2b948a49 (patch) | |
tree | e17631be330ae74b872e53a979dc83691f4f4796 /test/files/run/valueClassSelfType.scala | |
parent | 00b5adfbf3618639b501d1859f7a023083a4b8c3 (diff) | |
parent | e596d1a65d81a81a54847d90d2d90be3ffbb3d92 (diff) | |
download | scala-faa32647ac69305dd2b111ca18b3f7fa2b948a49.tar.gz scala-faa32647ac69305dd2b111ca18b3f7fa2b948a49.tar.bz2 scala-faa32647ac69305dd2b111ca18b3f7fa2b948a49.zip |
Merge pull request #4480 from retronym/merge/2.11.x-to-2.12.x-20150501
Merge 2.11.x to 2.12.x [ci: last-only]
Diffstat (limited to 'test/files/run/valueClassSelfType.scala')
-rw-r--r-- | test/files/run/valueClassSelfType.scala | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/test/files/run/valueClassSelfType.scala b/test/files/run/valueClassSelfType.scala new file mode 100644 index 0000000000..47a3764b0a --- /dev/null +++ b/test/files/run/valueClassSelfType.scala @@ -0,0 +1,52 @@ +trait T + +class V1(val l: Long) extends AnyVal { self: T => + def foo: V1 = self + def bar: T = self +} + +class V2(val l: Long) extends AnyVal { self => + def foo: V2 = self +} + +class V3(val l: Long) extends AnyVal { self: Long => + def foo: V3 = self + def bar: Long = self +} + +// non-value classes + +class C1(val l: Long) { self: T => + def foo: C1 = self + def bar: T = self +} + +class C2(val l: Long) { self => + def foo: C2 = self +} + +class C3(val l: Long) { self: Long => + def foo: C3 = self + def bar: Long = self +} + +object Test extends App { + // Rejected: superclass V1 is not a subclass of the superclass Object of the mixin trait T + // new V1(1l) with T + + assert(new V2(1l).foo.l == 1l) + + // Rejected: V3 does not conform to its self-type V3 with Long + // new V3(1l) + + val c2 = new C1(2l) with T + assert(c2.foo.l + c2.bar.asInstanceOf[C1].l == 4l) + + assert(new C2(3l).foo.l == 3l) + + // Rejected: C3 does not conform to its self-type C3 with Long + // new C3(4l) + + // Rejected: class Long needs to be a trait to be mixed in + // new C3(4l) with Long +} |