Files
2018-09-12 09:49:25 +03:00

49 lines
1.1 KiB
Kotlin
Vendored

// EXPECTED_REACHABLE_NODES: 1310
package foo
interface Base {
abstract fun foo(s: String): String
var prop: String
}
interface Base1 : Base {
}
interface Base2 : Base1 {
override fun foo(s: String): String = "Base2:foo ${s}"
}
class Base2Impl() : Base2 {
override var prop: String = ""
set(value) {
field = "prop:${value}"
}
}
class Derived() : Base by Base2Impl()
class Derived1() : Base1 by Base2Impl()
class Derived2() : Base2 by Base2Impl()
fun box(): String {
assertEquals("Base2:foo !!", Derived().foo("!!"), "delegation (Base)")
assertEquals("Base2:foo !!", Derived1().foo("!!"), "delegation (Base1)")
assertEquals("Base2:foo !!", Derived2().foo("!!"), "delegation (Base2)")
var d = Derived()
d.prop = "A"
assertEquals("prop:A", d.prop, "delegation (Base) set property")
var d1 = Derived1()
d1.prop = "B"
assertEquals("prop:B", d1.prop, "delegation (Base1) set property")
var d2 = Derived1()
d2.prop = "C"
assertEquals("prop:C", d2.prop, "delegation (Base2) set property")
return "OK"
}