• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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