• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download

<lambda>null1 package kotlinx.serialization.features
2 
3 import kotlinx.serialization.*
4 import kotlinx.serialization.json.*
5 import kotlin.test.*
6 
7 class JsonNamingStrategyExclusionTest : JsonTestBase() {
8     @SerialInfo
9     @Target(AnnotationTarget.CLASS, AnnotationTarget.PROPERTY)
10     annotation class OriginalSerialName
11 
12     private fun List<Annotation>.hasOriginal() = filterIsInstance<OriginalSerialName>().isNotEmpty()
13 
14     private val myStrategy = JsonNamingStrategy { descriptor, index, serialName ->
15         if (descriptor.annotations.hasOriginal() || descriptor.getElementAnnotations(index).hasOriginal()) serialName
16         else JsonNamingStrategy.SnakeCase.serialNameForJson(descriptor, index, serialName)
17     }
18 
19     @Serializable
20     @OriginalSerialName
21     data class Foo(val firstArg: String = "a", val secondArg: String = "b")
22 
23     enum class E {
24         @OriginalSerialName
25         FIRST_E,
26         SECOND_E
27     }
28 
29     @Serializable
30     data class Bar(
31         val firstBar: String = "a",
32         @OriginalSerialName val secondBar: String = "b",
33         val fooBar: Foo = Foo(),
34         val enumBarOne: E = E.FIRST_E,
35         val enumBarTwo: E = E.SECOND_E
36     )
37 
38     private fun doTest(json: Json) {
39         val j = Json(json) {
40             namingStrategy = myStrategy
41         }
42         val bar = Bar()
43         assertJsonFormAndRestored(
44             Bar.serializer(),
45             bar,
46             """{"first_bar":"a","secondBar":"b","foo_bar":{"firstArg":"a","secondArg":"b"},"enum_bar_one":"FIRST_E","enum_bar_two":"SECOND_E"}""",
47             j
48         )
49     }
50 
51     @Test
52     fun testJsonNamingStrategyWithAlternativeNames() = doTest(Json(default) {
53         useAlternativeNames = true
54     })
55 
56     @Test
57     fun testJsonNamingStrategyWithoutAlternativeNames() = doTest(Json(default) {
58         useAlternativeNames = false
59     })
60 }
61