package com.fasterxml.jackson.databind.util;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.core.util.JsonParserSequence;
import com.fasterxml.jackson.databind.BaseMapTest;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonParserSequenceTest extends BaseMapTest {
private final ObjectMapper MAPPER = objectMapper();
/**
* Verifies fix for [core#372]
*/
@SuppressWarnings("resource")
public void testJsonParserSequenceOverridesSkipChildren() throws Exception
{
// Create parser from TokenBuffer containing an incomplete JSON object
TokenBuffer buf1 = new TokenBuffer(MAPPER, false);
buf1.writeStartObject();
buf1.writeFieldName("foo");
buf1.writeStartObject();
JsonParser parser1 = buf1.asParser();
// Create parser from second TokenBuffer that completes the object started by the first buffer
TokenBuffer buf2 = new TokenBuffer(MAPPER, false);
buf2.writeEndObject();
buf2.writeEndObject();
JsonParser parser2 = buf2.asParser();
// Create sequence of both parsers and verify tokens
JsonParser parserSequence = JsonParserSequence.createFlattened(false, parser1, parser2);
assertToken(JsonToken.START_OBJECT, parserSequence.nextToken());
assertToken(JsonToken.FIELD_NAME, parserSequence.nextToken());
assertToken(JsonToken.START_OBJECT, parserSequence.nextToken());
// Skip children of current token. JsonParserSequence's overridden version should switch to the next parser
// in the sequence
parserSequence.skipChildren();
// Verify last token
assertToken(JsonToken.END_OBJECT, parserSequence.nextToken());
}
}