package com.fasterxml.jackson.databind.ser;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.databind.*;
public class TestArraySerialization
extends BaseMapTest
{
private final ObjectMapper MAPPER = objectMapper();
public void testLongStringArray() throws Exception
{
final int SIZE = 40000;
StringBuilder sb = new StringBuilder(SIZE*2);
for (int i = 0; i < SIZE; ++i) {
sb.append((char) i);
}
String str = sb.toString();
byte[] data = MAPPER.writeValueAsBytes(new String[] { "abc", str, null, str });
JsonParser jp = MAPPER.getFactory().createParser(data);
assertToken(JsonToken.START_ARRAY, jp.nextToken());
assertToken(JsonToken.VALUE_STRING, jp.nextToken());
assertEquals("abc", jp.getText());
assertToken(JsonToken.VALUE_STRING, jp.nextToken());
String actual = jp.getText();
assertEquals(str.length(), actual.length());
assertEquals(str, actual);
assertToken(JsonToken.VALUE_NULL, jp.nextToken());
assertToken(JsonToken.VALUE_STRING, jp.nextToken());
assertEquals(str, jp.getText());
assertToken(JsonToken.END_ARRAY, jp.nextToken());
assertNull(jp.nextToken());
jp.close();
}
public void testIntArray() throws Exception
{
String json = MAPPER.writeValueAsString(new int[] { 1, 2, 3, -7 });
assertEquals("[1,2,3,-7]", json);
}
public void testBigIntArray() throws Exception
{
final int SIZE = 99999;
int[] ints = new int[SIZE];
for (int i = 0; i < ints.length; ++i) {
ints[i] = i;
}
// Let's try couple of times, to ensure that state is handled
// correctly by ObjectMapper (wrt buffer recycling used
// with 'writeAsBytes()')
JsonFactory f = MAPPER.getFactory();
for (int round = 0; round < 3; ++round) {
byte[] data = MAPPER.writeValueAsBytes(ints);
JsonParser jp = f.createParser(data);
assertToken(JsonToken.START_ARRAY, jp.nextToken());
for (int i = 0; i < SIZE; ++i) {
assertToken(JsonToken.VALUE_NUMBER_INT, jp.nextToken());
assertEquals(i, jp.getIntValue());
}
assertToken(JsonToken.END_ARRAY, jp.nextToken());
jp.close();
}
}
public void testLongArray() throws Exception
{
String json = MAPPER.writeValueAsString(new long[] { Long.MIN_VALUE, 0, Long.MAX_VALUE });
assertEquals("["+Long.MIN_VALUE+",0,"+Long.MAX_VALUE+"]", json);
}
public void testStringArray() throws Exception
{
assertEquals("[\"a\",\"\\\"foo\\\"\",null]",
MAPPER.writeValueAsString(new String[] { "a", "\"foo\"", null }));
assertEquals("[]",
MAPPER.writeValueAsString(new String[] { }));
}
public void testDoubleArray() throws Exception
{
String json = MAPPER.writeValueAsString(new double[] { 1.01, 2.0, -7, Double.NaN, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY });
assertEquals("[1.01,2.0,-7.0,\"NaN\",\"-Infinity\",\"Infinity\"]", json);
}
public void testFloatArray() throws Exception
{
String json = MAPPER.writeValueAsString(new float[] { 1.01f, 2.0f, -7f, Float.NaN, Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY });
assertEquals("[1.01,2.0,-7.0,\"NaN\",\"-Infinity\",\"Infinity\"]", json);
}
}