1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
/*
* Copyright 2017-2020 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.*
class JsonOverwriteTest : 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 NullableInnerIntList(val data: List<Int?>)
@Serializable
data class NullableUpdatable(val data: List<Data>?)
@Test
fun testCanUpdatePrimitiveList() = parametrizedTest { jsonTestingMode ->
val parsed =
lenient.decodeFromString<Updatable1>(Updatable1.serializer(), """{"l":[1,2],"f":"foo","l":[3,4]}""", jsonTestingMode)
assertEquals(Updatable1(listOf(3, 4)), parsed)
}
@Test
fun testCanUpdateObjectList() = parametrizedTest { jsonTestingMode ->
val parsed = lenient.decodeFromString<Updatable2>(
Updatable2.serializer(),
"""{"f":"bar","l":[{"a":42}],"l":[{"a":43}]}""",
jsonTestingMode
)
assertEquals(Updatable2(listOf(Data(43))), parsed)
}
@Test
fun testCanUpdateNullableValuesInside() = parametrizedTest { jsonTestingMode ->
val a1 = default.decodeFromString(NullableInnerIntList.serializer(), """{"data":[null],"data":[1]}""", jsonTestingMode)
assertEquals(NullableInnerIntList(listOf(1)), a1)
val a2 = default.decodeFromString(NullableInnerIntList.serializer(), """{"data":[42],"data":[null]}""", jsonTestingMode)
assertEquals(NullableInnerIntList(listOf(null)), a2)
val a3 = default.decodeFromString(NullableInnerIntList.serializer(), """{"data":[31],"data":[1]}""", jsonTestingMode)
assertEquals(NullableInnerIntList(listOf(1)), a3)
}
@Test
fun testCanUpdateNullableValues() = parametrizedTest { jsonTestingMode ->
val a1 = lenient.decodeFromString(NullableUpdatable.serializer(), """{"data":null,"data":[{"a":42}]}""", jsonTestingMode)
assertEquals(NullableUpdatable(listOf(Data(42))), a1)
val a2 = lenient.decodeFromString(NullableUpdatable.serializer(), """{"data":[{a:42}],"data":null}""", jsonTestingMode)
assertEquals(NullableUpdatable(null), a2)
val a3 = lenient.decodeFromString(NullableUpdatable.serializer(), """{"data":[{a:42}],"data":[{"a":43}]}""", jsonTestingMode)
assertEquals(NullableUpdatable(listOf(Data(43))), a3)
}
}
|