summaryrefslogtreecommitdiff
path: root/formats/json-tests/commonTest/src/kotlinx/serialization/features/sealed/SealedDiamondTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'formats/json-tests/commonTest/src/kotlinx/serialization/features/sealed/SealedDiamondTest.kt')
-rw-r--r--formats/json-tests/commonTest/src/kotlinx/serialization/features/sealed/SealedDiamondTest.kt49
1 files changed, 49 insertions, 0 deletions
diff --git a/formats/json-tests/commonTest/src/kotlinx/serialization/features/sealed/SealedDiamondTest.kt b/formats/json-tests/commonTest/src/kotlinx/serialization/features/sealed/SealedDiamondTest.kt
new file mode 100644
index 00000000..6ba4713b
--- /dev/null
+++ b/formats/json-tests/commonTest/src/kotlinx/serialization/features/sealed/SealedDiamondTest.kt
@@ -0,0 +1,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"}}"""
+ )
+ }
+
+}