diff options
Diffstat (limited to 'runtime/commonTest/src/kotlinx/serialization/json/JsonUpdateModeTest.kt')
-rw-r--r-- | runtime/commonTest/src/kotlinx/serialization/json/JsonUpdateModeTest.kt | 75 |
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) + } +} |