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