summaryrefslogtreecommitdiff
path: root/core/commonTest/src/kotlinx/serialization/MetaSerializableTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'core/commonTest/src/kotlinx/serialization/MetaSerializableTest.kt')
-rw-r--r--core/commonTest/src/kotlinx/serialization/MetaSerializableTest.kt56
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)
+ }
+}