| // WITH_PLATFORM_LIBS |
| // MODULE: lib |
| // FILE: lib.kt |
| |
| val sb = StringBuilder() |
| |
| // Private classes |
| private open class A { |
| public fun foo1() = sb.appendLine("PASS") |
| internal fun foo2() = sb.appendLine("PASS") |
| protected fun foo3() = sb.appendLine("PASS") |
| } |
| |
| private class B:A() { |
| fun foo4() = foo3() |
| } |
| |
| // Private interfaces |
| private interface C { |
| fun foo() = sb.appendLine("PASS") |
| } |
| |
| private class D: C |
| |
| fun runner() { |
| B().foo1() |
| B().foo2() |
| B().foo4() |
| |
| D().foo() |
| |
| // Objects |
| object : A(){ |
| fun foo4() = foo3() |
| }.apply { |
| foo1() |
| foo2() |
| foo4() |
| } |
| |
| // Function local classes |
| abstract class E { |
| public open fun foo1() = sb.appendLine("PASS") |
| internal open fun foo2() = sb.appendLine("PASS") |
| protected open fun foo3() = sb.appendLine("PASS") |
| } |
| class F : E() { |
| fun foo4() = foo3() |
| } |
| F().foo1() |
| F().foo2() |
| F().foo4() |
| } |
| |
| // MODULE: main(lib) |
| // FILE: main.kt |
| |
| import kotlin.test.* |
| |
| fun box(): String { |
| runner() |
| assertEquals(""" |
| PASS |
| PASS |
| PASS |
| PASS |
| PASS |
| PASS |
| PASS |
| PASS |
| PASS |
| PASS |
| |
| """.trimIndent(), sb.toString()) |
| |
| return "OK" |
| } |