blob: 243a9f29f91c7a90a2e66e715909209174ad1ce4 [file] [log] [blame]
// FIR_DISABLE_LAZY_RESOLVE_CHECKS
// WITH_STDLIB
import kotlinx.serialization.*
import kotlinx.serialization.descriptors.*
import kotlinx.serialization.json.*
@Serializable
sealed interface I
@Serializable
sealed class X: I {
private var x = "X"
fun exposeX() = x
}
@Serializable
abstract class Y: X() {
private var y = "Y"
fun exposeY() = y
}
@Serializable
class Bottom: Y()
fun testData(results: String): String {
if (results != "OK") return results
val serial = Bottom.serializer()
val j = Json { encodeDefaults = true }
val s = j.encodeToString(serial, Bottom())
if (s != """{"x":"X","y":"Y"}""") return "Incorrect encoding: $s"
val decoded = j.decodeFromString(serial, """{"x":"1","y":"2"}""")
if (decoded.exposeX() != "1") return "Incorrect X"
if (decoded.exposeY() != "2") return "Incorrect Y"
return "OK"
}
@OptIn(ExperimentalSerializationApi::class)
fun testKinds(): String {
if (I.serializer().descriptor.kind != PolymorphicKind.SEALED) return "Not sealed: I"
if (X.serializer().descriptor.kind != PolymorphicKind.SEALED) return "Not sealed: X"
if (Y.serializer().descriptor.kind != PolymorphicKind.OPEN) return "Not polymorphic: Y"
val serial = Bottom.serializer()
if (serial.descriptor.kind != StructureKind.CLASS) return "Not class: Bottom"
return "OK"
}
fun box(): String {
return testData(testKinds())
}