• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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