Files
kotlin-fork/js/js.translator/testData/box/initialize/uninitializedLateinit.kt
T

64 lines
1.2 KiB
Kotlin
Vendored

// IGNORE_BACKEND: JS_IR, JS_IR_ES6
// EXPECTED_REACHABLE_NODES: 1336
// MODULE: lib
// FILE: lib.kt
open class A {
private lateinit var a: Any
open lateinit var c: Any
fun useA() = a
fun useC() = c
companion object {
lateinit var b: Any
fun useB() = b
}
}
object O {
lateinit var o: Any
fun useO() = o
}
fun <T> checkException(propertyName: String, f: () -> T) {
try {
f()
}
catch (e: kotlin.UninitializedPropertyAccessException) {
assertEquals(e.message, "lateinit property ${propertyName} has not been initialized")
}
}
fun runChecks() {
checkException("a") { A().useA() }
checkException("b") { A.b }
checkException("b") { A.useB() }
checkException("o") { O.o }
checkException("o") { O.useO() }
}
// MODULE: main(lib)
// FILE: main.kt
class C: A() {
override lateinit var c: Any
}
fun box(): String {
runChecks()
checkException("a") { A().useA() }
checkException("b") { A.b }
checkException("b") { A.useB() }
checkException("o") { O.o }
checkException("o") { O.useO() }
checkException("a") { C().useA() }
checkException("c") { C().c }
checkException("c") { C().useC() }
return "OK"
}