• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
3  */
4 
5 package kotlinx.serialization
6 
7 import kotlinx.serialization.descriptors.*
8 import kotlinx.serialization.encoding.*
9 import kotlinx.serialization.internal.EnumSerializer
10 import kotlinx.serialization.test.*
11 import kotlin.test.*
12 
13 // This is unimplemented functionality that should be
14 @Suppress("RemoveExplicitTypeArguments") // This is exactly what's being tested
15 class SerializersLookupEnumTest {
16     @Serializable(with = EnumExternalObjectSerializer::class)
17     enum class EnumExternalObject
18 
19     object EnumExternalObjectSerializer: KSerializer<EnumExternalObject> {
20         override val descriptor: SerialDescriptor = buildSerialDescriptor("tmp", SerialKind.ENUM)
21 
serializenull22         override fun serialize(encoder: Encoder, value: EnumExternalObject) {
23             TODO()
24         }
25 
deserializenull26         override fun deserialize(decoder: Decoder): EnumExternalObject {
27             TODO()
28         }
29     }
30 
31     @Serializable(with = EnumCustomClassSerializer::class)
32     enum class EnumExternalClass
33 
34     class EnumCustomClassSerializer: KSerializer<EnumExternalClass> {
35         override val descriptor: SerialDescriptor = buildSerialDescriptor("tmp", SerialKind.ENUM)
36 
serializenull37         override fun serialize(encoder: Encoder, value: EnumExternalClass) {
38             TODO()
39         }
40 
deserializenull41         override fun deserialize(decoder: Decoder): EnumExternalClass {
42             TODO()
43         }
44     }
45 
46     @Serializable
47     enum class PlainEnum
48 
49     @Serializable
50     enum class SerializableEnum { C, D }
51 
52     @Serializable
53     enum class SerializableMarkedEnum { C, @SerialName("NotD") D }
54 
55     @Test
testPlainEnumnull56     fun testPlainEnum() {
57         assertSame(PlainEnum.serializer(), serializer<PlainEnum>())
58 
59         if (!isJs()) {
60             assertIs<EnumSerializer<PlainEnum>>(serializer<PlainEnum>())
61         }
62     }
63 
64     @Test
testSerializableEnumSerializernull65     fun testSerializableEnumSerializer() {
66         assertIs<EnumSerializer<SerializableEnum>>(SerializableEnum.serializer())
67 
68         assertSame(SerializableEnum.serializer(), serializer<SerializableEnum>())
69     }
70 
71     @Test
testSerializableMarkedEnumSerializernull72     fun testSerializableMarkedEnumSerializer() {
73         assertIs<EnumSerializer<SerializableMarkedEnum>>(SerializableMarkedEnum.serializer())
74 
75         assertSame(SerializableMarkedEnum.serializer(), serializer<SerializableMarkedEnum>())
76     }
77 
78     @Test
testEnumExternalObjectnull79     fun testEnumExternalObject() {
80         assertSame(EnumExternalObjectSerializer, EnumExternalObject.serializer())
81         assertSame(EnumExternalObjectSerializer, serializer<EnumExternalObject>())
82     }
83 
84     @Test
testEnumExternalClassnull85     fun testEnumExternalClass() {
86         assertIs<EnumCustomClassSerializer>(EnumExternalClass.serializer())
87         assertIs<EnumCustomClassSerializer>(serializer<EnumExternalClass>())
88     }
89 }
90