@@ -26,10 +26,7 @@ import kotlinx.datetime.LocalTime
2626import kotlinx.serialization.ExperimentalSerializationApi
2727import kotlinx.serialization.MissingFieldException
2828import kotlinx.serialization.SerializationException
29- import kotlinx.serialization.json.JsonPrimitive
30- import kotlinx.serialization.json.buildJsonArray
31- import kotlinx.serialization.json.buildJsonObject
32- import kotlinx.serialization.json.put
29+ import kotlinx.serialization.json.*
3330import kotlinx.serialization.modules.SerializersModule
3431import kotlinx.serialization.modules.plus
3532import kotlinx.serialization.modules.polymorphic
@@ -49,68 +46,7 @@ import org.bson.BsonUndefined
4946import org.bson.codecs.DecoderContext
5047import org.bson.codecs.EncoderContext
5148import org.bson.codecs.configuration.CodecConfigurationException
52- import org.bson.codecs.kotlinx.samples.Box
53- import org.bson.codecs.kotlinx.samples.DataClassBsonValues
54- import org.bson.codecs.kotlinx.samples.DataClassContainsOpen
55- import org.bson.codecs.kotlinx.samples.DataClassContainsValueClass
56- import org.bson.codecs.kotlinx.samples.DataClassEmbedded
57- import org.bson.codecs.kotlinx.samples.DataClassKey
58- import org.bson.codecs.kotlinx.samples.DataClassLastItemDefaultsToNull
59- import org.bson.codecs.kotlinx.samples.DataClassListOfDataClasses
60- import org.bson.codecs.kotlinx.samples.DataClassListOfListOfDataClasses
61- import org.bson.codecs.kotlinx.samples.DataClassListOfSealed
62- import org.bson.codecs.kotlinx.samples.DataClassMapOfDataClasses
63- import org.bson.codecs.kotlinx.samples.DataClassMapOfListOfDataClasses
64- import org.bson.codecs.kotlinx.samples.DataClassNestedParameterizedTypes
65- import org.bson.codecs.kotlinx.samples.DataClassOpen
66- import org.bson.codecs.kotlinx.samples.DataClassOpenA
67- import org.bson.codecs.kotlinx.samples.DataClassOpenB
68- import org.bson.codecs.kotlinx.samples.DataClassOptionalBsonValues
69- import org.bson.codecs.kotlinx.samples.DataClassParameterized
70- import org.bson.codecs.kotlinx.samples.DataClassSealed
71- import org.bson.codecs.kotlinx.samples.DataClassSealedA
72- import org.bson.codecs.kotlinx.samples.DataClassSealedB
73- import org.bson.codecs.kotlinx.samples.DataClassSealedC
74- import org.bson.codecs.kotlinx.samples.DataClassSelfReferential
75- import org.bson.codecs.kotlinx.samples.DataClassWithAnnotations
76- import org.bson.codecs.kotlinx.samples.DataClassWithBooleanMapKey
77- import org.bson.codecs.kotlinx.samples.DataClassWithBsonConstructor
78- import org.bson.codecs.kotlinx.samples.DataClassWithBsonDiscriminator
79- import org.bson.codecs.kotlinx.samples.DataClassWithBsonExtraElements
80- import org.bson.codecs.kotlinx.samples.DataClassWithBsonId
81- import org.bson.codecs.kotlinx.samples.DataClassWithBsonIgnore
82- import org.bson.codecs.kotlinx.samples.DataClassWithBsonProperty
83- import org.bson.codecs.kotlinx.samples.DataClassWithBsonRepresentation
84- import org.bson.codecs.kotlinx.samples.DataClassWithCollections
85- import org.bson.codecs.kotlinx.samples.DataClassWithContextualDateValues
86- import org.bson.codecs.kotlinx.samples.DataClassWithDataClassMapKey
87- import org.bson.codecs.kotlinx.samples.DataClassWithDateValues
88- import org.bson.codecs.kotlinx.samples.DataClassWithDefaults
89- import org.bson.codecs.kotlinx.samples.DataClassWithEmbedded
90- import org.bson.codecs.kotlinx.samples.DataClassWithEncodeDefault
91- import org.bson.codecs.kotlinx.samples.DataClassWithEnum
92- import org.bson.codecs.kotlinx.samples.DataClassWithEnumMapKey
93- import org.bson.codecs.kotlinx.samples.DataClassWithFailingInit
94- import org.bson.codecs.kotlinx.samples.DataClassWithJsonElement
95- import org.bson.codecs.kotlinx.samples.DataClassWithJsonElements
96- import org.bson.codecs.kotlinx.samples.DataClassWithJsonElementsNullable
97- import org.bson.codecs.kotlinx.samples.DataClassWithListThatLastItemDefaultsToNull
98- import org.bson.codecs.kotlinx.samples.DataClassWithMutableList
99- import org.bson.codecs.kotlinx.samples.DataClassWithMutableMap
100- import org.bson.codecs.kotlinx.samples.DataClassWithMutableSet
101- import org.bson.codecs.kotlinx.samples.DataClassWithNestedParameterized
102- import org.bson.codecs.kotlinx.samples.DataClassWithNestedParameterizedDataClass
103- import org.bson.codecs.kotlinx.samples.DataClassWithNullableGeneric
104- import org.bson.codecs.kotlinx.samples.DataClassWithNulls
105- import org.bson.codecs.kotlinx.samples.DataClassWithPair
106- import org.bson.codecs.kotlinx.samples.DataClassWithParameterizedDataClass
107- import org.bson.codecs.kotlinx.samples.DataClassWithRequired
108- import org.bson.codecs.kotlinx.samples.DataClassWithSequence
109- import org.bson.codecs.kotlinx.samples.DataClassWithSimpleValues
110- import org.bson.codecs.kotlinx.samples.DataClassWithTriple
111- import org.bson.codecs.kotlinx.samples.Key
112- import org.bson.codecs.kotlinx.samples.SealedInterface
113- import org.bson.codecs.kotlinx.samples.ValueClass
49+ import org.bson.codecs.kotlinx.samples.*
11450import org.bson.json.JsonMode
11551import org.bson.json.JsonWriterSettings
11652import org.junit.jupiter.api.Test
@@ -1126,6 +1062,13 @@ class KotlinSerializerCodecTest {
11261062 }
11271063 }
11281064
1065+ @Test
1066+ fun testSnakeCaseNamingStrategy () {
1067+ val expected = """ {"camel_case_key": "snake_case_value", "a_b_cd": "camelCaseValue"}"""
1068+ val dataClass = DataClassWithCamelCase (" snake_case_value" , " camelCaseValue" )
1069+ assertRoundTrips(expected, dataClass, BsonConfiguration (bsonNamingStrategy = BsonNamingStrategy .SNAKE_CASE ))
1070+ }
1071+
11291072 private inline fun <reified T : Any > assertRoundTrips (
11301073 expected : String ,
11311074 value : T ,
@@ -1184,6 +1127,7 @@ class KotlinSerializerCodecTest {
11841127 serializersModule : SerializersModule = defaultSerializersModule,
11851128 configuration : BsonConfiguration = BsonConfiguration ()
11861129 ): T {
1130+ println (" Deserializing: ${value.toJson()} " )
11871131 val codec = KotlinSerializerCodec .create(T ::class , serializersModule, configuration)!!
11881132 return codec.decode(BsonDocumentReader (value), DecoderContext .builder().build())
11891133 }
0 commit comments