1 /* 2 * Copyright 2017-2021 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. 3 */ 4 5 package kotlinx.serialization.modules 6 7 import kotlinx.serialization.* 8 import kotlinx.serialization.json.* 9 import kotlin.test.* 10 11 private const val prefix = "kotlinx.serialization.modules.SerialNameCollisionInSealedClassesTest" 12 13 class SerialNameCollisionInSealedClassesTest { 14 @Serializable 15 sealed class Base { 16 @Serializable 17 data class Child(val type: String, @SerialName("type2") val f: String = "2") : Base() 18 } 19 <lambda>null20 private fun Json(discriminator: String, useArrayPolymorphism: Boolean = false) = Json { 21 classDiscriminator = discriminator 22 this.useArrayPolymorphism = useArrayPolymorphism 23 } 24 25 @Test testCollisionWithDiscriminatornull26 fun testCollisionWithDiscriminator() { 27 assertFailsWith<IllegalStateException> { Json("type").encodeToString(Base.serializer(), Base.Child("a")) } 28 assertFailsWith<IllegalStateException> { Json("type2").encodeToString(Base.serializer(), Base.Child("a")) } 29 Json("f").encodeToString(Base.serializer(), Base.Child("a")) 30 } 31 32 @Test testNoCollisionWithArrayPolymorphismnull33 fun testNoCollisionWithArrayPolymorphism() { 34 Json("type", true).encodeToString(Base.serializer(), Base.Child("a")) 35 } 36 37 @Serializable 38 sealed class BaseCollision { 39 @Serializable 40 class Child() : BaseCollision() 41 42 @Serializable 43 @SerialName("$prefix.BaseCollision.Child") 44 class ChildCollided() : BaseCollision() 45 } 46 47 @Test testDescriptorInitializerFailurenull48 fun testDescriptorInitializerFailure() { 49 BaseCollision.Child() 50 BaseCollision.ChildCollided() 51 BaseCollision.ChildCollided.serializer().descriptor // Doesn't fail 52 assertFailsWith<IllegalStateException> { BaseCollision.serializer().descriptor } 53 } 54 } 55