1 package kotlinx.serialization 2 3 import kotlinx.serialization.descriptors.* 4 import kotlinx.serialization.encoding.CompositeDecoder.Companion.UNKNOWN_NAME 5 import kotlinx.serialization.encoding.* 6 import kotlinx.serialization.json.Json 7 import kotlinx.serialization.modules.* 8 import kotlin.test.Test 9 import kotlin.test.assertFailsWith 10 11 class UnknownElementIndexTest { 12 enum class Choices { A, B, C } 13 14 @Serializable 15 data class Holder(val c: Choices) 16 17 class MalformedReader : AbstractDecoder() { 18 override val serializersModule: SerializersModule = EmptySerializersModule() 19 decodeElementIndexnull20 override fun decodeElementIndex(descriptor: SerialDescriptor): Int { 21 return UNKNOWN_NAME 22 } 23 } 24 25 @Test testCompilerComplainsAboutIncorrectIndexnull26 fun testCompilerComplainsAboutIncorrectIndex() { 27 assertFailsWith(SerializationException::class) { 28 MalformedReader().decodeSerializableValue(Holder.serializer()) 29 } 30 } 31 32 @Test testErrorMessagenull33 fun testErrorMessage() { 34 val message = "kotlinx.serialization.UnknownElementIndexTest.Choices does not contain element with name 'D'" 35 assertFailsWith(SerializationException::class, message) { 36 Json.decodeFromString(Holder.serializer(), """{"c":"D"}""") 37 } 38 } 39 } 40