blob: 096dcfbaeb8a3543871eed5cd608c8efb080cf9c [file] [log] [blame]
package map;
import main.BaseTest;
import java.io.*;
import org.codehaus.jackson.*;
import org.codehaus.jackson.map.*;
/**
* This unit test suite tries to verify that the "JSON type"
* mapper constructed JsonNodes can be serialized properly.
*/
public class TestFromJsonType
extends BaseTest
{
final static String FIELD1 = "first";
final static String FIELD2 = "Second?";
final static String FIELD3 = "foo'n \"bar\"";
final static String FIELD4 = "4";
final static String TEXT1 = "Some text & \"stuff\"";
final static String TEXT2 = "Some more text:\twith\nlinefeeds and all!";
final static double DOUBLE_VALUE = 9.25;
public void testFromArray()
throws Exception
{
JsonTypeMapper mapper = new JsonTypeMapper();
JsonNode root = mapper.arrayNode();
root.appendElement(mapper.textNode(TEXT1));
root.appendElement(mapper.numberNode(3));
JsonNode obj = mapper.objectNode();
root.appendElement(obj);
obj.setElement(FIELD1, mapper.booleanNode(true));
obj.setElement(FIELD2, mapper.arrayNode());
root.appendElement(mapper.booleanNode(false));
/* Ok, ready... let's serialize using one of two alternate
* methods: first preferred (using generator)
*/
StringWriter sw = new StringWriter();
JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);
root.writeTo(gen);
gen.close();
verifyFromArray(sw.toString());
// And then convenient but less efficient alternative:
verifyFromArray(root.toString());
}
public void testFromMap()
throws Exception
{
JsonTypeMapper mapper = new JsonTypeMapper();
JsonNode root = mapper.objectNode();
root.setElement(FIELD4, mapper.textNode(TEXT2));
root.setElement(FIELD3, mapper.numberNode(-1));
root.setElement(FIELD2, mapper.arrayNode());
root.setElement(FIELD1, mapper.numberNode(DOUBLE_VALUE));
/* Let's serialize using one of two alternate methods:
* first preferred (using generator)
*/
StringWriter sw = new StringWriter();
JsonGenerator gen = new JsonFactory().createJsonGenerator(sw);
root.writeTo(gen);
gen.close();
verifyFromMap(sw.toString());
// And then convenient but less efficient alternative:
verifyFromMap(root.toString());
}
/*
///////////////////////////////////////////////////////////////
// Internal methods
///////////////////////////////////////////////////////////////
*/
private void verifyFromArray(String input)
throws Exception
{
JsonParser jp = new JsonFactory().createJsonParser(new StringReader(input));
assertEquals(JsonToken.START_ARRAY, jp.nextToken());
assertEquals(JsonToken.VALUE_STRING, jp.nextToken());
assertEquals(TEXT1, 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(FIELD1, getAndVerifyText(jp));
assertEquals(JsonToken.VALUE_TRUE, jp.nextToken());
assertEquals(JsonToken.FIELD_NAME, jp.nextToken());
assertEquals(FIELD2, 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());
}
private void verifyFromMap(String input)
throws Exception
{
JsonParser jp = new JsonFactory().createJsonParser(new StringReader(input));
assertEquals(JsonToken.START_OBJECT, jp.nextToken());
assertEquals(JsonToken.FIELD_NAME, jp.nextToken());
assertEquals(FIELD4, getAndVerifyText(jp));
assertEquals(JsonToken.VALUE_STRING, jp.nextToken());
assertEquals(TEXT2, getAndVerifyText(jp));
assertEquals(JsonToken.FIELD_NAME, jp.nextToken());
assertEquals(FIELD3, getAndVerifyText(jp));
assertEquals(JsonToken.VALUE_NUMBER_INT, jp.nextToken());
assertEquals(-1, jp.getIntValue());
assertEquals(JsonToken.FIELD_NAME, jp.nextToken());
assertEquals(FIELD2, getAndVerifyText(jp));
assertEquals(JsonToken.START_ARRAY, jp.nextToken());
assertEquals(JsonToken.END_ARRAY, jp.nextToken());
assertEquals(JsonToken.FIELD_NAME, jp.nextToken());
assertEquals(FIELD1, getAndVerifyText(jp));
assertEquals(JsonToken.VALUE_NUMBER_FLOAT, jp.nextToken());
assertEquals(DOUBLE_VALUE, jp.getDoubleValue());
assertEquals(JsonToken.END_OBJECT, jp.nextToken());
assertNull(jp.nextToken());
}
}