| // MODULE: lib |
| // FILE: lib.kt |
| // WITH_RUNTIME |
| |
| import kotlin.test.assertEquals |
| |
| // Private classes |
| private open class A { |
| public open fun foo1() = "FAIL" |
| internal open fun foo2() = "FAIL" |
| protected open fun foo3() = "FAIL" |
| private fun foo4() = "FAIL" |
| } |
| |
| private class B:A() { |
| override public fun foo1() = "PASS" |
| override internal fun foo2() = "PASS" |
| override protected fun foo3() = "PASS" |
| private fun foo4() = "PASS" |
| fun foo5() = foo3() |
| fun foo6() = foo4() |
| } |
| |
| private abstract class G { |
| public abstract fun foo1() |
| internal abstract fun foo2() |
| protected abstract fun foo3() |
| private fun foo4() = "FAIL" |
| } |
| |
| private class H:A() { |
| override public fun foo1() = "PASS" |
| override internal fun foo2() = "PASS" |
| override protected fun foo3() = "PASS" |
| private fun foo4() = "PASS" |
| fun foo5() = foo3() |
| fun foo6() = foo4() |
| } |
| |
| |
| // Private interfaces |
| private interface C { |
| fun foo() = "FAIL" |
| } |
| |
| private class D: C { |
| override fun foo() = "PASS" |
| } |
| |
| fun runner(): String { |
| assertEquals(B().foo1(), "PASS") |
| assertEquals(B().foo2(), "PASS") |
| assertEquals(B().foo5(), "PASS") |
| assertEquals(B().foo6(), "PASS") |
| |
| assertEquals(H().foo1(), "PASS") |
| assertEquals(H().foo2(), "PASS") |
| assertEquals(H().foo5(), "PASS") |
| assertEquals(H().foo6(), "PASS") |
| |
| assertEquals(D().foo(), "PASS") |
| |
| // Objects |
| object : A(){ |
| override public fun foo1() = "PASS" |
| override internal fun foo2() = "PASS" |
| override protected fun foo3() = "PASS" |
| private fun foo4() = "PASS" |
| fun foo5() = foo3() |
| fun foo6() = foo4() |
| }.apply { |
| assertEquals(foo1(), "PASS") |
| assertEquals(foo2(), "PASS") |
| assertEquals(foo5(), "PASS") |
| assertEquals(foo6(), "PASS") |
| } |
| |
| // Function local classes |
| open class E { |
| public open fun foo1() = "FAIL" |
| internal open fun foo2() = "FAIL" |
| protected open fun foo3() = "FAIL" |
| private fun foo4() = "FAIL" |
| } |
| class F : E() { |
| public override fun foo1() = "PASS" |
| internal override fun foo2() = "PASS" |
| protected override fun foo3() = "PASS" |
| private fun foo4() = "PASS" |
| fun foo5() = foo3() |
| fun foo6() = foo4() |
| } |
| assertEquals(F().foo1(), "PASS") |
| assertEquals(F().foo2(), "PASS") |
| assertEquals(F().foo5(), "PASS") |
| assertEquals(F().foo6(), "PASS") |
| |
| return "OK" |
| } |
| |
| // MODULE: main(lib) |
| // FILE: main.kt |
| fun box() = runner() |