Added test on Serializable(with=...) in K2

This commit is contained in:
Sergey.Shanshin
2022-09-23 11:56:19 +00:00
committed by Space
parent 221043a74d
commit 9210108d5a
4 changed files with 161 additions and 0 deletions
@@ -0,0 +1,93 @@
FILE: serializableWith.kt
public final object IntHolderAsStringSerializer : R|kotlinx/serialization/KSerializer<IntHolder>| {
private constructor(): R|IntHolderAsStringSerializer| {
super<R|kotlin/Any|>()
}
public final override val descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor| = R|kotlinx/serialization/descriptors/PrimitiveSerialDescriptor|(String(IntHolder), Q|kotlinx/serialization/descriptors/PrimitiveKind.STRING|)
public get(): R|kotlinx/serialization/descriptors/SerialDescriptor|
public final override fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|IntHolder|): R|kotlin/Unit| {
R|<local>/encoder|.R|kotlinx/serialization/encoding/Encoder.encodeString|(R|<local>/value|.R|/IntHolder.value|.R|kotlin/Int.toString|())
}
public final override fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|IntHolder| {
lval string: R|kotlin/String| = R|<local>/decoder|.R|kotlinx/serialization/encoding/Decoder.decodeString|()
^deserialize R|/IntHolder.IntHolder|(R|<local>/string|.R|kotlin/text/toInt|())
}
}
public final object ObjectSerializer : R|kotlinx/serialization/KSerializer<SerializableObject>| {
private constructor(): R|ObjectSerializer| {
super<R|kotlin/Any|>()
}
public final override val descriptor: R|kotlinx/serialization/descriptors/SerialDescriptor| = R|kotlinx/serialization/descriptors/PrimitiveSerialDescriptor|(String(SerializableObject), Q|kotlinx/serialization/descriptors/PrimitiveKind.STRING|)
public get(): R|kotlinx/serialization/descriptors/SerialDescriptor|
public final override fun serialize(encoder: R|kotlinx/serialization/encoding/Encoder|, value: R|SerializableObject|): R|kotlin/Unit| {
R|<local>/encoder|.R|kotlinx/serialization/encoding/Encoder.encodeString|(String(obj))
}
public final override fun deserialize(decoder: R|kotlinx/serialization/encoding/Decoder|): R|SerializableObject| {
R|<local>/decoder|.R|kotlinx/serialization/encoding/Decoder.decodeString|()
^deserialize Q|SerializableObject|
}
}
@R|kotlinx/serialization/Serializable|(with = <getClass>(Q|IntHolderAsStringSerializer|)) public final class IntHolder : R|kotlin/Any| {
public constructor(value: R|kotlin/Int|): R|IntHolder| {
super<R|kotlin/Any|>()
}
public final val value: R|kotlin/Int| = R|<local>/value|
public get(): R|kotlin/Int|
public final companion object Companion : R|kotlin/Any| {
public final fun serializer(): R|kotlinx/serialization/KSerializer<IntHolder>|
private constructor(): R|IntHolder.Companion|
}
}
@R|kotlinx/serialization/Serializable|(with = <getClass>(Q|ObjectSerializer|)) public final object SerializableObject : R|kotlin/Any| {
private constructor(): R|SerializableObject| {
super<R|kotlin/Any|>()
}
public final fun serializer(): R|kotlinx/serialization/KSerializer<SerializableObject>|
}
public final fun box(): R|kotlin/String| {
lval holder: R|IntHolder| = R|/IntHolder.IntHolder|(Int(42))
lval encoded: R|kotlin/String| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.encodeToString|<R|IntHolder|>(Q|IntHolder|.R|/IntHolder.Companion.serializer|(), R|<local>/holder|)
when () {
!=(R|<local>/encoded|, String("42")) -> {
^box R|<local>/encoded|
}
}
lval decoded: R|IntHolder| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.decodeFromString|<R|IntHolder|>(Q|IntHolder|.R|/IntHolder.Companion.serializer|(), R|<local>/encoded|)
when () {
!=(R|<local>/decoded|.R|/IntHolder.value|, R|<local>/holder|.R|/IntHolder.value|) -> {
^box String(Incorrect value)
}
}
lval encodedObject: R|kotlin/String| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.encodeToString|<R|SerializableObject|>(Q|SerializableObject|.R|/SerializableObject.serializer|(), Q|SerializableObject|)
when () {
!=(R|<local>/encodedObject|, String("obj")) -> {
^box R|<local>/encodedObject|
}
}
lval decodedObject: R|SerializableObject| = Q|kotlinx/serialization/json/Json|.R|kotlinx/serialization/json/Json.decodeFromString|<R|SerializableObject|>(Q|SerializableObject|.R|/SerializableObject.serializer|(), R|<local>/encodedObject|)
when () {
!=(R|<local>/decodedObject|, Q|SerializableObject|) -> {
^box String(Incorrect object instance)
}
}
^box String(OK)
}
@@ -0,0 +1,56 @@
// WITH_STDLIB
import kotlinx.serialization.*
import kotlinx.serialization.json.*
import kotlinx.serialization.encoding.*
import kotlinx.serialization.descriptors.*
object IntHolderAsStringSerializer : KSerializer<IntHolder> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("IntHolder", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: IntHolder) {
encoder.encodeString(value.value.toString())
}
override fun deserialize(decoder: Decoder): IntHolder {
val string = decoder.decodeString()
return IntHolder(string.toInt())
}
}
object ObjectSerializer : KSerializer<SerializableObject> {
override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("SerializableObject", PrimitiveKind.STRING)
override fun serialize(encoder: Encoder, value: SerializableObject) {
encoder.encodeString("obj")
}
override fun deserialize(decoder: Decoder): SerializableObject {
decoder.decodeString()
return SerializableObject
}
}
@Serializable(with = IntHolderAsStringSerializer::class)
class IntHolder(val value: Int)
@Serializable(with = ObjectSerializer::class)
object SerializableObject
fun box(): String {
val holder = IntHolder(42)
val encoded = Json.encodeToString(IntHolder.serializer(), holder)
if (encoded != "\"42\"") return encoded
val decoded = Json.decodeFromString(IntHolder.serializer(), encoded)
if (decoded.value != holder.value) return "Incorrect value"
val encodedObject = Json.encodeToString(SerializableObject.serializer(), SerializableObject)
if (encodedObject != "\"obj\"") return encodedObject
val decodedObject = Json.decodeFromString(SerializableObject.serializer(), encodedObject)
if (decodedObject != SerializableObject) return "Incorrect object instance"
return "OK"
}
@@ -144,5 +144,11 @@ public class SerializationFirBlackBoxTestGenerated extends AbstractSerialization
public void testSerializableObject() throws Exception {
runTest("plugins/kotlinx-serialization/testData/firMembers/serializableObject.kt");
}
@Test
@TestMetadata("serializableWith.kt")
public void testSerializableWith() throws Exception {
runTest("plugins/kotlinx-serialization/testData/firMembers/serializableWith.kt");
}
}
}
@@ -191,5 +191,11 @@ public class SerializationFirDiagnosticTestGenerated extends AbstractSerializati
public void testSerializableObject() throws Exception {
runTest("plugins/kotlinx-serialization/testData/firMembers/serializableObject.kt");
}
@Test
@TestMetadata("serializableWith.kt")
public void testSerializableWith() throws Exception {
runTest("plugins/kotlinx-serialization/testData/firMembers/serializableWith.kt");
}
}
}