• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package kotlinx.serialization
2 
3 import kotlinx.serialization.test.*
4 import kotlin.test.*
5 
6 class SerializersLookupInterfaceTest {
7 
8     interface I
9 
10     @Polymorphic
11     interface I2
12 
13     @Suppress("SERIALIZER_TYPE_INCOMPATIBLE")
14     @Serializable(PolymorphicSerializer::class)
15     interface I3
16 
17     @Serializable
18     @SerialName("S")
19     sealed interface S
20 
21     // TODO: not working because (see #1207, plugin does not produce companion object for interfaces)
22     // We even have #1853 with tests for that
23     // @Serializable(ExternalSerializer::class)
24     // interface External
25 
26 
27     @Test
testSealedInterfaceLookupnull28     fun testSealedInterfaceLookup() {
29         val serializer = serializer<S>()
30         assertTrue(serializer is SealedClassSerializer)
31         assertEquals("S", serializer.descriptor.serialName)
32     }
33 
34     @Test
testInterfaceLookupnull35     fun testInterfaceLookup() {
36         // Native does not have KClass.isInterface
37         if (isNative() || isWasm()) return
38 
39         val serializer1 = serializer<I>()
40         assertTrue(serializer1 is PolymorphicSerializer)
41         assertEquals("kotlinx.serialization.Polymorphic<I>", serializer1.descriptor.serialName)
42 
43         val serializer2 = serializer<I2>()
44         assertTrue(serializer2 is PolymorphicSerializer)
45         assertEquals("kotlinx.serialization.Polymorphic<I2>", serializer2.descriptor.serialName)
46 
47         val serializer3 = serializer<I3>()
48         assertTrue(serializer3 is PolymorphicSerializer)
49         assertEquals("kotlinx.serialization.Polymorphic<I3>", serializer3.descriptor.serialName)
50     }
51 }
52