Added tests on class delegation

This commit is contained in:
Igor Chevdar
2017-02-21 17:23:09 +03:00
parent dd350f88c8
commit bb82109ded
5 changed files with 107 additions and 0 deletions
+20
View File
@@ -556,6 +556,26 @@ task bridges_test16(type: RunKonanTest) {
source = "codegen/bridges/test16.kt"
}
task classDelegation_method(type: RunKonanTest) {
goldValue = "OKOK\n"
source = "codegen/classDelegation/method.kt"
}
task classDelegation_property(type: RunKonanTest) {
goldValue = "4242\n"
source = "codegen/classDelegation/property.kt"
}
task classDelegation_generic(type: RunKonanTest) {
goldValue = "OK\n"
source = "codegen/classDelegation/generic.kt"
}
task classDelegation_withBridge(type: RunKonanTest) {
goldValue = "OK\n"
source = "codegen/classDelegation/withBridge.kt"
}
task array0(type: RunKonanTest) {
goldValue = "5\n6\n7\n8\n9\n10\n11\n12\n13\n"
source = "runtime/collections/array0.kt"
@@ -0,0 +1,21 @@
open class Content() {
override fun toString() = "OK"
}
interface Box<E> {
fun get(): E
}
interface ContentBox<T : Content> : Box<T>
object Impl : ContentBox<Content> {
override fun get(): Content = Content()
}
class ContentBoxDelegate<T : Content>() : ContentBox<T> by (Impl as ContentBox<T>)
fun box() = ContentBoxDelegate<Content>().get().toString()
fun main(args: Array<String>) {
println(box())
}
@@ -0,0 +1,19 @@
interface A<T> {
fun foo(): T
}
class B : A<String> {
override fun foo() = "OK"
}
class C(a: A<String>) : A<String> by a
fun box(): String {
val c = C(B())
val a: A<String> = c
return c.foo() + a.foo()
}
fun main(args: Array<String>) {
println(box())
}
@@ -0,0 +1,19 @@
interface A {
val x: Int
}
class C: A {
override val x: Int = 42
}
class Q(a: A): A by a
fun box(): String {
val q = Q(C())
val a: A = q
return q.x.toString() + a.x.toString()
}
fun main(args: Array<String>) {
println(box())
}
@@ -0,0 +1,28 @@
interface A<T> {
fun foo(t: T): String
}
interface B {
fun foo(t: Int) = "B"
}
class Z : B
class Z1 : A<Int>, B by Z()
fun box(): String {
val z1 = Z1()
val z1a: A<Int> = z1
val z1b: B = z1
return when {
z1.foo( 0) != "B" -> "Fail #1"
z1a.foo( 0) != "B" -> "Fail #2"
z1b.foo( 0) != "B" -> "Fail #3"
else -> "OK"
}
}
fun main(args: Array<String>) {
println(box())
}