From ae1f42c9576c5d9c37dc50246bf4e22fe1c8d1b4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ivan=20=E2=80=9CCLOVIS=E2=80=9D=20Canet?= Date: Tue, 5 May 2026 19:46:06 +0200 Subject: [PATCH] test(dsl): Test the JVM official implementation with and without reflection --- dsl/build.gradle.kts | 5 + dsl/src/jvmTest/kotlin/MultiContext.jvm.kt | 107 +++++++++------------ 2 files changed, 53 insertions(+), 59 deletions(-) diff --git a/dsl/build.gradle.kts b/dsl/build.gradle.kts index e156b3c9..e4cab7f9 100644 --- a/dsl/build.gradle.kts +++ b/dsl/build.gradle.kts @@ -70,7 +70,12 @@ kotlin { } sourceSets.jvmTest.dependencies { + // Test the official driver with or without reflection implementation(projects.bsonOfficial) + implementation(libs.mongodb.sync.jvm) + implementation(libs.mongodb.kotlinx.serialization) + implementation(libs.mongodb.kotlin.reflection) + implementation(libs.kotlinx.serialization) } } diff --git a/dsl/src/jvmTest/kotlin/MultiContext.jvm.kt b/dsl/src/jvmTest/kotlin/MultiContext.jvm.kt index 910cfdb7..3e6d5bfe 100644 --- a/dsl/src/jvmTest/kotlin/MultiContext.jvm.kt +++ b/dsl/src/jvmTest/kotlin/MultiContext.jvm.kt @@ -16,71 +16,60 @@ package opensavvy.ktmongo.dsl +import com.mongodb.* +import com.mongodb.client.gridfs.codecs.GridFSFileCodecProvider +import com.mongodb.client.model.geojson.codecs.GeoJsonCodecProvider +import com.mongodb.client.model.mql.ExpressionCodecProvider import opensavvy.ktmongo.bson.BsonFactory import org.bson.codecs.* import org.bson.codecs.configuration.CodecRegistries -import org.bson.codecs.jsr310.InstantCodec -import org.bson.codecs.jsr310.LocalDateCodec -import org.bson.codecs.jsr310.LocalDateTimeCodec -import org.bson.codecs.jsr310.LocalTimeCodec +import org.bson.codecs.jsr310.Jsr310CodecProvider +import org.bson.codecs.kotlin.ArrayCodecProvider +import org.bson.codecs.kotlin.DataClassCodecProvider +import org.bson.codecs.kotlinx.KotlinSerializerCodecProvider + +/** + * Default codec providers copied from [com.mongodb.MongoClientSettings.getDefaultCodecRegistry], + * but with the [KotlinCodecProvider] removed. + * + * Should not be used directly. See [testFactories]. + */ +private val defaultCodecProvidersWithoutKotlin = CodecRegistries.fromProviders( + ValueCodecProvider(), + BsonValueCodecProvider(), + DBRefCodecProvider(), + DBObjectCodecProvider(), + DocumentCodecProvider(DocumentToDBRefTransformer()), + CollectionCodecProvider(DocumentToDBRefTransformer()), + IterableCodecProvider(DocumentToDBRefTransformer()), + MapCodecProvider(DocumentToDBRefTransformer()), + GeoJsonCodecProvider(), + GridFSFileCodecProvider(), + Jsr310CodecProvider(), + JsonObjectCodecProvider(), + BsonCodecProvider(), + ExpressionCodecProvider(), + Jep395RecordCodecProvider(), + // KotlinCodecProvider(), // Do NOT include the KotlinCodecProvider! It uses classpath scanning to choose a serialization library, but we want to control it + EnumCodecProvider() +) actual val testFactories: Map BsonFactory> = mapOf( - "JVM Official" to { + "JVM Official, reflection-based" to { + opensavvy.ktmongo.bson.official.BsonFactory( + codecRegistry = CodecRegistries.fromProviders( + ArrayCodecProvider(), + DataClassCodecProvider(), + defaultCodecProvidersWithoutKotlin, + ) + ) + }, + + "JVM Official, serialization-based" to { opensavvy.ktmongo.bson.official.BsonFactory( - codecRegistry = CodecRegistries.fromCodecs( - AtomicBooleanCodec(), - AtomicIntegerCodec(), - AtomicLongCodec(), - BigDecimalCodec(), - BinaryCodec(), - BooleanCodec(), - BsonArrayCodec(), - BsonBinaryCodec(), - BsonBooleanCodec(), - BsonDateTimeCodec(), - BsonDBPointerCodec(), - BsonDecimal128Codec(), - BsonDocumentCodec(), - BsonDoubleCodec(), - BsonInt32Codec(), - BsonInt64Codec(), - BsonJavaScriptCodec(), - BsonMaxKeyCodec(), - BsonMinKeyCodec(), - BsonNullCodec(), - BsonObjectIdCodec(), - BsonRegularExpressionCodec(), - BsonStringCodec(), - BsonSymbolCodec(), - BsonTimestampCodec(), - BsonUndefinedCodec(), - BsonValueCodec(), - ByteArrayCodec(), - ByteCodec(), - CharacterCodec(), - CodeCodec(), - DateCodec(), - Decimal128Codec(), - DocumentCodec(), - DoubleCodec(), - FloatCodec(), - InstantCodec(), - IntegerCodec(), - JsonObjectCodec(), - LocalDateCodec(), - LocalDateTimeCodec(), - LocalTimeCodec(), - LongCodec(), - MaxKeyCodec(), - MinKeyCodec(), - ObjectIdCodec(), - OverridableUuidRepresentationUuidCodec(), - PatternCodec(), - RawBsonDocumentCodec(), - ShortCodec(), - StringCodec(), - SymbolCodec(), - UuidCodec(), + codecRegistry = CodecRegistries.fromProviders( + KotlinSerializerCodecProvider(), + defaultCodecProvidersWithoutKotlin, ) ) }, -- 2.51.2