diff options
Diffstat (limited to 'core/commonTest/src/kotlinx/serialization/MetaSerializableTest.kt')
-rw-r--r-- | core/commonTest/src/kotlinx/serialization/MetaSerializableTest.kt | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/core/commonTest/src/kotlinx/serialization/MetaSerializableTest.kt b/core/commonTest/src/kotlinx/serialization/MetaSerializableTest.kt new file mode 100644 index 00000000..071045a8 --- /dev/null +++ b/core/commonTest/src/kotlinx/serialization/MetaSerializableTest.kt @@ -0,0 +1,56 @@ +package kotlinx.serialization + +import kotlinx.serialization.test.* +import kotlin.reflect.KClass +import kotlin.test.* + +@MetaSerializable +@Target(AnnotationTarget.CLASS, AnnotationTarget.PROPERTY) +annotation class MySerializable + +@MetaSerializable +@Target(AnnotationTarget.CLASS, AnnotationTarget.PROPERTY) +annotation class MySerializableWithInfo( + val value: Int, + val kclass: KClass<*> +) + + +class MetaSerializableTest { + + @MySerializable + class Project1(val name: String, val language: String) + + @MySerializableWithInfo(123, String::class) + class Project2(val name: String, val language: String) + + @MySerializableWithInfo(123, String::class) + @Serializable + class Project3(val name: String, val language: String) + + @Serializable + class Wrapper( + @MySerializableWithInfo(234, Int::class) val project: Project3 + ) + + @Test + fun testMetaSerializable() { + val serializer = serializer<Project1>() + assertNotNull(serializer) + } + + @Test + fun testMetaSerializableWithInfo() { + val info = serializer<Project2>().descriptor.annotations.filterIsInstance<MySerializableWithInfo>().first() + assertEquals(123, info.value) + assertEquals(String::class, info.kclass) + } + + @Test + fun testMetaSerializableOnProperty() { + val info = serializer<Wrapper>().descriptor + .getElementAnnotations(0).filterIsInstance<MySerializableWithInfo>().first() + assertEquals(234, info.value) + assertEquals(Int::class, info.kclass) + } +} |