blob: c47b7cb74ca42d8771a5e529bc729a02dd5ad48f [file] [log] [blame]
package map;
import main.BaseTest;
import java.io.*;
import java.math.BigDecimal;
import java.util.*;
import org.codehaus.jackson.*;
import org.codehaus.jackson.map.*;
/**
* This unit test suite tries verify simplest aspects of
* "Native" java type mapper; basically that is can properly serialize
* core JDK objects to JSON.
*
* @author Tatu Saloranta
*/
public class TestFromJavaType
extends BaseTest
{
public void testFromArray()
throws Exception
{
ArrayList<Object> doc = new ArrayList<Object>();
doc.add("Elem1");
doc.add(Integer.valueOf(3));
Map<String,Object> struct = new LinkedHashMap<String, Object>();
struct.put("first", Boolean.TRUE);
struct.put("Second", new ArrayList<Object>());
doc.add(struct);
doc.add(Boolean.FALSE);
ObjectMapper mapper = new ObjectMapper();
// loop more than once, just to ensure caching works ok (during second round)
for (int i = 0; i < 3; ++i) {
StringWriter sw = new StringWriter();
JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);
mapper.writeValue(gen, doc);
gen.close();
JsonParser jp = new JsonFactory().createJsonParser(new StringReader(sw.toString()));
assertEquals(JsonToken.START_ARRAY, jp.nextToken());
assertEquals(JsonToken.VALUE_STRING, jp.nextToken());
assertEquals("Elem1", getAndVerifyText(jp));
assertEquals(JsonToken.VALUE_NUMBER_INT, jp.nextToken());
assertEquals(3, jp.getIntValue());
assertEquals(JsonToken.START_OBJECT, jp.nextToken());
assertEquals(JsonToken.FIELD_NAME, jp.nextToken());
assertEquals("first", getAndVerifyText(jp));
assertEquals(JsonToken.VALUE_TRUE, jp.nextToken());
assertEquals(JsonToken.FIELD_NAME, jp.nextToken());
assertEquals("Second", getAndVerifyText(jp));
assertEquals(JsonToken.START_ARRAY, jp.nextToken());
assertEquals(JsonToken.END_ARRAY, jp.nextToken());
assertEquals(JsonToken.END_OBJECT, jp.nextToken());
assertEquals(JsonToken.VALUE_FALSE, jp.nextToken());
assertEquals(JsonToken.END_ARRAY, jp.nextToken());
assertNull(jp.nextToken());
}
}
public void testFromMap()
throws Exception
{
LinkedHashMap<String,Object> doc = new LinkedHashMap<String,Object>();
doc.put("a1", "\"text\"");
doc.put("int", Integer.valueOf(137));
doc.put("foo bar", Long.valueOf(1234567890L));
ObjectMapper mapper = new ObjectMapper();
for (int i = 0; i < 3; ++i) {
StringWriter sw = new StringWriter();
JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);
mapper.writeValue(gen, doc);
gen.close();
JsonParser jp = new JsonFactory().createJsonParser(new StringReader(sw.toString()));
assertEquals(JsonToken.START_OBJECT, jp.nextToken());
assertEquals(JsonToken.FIELD_NAME, jp.nextToken());
assertEquals("a1", getAndVerifyText(jp));
assertEquals(JsonToken.VALUE_STRING, jp.nextToken());
assertEquals("\"text\"", getAndVerifyText(jp));
assertEquals(JsonToken.FIELD_NAME, jp.nextToken());
assertEquals("int", getAndVerifyText(jp));
assertEquals(JsonToken.VALUE_NUMBER_INT, jp.nextToken());
assertEquals(137, jp.getIntValue());
assertEquals(JsonToken.FIELD_NAME, jp.nextToken());
assertEquals("foo bar", getAndVerifyText(jp));
assertEquals(JsonToken.VALUE_NUMBER_INT, jp.nextToken());
assertEquals(1234567890L, jp.getLongValue());
assertEquals(JsonToken.END_OBJECT, jp.nextToken());
assertNull(jp.nextToken());
}
}
/**
* Unit test to catch bug [JACKSON-8].
*/
public void testBigDecimal()
throws Exception
{
StringWriter sw = new StringWriter();
JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);
Map<String, Object> map = new HashMap<String, Object>();
String PI_STR = "3.14159265";
map.put("pi", new BigDecimal(PI_STR));
new ObjectMapper().writeValue(gen, map);
gen.close();
assertEquals("{\"pi\":3.14159265}", sw.toString());
}
}