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