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