fba2f5ea4e
to enhance and increase test coverage of the plugin.
47 lines
1.4 KiB
Kotlin
Vendored
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"
|
|
}
|