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