1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
package kotlinx.serialization.features.sealed
import kotlinx.serialization.*
import kotlinx.serialization.descriptors.*
import kotlinx.serialization.json.*
import kotlin.test.*
class SealedDiamondTest : JsonTestBase() {
@Serializable
sealed interface A {}
@Serializable
sealed interface B : A {}
@Serializable
sealed interface C : A {}
@Serializable
@SerialName("X")
data class X(val i: Int) : B, C
@Serializable
@SerialName("Y")
object Y : B, C
@SerialName("E")
enum class E : B, C {
Q, W
}
@Test
fun testMultipleSuperSealedInterfacesDescriptor() {
val subclasses = A.serializer().descriptor.getElementDescriptor(1).elementDescriptors.map { it.serialName }
assertEquals(listOf("E", "X", "Y"), subclasses)
}
@Test
fun testMultipleSuperSealedInterfaces() {
@Serializable
data class Carrier(val a: A, val b: B, val c: C)
assertJsonFormAndRestored(
Carrier.serializer(),
Carrier(X(1), X(2), Y),
"""{"a":{"type":"X","i":1},"b":{"type":"X","i":2},"c":{"type":"Y"}}"""
)
}
}
|