All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonTest.kotlinx.serialization.InheritableSerialInfoTest.kt Maven / Gradle / Ivy

package kotlinx.serialization

import kotlinx.serialization.descriptors.SerialDescriptor
import kotlinx.serialization.test.isJsLegacy
import kotlin.test.*


class InheritableSerialInfoTest {

    @InheritableSerialInfo
    annotation class InheritableDiscriminator(val discriminator: String)

    @InheritableDiscriminator("a")
    interface A

    @InheritableDiscriminator("a")
    interface B

    @InheritableDiscriminator("a")
    @Serializable
    abstract class C: A

    @Serializable
    sealed class D: C(), B

    @Serializable
    class E: D()

    @Serializable
    class E2: C()

    @Serializable
    class E3: A, B

    private fun doTest(descriptor: SerialDescriptor) {
        if (isJsLegacy()) return // Unsupported
        val list = descriptor.annotations.filterIsInstance()
        assertEquals(1, list.size)
        assertEquals("a", list.first().discriminator)
    }

    @Test
    fun testInheritanceFromSealed() = doTest(E.serializer().descriptor)
    @Test
    fun testInheritanceFromAbstract() = doTest(E2.serializer().descriptor)
    @Test
    fun testInheritanceFromInterface() = doTest(E3.serializer().descriptor)
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy