| // WITH_STDLIB | |
| // MODULE: lib1 | |
| // FILE: Demo.kt | |
| var DemoOpenSetterCalls = 0 | |
| var DemoOpenGetterCalls = 0 | |
| abstract class Demo { | |
| internal open fun demoOpenFun(): Int = 5 | |
| internal open val demoOpenVal: Int = 6 | |
| internal open val demoOpenValGet: Int | |
| get() = 7 | |
| internal open var demoOpenVarSetGet: Int = 8 | |
| set(value) { ++DemoOpenSetterCalls; field = value } | |
| get() { ++DemoOpenGetterCalls; return field } | |
| } | |
| // FILE: TestDemo.kt | |
| fun testOpenFun(d: Demo): Int = d.demoOpenFun() | |
| fun testOpenVal(d: Demo): Int = d.demoOpenVal | |
| fun testOpenValGet(d: Demo): Int = d.demoOpenValGet | |
| fun testOpenVarGet(d: Demo): Int = d.demoOpenVarSetGet | |
| fun testOpenVarSet(d: Demo, v: Int) { d.demoOpenVarSetGet = v } | |
| // MODULE: main()(lib1) | |
| // FILE: MyDemo.kt | |
| var MyDemoOpenSetterCalls = 0 | |
| var MyDemoOpenGetterCalls = 0 | |
| class MyDemo : Demo() { | |
| override fun demoOpenFun(): Int = 100 * super.demoOpenFun() | |
| override val demoOpenVal: Int = 600 | |
| override val demoOpenValGet: Int | |
| get() = 110 * super.demoOpenValGet | |
| override var demoOpenVarSetGet: Int | |
| set(value) { ++MyDemoOpenSetterCalls; super.demoOpenVarSetGet = value } | |
| get() { ++MyDemoOpenGetterCalls; return 111 * super.demoOpenVarSetGet } | |
| } | |
| // FILE: Box.kt | |
| import kotlin.test.assertEquals | |
| fun testMyDemo() { | |
| val myDemo = MyDemo() | |
| assertEquals(testOpenFun(myDemo), 500) | |
| assertEquals(testOpenVal(myDemo), 600) | |
| assertEquals(testOpenValGet(myDemo), 770) | |
| assertEquals(testOpenVarGet(myDemo), 888) | |
| testOpenVarSet(myDemo, -8) | |
| assertEquals(testOpenVarGet(myDemo), -888) | |
| assertEquals(DemoOpenSetterCalls, 1) | |
| assertEquals(DemoOpenGetterCalls, 2) | |
| assertEquals(MyDemoOpenSetterCalls, 1) | |
| assertEquals(MyDemoOpenGetterCalls, 2) | |
| assertEquals(myDemo.demoOpenFun(), 500) | |
| assertEquals(myDemo.demoOpenVal, 600) | |
| assertEquals(myDemo.demoOpenValGet, 770) | |
| assertEquals(myDemo.demoOpenVarSetGet, -888) | |
| myDemo.demoOpenVarSetGet = -9 | |
| assertEquals(myDemo.demoOpenVarSetGet, -999) | |
| assertEquals(DemoOpenSetterCalls, 2) | |
| assertEquals(DemoOpenGetterCalls, 4) | |
| assertEquals(MyDemoOpenSetterCalls, 2) | |
| assertEquals(MyDemoOpenGetterCalls, 4) | |
| } | |
| fun box(): String { | |
| testMyDemo() | |
| return "OK" | |
| } |