summaryrefslogtreecommitdiff
path: root/runtime/commonTest/src/kotlinx/serialization/json/JsonUpdateModeTest.kt
diff options
context:
space:
mode:
Diffstat (limited to 'runtime/commonTest/src/kotlinx/serialization/json/JsonUpdateModeTest.kt')
-rw-r--r--runtime/commonTest/src/kotlinx/serialization/json/JsonUpdateModeTest.kt75
1 files changed, 75 insertions, 0 deletions
diff --git a/runtime/commonTest/src/kotlinx/serialization/json/JsonUpdateModeTest.kt b/runtime/commonTest/src/kotlinx/serialization/json/JsonUpdateModeTest.kt
new file mode 100644
index 00000000..01e64abf
--- /dev/null
+++ b/runtime/commonTest/src/kotlinx/serialization/json/JsonUpdateModeTest.kt
@@ -0,0 +1,75 @@
+/*
+ * Copyright 2017-2019 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
+ */
+
+package kotlinx.serialization.json
+
+import kotlinx.serialization.*
+import kotlin.test.*
+
+@Ignore // Update is going to be reworked
+class JsonUpdateModeTest : JsonTestBase() {
+ @Serializable
+ data class Updatable1(val l: List<Int>)
+
+ @Serializable
+ data class Data(val a: Int)
+
+ @Serializable
+ data class Updatable2(val l: List<Data>)
+
+ @Serializable
+ data class NotUpdatable(val d: Data)
+
+ @Serializable
+ data class NullableInnerIntList(val data: List<Int?>)
+
+ @Serializable
+ data class NullableUpdatable(val data: List<Data>?)
+
+ @Test
+ fun testCanUpdatePrimitiveList() = parametrizedTest { useStreaming ->
+ val parsed =
+ Json { unquoted = true; strictMode = false }
+ .parse<Updatable1>(Updatable1.serializer(), """{l:[1,2],f:foo,l:[3,4]}""", useStreaming)
+ assertEquals(Updatable1(listOf(1,2,3,4)), parsed)
+ }
+
+ @Test
+ fun testCanUpdateObjectList() = parametrizedTest { useStreaming ->
+ val parsed =
+ Json { unquoted = true; strictMode = false}
+ .parse<Updatable2>(Updatable2.serializer(), """{f:bar,l:[{a:42}],l:[{a:43}]}""", useStreaming)
+ assertEquals(Updatable2(listOf(Data(42), Data(43))), parsed)
+ }
+
+ @Test
+ fun testCantUpdateNotUpdatable() = parametrizedTest { useStreaming ->
+ assertFailsWith<UpdateNotSupportedException> {
+ Json { unquoted = true; strictMode = false }
+ .parse<NotUpdatable>(NotUpdatable.serializer(), """{d:{a:42},d:{a:43}}""", useStreaming)
+ }
+ }
+
+ @Test
+ fun testCanUpdateNullableValuesInside() = parametrizedTest { useStreaming ->
+ val json = Json(JsonConfiguration.Default)
+ val a1 = json.parse(NullableInnerIntList.serializer(), """{data:[null],data:[1]}""", useStreaming)
+ assertEquals(NullableInnerIntList(listOf(null, 1)), a1)
+ val a2 = json.parse(NullableInnerIntList.serializer(), """{data:[42],data:[null]}""", useStreaming)
+ assertEquals(NullableInnerIntList(listOf(42, null)), a2)
+ val a3 = json.parse(NullableInnerIntList.serializer(), """{data:[31],data:[1]}""", useStreaming)
+ assertEquals(NullableInnerIntList(listOf(31, 1)), a3)
+ }
+
+ @Test
+ fun testCanUpdateNullableValues() = parametrizedTest { useStreaming ->
+ val json = Json(JsonConfiguration.Default)
+ val a1 = json.parse(NullableUpdatable.serializer(), """{data:null,data:[{a:42}]}""", useStreaming)
+ assertEquals(NullableUpdatable(listOf(Data(42))), a1)
+ val a2 = json.parse(NullableUpdatable.serializer(), """{data:[{a:42}],data:null}""", useStreaming)
+ assertEquals(NullableUpdatable(listOf(Data(42))), a2)
+ val a3 = json.parse(NullableUpdatable.serializer(), """{data:[{a:42}],data:[{a:43}]}""", useStreaming)
+ assertEquals(NullableUpdatable(listOf(Data(42), Data(43))), a3)
+ }
+}