1 /* 2 * Copyright 2017-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. 3 */ 4 5 @file:UseSerializers(GenericSerializersOnFileTest.MySerializer::class) 6 7 package kotlinx.serialization 8 9 import kotlinx.serialization.descriptors.PrimitiveKind 10 import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor 11 import kotlinx.serialization.descriptors.SerialDescriptor 12 import kotlinx.serialization.encoding.Decoder 13 import kotlinx.serialization.encoding.Encoder 14 import kotlinx.serialization.json.Json 15 import kotlin.test.Test 16 import kotlin.test.assertEquals 17 18 class GenericSerializersOnFileTest { 19 data class GenericClass<T>(val t: T) 20 21 @Serializable 22 data class Holder(val notnull: GenericClass<String>, val nullable: GenericClass<String>?) 23 24 class MySerializer<E>(val tSer: KSerializer<E>) : KSerializer<GenericClass<E>> { 25 override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("my int descriptor", PrimitiveKind.STRING) 26 serializenull27 override fun serialize(encoder: Encoder, value: GenericClass<E>) { 28 encoder.encodeString(value.t as String) 29 } 30 31 @Suppress("UNCHECKED_CAST") deserializenull32 override fun deserialize(decoder: Decoder): GenericClass<E> { 33 return GenericClass(decoder.decodeString() as E) 34 } 35 } 36 37 @Test testSerializenull38 fun testSerialize() { 39 assertEquals( 40 """{"notnull":"Not Null","nullable":null}""", 41 Json.encodeToString(Holder(notnull = GenericClass("Not Null"), nullable = null)) 42 ) 43 assertEquals( 44 """{"notnull":"Not Null","nullable":"Nullable"}""", 45 Json.encodeToString(Holder(notnull = GenericClass("Not Null"), nullable = GenericClass("Nullable"))) 46 ) 47 } 48 49 @Test testDeserializenull50 fun testDeserialize() { 51 assertEquals( 52 Holder(notnull = GenericClass("Not Null"), nullable = null), 53 Json.decodeFromString("""{"notnull":"Not Null","nullable":null}""") 54 ) 55 assertEquals( 56 Holder(notnull = GenericClass("Not Null"), nullable = GenericClass("Nullable")), 57 Json.decodeFromString("""{"notnull":"Not Null","nullable":"Nullable"}""") 58 ) 59 } 60 61 62 } 63