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 KTestMessagesProto3Enum( 14 @ProtoNumber(21) val optionalNestedEnum: KNestedEnum = KNestedEnum.FOO, 15 @ProtoNumber(22) val optionalForeignEnum: KForeignEnum = KForeignEnum.FOREIGN_FOO, 16 @ProtoNumber(23) val optionalAliasedEnum: KAliasedEnum = KAliasedEnum.ALIAS_FOO, 17 ) { 18 enum class KNestedEnum { 19 @ProtoNumber(0) 20 FOO, 21 22 @ProtoNumber(1) 23 BAR, 24 25 @ProtoNumber(2) 26 BAZ, 27 28 @ProtoNumber(-1) 29 NEG; 30 toProtonull31 fun toProto() = TestMessagesProto3.TestAllTypesProto3.NestedEnum.valueOf(this.name) 32 } 33 34 35 enum class KAliasedEnum { 36 @ProtoNumber(0) 37 ALIAS_FOO, 38 39 @ProtoNumber(1) 40 ALIAS_BAR, 41 42 @ProtoNumber(2) 43 ALIAS_BAZ, 44 45 @ProtoNumber(2) 46 MOO, 47 48 @ProtoNumber(2) 49 moo, 50 51 @ProtoNumber(2) 52 bAz; 53 54 fun toProto() = TestMessagesProto3.TestAllTypesProto3.AliasedEnum.valueOf(this.name) 55 } 56 } 57 58 enum class KForeignEnum { 59 @ProtoNumber(0) 60 FOREIGN_FOO, 61 62 @ProtoNumber(1) 63 FOREIGN_BAR, 64 65 @ProtoNumber(2) 66 FOREIGN_BAZ; 67 toProtonull68 fun toProto() = TestMessagesProto3.ForeignEnum.valueOf(this.name) 69 } 70 71 class Proto3EnumTest { 72 @Test 73 fun default() { 74 val message = KTestMessagesProto3Enum( 75 optionalNestedEnum = KTestMessagesProto3Enum.KNestedEnum.NEG, 76 optionalForeignEnum = KForeignEnum.FOREIGN_BAR, 77 optionalAliasedEnum = KTestMessagesProto3Enum.KAliasedEnum.ALIAS_BAR 78 ) 79 80 val bytes = ProtoBuf.encodeToByteArray(message) 81 val restored = TestMessagesProto3.TestAllTypesProto3.parseFrom(bytes) 82 83 assertEquals(message.optionalNestedEnum.toProto(), restored.optionalNestedEnum) 84 assertEquals(message.optionalForeignEnum.toProto(), restored.optionalForeignEnum) 85 assertEquals(message.optionalAliasedEnum.toProto(), restored.optionalAliasedEnum) 86 87 val restoredMessage = ProtoBuf.decodeFromByteArray<KTestMessagesProto3Enum>(restored.toByteArray()) 88 assertEquals(message, restoredMessage) 89 } 90 } 91