summaryrefslogtreecommitdiff
path: root/formats/json/commonTest/src/kotlinx/serialization/json/JsonUpdateModeTest.kt
blob: eccef39d8fbe49be59e1c3e058e27349ec3bb323 (plain)
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)
    }
}