1 package kotlinx.serialization.features 2 3 import kotlinx.serialization.* 4 import kotlinx.serialization.descriptors.* 5 import kotlinx.serialization.encoding.* 6 import kotlinx.serialization.json.* 7 import kotlinx.serialization.test.* 8 import kotlin.test.* 9 10 class LocalClassesTest { 11 object ObjectCustomSerializer: KSerializer<Any?> { 12 override val descriptor: SerialDescriptor = buildSerialDescriptor("tmp", PrimitiveKind.INT) serializenull13 override fun serialize(encoder: Encoder, value: Any?) { 14 encoder.encodeNull() 15 } 16 deserializenull17 override fun deserialize(decoder: Decoder): Any? { 18 return decoder.decodeNull() 19 } 20 } 21 22 class ClassCustomSerializer: KSerializer<Any?> { 23 override val descriptor: SerialDescriptor = buildSerialDescriptor("tmp", PrimitiveKind.INT) serializenull24 override fun serialize(encoder: Encoder, value: Any?) { 25 encoder.encodeNull() 26 } 27 deserializenull28 override fun deserialize(decoder: Decoder): Any? { 29 return decoder.decodeNull() 30 } 31 } 32 33 @Test testGeneratedSerializernull34 fun testGeneratedSerializer() { 35 @Serializable 36 data class Local(val i: Int) 37 38 val origin = Local(42) 39 40 val decoded: Local = Json.decodeFromString(Json.encodeToString(origin)) 41 assertEquals(origin, decoded) 42 } 43 44 @Test testInLambdanull45 fun testInLambda() { 46 42.let { 47 @Serializable 48 data class Local(val i: Int) 49 50 val origin = Local(it) 51 52 val decoded: Local = Json.decodeFromString(Json.encodeToString(origin)) 53 assertEquals(origin, decoded) 54 } 55 } 56 57 @Suppress("SERIALIZER_TYPE_INCOMPATIBLE") 58 @Test testObjectCustomSerializernull59 fun testObjectCustomSerializer() { 60 @Serializable(with = ObjectCustomSerializer::class) 61 data class Local(val i: Int) 62 63 val origin: Local? = null 64 65 val decoded: Local? = Json.decodeFromString(Json.encodeToString(origin)) 66 assertEquals(origin, decoded) 67 } 68 69 @Suppress("SERIALIZER_TYPE_INCOMPATIBLE") 70 @Test testClassCustomSerializernull71 fun testClassCustomSerializer() { 72 @Serializable(with = ClassCustomSerializer::class) 73 data class Local(val i: Int) 74 75 val origin: Local? = null 76 77 // FIXME change to `noLegacyJs` when lookup of `ClassCustomSerializer` will work on Native and JS/IR 78 jvmOnly { 79 val decoded: Local? = Json.decodeFromString(Json.encodeToString(origin)) 80 assertEquals(origin, decoded) 81 } 82 } 83 84 } 85