diff options
Diffstat (limited to 'formats/json-tests/commonTest/src/kotlinx/serialization/modules/SerialNameCollisionInSealedClassesTest.kt')
-rw-r--r-- | formats/json-tests/commonTest/src/kotlinx/serialization/modules/SerialNameCollisionInSealedClassesTest.kt | 54 |
1 files changed, 54 insertions, 0 deletions
diff --git a/formats/json-tests/commonTest/src/kotlinx/serialization/modules/SerialNameCollisionInSealedClassesTest.kt b/formats/json-tests/commonTest/src/kotlinx/serialization/modules/SerialNameCollisionInSealedClassesTest.kt new file mode 100644 index 00000000..18a49a52 --- /dev/null +++ b/formats/json-tests/commonTest/src/kotlinx/serialization/modules/SerialNameCollisionInSealedClassesTest.kt @@ -0,0 +1,54 @@ +/* + * Copyright 2017-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. + */ + +package kotlinx.serialization.modules + +import kotlinx.serialization.* +import kotlinx.serialization.json.* +import kotlin.test.* + +private const val prefix = "kotlinx.serialization.modules.SerialNameCollisionInSealedClassesTest" + +class SerialNameCollisionInSealedClassesTest { + @Serializable + sealed class Base { + @Serializable + data class Child(val type: String, @SerialName("type2") val f: String = "2") : Base() + } + + private fun Json(discriminator: String, useArrayPolymorphism: Boolean = false) = Json { + classDiscriminator = discriminator + this.useArrayPolymorphism = useArrayPolymorphism + } + + @Test + fun testCollisionWithDiscriminator() { + assertFailsWith<IllegalStateException> { Json("type").encodeToString(Base.serializer(), Base.Child("a")) } + assertFailsWith<IllegalStateException> { Json("type2").encodeToString(Base.serializer(), Base.Child("a")) } + Json("f").encodeToString(Base.serializer(), Base.Child("a")) + } + + @Test + fun testNoCollisionWithArrayPolymorphism() { + Json("type", true).encodeToString(Base.serializer(), Base.Child("a")) + } + + @Serializable + sealed class BaseCollision { + @Serializable + class Child() : BaseCollision() + + @Serializable + @SerialName("$prefix.BaseCollision.Child") + class ChildCollided() : BaseCollision() + } + + @Test + fun testDescriptorInitializerFailure() { + BaseCollision.Child() + BaseCollision.ChildCollided() + BaseCollision.ChildCollided.serializer().descriptor // Doesn't fail + assertFailsWith<IllegalStateException> { BaseCollision.serializer().descriptor } + } +} |