summaryrefslogtreecommitdiff
path: root/formats/protobuf/jvmTest/src/kotlinx/serialization/protobuf/conformance/Proto3PrimitiveTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'formats/protobuf/jvmTest/src/kotlinx/serialization/protobuf/conformance/Proto3PrimitiveTest.kt')
-rw-r--r--formats/protobuf/jvmTest/src/kotlinx/serialization/protobuf/conformance/Proto3PrimitiveTest.kt77
1 files changed, 77 insertions, 0 deletions
diff --git a/formats/protobuf/jvmTest/src/kotlinx/serialization/protobuf/conformance/Proto3PrimitiveTest.kt b/formats/protobuf/jvmTest/src/kotlinx/serialization/protobuf/conformance/Proto3PrimitiveTest.kt
new file mode 100644
index 00000000..a7363f8f
--- /dev/null
+++ b/formats/protobuf/jvmTest/src/kotlinx/serialization/protobuf/conformance/Proto3PrimitiveTest.kt
@@ -0,0 +1,77 @@
+/*
+ * 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 kotlinx.serialization.*
+import kotlinx.serialization.protobuf.*
+import kotlin.test.*
+
+@Serializable
+data class KTestMessagesProto3Primitive(
+ @ProtoNumber(1) val optionalInt32: Int = 0,
+ @ProtoNumber(2) val optionalInt64: Long = 0,
+ @ProtoNumber(3) val optionalUint32: UInt = 0U,
+ @ProtoNumber(4) val optionalUint64: ULong = 0UL,
+ @ProtoNumber(5) @ProtoType(ProtoIntegerType.SIGNED) val optionalSint32: Int = 0,
+ @ProtoNumber(6) @ProtoType(ProtoIntegerType.SIGNED) val optionalSint64: Long = 0,
+ @ProtoNumber(7) @ProtoType(ProtoIntegerType.FIXED) val optionalFixed32: Int = 0,
+ @ProtoNumber(8) @ProtoType(ProtoIntegerType.FIXED) val optionalFixed64: Long = 0,
+ @ProtoNumber(9) @ProtoType(ProtoIntegerType.FIXED) val optionalSfixed32: Int = 0,
+ @ProtoNumber(10) @ProtoType(ProtoIntegerType.FIXED) val optionalSfixed64: Long = 0,
+ @ProtoNumber(11) val optionalFloat: Float = 0.0f,
+ @ProtoNumber(12) val optionalDouble: Double = 0.0,
+ @ProtoNumber(13) val optionalBool: Boolean = false,
+ @ProtoNumber(14) val optionalString: String = "",
+ @ProtoNumber(15) val optionalBytes: ByteArray = byteArrayOf(),
+)
+
+class Proto3PrimitiveTest {
+ @Test
+ fun default() {
+ val message = KTestMessagesProto3Primitive(
+ optionalInt32 = Int.MAX_VALUE,
+ optionalInt64 = Long.MAX_VALUE,
+ optionalUint32 = UInt.MAX_VALUE,
+ optionalUint64 = ULong.MAX_VALUE,
+ optionalSint32 = Int.MAX_VALUE,
+ optionalSint64 = Long.MAX_VALUE,
+ optionalFixed32 = Int.MAX_VALUE,
+ optionalFixed64 = Long.MAX_VALUE,
+ optionalSfixed32 = Int.MAX_VALUE,
+ optionalSfixed64 = Long.MAX_VALUE,
+ optionalFloat = Float.MAX_VALUE,
+ optionalDouble = Double.MAX_VALUE,
+ optionalBool = true,
+ optionalString = "string",
+ optionalBytes = byteArrayOf(1, 2, 3, 4, 5)
+ )
+
+ val bytes = ProtoBuf.encodeToByteArray(message)
+ val restored = TestMessagesProto3.TestAllTypesProto3.parseFrom(bytes)
+
+ assertEquals(message.optionalInt32, restored.optionalInt32)
+ assertEquals(message.optionalInt64, restored.optionalInt64)
+ assertEquals(message.optionalUint32, restored.optionalUint32.toUInt())
+ assertEquals(message.optionalUint64, restored.optionalUint64.toULong())
+ assertEquals(message.optionalSint32, restored.optionalSint32)
+ assertEquals(message.optionalSint64, restored.optionalSint64)
+ assertEquals(message.optionalFixed32, restored.optionalFixed32)
+ assertEquals(message.optionalFixed64, restored.optionalFixed64)
+ assertEquals(message.optionalSfixed32, restored.optionalSfixed32)
+ assertEquals(message.optionalSfixed64, restored.optionalSfixed64)
+ assertEquals(message.optionalFloat, restored.optionalFloat)
+ assertEquals(message.optionalDouble, restored.optionalDouble)
+ assertEquals(message.optionalBool, restored.optionalBool)
+ assertEquals(message.optionalString, restored.optionalString)
+ assertContentEquals(message.optionalBytes, restored.optionalBytes.toByteArray())
+
+ val restoredMessage = ProtoBuf.decodeFromByteArray<KTestMessagesProto3Primitive>(restored.toByteArray())
+
+ // [equals] method is not implemented for [ByteArray] so we need to compare it separately.
+ assertEquals(message, restoredMessage.copy(optionalBytes = message.optionalBytes))
+ assertContentEquals(message.optionalBytes, restoredMessage.optionalBytes)
+ }
+}