package com.fasterxml.jackson.databind.convert;
import java.util.*;
import com.fasterxml.jackson.databind.*;
/**
* Tests for {@link ObjectMapper#updateValue}.
*
* @since 2.9
*/
public class UpdateValueTest extends BaseMapTest
{
/*
/********************************************************
/* Test methods; simple containers
/********************************************************
*/
private final ObjectMapper MAPPER = new ObjectMapper();
public void testMapUpdate() throws Exception
{
Map<String,Object> base = new LinkedHashMap<>();
base.put("a", 345);
Map<String,Object> overrides = new LinkedHashMap<>();
overrides.put("xyz", Boolean.TRUE);
overrides.put("foo", "bar");
Map<String,Object> ob = MAPPER.updateValue(base, overrides);
// first: should return first argument
assertSame(base, ob);
assertEquals(3, ob.size());
assertEquals(Integer.valueOf(345), ob.get("a"));
assertEquals("bar", ob.get("foo"));
assertEquals(Boolean.TRUE, ob.get("xyz"));
}
public void testListUpdate() throws Exception
{
List<Object> base = new ArrayList<>();
base.add(123456);
base.add(Boolean.FALSE);
Object[] overrides = new Object[] { Boolean.TRUE, "zoink!" };
List<Object> ob = MAPPER.updateValue(base, overrides);
// first: should return first argument
assertSame(base, ob);
assertEquals(4, ob.size());
assertEquals(Integer.valueOf(123456), ob.get(0));
assertEquals(Boolean.FALSE, ob.get(1));
assertEquals(overrides[0], ob.get(2));
assertEquals(overrides[1], ob.get(3));
}
public void testArrayUpdate() throws Exception
{
// Since Arrays are immutable, not sure what "right answer" ought to be
Object[] base = new Object[] { Boolean.FALSE, Integer.valueOf(3) };
Object[] overrides = new Object[] { Boolean.TRUE, "zoink!" };
Object[] ob = MAPPER.updateValue(base, overrides);
assertEquals(4, ob.length);
assertEquals(base[0], ob[0]);
assertEquals(base[1], ob[1]);
assertEquals(overrides[0], ob[2]);
assertEquals(overrides[1], ob[3]);
}
/*
/********************************************************
/* Test methods; POJOs
/********************************************************
*/
public void testPOJO() throws Exception
{
Point base = new Point(42, 28);
Map<String,Object> overrides = new LinkedHashMap<>();
overrides.put("y", 1234);
Point result = MAPPER.updateValue(base, overrides);
assertSame(base, result);
assertEquals(42, result.x);
assertEquals(1234, result.y);
}
/*
/********************************************************
/* Test methods; other
/********************************************************
*/
public void testMisc() throws Exception
{
// if either is `null`, should return first arg
assertNull(MAPPER.updateValue(null, "foo"));
List<String> input = new ArrayList<>();
assertSame(input, MAPPER.updateValue(input, null));
}
}