@@ -114,6 +114,7 @@ void setUp() {
114
114
mappingContext .getPersistentEntity (Pear .class );
115
115
mappingContext .getPersistentEntity (WithCustomMappedPrimitiveCollection .class );
116
116
mappingContext .getPersistentEntity (BugModel .class );
117
+ mappingContext .getPersistentEntity (ArrayListHolder .class );
117
118
mappingContext .afterPropertiesSet ();
118
119
119
120
this .entities = new PersistentEntities (Collections .singleton (mappingContext ));
@@ -705,6 +706,42 @@ void deserializesNewNestedEntitiesCorrectly() throws Exception {
705
706
.containsExactly ("Foo" , "Bar" );
706
707
}
707
708
709
+ @ Test // #2325
710
+ void arraysCanMutateAndAppendDuringMerge () throws Exception {
711
+
712
+ ObjectMapper mapper = new ObjectMapper ();
713
+ ArrayHolder target = new ArrayHolder (new String [] { "ancient" , "old" , "older" });
714
+ JsonNode node = mapper .readTree ("{ \" array\" : [ \" new\" , \" old\" , \" newer\" , \" bleeding edge\" ] }" );
715
+
716
+ ArrayHolder updated = reader .doMerge ((ObjectNode ) node , target , mapper );
717
+
718
+ assertThat (updated .array ).containsExactly ("new" , "old" , "newer" , "bleeding edge" );
719
+ }
720
+
721
+ @ Test // #2325
722
+ void arraysCanAppendMoreThanOneElementDuringMerge () throws Exception {
723
+
724
+ ObjectMapper mapper = new ObjectMapper ();
725
+ ArrayListHolder target = new ArrayListHolder ("ancient" , "old" , "older" );
726
+ JsonNode node = mapper .readTree ("{ \" values\" : [ \" ancient\" , \" old\" , \" older\" , \" new\" , \" newer\" ] }" );
727
+
728
+ ArrayListHolder updated = reader .doMerge ((ObjectNode ) node , target , mapper );
729
+
730
+ assertThat (updated .values ).containsExactly ("ancient" , "old" , "older" , "new" , "newer" );
731
+ }
732
+
733
+ @ Test // #2325
734
+ void arraysCanRemoveElementsDuringMerge () throws Exception {
735
+
736
+ ObjectMapper mapper = new ObjectMapper ();
737
+ ArrayHolder target = new ArrayHolder (new String [] { "ancient" , "old" , "older" });
738
+ JsonNode node = mapper .readTree ("{ \" array\" : [ \" ancient\" ] }" );
739
+
740
+ ArrayHolder updated = reader .doMerge ((ObjectNode ) node , target , mapper );
741
+
742
+ assertThat (updated .array ).containsExactly ("ancient" );
743
+ }
744
+
708
745
@ SuppressWarnings ("unchecked" )
709
746
private static <T > T as (Object source , Class <T > type ) {
710
747
@@ -997,4 +1034,16 @@ static class NestedModel {
997
1034
public String value ;
998
1035
}
999
1036
}
1037
+
1038
+ static class ArrayListHolder {
1039
+ Collection <String > values ;
1040
+
1041
+ ArrayListHolder (String ... values ) {
1042
+ this .values = new ArrayList <>(Arrays .asList (values ));
1043
+ }
1044
+
1045
+ public void setValues (Collection <String > values ) {
1046
+ this .values = values ;
1047
+ }
1048
+ }
1000
1049
}
0 commit comments