JsonParserSequenceTest.java

package tools.jackson.databind.util;

import org.junit.jupiter.api.Test;

import tools.jackson.core.JsonParser;
import tools.jackson.core.JsonToken;
import tools.jackson.core.ObjectReadContext;
import tools.jackson.core.util.JsonParserSequence;
import tools.jackson.databind.testutil.DatabindTestUtil;

public class JsonParserSequenceTest extends DatabindTestUtil
{
    /**
     * Verifies fix for [core#372]
     */
    @SuppressWarnings("resource")
    @Test
    public void testJsonParserSequenceOverridesSkipChildren() throws Exception
    {
        // Create parser from TokenBuffer containing an incomplete JSON object
        TokenBuffer buf1 = TokenBuffer.forGeneration();
        buf1.writeStartObject();
        buf1.writeName("foo");
        buf1.writeStartObject();
        JsonParser parser1 = buf1.asParser(ObjectReadContext.empty());

        // Create parser from second TokenBuffer that completes the object started by the first buffer
        TokenBuffer buf2 = TokenBuffer.forGeneration();
        buf2.writeEndObject();
        buf2.writeEndObject();
        JsonParser parser2 = buf2.asParser(ObjectReadContext.empty());

        // Create sequence of both parsers and verify tokens
        JsonParser parserSequence = JsonParserSequence.createFlattened(false, parser1, parser2);
        assertToken(JsonToken.START_OBJECT, parserSequence.nextToken());
        assertToken(JsonToken.PROPERTY_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());
    }
}