blob: 955d3d5dcd5f73b248cd185e235df74429ef2017 [file] [log] [blame]
package com.fasterxml.jackson.core.json;
import com.fasterxml.jackson.core.*;
import com.fasterxml.jackson.core.util.JsonParserSequence;
@SuppressWarnings("resource")
public class ParserSequenceTest
extends com.fasterxml.jackson.core.BaseTest
{
public void testSimple() throws Exception
{
JsonParser p1 = JSON_FACTORY.createParser("[ 1 ]");
JsonParser p2 = JSON_FACTORY.createParser("[ 2 ]");
JsonParserSequence seq = JsonParserSequence.createFlattened(false, p1, p2);
assertEquals(2, seq.containedParsersCount());
assertFalse(p1.isClosed());
assertFalse(p2.isClosed());
assertFalse(seq.isClosed());
assertToken(JsonToken.START_ARRAY, seq.nextToken());
assertToken(JsonToken.VALUE_NUMBER_INT, seq.nextToken());
assertEquals(1, seq.getIntValue());
assertToken(JsonToken.END_ARRAY, seq.nextToken());
assertFalse(p1.isClosed());
assertFalse(p2.isClosed());
assertFalse(seq.isClosed());
assertToken(JsonToken.START_ARRAY, seq.nextToken());
// first parser ought to be closed now
assertTrue(p1.isClosed());
assertFalse(p2.isClosed());
assertFalse(seq.isClosed());
assertToken(JsonToken.VALUE_NUMBER_INT, seq.nextToken());
assertEquals(2, seq.getIntValue());
assertToken(JsonToken.END_ARRAY, seq.nextToken());
assertTrue(p1.isClosed());
assertFalse(p2.isClosed());
assertFalse(seq.isClosed());
assertNull(seq.nextToken());
assertTrue(p1.isClosed());
assertTrue(p2.isClosed());
assertTrue(seq.isClosed());
seq.close();
}
public void testMultiLevel() throws Exception
{
JsonParser p1 = JSON_FACTORY.createParser("[ 1 ] ");
JsonParser p2 = JSON_FACTORY.createParser(" 5");
JsonParser p3 = JSON_FACTORY.createParser(" { } ");
JsonParserSequence seq1 = JsonParserSequence.createFlattened(true, p1, p2);
JsonParserSequence seq = JsonParserSequence.createFlattened(false, seq1, p3);
assertEquals(3, seq.containedParsersCount());
assertToken(JsonToken.START_ARRAY, seq.nextToken());
assertToken(JsonToken.VALUE_NUMBER_INT, seq.nextToken());
assertToken(JsonToken.END_ARRAY, seq.nextToken());
assertToken(JsonToken.VALUE_NUMBER_INT, seq.nextToken());
assertToken(JsonToken.START_OBJECT, seq.nextToken());
assertToken(JsonToken.END_OBJECT, seq.nextToken());
assertNull(seq.nextToken());
assertTrue(p1.isClosed());
assertTrue(p2.isClosed());
assertTrue(p3.isClosed());
assertTrue(seq.isClosed());
}
// for [jackson-core#296]
public void testInitializationDisabled() throws Exception
{
// // First, with old legacy settings
JsonParser p1 = JSON_FACTORY.createParser("1 2");
JsonParser p2 = JSON_FACTORY.createParser("3 true");
assertToken(JsonToken.VALUE_NUMBER_INT, p1.nextToken());
assertEquals(1, p1.getIntValue());
assertToken(JsonToken.VALUE_NUMBER_INT, p2.nextToken());
assertEquals(3, p2.getIntValue());
// with legacy settings, will see neither '1' nor '3'
JsonParserSequence seq = JsonParserSequence.createFlattened(false, p1, p2);
assertToken(JsonToken.VALUE_NUMBER_INT, seq.nextToken());
assertEquals(2, seq.getIntValue());
assertToken(JsonToken.VALUE_TRUE, seq.nextToken());
assertNull(seq.nextToken());
seq.close();
}
// for [jackson-core#296]
public void testInitializationEnabled() throws Exception
{
// // and then with new "check for current":
JsonParser p1 = JSON_FACTORY.createParser("1 2");
JsonParser p2 = JSON_FACTORY.createParser("3 true");
assertToken(JsonToken.VALUE_NUMBER_INT, p1.nextToken());
assertEquals(1, p1.getIntValue());
assertToken(JsonToken.VALUE_NUMBER_INT, p2.nextToken());
assertEquals(3, p2.getIntValue());
// with new settings, both '1' and '3' will be visible
JsonParserSequence seq = JsonParserSequence.createFlattened(true, p1, p2);
assertToken(JsonToken.VALUE_NUMBER_INT, seq.nextToken());
assertEquals(1, seq.getIntValue());
assertToken(JsonToken.VALUE_NUMBER_INT, seq.nextToken());
assertEquals(2, seq.getIntValue());
assertToken(JsonToken.VALUE_NUMBER_INT, seq.nextToken());
assertEquals(3, seq.getIntValue());
assertToken(JsonToken.VALUE_TRUE, seq.nextToken());
assertNull(seq.nextToken());
seq.close();
}
}