• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * 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.features
6 
7 import kotlinx.serialization.*
8 import kotlinx.serialization.EncodeDefault.Mode.*
9 import kotlinx.serialization.json.*
10 import kotlin.test.*
11 
12 class SkipDefaultsTest {
<lambda>null13     private val jsonDropDefaults = Json { encodeDefaults = false }
<lambda>null14     private val jsonEncodeDefaults = Json { encodeDefaults = true }
15 
16     @Serializable
17     data class Data(val bar: String, val foo: Int = 42) {
18         var list: List<Int> = emptyList()
19         val listWithSomething: List<Int> = listOf(1, 2, 3)
20     }
21 
22     @Serializable
23     data class DifferentModes(
24         val a: String = "a",
25         @EncodeDefault val b: String = "b",
26         @EncodeDefault(ALWAYS) val c: String = "c",
27         @EncodeDefault(NEVER) val d: String = "d"
28     )
29 
30     @Test
serializeCorrectlyDefaultsnull31     fun serializeCorrectlyDefaults() {
32         val d = Data("bar")
33         assertEquals(
34             """{"bar":"bar","foo":42,"list":[],"listWithSomething":[1,2,3]}""",
35             jsonEncodeDefaults.encodeToString(Data.serializer(), d)
36         )
37     }
38 
39     @Test
serializeCorrectlynull40     fun serializeCorrectly() {
41         val d = Data("bar", 100).apply { list = listOf(1, 2, 3) }
42         assertEquals(
43             """{"bar":"bar","foo":100,"list":[1,2,3]}""",
44             jsonDropDefaults.encodeToString(Data.serializer(), d)
45         )
46     }
47 
48     @Test
serializeCorrectlyAndDropBodynull49     fun serializeCorrectlyAndDropBody() {
50         val d = Data("bar", 43)
51         assertEquals("""{"bar":"bar","foo":43}""", jsonDropDefaults.encodeToString(Data.serializer(), d))
52     }
53 
54     @Test
serializeCorrectlyAndDropAllnull55     fun serializeCorrectlyAndDropAll() {
56         val d = Data("bar")
57         assertEquals("""{"bar":"bar"}""", jsonDropDefaults.encodeToString(Data.serializer(), d))
58     }
59 
60     @Test
encodeDefaultsAnnotationWithFlagnull61     fun encodeDefaultsAnnotationWithFlag() {
62         val data = DifferentModes()
63         assertEquals("""{"a":"a","b":"b","c":"c"}""", jsonEncodeDefaults.encodeToString(data))
64         assertEquals("""{"b":"b","c":"c"}""", jsonDropDefaults.encodeToString(data))
65     }
66 
67 }
68