/* * Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. */ package kotlinx.serialization import kotlinx.serialization.descriptors.* import kotlinx.serialization.encoding.* import kotlinx.serialization.internal.EnumSerializer import kotlinx.serialization.test.* import kotlin.test.* // This is unimplemented functionality that should be @Suppress("RemoveExplicitTypeArguments") // This is exactly what's being tested class SerializersLookupEnumTest { @Serializable(with = EnumExternalObjectSerializer::class) enum class EnumExternalObject object EnumExternalObjectSerializer: KSerializer { override val descriptor: SerialDescriptor = buildSerialDescriptor("tmp", SerialKind.ENUM) override fun serialize(encoder: Encoder, value: EnumExternalObject) { TODO() } override fun deserialize(decoder: Decoder): EnumExternalObject { TODO() } } @Serializable(with = EnumCustomClassSerializer::class) enum class EnumExternalClass class EnumCustomClassSerializer: KSerializer { override val descriptor: SerialDescriptor = buildSerialDescriptor("tmp", SerialKind.ENUM) override fun serialize(encoder: Encoder, value: EnumExternalClass) { TODO() } override fun deserialize(decoder: Decoder): EnumExternalClass { TODO() } } @Serializable enum class PlainEnum @Serializable enum class SerializableEnum { C, D } @Serializable enum class SerializableMarkedEnum { C, @SerialName("NotD") D } @Test fun testPlainEnum() { assertSame(PlainEnum.serializer(), serializer()) if (!isJs()) { assertIs>(serializer()) } } @Test fun testSerializableEnumSerializer() { assertIs>(SerializableEnum.serializer()) assertSame(SerializableEnum.serializer(), serializer()) } @Test fun testSerializableMarkedEnumSerializer() { assertIs>(SerializableMarkedEnum.serializer()) assertSame(SerializableMarkedEnum.serializer(), serializer()) } @Test fun testEnumExternalObject() { assertSame(EnumExternalObjectSerializer, EnumExternalObject.serializer()) assertSame(EnumExternalObjectSerializer, serializer()) } @Test fun testEnumExternalClass() { assertIs(EnumExternalClass.serializer()) assertIs(serializer()) } }