//
// Copyright (c) 2016 Couchbase, Inc. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file
// except in compliance with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the
// License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND,
// either express or implied. See the License for the specific language governing permissions
// and limitations under the License.
//
package com.couchbase.lite.util;
import com.couchbase.lite.LiteTestCase;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
public class DeepCloneTest extends LiteTestCase {
// make sure deepClone should clone nested object
public void testDeepCloneWithJsonParser() throws Exception {
Map<String, Object> map1 = new HashMap<String, Object>();
Object[] objs = {new String("a"), new String("b")};
Map<String, Object> map = new HashMap<String, Object>();
map.put("hello", "world");
List<Object> list = new ArrayList<Object>();
list.add("a");
list.add("b");
int[] ints = {1, 2};
map1.put("objs", objs);
map1.put("ints", ints);
map1.put("map", map);
map1.put("list", list);
Map<String, Object> deepMap1 = DeepClone.deepClone(map1);
ObjectMapper mapper = new ObjectMapper();
String str1 = mapper.writer(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS).writeValueAsString(map1);
String str2 = mapper.writer(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS).writeValueAsString(deepMap1);
assertEquals(str1, str2);
assertTrue(str1.equals(str2));
((Map) deepMap1.get("map")).put("extra", "hey!");
str1 = mapper.writer(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS).writeValueAsString(map1);
str2 = mapper.writer(SerializationFeature.ORDER_MAP_ENTRIES_BY_KEYS).writeValueAsString(deepMap1);
assertFalse(str1.equals(str2));
}
}