1 package com.fasterxml.jackson.databind.node; 2 3 import com.fasterxml.jackson.databind.BaseMapTest; 4 import com.fasterxml.jackson.databind.ObjectMapper; 5 6 /** 7 * Simple tests to verify that [JACKSON-707] is implemented correctly. 8 */ 9 public class TestDeepCopy extends BaseMapTest 10 { 11 private final ObjectMapper mapper = new ObjectMapper(); 12 testWithObjectSimple()13 public void testWithObjectSimple() 14 { 15 ObjectNode root = mapper.createObjectNode(); 16 root.put("a", 3); 17 assertEquals(1, root.size()); 18 19 ObjectNode copy = root.deepCopy(); 20 assertEquals(1, copy.size()); 21 22 // adding to root won't change copy: 23 root.put("b", 7); 24 assertEquals(2, root.size()); 25 assertEquals(1, copy.size()); 26 27 // nor vice versa 28 copy.put("c", 3); 29 assertEquals(2, root.size()); 30 assertEquals(2, copy.size()); 31 } 32 testWithArraySimple()33 public void testWithArraySimple() 34 { 35 ArrayNode root = mapper.createArrayNode(); 36 root.add("a"); 37 assertEquals(1, root.size()); 38 39 ArrayNode copy = root.deepCopy(); 40 assertEquals(1, copy.size()); 41 42 // adding to root won't change copy: 43 root.add( 7); 44 assertEquals(2, root.size()); 45 assertEquals(1, copy.size()); 46 47 // nor vice versa 48 copy.add(3); 49 assertEquals(2, root.size()); 50 assertEquals(2, copy.size()); 51 } 52 testWithNested()53 public void testWithNested() 54 { 55 ObjectNode root = mapper.createObjectNode(); 56 ObjectNode leafObject = root.putObject("ob"); 57 ArrayNode leafArray = root.putArray("arr"); 58 assertEquals(2, root.size()); 59 60 leafObject.put("a", 3); 61 assertEquals(1, leafObject.size()); 62 leafArray.add(true); 63 assertEquals(1, leafArray.size()); 64 65 ObjectNode copy = root.deepCopy(); 66 assertNotSame(copy, root); 67 assertEquals(2, copy.size()); 68 69 // should be detached, once again 70 71 leafObject.put("x", 9); 72 assertEquals(2, leafObject.size()); 73 assertEquals(1, copy.get("ob").size()); 74 75 leafArray.add("foobar"); 76 assertEquals(2, leafArray.size()); 77 assertEquals(1, copy.get("arr").size()); 78 79 // nor vice versa 80 ((ObjectNode) copy.get("ob")).put("c", 3); 81 assertEquals(2, leafObject.size()); 82 assertEquals(2, copy.get("ob").size()); 83 84 ((ArrayNode) copy.get("arr")).add(13); 85 assertEquals(2, leafArray.size()); 86 assertEquals(2, copy.get("arr").size()); 87 } 88 } 89