• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
<lambda>null2  * Copyright 2017-2020 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license.
3  */
4 
5 package kotlinx.serialization.json
6 
7 import kotlinx.serialization.*
8 import kotlin.test.*
9 
10 class JsonOverwriteTest : JsonTestBase() {
11     @Serializable
12     data class Updatable1(val l: List<Int>)
13 
14     @Serializable
15     data class Data(val a: Int)
16 
17     @Serializable
18     data class Updatable2(val l: List<Data>)
19 
20     @Serializable
21     data class NullableInnerIntList(val data: List<Int?>)
22 
23     @Serializable
24     data class NullableUpdatable(val data: List<Data>?)
25 
26     @Test
27     fun testCanUpdatePrimitiveList() = parametrizedTest { jsonTestingMode ->
28         val parsed =
29             lenient.decodeFromString<Updatable1>(Updatable1.serializer(), """{"l":[1,2],"f":"foo","l":[3,4]}""", jsonTestingMode)
30         assertEquals(Updatable1(listOf(3, 4)), parsed)
31     }
32 
33     @Test
34     fun testCanUpdateObjectList() = parametrizedTest { jsonTestingMode ->
35         val parsed = lenient.decodeFromString<Updatable2>(
36             Updatable2.serializer(),
37             """{"f":"bar","l":[{"a":42}],"l":[{"a":43}]}""",
38             jsonTestingMode
39         )
40         assertEquals(Updatable2(listOf(Data(43))), parsed)
41     }
42 
43     @Test
44     fun testCanUpdateNullableValuesInside() = parametrizedTest { jsonTestingMode ->
45         val a1 = default.decodeFromString(NullableInnerIntList.serializer(), """{"data":[null],"data":[1]}""", jsonTestingMode)
46         assertEquals(NullableInnerIntList(listOf(1)), a1)
47         val a2 = default.decodeFromString(NullableInnerIntList.serializer(), """{"data":[42],"data":[null]}""", jsonTestingMode)
48         assertEquals(NullableInnerIntList(listOf(null)), a2)
49         val a3 = default.decodeFromString(NullableInnerIntList.serializer(), """{"data":[31],"data":[1]}""", jsonTestingMode)
50         assertEquals(NullableInnerIntList(listOf(1)), a3)
51     }
52 
53     @Test
54     fun testCanUpdateNullableValues() = parametrizedTest { jsonTestingMode ->
55         val a1 = lenient.decodeFromString(NullableUpdatable.serializer(), """{"data":null,"data":[{"a":42}]}""", jsonTestingMode)
56         assertEquals(NullableUpdatable(listOf(Data(42))), a1)
57         val a2 = lenient.decodeFromString(NullableUpdatable.serializer(), """{"data":[{a:42}],"data":null}""", jsonTestingMode)
58         assertEquals(NullableUpdatable(null), a2)
59         val a3 = lenient.decodeFromString(NullableUpdatable.serializer(), """{"data":[{a:42}],"data":[{"a":43}]}""", jsonTestingMode)
60         assertEquals(NullableUpdatable(listOf(Data(43))), a3)
61     }
62 }
63