blob: 293fb987d3a3b5955a3c8110b8f1d11477fef105 [file] [log] [blame]
package org.codehaus.jackson.smile;
import java.io.*;
import org.codehaus.jackson.JsonToken;
/**
* Unit tests for verifying that multiple document output and document
* boundaries and/or header mark handling works as expected
*/
public class TestSmileDocBoundary
extends SmileTestBase
{
public void testNoHeadersNoEndMarker() throws Exception
{
_verifyMultiDoc(false, false);
}
public void testHeadersNoEndMarker() throws Exception
{
_verifyMultiDoc(true, false);
}
public void testEndMarkerNoHeader() throws Exception
{
_verifyMultiDoc(false, true);
}
public void testHeaderAndEndMarker() throws Exception
{
_verifyMultiDoc(true, true);
}
public void testExtraHeader() throws Exception
{
// also; sprinkling headers can be used to segment document
for (boolean addHeader : new boolean[] { false, true }) {
SmileFactory f = smileFactory(false, false, false);
ByteArrayOutputStream out = new ByteArrayOutputStream();
SmileGenerator jg = f.createJsonGenerator(out);
jg.writeNumber(1);
if (addHeader) jg.writeHeader();
jg.writeNumber(2);
if (addHeader) jg.writeHeader();
jg.writeNumber(3);
jg.close();
SmileParser jp = f.createJsonParser(out.toByteArray());
assertToken(JsonToken.VALUE_NUMBER_INT, jp.nextToken());
assertEquals(1, jp.getIntValue());
if (addHeader) {
assertNull(jp.nextToken());
}
assertToken(JsonToken.VALUE_NUMBER_INT, jp.nextToken());
assertEquals(2, jp.getIntValue());
if (addHeader) {
assertNull(jp.nextToken());
}
assertToken(JsonToken.VALUE_NUMBER_INT, jp.nextToken());
assertEquals(3, jp.getIntValue());
assertNull(jp.nextToken());
jg.close();
}
}
/*
/**********************************************************
/* Helper methods
/**********************************************************
*/
protected void _verifyMultiDoc(boolean addHeader, boolean addEndMarker) throws Exception
{
SmileFactory f = smileFactory(false, addHeader, addEndMarker);
ByteArrayOutputStream out = new ByteArrayOutputStream();
SmileGenerator jg = f.createJsonGenerator(out);
// First doc, JSON Object
jg.writeStartObject();
jg.writeEndObject();
jg.close();
// and second, array
jg = f.createJsonGenerator(out);
jg.writeStartArray();
jg.writeEndArray();
jg.close();
// and read it back
SmileParser jp = f.createJsonParser(out.toByteArray());
assertToken(JsonToken.START_OBJECT, jp.nextToken());
assertToken(JsonToken.END_OBJECT, jp.nextToken());
// now: if one of header or end marker (or, both) enabled, should get null here:
if (addHeader || addEndMarker) {
assertNull(jp.nextToken());
}
assertToken(JsonToken.START_ARRAY, jp.nextToken());
assertToken(JsonToken.END_ARRAY, jp.nextToken());
// end
assertNull(jp.nextToken());
// and no more:
assertNull(jp.nextToken());
}
}