Skip to content

Commit

Permalink
minor number test refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
cowtowncoder committed May 20, 2015
1 parent f4d3a82 commit 48a21be
Showing 1 changed file with 25 additions and 27 deletions.
Expand Up @@ -11,31 +11,33 @@
/**
* Unit tests for verifying handling of non-specific numeric types.
*/
public class TestGenericNumber
public class UntypedNumbersTest
extends BaseMapTest
{
private final ObjectMapper MAPPER = objectMapper();

public void testIntAsNumber() throws Exception
{
/* Even if declared as 'generic' type, should return using most
* efficient type... here, Integer
*/
Number result = new ObjectMapper().readValue(new StringReader(" 123 "), Number.class);
Number result = MAPPER.readValue(new StringReader(" 123 "), Number.class);
assertEquals(Integer.valueOf(123), result);
}

public void testLongAsNumber() throws Exception
{
// And beyond int range, should get long
long exp = 1234567890123L;
Number result = new ObjectMapper().readValue(String.valueOf(exp), Number.class);
Number result = MAPPER.readValue(String.valueOf(exp), Number.class);
assertEquals(Long.valueOf(exp), result);
}

public void testBigIntAsNumber() throws Exception
{
// and after long, BigInteger
BigInteger biggie = new BigInteger("1234567890123456789012345678901234567890");
Number result = new ObjectMapper().readValue(biggie.toString(), Number.class);
Number result = MAPPER.readValue(biggie.toString(), Number.class);
assertEquals(BigInteger.class, biggie.getClass());
assertEquals(biggie, result);
}
Expand All @@ -45,71 +47,67 @@ public void testIntTypeOverride() throws Exception
/* Slight twist; as per [JACKSON-100], can also request binding
* to BigInteger even if value would fit in Integer
*/
ObjectMapper m = new ObjectMapper();
m.enable(DeserializationFeature.USE_BIG_INTEGER_FOR_INTS);
ObjectReader r = MAPPER.reader(DeserializationFeature.USE_BIG_INTEGER_FOR_INTS);

BigInteger exp = BigInteger.valueOf(123L);

// first test as any Number
Number result = m.readValue(new StringReader(" 123 "), Number.class);
Number result = r.forType(Number.class).readValue(new StringReader(" 123 "));
assertEquals(BigInteger.class, result.getClass());
assertEquals(exp, result);

// then as any Object
/*Object value =*/ m.readValue(new StringReader("123"), Object.class);
/*Object value =*/ r.forType(Object.class).readValue(new StringReader("123"));
assertEquals(BigInteger.class, result.getClass());
assertEquals(exp, result);
}

/**
* Related to [JACKSON-72]: by default should wrap floating-point
* Number as Double
*/
public void testDoubleAsNumber() throws Exception
{
Number result = new ObjectMapper().readValue(new StringReader(" 1.0 "), Number.class);
Number result = MAPPER.readValue(new StringReader(" 1.0 "), Number.class);
assertEquals(Double.valueOf(1.0), result);
}

/**
* Test for verifying [JACKSON-72].
*/
public void testFpTypeOverrideSimple() throws Exception
{
ObjectMapper m = new ObjectMapper();
m.enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS);
ObjectReader r = MAPPER.reader(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS);
BigDecimal dec = new BigDecimal("0.1");

// First test generic stand-alone Number
Number result = m.readValue(dec.toString(), Number.class);
Number result = r.forType(Number.class).readValue(dec.toString());
assertEquals(BigDecimal.class, result.getClass());
assertEquals(dec, result);

// Then plain old Object
Object value = m.readValue(dec.toString(), Object.class);
Object value = r.forType(Object.class).readValue(dec.toString());
assertEquals(BigDecimal.class, result.getClass());
assertEquals(dec, value);
}

public void testFpTypeOverrideStructured() throws Exception
public void testFpTypeOverrideStructured() throws Exception
{
ObjectMapper m = new ObjectMapper();
BigDecimal dec = new BigDecimal("-19.37");

m.enable(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS);
ObjectReader r = MAPPER.reader(DeserializationFeature.USE_BIG_DECIMAL_FOR_FLOATS);

BigDecimal dec = new BigDecimal("-19.37");
// List element types
@SuppressWarnings("unchecked")
List<Object> list = (List<Object>)m.readValue("[ "+dec.toString()+" ]", List.class);
List<Object> list = (List<Object>) r.forType(List.class).readValue("[ "+dec.toString()+" ]");
assertEquals(1, list.size());
Object val = list.get(0);
assertEquals(BigDecimal.class, val.getClass());
assertEquals(dec, val);

// and a map
Map<?,?> map = m.readValue("{ \"a\" : "+dec.toString()+" }", Map.class);
Map<?,?> map = r.forType(Map.class).readValue("{ \"a\" : "+dec.toString()+" }");
assertEquals(1, map.size());
val = map.get("a");
assertEquals(BigDecimal.class, val.getClass());
assertEquals(dec, val);
}

// [databind#504]
public void testForceIntsToLongs() throws Exception
{

}
}

0 comments on commit 48a21be

Please sign in to comment.