Skip to content

Commit 67cfed3

Browse files
authored
Added tests on support of local serializable classes (Kotlin#1532)
1 parent 778321f commit 67cfed3

File tree

1 file changed

+93
-0
lines changed

1 file changed

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

0 commit comments

Comments
 (0)