summaryrefslogtreecommitdiff
path: root/runtime/commonTest/src/kotlinx/serialization/features/SkipDefaults.kt
blob: 856250244e5e60e3115880620f7259d9c24a24d1 (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
63
64
/*
 * Copyright 2018 JetBrains s.r.o.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package kotlinx.serialization.features

import kotlinx.serialization.*
import kotlinx.serialization.cbor.*
import kotlinx.serialization.json.*
import kotlin.test.*

@Serializable
data class Data(val bar: String, val foo: Int = 42) {
    var list: List<Int> = emptyList()

    val listWithSomething: List<Int> = listOf(1, 2, 3)
}

class SkipDefaultsTest {
    private val json = Json { encodeDefaults = false }
    private val cbor = Cbor(encodeDefaults = false)

    @Test
    fun serializeCorrectlyDefaults() {
        val d = Data("bar")
        assertEquals("""{"bar":"bar","foo":42,"list":[],"listWithSomething":[1,2,3]}""", Json.stringify(Data.serializer(), d))
    }

    @Test
    fun serializeCorrectly() {
        val d = Data("bar", 100).apply { list = listOf(1, 2, 3) }
        assertEquals("""{"bar":"bar","foo":100,"list":[1,2,3]}""", json.stringify(Data.serializer(), d))
    }

    @Test
    fun serializeCorrectlyAndDropBody() {
        val d = Data("bar", 43)
        assertEquals("""{"bar":"bar","foo":43}""", json.stringify(Data.serializer(), d))
    }

    @Test
    fun serializeCorrectlyAndDropAll() {
        val d = Data("bar")
        assertEquals("""{"bar":"bar"}""", json.stringify(Data.serializer(), d))
    }

    @Test
    fun cborDropsDefaults() {
        val d = Data("bar")
        assertEquals("bf6362617263626172ff", cbor.dumps(Data.serializer(), d))
    }
}