1 /* 2 * Copyright 2017-2023 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. 3 */ 4 5 package kotlinx.serialization.protobuf.conformance 6 7 import com.google.protobuf_test_messages.proto3.* 8 import kotlinx.serialization.* 9 import kotlinx.serialization.protobuf.* 10 import kotlin.test.* 11 12 @Serializable 13 data class KTestMessagesProto3Primitive( 14 @ProtoNumber(1) val optionalInt32: Int = 0, 15 @ProtoNumber(2) val optionalInt64: Long = 0, 16 @ProtoNumber(3) val optionalUint32: UInt = 0U, 17 @ProtoNumber(4) val optionalUint64: ULong = 0UL, 18 @ProtoNumber(5) @ProtoType(ProtoIntegerType.SIGNED) val optionalSint32: Int = 0, 19 @ProtoNumber(6) @ProtoType(ProtoIntegerType.SIGNED) val optionalSint64: Long = 0, 20 @ProtoNumber(7) @ProtoType(ProtoIntegerType.FIXED) val optionalFixed32: Int = 0, 21 @ProtoNumber(8) @ProtoType(ProtoIntegerType.FIXED) val optionalFixed64: Long = 0, 22 @ProtoNumber(9) @ProtoType(ProtoIntegerType.FIXED) val optionalSfixed32: Int = 0, 23 @ProtoNumber(10) @ProtoType(ProtoIntegerType.FIXED) val optionalSfixed64: Long = 0, 24 @ProtoNumber(11) val optionalFloat: Float = 0.0f, 25 @ProtoNumber(12) val optionalDouble: Double = 0.0, 26 @ProtoNumber(13) val optionalBool: Boolean = false, 27 @ProtoNumber(14) val optionalString: String = "", 28 @ProtoNumber(15) val optionalBytes: ByteArray = byteArrayOf(), 29 ) 30 31 class Proto3PrimitiveTest { 32 @Test defaultnull33 fun default() { 34 val message = KTestMessagesProto3Primitive( 35 optionalInt32 = Int.MAX_VALUE, 36 optionalInt64 = Long.MAX_VALUE, 37 optionalUint32 = UInt.MAX_VALUE, 38 optionalUint64 = ULong.MAX_VALUE, 39 optionalSint32 = Int.MAX_VALUE, 40 optionalSint64 = Long.MAX_VALUE, 41 optionalFixed32 = Int.MAX_VALUE, 42 optionalFixed64 = Long.MAX_VALUE, 43 optionalSfixed32 = Int.MAX_VALUE, 44 optionalSfixed64 = Long.MAX_VALUE, 45 optionalFloat = Float.MAX_VALUE, 46 optionalDouble = Double.MAX_VALUE, 47 optionalBool = true, 48 optionalString = "string", 49 optionalBytes = byteArrayOf(1, 2, 3, 4, 5) 50 ) 51 52 val bytes = ProtoBuf.encodeToByteArray(message) 53 val restored = TestMessagesProto3.TestAllTypesProto3.parseFrom(bytes) 54 55 assertEquals(message.optionalInt32, restored.optionalInt32) 56 assertEquals(message.optionalInt64, restored.optionalInt64) 57 assertEquals(message.optionalUint32, restored.optionalUint32.toUInt()) 58 assertEquals(message.optionalUint64, restored.optionalUint64.toULong()) 59 assertEquals(message.optionalSint32, restored.optionalSint32) 60 assertEquals(message.optionalSint64, restored.optionalSint64) 61 assertEquals(message.optionalFixed32, restored.optionalFixed32) 62 assertEquals(message.optionalFixed64, restored.optionalFixed64) 63 assertEquals(message.optionalSfixed32, restored.optionalSfixed32) 64 assertEquals(message.optionalSfixed64, restored.optionalSfixed64) 65 assertEquals(message.optionalFloat, restored.optionalFloat) 66 assertEquals(message.optionalDouble, restored.optionalDouble) 67 assertEquals(message.optionalBool, restored.optionalBool) 68 assertEquals(message.optionalString, restored.optionalString) 69 assertContentEquals(message.optionalBytes, restored.optionalBytes.toByteArray()) 70 71 val restoredMessage = ProtoBuf.decodeFromByteArray<KTestMessagesProto3Primitive>(restored.toByteArray()) 72 73 // [equals] method is not implemented for [ByteArray] so we need to compare it separately. 74 assertEquals(message, restoredMessage.copy(optionalBytes = message.optionalBytes)) 75 assertContentEquals(message.optionalBytes, restoredMessage.optionalBytes) 76 } 77 } 78