1 package com.fasterxml.jackson.databind.ser; 2 3 import com.fasterxml.jackson.core.*; 4 import com.fasterxml.jackson.databind.*; 5 6 public class TestArraySerialization 7 extends BaseMapTest 8 { 9 private final ObjectMapper MAPPER = sharedMapper(); 10 testLongStringArray()11 public void testLongStringArray() throws Exception 12 { 13 final int SIZE = 40000; 14 15 StringBuilder sb = new StringBuilder(SIZE*2); 16 for (int i = 0; i < SIZE; ++i) { 17 sb.append((char) i); 18 } 19 String str = sb.toString(); 20 byte[] data = MAPPER.writeValueAsBytes(new String[] { "abc", str, null, str }); 21 JsonParser jp = MAPPER.createParser(data); 22 assertToken(JsonToken.START_ARRAY, jp.nextToken()); 23 assertToken(JsonToken.VALUE_STRING, jp.nextToken()); 24 assertEquals("abc", jp.getText()); 25 assertToken(JsonToken.VALUE_STRING, jp.nextToken()); 26 String actual = jp.getText(); 27 assertEquals(str.length(), actual.length()); 28 assertEquals(str, actual); 29 assertToken(JsonToken.VALUE_NULL, jp.nextToken()); 30 assertToken(JsonToken.VALUE_STRING, jp.nextToken()); 31 assertEquals(str, jp.getText()); 32 assertToken(JsonToken.END_ARRAY, jp.nextToken()); 33 assertNull(jp.nextToken()); 34 jp.close(); 35 } 36 testIntArray()37 public void testIntArray() throws Exception 38 { 39 String json = MAPPER.writeValueAsString(new int[] { 1, 2, 3, -7 }); 40 assertEquals("[1,2,3,-7]", json); 41 } 42 testBigIntArray()43 public void testBigIntArray() throws Exception 44 { 45 final int SIZE = 99999; 46 int[] ints = new int[SIZE]; 47 for (int i = 0; i < ints.length; ++i) { 48 ints[i] = i; 49 } 50 51 // Let's try couple of times, to ensure that state is handled 52 // correctly by ObjectMapper (wrt buffer recycling used 53 // with 'writeAsBytes()') 54 for (int round = 0; round < 3; ++round) { 55 byte[] data = MAPPER.writeValueAsBytes(ints); 56 JsonParser jp = MAPPER.createParser(data); 57 assertToken(JsonToken.START_ARRAY, jp.nextToken()); 58 for (int i = 0; i < SIZE; ++i) { 59 assertToken(JsonToken.VALUE_NUMBER_INT, jp.nextToken()); 60 assertEquals(i, jp.getIntValue()); 61 } 62 assertToken(JsonToken.END_ARRAY, jp.nextToken()); 63 jp.close(); 64 } 65 } 66 testLongArray()67 public void testLongArray() throws Exception 68 { 69 String json = MAPPER.writeValueAsString(new long[] { Long.MIN_VALUE, 0, Long.MAX_VALUE }); 70 assertEquals("["+Long.MIN_VALUE+",0,"+Long.MAX_VALUE+"]", json); 71 } 72 testStringArray()73 public void testStringArray() throws Exception 74 { 75 assertEquals("[\"a\",\"\\\"foo\\\"\",null]", 76 MAPPER.writeValueAsString(new String[] { "a", "\"foo\"", null })); 77 assertEquals("[]", 78 MAPPER.writeValueAsString(new String[] { })); 79 } 80 testDoubleArray()81 public void testDoubleArray() throws Exception 82 { 83 String json = MAPPER.writeValueAsString(new double[] { 1.01, 2.0, -7, Double.NaN, Double.NEGATIVE_INFINITY, Double.POSITIVE_INFINITY }); 84 assertEquals("[1.01,2.0,-7.0,\"NaN\",\"-Infinity\",\"Infinity\"]", json); 85 } 86 testFloatArray()87 public void testFloatArray() throws Exception 88 { 89 String json = MAPPER.writeValueAsString(new float[] { 1.01f, 2.0f, -7f, Float.NaN, Float.NEGATIVE_INFINITY, Float.POSITIVE_INFINITY }); 90 assertEquals("[1.01,2.0,-7.0,\"NaN\",\"-Infinity\",\"Infinity\"]", json); 91 } 92 } 93