summaryrefslogtreecommitdiff
path: root/formats/json-tests/commonTest/src/kotlinx/serialization/UnknownElementIndexTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'formats/json-tests/commonTest/src/kotlinx/serialization/UnknownElementIndexTest.kt')
-rw-r--r--formats/json-tests/commonTest/src/kotlinx/serialization/UnknownElementIndexTest.kt39
1 files changed, 39 insertions, 0 deletions
diff --git a/formats/json-tests/commonTest/src/kotlinx/serialization/UnknownElementIndexTest.kt b/formats/json-tests/commonTest/src/kotlinx/serialization/UnknownElementIndexTest.kt
new file mode 100644
index 00000000..3fb4bc04
--- /dev/null
+++ b/formats/json-tests/commonTest/src/kotlinx/serialization/UnknownElementIndexTest.kt
@@ -0,0 +1,39 @@
+package kotlinx.serialization
+
+import kotlinx.serialization.descriptors.*
+import kotlinx.serialization.encoding.CompositeDecoder.Companion.UNKNOWN_NAME
+import kotlinx.serialization.encoding.*
+import kotlinx.serialization.json.Json
+import kotlinx.serialization.modules.*
+import kotlin.test.Test
+import kotlin.test.assertFailsWith
+
+class UnknownElementIndexTest {
+ enum class Choices { A, B, C }
+
+ @Serializable
+ data class Holder(val c: Choices)
+
+ class MalformedReader : AbstractDecoder() {
+ override val serializersModule: SerializersModule = EmptySerializersModule()
+
+ override fun decodeElementIndex(descriptor: SerialDescriptor): Int {
+ return UNKNOWN_NAME
+ }
+ }
+
+ @Test
+ fun testCompilerComplainsAboutIncorrectIndex() {
+ assertFailsWith(SerializationException::class) {
+ MalformedReader().decodeSerializableValue(Holder.serializer())
+ }
+ }
+
+ @Test
+ fun testErrorMessage() {
+ val message = "kotlinx.serialization.UnknownElementIndexTest.Choices does not contain element with name 'D'"
+ assertFailsWith(SerializationException::class, message) {
+ Json.decodeFromString(Holder.serializer(), """{"c":"D"}""")
+ }
+ }
+}