Files
kotlin-fork/plugins/kotlinx-serialization/testData/boxIr/genericBaseClassSimple.kt
T
Leonid Startsev fba2f5ea4e Expand most kotlinx.serialization tests on JS backend
to enhance and increase test coverage of the plugin.
2024-01-10 12:17:34 +00:00

47 lines
1.4 KiB
Kotlin
Vendored

// IGNORE_BACKEND_K1: JS_IR
// WITH_STDLIB
import kotlinx.serialization.*
import kotlinx.serialization.json.*
// From #1264
@Serializable
sealed class TypedSealedClass<T>(val a: T) {
@Serializable
class Child(val y: Int) : TypedSealedClass<String>("10") {
override fun toString(): String = "Child($a, $y)"
}
}
// From #KT-43910
@Serializable
open class ValidatableValue<T : Any, V: Any>(
var value: T? = null,
var error: V? = null,
)
@Serializable
class Email<T: Any> : ValidatableValue<String, T>() { // Note this is a different T
override fun toString(): String {
return "Email($value, $error)"
}
}
fun box(): String {
val encodedChild = """{"a":"11","y":42}"""
val decodedChild = Json.decodeFromString<TypedSealedClass.Child>(encodedChild)
if (decodedChild.toString() != "Child(11, 42)") return "DecodedChild: $decodedChild"
Json.encodeToString(decodedChild)?.let { if (it != encodedChild) return "EncodedChild: $it" }
val email = Email<Int>().apply {
value = "foo"
error = 1
}
val encodedEmail = Json.encodeToString(email)
if (encodedEmail != """{"value":"foo","error":1}""") return "EncodedEmail: $encodedEmail"
val decodedEmail = Json.decodeFromString<Email<Int>>(encodedEmail)
if (decodedEmail.toString() != "Email(foo, 1)") return "DecodedEmail: $decodedEmail"
return "OK"
}