summaryrefslogtreecommitdiff
path: root/formats/protobuf/jvmTest/src/kotlinx/serialization/protobuf/conformance/Proto3PackedTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'formats/protobuf/jvmTest/src/kotlinx/serialization/protobuf/conformance/Proto3PackedTest.kt')
-rw-r--r--formats/protobuf/jvmTest/src/kotlinx/serialization/protobuf/conformance/Proto3PackedTest.kt99
1 files changed, 99 insertions, 0 deletions
diff --git a/formats/protobuf/jvmTest/src/kotlinx/serialization/protobuf/conformance/Proto3PackedTest.kt b/formats/protobuf/jvmTest/src/kotlinx/serialization/protobuf/conformance/Proto3PackedTest.kt
new file mode 100644
index 00000000..e0da0bb8
--- /dev/null
+++ b/formats/protobuf/jvmTest/src/kotlinx/serialization/protobuf/conformance/Proto3PackedTest.kt
@@ -0,0 +1,99 @@
+/*
+ * Copyright 2017-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+package kotlinx.serialization.protobuf.conformance
+
+import com.google.protobuf_test_messages.proto3.*
+import io.kotlintest.properties.*
+import kotlinx.serialization.*
+import kotlinx.serialization.protobuf.*
+import kotlin.test.*
+
+@Serializable
+data class KTestMessagesProto3Packed(
+ @ProtoNumber(75) @ProtoPacked val packedInt32: List<Int> = emptyList(),
+ @ProtoNumber(76) @ProtoPacked val packedInt64: List<Long> = emptyList(),
+ @ProtoNumber(77) @ProtoPacked val packedUint32: List<UInt> = emptyList(),
+ @ProtoNumber(78) @ProtoPacked val packedUint64: List<ULong> = emptyList(),
+ @ProtoNumber(79) @ProtoPacked val packedSint32: List<Int> = emptyList(),
+ @ProtoNumber(80) @ProtoPacked val packedSint64: List<Long> = emptyList(),
+ @ProtoNumber(81) @ProtoPacked val packedFixed32: List<Int> = emptyList(),
+ @ProtoNumber(82) @ProtoPacked val packedFixed64: List<Long> = emptyList(),
+ @ProtoNumber(83) @ProtoPacked val packedSfixed32: List<Int> = emptyList(),
+ @ProtoNumber(84) @ProtoPacked val packedSfixed64: List<Long> = emptyList(),
+ @ProtoNumber(85) @ProtoPacked val packedFloat: List<Float> = emptyList(),
+ @ProtoNumber(86) @ProtoPacked val packedDouble: List<Double> = emptyList(),
+ @ProtoNumber(87) @ProtoPacked val packedBool: List<Boolean> = emptyList(),
+)
+
+class Proto3PackedTest {
+ @Test
+ fun default() {
+ val message = KTestMessagesProto3Packed(
+ packedInt32 = Gen.list(Gen.int()).generate(),
+ packedInt64 = Gen.list(Gen.long()).generate(),
+ packedFloat = Gen.list(Gen.float()).generate(),
+ packedDouble = Gen.list(Gen.double()).generate(),
+ packedBool = Gen.list(Gen.bool()).generate(),
+ )
+
+ val bytes = ProtoBuf.encodeToByteArray(message)
+ val restored = TestMessagesProto3.TestAllTypesProto3.parseFrom(bytes)
+
+ assertEquals(message.packedInt32, restored.packedInt32List)
+ assertEquals(message.packedInt64, restored.packedInt64List)
+ assertEquals(message.packedFloat, restored.packedFloatList)
+ assertEquals(message.packedDouble, restored.packedDoubleList)
+ assertEquals(message.packedBool, restored.packedBoolList)
+
+ val restoredMessage = ProtoBuf.decodeFromByteArray<KTestMessagesProto3Packed>(restored.toByteArray())
+ assertEquals(message, restoredMessage)
+ }
+
+ @Test
+ @Ignore
+ // Issue: https://github.com/Kotlin/kotlinx.serialization/issues/2419
+ fun signedAndFixed() {
+ val message = KTestMessagesProto3Packed(
+ packedSint32 = Gen.list(Gen.int()).generate(),
+ packedSint64 = Gen.list(Gen.long()).generate(),
+ packedFixed32 = Gen.list(Gen.int()).generate(),
+ packedFixed64 = Gen.list(Gen.long()).generate(),
+ packedSfixed32 = Gen.list(Gen.int()).generate(),
+ packedSfixed64 = Gen.list(Gen.long()).generate(),
+ )
+
+ val bytes = ProtoBuf.encodeToByteArray(message)
+ val restored = TestMessagesProto3.TestAllTypesProto3.parseFrom(bytes)
+
+ assertEquals(message.packedSint32, restored.packedSint32List)
+ assertEquals(message.packedSint64, restored.packedSint64List)
+ assertEquals(message.packedFixed32, restored.packedFixed32List)
+ assertEquals(message.packedFixed64, restored.packedFixed64List)
+ assertEquals(message.packedSfixed32, restored.packedSfixed32List)
+ assertEquals(message.packedSfixed64, restored.packedSfixed64List)
+
+ val restoredMessage = ProtoBuf.decodeFromByteArray<KTestMessagesProto3Packed>(restored.toByteArray())
+ assertEquals(message, restoredMessage)
+ }
+
+ @Test
+ @Ignore
+ // Issue: https://github.com/Kotlin/kotlinx.serialization/issues/2418
+ fun unsigned() {
+ val message = KTestMessagesProto3Packed(
+ packedUint32 = Gen.list(Gen.int().map { it.toUInt() }).generate(),
+ packedUint64 = Gen.list(Gen.long().map { it.toULong() }).generate(),
+ )
+
+ val bytes = ProtoBuf.encodeToByteArray(message)
+ val restored = TestMessagesProto3.TestAllTypesProto3.parseFrom(bytes)
+
+ assertEquals(message.packedUint32, restored.packedUint32List.map { it.toUInt() })
+ assertEquals(message.packedUint64, restored.packedUint64List.map { it.toULong() })
+
+ val restoredMessage = ProtoBuf.decodeFromByteArray<KTestMessagesProto3Packed>(restored.toByteArray())
+ assertEquals(message, restoredMessage)
+ }
+}