1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
|
/*
* Copyright 2017-2022 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
*/
package kotlinx.serialization
import kotlinx.serialization.descriptors.SerialDescriptor
import kotlin.test.Test
import kotlin.test.assertEquals
class EnumDescriptorsTest {
@Serializable
enum class SerializableEnum {
A,
B
}
@SerialInfo
@Target(AnnotationTarget.CLASS, AnnotationTarget.PROPERTY)
annotation class SerialAnnotation(val text: String)
@SerialAnnotation("On Class")
@Serializable
enum class FullyAnnotatedEnum {
@SerialAnnotation("On A")
A,
@SerialAnnotation("On B")
B
}
@Serializable
enum class EntriesAnnotatedEnum {
@SerialAnnotation("On A")
A,
@SerialAnnotation("On B")
B
}
@SerialAnnotation("On Class")
@Serializable
enum class ClassAnnotatedEnum {
A,
B
}
@Test
fun testSerializableEnum() {
val d = SerializableEnum.serializer().descriptor
assertEquals("kotlinx.serialization.EnumDescriptorsTest.SerializableEnum", d.serialName)
assertEquals("A", d.getElementName(0))
assertEquals("B", d.getElementName(1))
}
@Test
fun testFullyAnnotatedEnum() {
assertFullyAnnotated(FullyAnnotatedEnum.serializer().descriptor)
assertFullyAnnotated(serializer<FullyAnnotatedEnum>().descriptor)
}
@Test
fun testEntriesAnnotatedEnum() {
assertEntriesAnnotated(EntriesAnnotatedEnum.serializer().descriptor)
assertEntriesAnnotated(serializer<EntriesAnnotatedEnum>().descriptor)
}
@Test
fun testClassAnnotatedEnum() {
assertClassAnnotated(ClassAnnotatedEnum.serializer().descriptor)
assertClassAnnotated(serializer<ClassAnnotatedEnum>().descriptor)
}
private fun assertFullyAnnotated(descriptor: SerialDescriptor) {
assertEquals(1, descriptor.annotations.size)
assertEquals("On Class", (descriptor.annotations.first() as SerialAnnotation).text)
assertEquals(1, descriptor.getElementAnnotations(0).size)
assertEquals("On A", (descriptor.getElementAnnotations(0).first() as SerialAnnotation).text)
assertEquals(1, descriptor.getElementAnnotations(1).size)
assertEquals("On B", (descriptor.getElementAnnotations(1).first() as SerialAnnotation).text)
}
private fun assertEntriesAnnotated(descriptor: SerialDescriptor) {
assertEquals(1, descriptor.getElementAnnotations(0).size)
assertEquals("On A", (descriptor.getElementAnnotations(0).first() as SerialAnnotation).text)
assertEquals(1, descriptor.getElementAnnotations(1).size)
assertEquals("On B", (descriptor.getElementAnnotations(1).first() as SerialAnnotation).text)
}
private fun assertClassAnnotated(descriptor: SerialDescriptor) {
assertEquals(1, descriptor.annotations.size)
assertEquals("On Class", (descriptor.annotations.first() as SerialAnnotation).text)
}
}
|