summaryrefslogtreecommitdiff
path: root/formats/protobuf/commonTest/src/kotlinx/serialization/protobuf
diff options
context:
space:
mode:
Diffstat (limited to 'formats/protobuf/commonTest/src/kotlinx/serialization/protobuf')
-rw-r--r--formats/protobuf/commonTest/src/kotlinx/serialization/protobuf/ProtobufNothingTest.kt29
-rw-r--r--formats/protobuf/commonTest/src/kotlinx/serialization/protobuf/ProtobufNullAndDefaultTest.kt3
-rw-r--r--formats/protobuf/commonTest/src/kotlinx/serialization/protobuf/schema/SchemaValidationsTest.kt28
3 files changed, 56 insertions, 4 deletions
diff --git a/formats/protobuf/commonTest/src/kotlinx/serialization/protobuf/ProtobufNothingTest.kt b/formats/protobuf/commonTest/src/kotlinx/serialization/protobuf/ProtobufNothingTest.kt
new file mode 100644
index 00000000..e90ff2be
--- /dev/null
+++ b/formats/protobuf/commonTest/src/kotlinx/serialization/protobuf/ProtobufNothingTest.kt
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2017-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+package kotlinx.serialization.protobuf
+
+import kotlinx.serialization.*
+import kotlinx.serialization.test.*
+import kotlin.test.*
+
+class ProtobufNothingTest {
+ @Serializable
+ /*private*/ data class NullableNothingBox(val value: Nothing?) // `private` doesn't work on the JS legacy target
+
+ @Serializable
+ private data class ParameterizedBox<T : Any>(val value: T?)
+
+ private inline fun <reified T> testConversion(data: T, expectedHexString: String) {
+ val string = ProtoBuf.encodeToHexString(data).uppercase()
+ assertEquals(expectedHexString, string)
+ assertEquals(data, ProtoBuf.decodeFromHexString(string))
+ }
+
+ @Test
+ fun testNothing() {
+ testConversion(NullableNothingBox(null), "")
+ testConversion(ParameterizedBox(null), "")
+ }
+}
diff --git a/formats/protobuf/commonTest/src/kotlinx/serialization/protobuf/ProtobufNullAndDefaultTest.kt b/formats/protobuf/commonTest/src/kotlinx/serialization/protobuf/ProtobufNullAndDefaultTest.kt
index 88450aad..da7521ce 100644
--- a/formats/protobuf/commonTest/src/kotlinx/serialization/protobuf/ProtobufNullAndDefaultTest.kt
+++ b/formats/protobuf/commonTest/src/kotlinx/serialization/protobuf/ProtobufNullAndDefaultTest.kt
@@ -5,7 +5,6 @@
package kotlinx.serialization.protobuf
import kotlinx.serialization.*
-import kotlinx.serialization.test.isJsLegacy
import kotlin.test.*
class ProtobufNullAndDefaultTest {
@@ -22,7 +21,6 @@ class ProtobufNullAndDefaultTest {
fun testProtobufDropDefaults() {
val proto = ProtoBuf { encodeDefaults = false }
assertEquals(0, proto.encodeToByteArray(ProtoWithNullDefault()).size)
- if (isJsLegacy()) return // because of @EncodeDefault
assertFailsWith<SerializationException> { proto.encodeToByteArray(ProtoWithNullDefaultAlways()) }
assertEquals(0, proto.encodeToByteArray(ProtoWithNullDefaultNever()).size)
}
@@ -31,7 +29,6 @@ class ProtobufNullAndDefaultTest {
fun testProtobufEncodeDefaults() {
val proto = ProtoBuf { encodeDefaults = true }
assertFailsWith<SerializationException> { proto.encodeToByteArray(ProtoWithNullDefault()) }
- if (isJsLegacy()) return // because of @EncodeDefault
assertFailsWith<SerializationException> { proto.encodeToByteArray(ProtoWithNullDefaultAlways()) }
assertEquals(0, proto.encodeToByteArray(ProtoWithNullDefaultNever()).size)
}
diff --git a/formats/protobuf/commonTest/src/kotlinx/serialization/protobuf/schema/SchemaValidationsTest.kt b/formats/protobuf/commonTest/src/kotlinx/serialization/protobuf/schema/SchemaValidationsTest.kt
index b7332312..03302502 100644
--- a/formats/protobuf/commonTest/src/kotlinx/serialization/protobuf/schema/SchemaValidationsTest.kt
+++ b/formats/protobuf/commonTest/src/kotlinx/serialization/protobuf/schema/SchemaValidationsTest.kt
@@ -3,7 +3,6 @@ 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 {
@@ -39,6 +38,33 @@ class SchemaValidationsTest {
SECOND
}
+ @Serializable
+ enum class EnumWithExplicitProtoNumberDuplicate {
+ @ProtoNumber(2)
+ FIRST,
+ @ProtoNumber(2)
+ SECOND,
+ }
+
+ @Serializable
+ enum class EnumWithImplicitProtoNumberDuplicate {
+ FIRST,
+ @ProtoNumber(0)
+ SECOND,
+ }
+
+ @Test
+ fun testExplicitDuplicateEnumElementProtoNumber() {
+ val descriptors = listOf(EnumWithExplicitProtoNumberDuplicate.serializer().descriptor)
+ assertFailsWith(IllegalArgumentException::class) { ProtoBufSchemaGenerator.generateSchemaText(descriptors) }
+ }
+
+ @Test
+ fun testImplicitDuplicateEnumElementProtoNumber() {
+ val descriptors = listOf(EnumWithImplicitProtoNumberDuplicate.serializer().descriptor)
+ assertFailsWith(IllegalArgumentException::class) { ProtoBufSchemaGenerator.generateSchemaText(descriptors) }
+ }
+
@Test
fun testInvalidEnumElementSerialName() {
val descriptors = listOf(InvalidEnumElementName.serializer().descriptor)