Build Logs

mbannour/mongoscala3codec • 3.8.0-RC4:2025-12-22

Errors

10

Warnings

9

Total Lines

586

1##################################
2Clonning https://github.com/mbannour/mongoscala3codec.git into /build/repo using revision v0.0.7
3##################################
4Note: switching to 'c42ca5f9f21fc1b5fa56516cbe0b05476001fc2f'.
5
6You are in 'detached HEAD' state. You can look around, make experimental
7changes and commit them, and you can discard any commits you make in this
8state without impacting any branches by switching back to a branch.
9
10If you want to create a new branch to retain commits you create, you may
11do so (now or later) by using -c with the switch command. Example:
12
13 git switch -c <new-branch-name>
14
15Or undo this operation with:
16
17 git switch -
18
19Turn off this advice by setting config variable advice.detachedHead to false
20
21Would override fixed Scala version: 3.7.1
22----
23Preparing build for 3.8.0-RC4
24Scala binary version found: 3.8
25Implicitly using source version 3.8
26Scala binary version found: 3.8
27Implicitly using source version 3.8
28Would try to apply common scalacOption (best-effort, sbt/mill only):
29Append: ,REQUIRE:-source:3.8
30Remove: ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
31
32Try apply source patch:
33Path: build.sbt
34Pattern: val scala3Version = "3.7.1"
35Replacement: val scala3Version = "3.8.0-RC4"
36Starting compilation server
37Compiling project (Scala 3.7.3, JVM (17))
38Compiled project (Scala 3.7.3, JVM (17))
39Successfully applied pattern 'val scala3Version = "3.7.1"' in build.sbt
40----
41Starting build for 3.8.0-RC4
42Execute tests: true
43sbt project found:
44Sbt version 1.10.6 is not supported, minimal supported version is 1.11.5
45Enforcing usage of sbt in version 1.11.5
46No prepare script found for project mbannour/mongoscala3codec
47##################################
48Scala version: 3.8.0-RC4
49Targets: io.github.mbannour%mongoscala3codec
50Project projectConfig: {"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":[],"sourcePatches":[{"path":"build.sbt","pattern":"val scala3Version = \"3.7.1\"","replaceWith":"val scala3Version = \"<SCALA_VERSION>\""}]}
51##################################
52Using extra scalacOptions: ,REQUIRE:-source:3.8
53Filtering out scalacOptions: ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
54[sbt_options] declare -a sbt_options=()
55[process_args] java_version = '17'
56[copyRt] java9_rt = '/root/.sbt/1.0/java9-rt-ext-eclipse_adoptium_17_0_8/rt.jar'
57# Executing command line:
58java
59-Dfile.encoding=UTF-8
60-Dcommunitybuild.scala=3.8.0-RC4
61-Dcommunitybuild.project.dependencies.add=
62-Xmx7G
63-Xms4G
64-Xss8M
65-Dsbt.script=/root/.sdkman/candidates/sbt/current/bin/sbt
66-Dscala.ext.dirs=/root/.sbt/1.0/java9-rt-ext-eclipse_adoptium_17_0_8
67-jar
68/root/.sdkman/candidates/sbt/1.11.5/bin/sbt-launch.jar
69"setCrossScalaVersions 3.8.0-RC4"
70"++3.8.0-RC4 -v"
71"mapScalacOptions ",REQUIRE:-source:3.8,-Wconf:msg=can be rewritten automatically under:s" ",-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e""
72"set every credentials := Nil"
73"excludeLibraryDependency com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}"
74"removeScalacOptionsStartingWith -P:wartremover"
75
76moduleMappings
77"runBuild 3.8.0-RC4 """{"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":[],"sourcePatches":[{"path":"build.sbt","pattern":"val scala3Version = \"3.7.1\"","replaceWith":"val scala3Version = \"<SCALA_VERSION>\""}]}""" io.github.mbannour%mongoscala3codec"
78
79[info] welcome to sbt 1.11.5 (Eclipse Adoptium Java 17.0.8)
80[info] loading settings for project repo-build from akka.sbt, plugins.sbt...
81[info] loading project definition from /build/repo/project
82[info] compiling 2 Scala sources to /build/repo/project/target/scala-2.12/sbt-1.0/classes ...
83[info] Non-compiled module 'compiler-bridge_2.12' for Scala 2.12.20. Compiling...
84[info] Compilation completed in 9.343s.
85[info] done compiling
86[info] loading settings for project root from build.sbt...
87[info] set current project to MongoScala3Codec (in build file:/build/repo/)
88Execute setCrossScalaVersions: 3.8.0-RC4
89OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in benchmarks/crossScalaVersions
90OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in integrationTests/crossScalaVersions
91OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in examples/crossScalaVersions
92OpenCB::Changing crossVersion 3.8.0-RC4 -> 3.8.0-RC4 in root/crossScalaVersions
93OpenCB::Limitting incorrect crossVersions List(3.3.1, 3.4.2, 3.6.3, 3.6.4, 3.7.1) -> List(3.8.0-RC4) in root/crossScalaVersions
94[info] set current project to MongoScala3Codec (in build file:/build/repo/)
95[info] Setting Scala version to 3.8.0-RC4 on 4 projects.
96[info] Switching Scala version on:
97[info] * root (3.8.0-RC4)
98[info] integrationTests (3.8.0-RC4)
99[info] benchmarks (3.8.0-RC4)
100[info] examples (3.8.0-RC4)
101[info] Excluding projects:
102[info] Reapplying settings...
103[info] set current project to MongoScala3Codec (in build file:/build/repo/)
104Execute mapScalacOptions: ,REQUIRE:-source:3.8,-Wconf:msg=can be rewritten automatically under:s ,-deprecation,-feature,-Xfatal-warnings,-Werror,MATCH:.*-Wconf.*any:e
105[info] Reapplying settings...
106[info] set current project to MongoScala3Codec (in build file:/build/repo/)
107[info] Defining Global / credentials, benchmarks / credentials and 2 others.
108[info] The new values will be used by Compile / scalafmtOnly, Global / pgpSelectPassphrase and 31 others.
109[info] Run `last` for details.
110[info] Reapplying settings...
111[info] set current project to MongoScala3Codec (in build file:/build/repo/)
112Execute excludeLibraryDependency: com.github.ghik:zerowaste_{scalaVersion} com.olegpy:better-monadic-for_3 org.polyvariant:better-tostring_{scalaVersion} org.wartremover:wartremover_{scalaVersion}
113[info] Reapplying settings...
114OpenCB::Failed to reapply settings in excludeLibraryDependency: Reference to undefined setting:
115
116 Global / allExcludeDependencies from Global / allExcludeDependencies (CommunityBuildPlugin.scala:331)
117 Did you mean allExcludeDependencies ?
118 , retry without global scopes
119[info] Reapplying settings...
120[info] set current project to MongoScala3Codec (in build file:/build/repo/)
121Execute removeScalacOptionsStartingWith: -P:wartremover
122[info] Reapplying settings...
123[info] set current project to MongoScala3Codec (in build file:/build/repo/)
124[success] Total time: 0 s, completed Dec 22, 2025, 7:55:36 PM
125Build config: {"projects":{"exclude":[],"overrides":{}},"java":{"version":"17"},"sbt":{"commands":[],"options":[]},"mill":{"options":[]},"tests":"full","migrationVersions":[],"sourcePatches":[{"path":"build.sbt","pattern":"val scala3Version = \"3.7.1\"","replaceWith":"val scala3Version = \"<SCALA_VERSION>\""}]}
126Parsed config: Success(ProjectBuildConfig(ProjectsConfig(List(),Map()),Full,List()))
127Starting build...
128Projects: Set(root)
129Starting build for ProjectRef(file:/build/repo/,root) (mongoscala3codec)... [0/1]
130OpenCB::Exclude Scala3 specific scalacOption `REQUIRE:-source:3.8` in Scala 2.12.20 module Global
131OpenCB::Filter out '-deprecation', matches setting pattern '^-?-deprecation'
132OpenCB::Filter out '-feature', matches setting pattern '^-?-feature'
133OpenCB::Filter out '-Werror', matches setting pattern '^-?-Werror'
134Compile scalacOptions: -Xsemanticdb, -semanticdb-target, /build/repo/target/scala-3.8.0-RC4/meta, -encoding, utf8, -explain-types, -language:higherKinds, -language:implicitConversions, -Xunchecked-java-output-version:17, -unchecked, -Xcheck-macros, -Yretain-trees, -Wunused:all, -Wconf:msg=unused local definition:s, -Wconf:msg=can be rewritten automatically under:s, -source:3.8
135[info] compiling 18 Scala sources to /build/repo/target/scala-3.8.0-RC4/classes ...
136[info] done compiling
137OpenCB::Filter out '-source', matches setting pattern '^-?-source(:.*)?'
138[info] compiling 22 Scala sources to /build/repo/target/scala-3.8.0-RC4/test-classes ...
139[warn] Failed to parse `-Wconf` configuration: msg=unused local definition:s,cat=unused:s,msg=can be rewritten automatically under:s
140[warn] unknown category: unused
141[warn] Note: for multiple filters, use `-Wconf:filter1:action1,filter2:action2`
142[warn] or alternatively `-Wconf:filter1:action1 -Wconf:filter2:action2`
143[warn] -- [E198] Unused Symbol Warning: /build/repo/src/test/scala/io/github/mbannour/mongo/codecs/RegistryBuilderEnhancementsSpec.scala:152:8
144[warn] 152 | val codec = builder.tryGetCodec[SimpleUser]
145[warn] | ^^^^^
146[warn] | unused local definition
147[warn] two warnings found
148[info] done compiling
149[info] CaseClassCodecGeneratorSpec:
150[info] CaseClassCodecGenerator
151[info] - should generate codec with correct encoder class
152[info] - should encode simple case class to BSON document correctly
153[info] - should handle optional fields when encodeNone is false
154[info] - should handle optional fields when encodeNone is true
155[info] - should handle Some values in optional fields
156[info] - should respect @BsonProperty annotations
157[info] - should throw exception for null values during encoding
158[info] CaseClassBsonWriterSpec:
159[info] CaseClassBsonWriter
160[info] - should write simple primitive fields correctly
161[info] - should handle optional fields when encodeNone is false
162[info] - should handle optional fields when encodeNone is true
163[info] - should handle Some values in optional fields
164[info] - should respect @BsonProperty annotations
165[info] - should write Map[String, String] fields as BSON documents
166[info] - should write empty maps correctly
167[info] - should write Iterable fields as BSON arrays
168[info] - should write empty iterables correctly
169[info] MongoPathSpec:
170[info] - MongoPath.of should extract simple field name
171[info] - MongoPath.of should extract another simple field
172[info] - MongoPath.of should extract numeric field
173[info] - MongoPath.of should use @BsonProperty annotation value
174[info] - MongoPath.of should use @BsonProperty for name field
175[info] - MongoPath.of should use field name when no annotation present
176[info] - MongoPath.of should extract nested field path
177[info] - MongoPath.of should extract nested field with city
178[info] - MongoPath.of should respect @BsonProperty in nested field
179[info] - MongoPath.of should handle top-level field in model with nesting
180[info] - MongoPath.of should handle Option[String] field
181[info] - MongoPath.of should handle Option[Int] field
182[info] - MongoPath.of should handle Option[CaseClass] field
183[info] - MongoPath.of should handle nested field in Option[CaseClass]
184[info] - MongoPath.of should handle nested field with annotation in Option
185[info] - MongoPath.of should handle deeply nested field
186[info] - MongoPath.of should respect annotation in deep nesting
187[info] - MongoPath.of should handle annotation at first level of nesting
188[info] - MongoPath.of should handle middle level of deep nesting
189[info] - MongoPath.of should handle top-level annotation in mixed model
190[info] - MongoPath.of should handle normal field in mixed model
191[info] - MongoPath.of should handle nested object in mixed model
192[info] - MongoPath.of should handle nested annotation in mixed model
193[info] - MongoPath.of should handle single character field names
194[info] - MongoPath.of should handle underscore in field names
195[info] - MongoPath.of should handle camelCase field names
196[info] - MongoPath.of should handle List field
197[info] - MongoPath.of should handle Seq field
198[info] - MongoPath.of should handle Map field
199[info] - MongoPath.of should handle annotation with underscores
200[info] - MongoPath.of should handle annotation with dots
201[info] - MongoPath.of should handle single letter annotation
202[info] - MongoPath.of should handle complex combination of features
203[info] - MongoPath.of should handle Option[Option[T]]
204[info] - MongoPath.of should handle MongoDB _id field
205[info] - MongoPath.of should handle typical user model
206[info] - MongoPath.of should handle Seq field navigation with .each
207[info] - MongoPath.of should handle List field navigation with .each
208[info] - MongoPath.of should handle nested Seq field with @BsonProperty
209[info] - MongoPath.of should handle multiple levels with Seq navigation
210[info] - MongoPath.of should handle Seq with nested objects and annotations
211[info] - MongoPath.of should handle Option[Seq] field directly
212[info] - MongoPath.of should handle Seq[Option] with .each and .?
213[info] - MongoPath.of should handle real-world Employee example
214[info] - MongoPath.of should handle deeply nested Seq fields
215[info] - MongoPath.of should handle mixed nested objects and Seq
216[info] - MongoPath.of should handle Seq[String] field
217[info] - MongoPath.of should handle Seq[Int] field
218[info] - MongoPath.of should handle Seq[Double] field
219[info] - MongoPath.of should handle List[String] field
220[info] - MongoPath.of should handle Option[Seq[String]] field
221[info] - MongoPath.of should handle Option[List[Int]] field
222[info] - MongoPath.of should respect @BsonProperty on Seq field
223[info] - MongoPath.of should respect @BsonProperty on Seq field and navigate with .each
224[info] - MongoPath.of should handle @BsonProperty on both Seq field and nested field
225[info] - MongoPath.of should handle Vector[T] field
226[info] - MongoPath.of should handle Vector[T] field navigation with .each
227[info] - MongoPath.of should handle IndexedSeq[T] field
228[info] - MongoPath.of should handle IndexedSeq[T] field navigation with .each
229[info] - MongoPath.of should handle Iterable[T] field
230[info] - MongoPath.of should handle Iterable[T] field navigation with .each
231[info] - MongoPath.of should handle complete Employee model
232[info] - MongoPath.of should handle deep nesting with Option and Seq
233[info] - MongoPath.of should handle Seq inside Option inside Seq
234[info] - MongoPath.of should handle @BsonProperty with MongoDB _id convention
235[info] - MongoPath.of should handle multiple Seq fields
236[info] - MongoPath.of should handle Seq at different nesting levels
237[info] - MongoPath.of should handle BigDecimal fields
238[info] - MongoPath.of should handle BigInt fields
239[info] - MongoPath.of should handle Option[BigDecimal] fields
240[info] - MongoPath.of should handle Seq[BigDecimal] fields
241[info] - MongoPath.of should handle Long fields
242[info] - MongoPath.of should handle Float fields
243[info] - MongoPath.of should handle Byte fields
244[info] - MongoPath.of should handle Short fields
245[info] - MongoPath.of should handle Char fields
246[info] - MongoPath.of should handle all common Scala types
247[info] CaseClassFieldMapperSpec:
248[info] CaseClassFieldMapper
249[info] - should map case class fields correctly
250[info] - should handle nested case classes and primitives correctly
251[info] - should fail for unsupported types at compile time
252[info] CachedCodecRegistrySpec:
253[info] CachedCodecRegistry
254[info] - should cache codec lookups
255[info] - should handle multiple types
256[info] - should throw exception for unregistered types
257[info] - should cache multiple codec lookups independently
258[info] - should work with builder pattern
259[info] BsonCodecSpec:
260[info] BsonCodec.fromCodec
261[info] - should create BsonCodec from MongoDB Codec
262[info] BsonCodec.toCodec
263[info] - should convert BsonCodec to MongoDB Codec
264[info] BsonCodec.encoderClass
265[info] - should return the correct runtime class
266[info] BsonCodec.imap
267[info] - should map codec to different type
268[info] BsonCodec.imap
269[info] - should handle complex transformations
270[info] BsonCodec.derived
271[info] - should create codec for case class
272[info] BsonCodec.derived
273[info] - should work with simple case classes
274[info] BsonCodec.encoderClass
275[info] - should return correct class for derived codec
276[info] BsonCodec
277[info] - should support chaining imap transformations
278[info] ClassToCaseFlagMapSpec:
279[info] classToCaseClassMap
280[info] - should handle primitive types
281[info] - should identify case classes
282[info] - should identify sealed classes
283[info] - should handle nested case classes
284[info] - should not flag non-case classes as case classes
285[info] - should handle mixed types
286[info] CaseClassMapperSpec:
287[info] CaseClassMapper
288[info] - should map simple sealed hierarchies
289[info] - should map sealed hierarchies with multiple subclasses
290[info] - should return the case class itself if no subclasses exist
291[info] - should fail for non-case classes !!! IGNORED !!!
292[info] - should handle nested case classes
293[info] FieldNameMongoFieldResolverSpec:
294[info] - FieldNameExtractor extracts nested field names correctly
295[info] - extracts deeply nested structures with annotations
296[info] - handles collections and maps appropriately
297[info] - handles empty case class
298[info] - handles single field case class
299[info] - handles primitive types with annotations
300[info] - handles nested structures with multiple levels of annotations
301[info] - field mapping is consistent across multiple calls
302[info] - handles option types with nested case classes
303[info] - handles case classes with inheritance hierarchy
304[info] CaseClassFactorySpec:
305[info] CaseClassFactory
306[info] - should instantiate a simple case class
307[info] - should instantiate a nested case class
308[info] - should instantiate a case class with optional fields
309[info] - should fail for unsupported types at compile time
310[info] - should throw an exception for missing required fields
311[info] - should throw an exception for invalid field data types
312[info] - should instantiate a case class with a Scala 3 enum field
313[info] - should throw an exception for invalid enum field values
314[info] - should instantiate a case class with all field types
315[info] - should instantiate a case class with a nested enum field
316[info] - should return a Inner(null)
317[info] - should instantiate a case class with an enum field using ordinal value
318[info] - should instantiate a case class with a custom enum codec using parameter field
319[info] - should instantiate Status from ordinal value
320[info] - should fail on invalid enum ordinal
321[info] - should use @BsonEnum annotation to decode from custom field
322[info] - should decode enum with @BsonEnum annotation from string representation of custom field
323[info] GoldenResourcesSpec:
324[info] SimpleUser golden
325[info] - should match resource BSON exactly and decode back
326[info] UserWithNested golden
327[info] - should match nested structure from resource
328[info] UserWithCollections golden
329[info] - should match arrays from resource
330[info] Circle golden
331[info] - should match resource with discriminator field
332[info] PropertyBasedAdtSpec:
333[info] Circle codec
334[info] - should round-trip for arbitrary values
335[info] Rectangle codec
336[info] - should round-trip for arbitrary values
337[info] NegativeTestSpec:
338[info] Codec
339[info] - should throw exception when encoding null root value
340[info] - should handle None in optional fields with ignoreNone policy
341[info] - should encode None as null with encodeNone policy
342[info] - should throw exception when decoding invalid type for Int field
343[info] - should throw exception when required field is missing
344[info] - should throw exception when nested case class has invalid data
345[info] - should throw exception when codec is not registered
346[info] - should handle empty string fields correctly
347[info] - should handle boundary values for numeric types
348[info] - should handle empty collections correctly
349[info] AdditionalRegistryBuilderSpec:
350[info] RegistryBuilder.from
351[info] - should create builder from existing registry
352[info] RegistryBuilder
353[info] - should support building from existing registry
354[info] RegistryBuilder.configure
355[info] - should allow configuration updates
356[info] - should support multiple configuration updates
357[info] RegistryBuilder.ignoreNone
358[info] - should set NoneHandling to Ignore
359[info] RegistryBuilder.encodeNone
360[info] - should set NoneHandling to Encode
361[info] RegistryBuilder.registerAll
362[info] - should register multiple types
363[info] RegistryBuilder.register
364[info] - should register single type
365[info] - should support chaining multiple registers
366[info] RegistryBuilder
367[info] - should work with ignoreNone configuration
368[info] - should work with encodeNone configuration
369[info] - should support complex builder chains
370[info] CodecProviderMacroSpec:
371[info] CodecProviderMacro.createCodecProviderIgnoreNone
372[info] - should omit None fields from the BSON document
373[info] CodecProviderMacro.createCodecProviderEncodeNone
374[info] - should include None fields as null in the BSON document
375[info] - should return null for non-matching class types
376[info] - should return correct codec for matching class types
377[info] - should work with multiple providers in the same registry
378[info] PropertyBasedCodecSpec:
379[info] SimplePerson codec
380[info] - should round-trip correctly for all generated values
381[info] PersonWithOption codec
382[info] - should round-trip correctly with Some values
383[info] - should round-trip correctly with NoneHandling.Ignore
384[info] PersonWithNested codec
385[info] - should round-trip correctly with nested case classes
386[info] CollectionHolder codec
387[info] - should round-trip correctly with List and Seq
388[info] MapHolder codec
389[info] - should round-trip correctly with Map fields
390[info] Codec
391[info] - should handle empty strings
392[info] - should handle Unicode characters
393[info] - should handle boundary values for Int
394[info] - should handle empty collections
395[info] - should handle empty maps
396[info] Codec with default values
397[info] - should use defaults when fields are missing
398[info] CodecConfigSpec:
399[info] CodecConfig
400[info] - should have correct default values
401[info] - should support custom noneHandling
402[info] - should support custom discriminatorField
403[info] - should support custom discriminatorStrategy
404[info] CodecConfig.shouldEncodeNone
405[info] - should return true when noneHandling is Encode
406[info] - should return false when noneHandling is Ignore
407[info] CodecConfig.withIgnoreNone
408[info] - should return config with Ignore noneHandling
409[info] CodecConfig.withEncodeNone
410[info] - should return config with Encode noneHandling
411[info] CodecConfig.withDiscriminatorField
412[info] - should return config with custom discriminator field
413[info] CodecConfig.withDiscriminatorStrategy
414[info] - should return config with custom strategy
415[info] CodecConfig
416[info] - should support method chaining
417[info] NoneHandling
418[info] - should have Encode case
419[info] - should have Ignore case
420[info] DiscriminatorStrategy
421[info] - should support SimpleName
422[info] - should support FullyQualifiedName
423[info] - should support Custom with mapping
424[info] GoldenBsonStructureSpec:
425[info] SimpleUser BSON structure
426[info] - should match expected format
427[info] UserWithOptional BSON structure with NoneHandling.Encode
428[info] - should include null values
429[info] UserWithOptional BSON structure with NoneHandling.Ignore
430[info] - should omit None fields
431[info] UserWithNested BSON structure
432[info] - should correctly nest documents
433[info] UserWithCollections BSON structure
434[info] - should encode collections as arrays
435[info] Concrete case class (Circle) BSON structure
436[info] - should encode all fields correctly
437[info] Multiple related case classes
438[info] - should encode independently
439[info] Event-like case classes
440[info] - should handle different field counts
441[info] Empty collections BSON structure
442[info] - should encode as empty arrays
443[info] BSON round-trip
444[info] - should preserve exact ObjectId values
445[info] - should preserve field order in nested documents
446[info] RegistryBuilderEnhancementsSpec:
447[info] RegistryBuilder.just
448[info] - should register a single type and build immediately
449[info] RegistryBuilder.withTypes
450[info] - should register multiple types and build immediately
451[info] RegistryBuilder.registerIf
452[info] - should conditionally register types based on boolean
453[info] - should work with chained conditions
454[info] RegistryBuilder.currentConfig
455[info] - should return the current configuration
456[info] RegistryBuilder.codecCount
457[info] - should return the number of registered codecs
458[info] RegistryBuilder.providerCount
459[info] - should return the number of registered providers
460[info] RegistryBuilder.isEmpty
461[info] - should check if builder has no codecs or providers
462[info] RegistryBuilder.isCached
463[info] - should indicate if registry is cached
464[info] RegistryBuilder.hasCodecFor
465[info] - should check if codec is available for a type
466[info] RegistryBuilder.tryGetCodec
467[info] - should return Some(codec) if available
468[info] - should return None if codec is not available
469[info] RegistryBuilder.summary
470[info] - should provide a human-readable summary
471[info] - should show correct NoneHandling in summary
472[info] Convenience methods
473[info] - should simplify common patterns
474[info] State inspection methods
475[info] - should allow debugging and introspection
476[info] Performance optimizations
477[info] - should work correctly with new methods
478[info] Combined usage
479[info] - should demonstrate real-world patterns
480[info] AnnotationNameSpec:
481[info] - findAnnotationValue should return the annotation value for a field with @BsonProperty
482[info] - findAnnotationValue should return None for a field without @BsonProperty
483[info] - findAnnotationValue should return None for a non-existent field
484[info] - findAnnotationValue should return None when no fields have annotations
485[info] - findAnnotationValue should return None for an empty case class
486[info] - findAnnotationValue should handle fields with multiple annotations
487[info] EnumValueCodecProviderSpec:
488[info] EnumValueCodecProvider
489[info] - should create provider with correct type handling
490[info] - should work with simple enum transformation functions
491[info] - should handle conversion errors gracefully
492[info] - should test enum transformation functions work correctly
493[info] CodecTestKitSpec:
494[info] CodecTestKit.roundTrip
495[info] - should encode and decode values correctly
496[info] CodecTestKit.assertCodecSymmetry
497[info] - should pass for valid codecs
498[info] - should work with multiple data types
499[info] CodecTestKit.toBsonDocument
500[info] - should convert case class to BsonDocument
501[info] - should preserve all field types correctly
502[info] CodecTestKit.fromBsonDocument
503[info] - should decode BsonDocument to case class
504[info] CodecTestKit.assertBsonStructure
505[info] - should validate BSON structure
506[info] CodecTestKit with NoneHandling.Encode
507[info] - should encode None as null
508[info] - should encode Some values correctly
509[info] CodecTestKit with NoneHandling.Ignore
510[info] - should omit None fields
511[info] - should include Some values even with Ignore policy
512[info] CodecTestKit with collections
513[info] - should handle List fields
514[info] - should handle Set fields
515[info] - should handle empty collections
516[info] CodecTestKit.testRegistry
517[info] - should create minimal registry
518[info] CodecTestKit with edge cases
519[info] - should handle empty strings
520[info] - should handle special characters
521[info] - should handle Unicode characters
522[info] - should handle boundary values
523[info] CodecTestKit with nested case classes
524[info] - should handle complex nested structures
525[info] CodecTestKit.assertBsonContains
526[info] - should verify partial BSON structure
527[info] CodecTestKit.bsonEquivalent
528[info] - should ignore field order
529[info] - should detect missing fields
530[info] - should detect different values
531[info] CodecTestKit.checkCodecSymmetry
532[info] - should return Right for valid codec
533[info] CodecTestKit.codecSymmetryProperty
534[info] - should return true for valid codec
535[info] CodecTestKit.prettyPrint
536[info] - should format BSON documents readably
537[info] CodecTestKit.diff
538[info] - should identify missing fields
539[info] - should identify extra fields
540[info] - should identify mismatched values
541[info] - should return no differences for identical documents
542[info] CodecTestKit.roundTripWithContext
543[info] - should use custom encoder context
544[info] CodecTestKit.assertCodecSymmetryWithContext
545[info] - should support custom contexts
546[info] CodecTestKit.extractField
547[info] - should extract specific field values
548[info] - should return null for non-existent fields
549[info] CodecTestKit.bsonArraysEqual
550[info] - should compare arrays in order
551[info] - should detect different order
552[info] CodecTestKit.bsonArraysEquivalent
553[info] - should ignore element order
554[info] - should detect different elements
555[info] CodecTestKit.bsonDeepContains
556[info] - should verify nested field paths
557[info] - should detect mismatched nested values
558[info] CodecTestKit.deepDiff
559[info] - should report nested differences
560[info] - should handle array differences
561[info] - should return empty list for identical documents
562[info] CodecTestKit.bsonValuesEqual
563[info] - should handle nested documents
564[info] - should handle arrays recursively
565
566************************
567Build summary:
568[{
569 "module": "mongoscala3codec",
570 "compile": {"status": "ok", "tookMs": 14965, "warnings": 0, "errors": 0, "sourceVersion": "3.8"},
571 "doc": {"status": "skipped", "tookMs": 0, "files": 0, "totalSizeKb": 0},
572 "test-compile": {"status": "ok", "tookMs": 45462, "warnings": 1, "errors": 0, "sourceVersion": "3.8"},
573 "test": {"status": "ok", "tookMs": 1254, "passed": 293, "failed": 0, "ignored": 1, "skipped": 0, "total": 294, "byFramework": [{"framework": "unknown", "stats": {"passed": 293, "failed": 0, "ignored": 1, "skipped": 0, "total": 294}}]},
574 "publish": {"status": "skipped", "tookMs": 0},
575 "metadata": {
576 "crossScalaVersions": ["3.3.1", "3.4.2", "3.6.3", "3.6.4", "3.7.1", "3.7.1"]
577}
578}]
579************************
580[success] Total time: 76 s (0:01:16.0), completed Dec 22, 2025, 7:56:53 PM
581[0JChecking patch project/plugins.sbt...
582Checking patch project/build.properties...
583Checking patch build.sbt...
584Applied patch project/plugins.sbt cleanly.
585Applied patch project/build.properties cleanly.
586Applied patch build.sbt cleanly.