summaryrefslogtreecommitdiff
path: root/formats/json-tests
diff options
context:
space:
mode:
authorVsevolod Tolstopyatov <qwwdfsad@gmail.com>2023-02-28 17:47:11 +0300
committerGitHub <noreply@github.com>2023-02-28 17:47:11 +0300
commitcbd8ce3dc35c86805b94503ff7b1cfd7f0d3df7f (patch)
tree09e03ca0bf9c886a5e1a5bbf9649455bf8db5de2 /formats/json-tests
parent2ca14df211312a06a22457c0c38a0439d76b350b (diff)
downloadkotlinx.serialization-cbd8ce3dc35c86805b94503ff7b1cfd7f0d3df7f.tar.gz
Fix MissingFieldException duplication (#2213)
Fixes #2212
Diffstat (limited to 'formats/json-tests')
-rw-r--r--formats/json-tests/jvmTest/src/kotlinx/serialization/json/MissingFieldExceptionWithPathTest.kt40
1 files changed, 40 insertions, 0 deletions
diff --git a/formats/json-tests/jvmTest/src/kotlinx/serialization/json/MissingFieldExceptionWithPathTest.kt b/formats/json-tests/jvmTest/src/kotlinx/serialization/json/MissingFieldExceptionWithPathTest.kt
new file mode 100644
index 00000000..e56f173e
--- /dev/null
+++ b/formats/json-tests/jvmTest/src/kotlinx/serialization/json/MissingFieldExceptionWithPathTest.kt
@@ -0,0 +1,40 @@
+package kotlinx.serialization.json
+
+import kotlinx.serialization.*
+import kotlinx.serialization.json.Json.Default.decodeFromString
+import org.junit.*
+import org.junit.Test
+import java.io.ByteArrayInputStream
+import java.io.ByteArrayOutputStream
+import java.io.PrintWriter
+import java.io.StringWriter
+import kotlin.test.*
+
+class MissingFieldExceptionWithPathTest {
+
+ @Test // Repro for #2212
+ fun testMfeIsNotReappliedMultipleTimes() {
+ val inputMalformed = """{"title": "...","cast": [{}]"""
+ try {
+ Json.decodeFromString<Movie>(inputMalformed)
+ fail("Unreacheable state")
+ } catch (e: MissingFieldException) {
+ val fullStackTrace = e.stackTraceToString()
+ val i1 = fullStackTrace.toString().indexOf("at path")
+ val i2 = fullStackTrace.toString().lastIndexOf("at path")
+ assertEquals(i1, i2)
+ assertTrue(i1 != -1)
+ }
+ }
+
+ @Serializable
+ data class Movie(
+ val title: String,
+ val cast: List<Cast>,
+ )
+
+ @Serializable
+ data class Cast(
+ val name: String
+ )
+}