| package org.codehaus.jackson.main; |
| |
| import org.codehaus.jackson.*; |
| |
| import java.io.*; |
| |
| /** |
| * Set of basic unit tests for verifying that the Array write methods |
| * of {@link JsonGenerator} work as expected. |
| */ |
| public class TestGeneratorArray |
| extends main.BaseTest |
| { |
| public void testEmptyArrayWrite() |
| throws Exception |
| { |
| StringWriter sw = new StringWriter(); |
| JsonGenerator gen = new JsonFactory().createJsonGenerator(sw); |
| |
| JsonStreamContext ctxt = gen.getOutputContext(); |
| assertTrue(ctxt.inRoot()); |
| assertFalse(ctxt.inArray()); |
| assertFalse(ctxt.inObject()); |
| assertEquals(0, ctxt.getEntryCount()); |
| assertEquals(0, ctxt.getCurrentIndex()); |
| |
| gen.writeStartArray(); |
| |
| ctxt = gen.getOutputContext(); |
| assertFalse(ctxt.inRoot()); |
| assertTrue(ctxt.inArray()); |
| assertFalse(ctxt.inObject()); |
| assertEquals(0, ctxt.getEntryCount()); |
| assertEquals(0, ctxt.getCurrentIndex()); |
| |
| gen.writeEndArray(); |
| |
| ctxt = gen.getOutputContext(); |
| assertTrue("Should be in root, was "+ctxt.getTypeDesc(), ctxt.inRoot()); |
| assertFalse(ctxt.inArray()); |
| assertFalse(ctxt.inObject()); |
| assertEquals(1, ctxt.getEntryCount()); |
| // Index won't yet move |
| assertEquals(0, ctxt.getCurrentIndex()); |
| |
| gen.close(); |
| String docStr = sw.toString(); |
| JsonParser jp = createParserUsingReader(docStr); |
| assertEquals(JsonToken.START_ARRAY, jp.nextToken()); |
| assertEquals(JsonToken.END_ARRAY, jp.nextToken()); |
| jp.close(); |
| |
| // Ok, then array with nested empty array |
| sw = new StringWriter(); |
| gen = new JsonFactory().createJsonGenerator(sw); |
| gen.writeStartArray(); |
| gen.writeStartArray(); |
| gen.writeEndArray(); |
| gen.writeEndArray(); |
| gen.close(); |
| docStr = sw.toString(); |
| jp = createParserUsingReader(docStr); |
| assertEquals(JsonToken.START_ARRAY, jp.nextToken()); |
| assertEquals(JsonToken.START_ARRAY, jp.nextToken()); |
| assertEquals(JsonToken.END_ARRAY, jp.nextToken()); |
| assertEquals(JsonToken.END_ARRAY, jp.nextToken()); |
| assertEquals(null, jp.nextToken()); |
| jp.close(); |
| } |
| |
| public void testInvalidArrayWrite() |
| throws Exception |
| { |
| StringWriter sw = new StringWriter(); |
| JsonGenerator gen = new JsonFactory().createJsonGenerator(sw); |
| gen.writeStartArray(); |
| // Mismatch: |
| try { |
| gen.writeEndObject(); |
| fail("Expected an exception for mismatched array/object write"); |
| } catch (JsonGenerationException e) { |
| verifyException(e, "Current context not an object"); |
| } |
| } |
| |
| public void testSimpleArrayWrite() |
| throws Exception |
| { |
| StringWriter sw = new StringWriter(); |
| JsonGenerator gen = new JsonFactory().createJsonGenerator(sw); |
| gen.writeStartArray(); |
| gen.writeNumber(13); |
| gen.writeBoolean(true); |
| gen.writeString("foobar"); |
| gen.writeEndArray(); |
| gen.close(); |
| String docStr = sw.toString(); |
| JsonParser jp = createParserUsingReader(docStr); |
| assertEquals(JsonToken.START_ARRAY, jp.nextToken()); |
| assertEquals(JsonToken.VALUE_NUMBER_INT, jp.nextToken()); |
| assertEquals(13, jp.getIntValue()); |
| assertEquals(JsonToken.VALUE_TRUE, jp.nextToken()); |
| assertEquals(JsonToken.VALUE_STRING, jp.nextToken()); |
| assertEquals("foobar", jp.getText()); |
| assertEquals(JsonToken.END_ARRAY, jp.nextToken()); |
| assertEquals(null, jp.nextToken()); |
| jp.close(); |
| } |
| } |