diff options
Diffstat (limited to 'formats/protobuf/commonTest/src/kotlinx/serialization/protobuf')
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) |