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
102
103
104
105
106
107
108
109
110
111
112
113
114
115
|
package kotlinx.serialization.protobuf.schema
import kotlinx.serialization.*
import kotlinx.serialization.protobuf.*
import kotlin.test.Test
import kotlin.test.assertContains
import kotlin.test.assertFailsWith
class SchemaValidationsTest {
@Serializable
data class ValidClass(val i: Int)
@Serializable
@SerialName("ValidClass")
data class DuplicateClass(val l: Long)
@Serializable
@SerialName("invalid serial name")
data class InvalidClassName(val i: Int)
@Serializable
data class InvalidClassFieldName(@SerialName("invalid serial name") val i: Int)
@Serializable
data class FieldNumberDuplicates(@ProtoNumber(42) val i: Int, @ProtoNumber(42) val j: Int)
@Serializable
data class FieldNumberImplicitlyDuplicates(@ProtoNumber(2) val i: Int, val j: Int)
@Serializable
@SerialName("invalid serial name")
enum class InvalidEnumName { SINGLETON }
@Serializable
enum class InvalidEnumElementName {
FIRST,
@SerialName("invalid serial name")
SECOND
}
@Test
fun testInvalidEnumElementSerialName() {
val descriptors = listOf(InvalidEnumElementName.serializer().descriptor)
assertFailsWith(IllegalArgumentException::class) { ProtoBufSchemaGenerator.generateSchemaText(descriptors) }
}
@Test
fun testInvalidClassSerialName() {
val descriptors = listOf(InvalidClassName.serializer().descriptor)
assertFailsWith(IllegalArgumentException::class) { ProtoBufSchemaGenerator.generateSchemaText(descriptors) }
}
@Test
fun testInvalidClassFieldSerialName() {
val descriptors = listOf(InvalidClassFieldName.serializer().descriptor)
assertFailsWith(IllegalArgumentException::class) { ProtoBufSchemaGenerator.generateSchemaText(descriptors) }
}
@Test
fun testDuplicateSerialNames() {
val descriptors = listOf(InvalidClassFieldName.serializer().descriptor)
assertFailsWith(IllegalArgumentException::class) { ProtoBufSchemaGenerator.generateSchemaText(descriptors) }
}
@Test
fun testInvalidEnumSerialName() {
val descriptors = listOf(InvalidEnumName.serializer().descriptor)
assertFailsWith(IllegalArgumentException::class) { ProtoBufSchemaGenerator.generateSchemaText(descriptors) }
}
@Test
fun testDuplicationSerialName() {
val descriptors = listOf(ValidClass.serializer().descriptor, DuplicateClass.serializer().descriptor)
assertFailsWith(IllegalArgumentException::class) { ProtoBufSchemaGenerator.generateSchemaText(descriptors) }
}
@Test
fun testInvalidOptionName() {
val descriptors = listOf(ValidClass.serializer().descriptor)
assertFailsWith(IllegalArgumentException::class) {
ProtoBufSchemaGenerator.generateSchemaText(
descriptors,
options = mapOf("broken name" to "value")
)
}
}
@Test
fun testIllegalPackageNames() {
val descriptors = listOf(ValidClass.serializer().descriptor)
assertFailsWith(IllegalArgumentException::class) { ProtoBufSchemaGenerator.generateSchemaText(descriptors, "") }
assertFailsWith(IllegalArgumentException::class) { ProtoBufSchemaGenerator.generateSchemaText(descriptors, ".") }
assertFailsWith(IllegalArgumentException::class) { ProtoBufSchemaGenerator.generateSchemaText(descriptors, ".first.dot") }
assertFailsWith(IllegalArgumentException::class) { ProtoBufSchemaGenerator.generateSchemaText(descriptors, "ended.with.dot.") }
assertFailsWith(IllegalArgumentException::class) { ProtoBufSchemaGenerator.generateSchemaText(descriptors, "first._underscore") }
assertFailsWith(IllegalArgumentException::class) { ProtoBufSchemaGenerator.generateSchemaText(descriptors, "first.1digit") }
assertFailsWith(IllegalArgumentException::class) { ProtoBufSchemaGenerator.generateSchemaText(descriptors, "illegal.sym+bol") }
}
@Test
fun testValidPackageNames() {
val descriptors = listOf(ValidClass.serializer().descriptor)
ProtoBufSchemaGenerator.generateSchemaText(descriptors, "singleIdent")
ProtoBufSchemaGenerator.generateSchemaText(descriptors, "double.ident")
ProtoBufSchemaGenerator.generateSchemaText(descriptors, "with.digits0123")
ProtoBufSchemaGenerator.generateSchemaText(descriptors, "with.underscore_")
}
@Test
fun testFieldNumberDuplicates() {
assertFailsWith(IllegalArgumentException::class) { ProtoBufSchemaGenerator.generateSchemaText(listOf(FieldNumberDuplicates.serializer().descriptor)) }
assertFailsWith(IllegalArgumentException::class) { ProtoBufSchemaGenerator.generateSchemaText(listOf(FieldNumberImplicitlyDuplicates.serializer().descriptor)) }
}
}
|