53 lines
1.4 KiB
Kotlin
Vendored
53 lines
1.4 KiB
Kotlin
Vendored
// 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())
|
|
}
|