@@ -668,6 +668,23 @@ class UtilsSpec :
668
668
val result = Utils .merge(listOf (" a" , Undefined ()), mapOf (" b" to " c" ))
669
669
result shouldBe mapOf<String , Any ?>(" 0" to " a" , " b" to " c" )
670
670
}
671
+
672
+ test(" merge handles map sources that are also iterable" ) {
673
+ val hybrid = IterableMap (mutableMapOf (" x" to " 1" , " y" to Undefined ()))
674
+
675
+ val folded = Utils .merge(" anchor" , hybrid)
676
+
677
+ folded.shouldBeInstanceOf<MutableList <* >>()
678
+ folded shouldBe mutableListOf (" anchor" , " 1" )
679
+ }
680
+
681
+ test(" merge flattens iterable maps into iterable targets" ) {
682
+ val target = IterableMap (mutableMapOf (" 0" to " keep" , " 1" to Undefined ()))
683
+ val merged = Utils .merge(target, mapOf (" extra" to " value" ))
684
+
685
+ merged.shouldBeInstanceOf<MutableMap <* , * >>()
686
+ merged shouldBe mutableMapOf (" 0" to " keep" , " extra" to " value" )
687
+ }
671
688
}
672
689
673
690
context(" Utils.combine" ) {
@@ -797,3 +814,8 @@ class UtilsSpec :
797
814
private class BoxIterable <T >(private val items : List <T >) : Iterable<T> {
798
815
override fun iterator (): Iterator <T > = items.iterator()
799
816
}
817
+
818
+ private class IterableMap (private val delegate : MutableMap <String , Any ?>) :
819
+ MutableMap <String , Any ?> by delegate, Iterable <Any ?> {
820
+ override fun iterator (): MutableIterator <Any ?> = delegate.values.iterator()
821
+ }
0 commit comments