• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package kotlinx.serialization.json
2 
3 import kotlinx.serialization.*
4 import kotlinx.serialization.features.*
5 import kotlin.test.*
6 
7 class JsonNamingStrategyDynamicTest: JsonTestBase() {
8     private val jsForm = js("""{"simple":"a","one_word":"b","already_in_snake":"c","a_lot_of_words":"d","first_capitalized":"e","has_acronym_url":"BAZ","has_digit123_and_postfix":"QUX","coercion_test":"QUX"}""")
9     private val jsFormNeedsCoercing = js("""{"simple":"a","one_word":"b","already_in_snake":"c","a_lot_of_words":"d","first_capitalized":"e","has_acronym_url":"BAZ","has_digit123_and_postfix":"QUX","coercion_test":"invalid"}""")
10 
doTestnull11     private fun doTest(json: Json) {
12         val j = Json(json) {
13             namingStrategy = JsonNamingStrategy.SnakeCase
14         }
15         val foo = JsonNamingStrategyTest.Foo()
16         assertDynamicForm(foo)
17         assertEquals(foo, j.decodeFromDynamic(jsForm))
18     }
19 
20     @Test
testNamingStrategyWorksWithCoercingnull21     fun testNamingStrategyWorksWithCoercing() {
22         val j = Json(default) {
23             coerceInputValues = true
24             useAlternativeNames = false
25             namingStrategy = JsonNamingStrategy.SnakeCase
26         }
27         assertEquals(JsonNamingStrategyTest.Foo(), j.decodeFromDynamic(jsFormNeedsCoercing))
28     }
29 
30     @Test
<lambda>null31     fun testJsonNamingStrategyWithAlternativeNames() = doTest(Json(default) {
32         useAlternativeNames = true
33     })
34 
35     @Test
<lambda>null36     fun testJsonNamingStrategyWithoutAlternativeNames() = doTest(Json(default) {
37         useAlternativeNames = false
38     })
39 }
40