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 KTestMessagesProto3Message( 14 @ProtoNumber(18) val optionalNestedMessage: KNestedMessage? = null, 15 @ProtoNumber(19) val optionalForeignMessage: KForeignMessage? = null, 16 ) { 17 @Serializable 18 data class KNestedMessage( 19 @ProtoNumber(1) val a: Int = 0, 20 @ProtoNumber(2) val corecursive: KTestMessagesProto3Message? = null, 21 ) { toProtonull22 fun toProto(): TestMessagesProto3.TestAllTypesProto3.NestedMessage = 23 TestMessagesProto3.TestAllTypesProto3.NestedMessage.parseFrom( 24 ProtoBuf.encodeToByteArray(this) 25 ) 26 } 27 } 28 29 @Serializable 30 data class KForeignMessage( 31 @ProtoNumber(1) val c: Int = 0, 32 ) { 33 fun toProto(): TestMessagesProto3.ForeignMessage = 34 TestMessagesProto3.ForeignMessage.parseFrom( 35 ProtoBuf.encodeToByteArray(this) 36 ) 37 } 38 39 class Proto3MessageTest { 40 @Test defaultnull41 fun default() { 42 val message = KTestMessagesProto3Message( 43 optionalNestedMessage = KTestMessagesProto3Message.KNestedMessage( 44 a = 150, 45 corecursive = KTestMessagesProto3Message( 46 optionalNestedMessage = KTestMessagesProto3Message.KNestedMessage( 47 a = 42, 48 ) 49 ) 50 ), 51 optionalForeignMessage = KForeignMessage( 52 c = 150, 53 ) 54 ) 55 56 val bytes = ProtoBuf.encodeToByteArray(message) 57 val restored = TestMessagesProto3.TestAllTypesProto3.parseFrom(bytes) 58 assertEquals(message.optionalNestedMessage?.a, restored.optionalNestedMessage.a) 59 assertEquals( 60 message.optionalNestedMessage?.corecursive?.optionalNestedMessage?.a, 61 restored.optionalNestedMessage.corecursive.optionalNestedMessage.a 62 ) 63 assertEquals(message.optionalForeignMessage?.c, restored.optionalForeignMessage.c) 64 } 65 } 66