blob: 955d3d5dcd5f73b248cd185e235df74429ef2017 [file] [log] [blame]
Cowtowncoder88c296c2015-05-27 12:08:24 -07001package com.fasterxml.jackson.core.json;
2
3import com.fasterxml.jackson.core.*;
4import com.fasterxml.jackson.core.util.JsonParserSequence;
5
Tatu Salorantae052c312016-07-01 21:11:25 -07006@SuppressWarnings("resource")
Cowtowncoder88c296c2015-05-27 12:08:24 -07007public class ParserSequenceTest
8 extends com.fasterxml.jackson.core.BaseTest
9{
Cowtowncoder88c296c2015-05-27 12:08:24 -070010 public void testSimple() throws Exception
11 {
12 JsonParser p1 = JSON_FACTORY.createParser("[ 1 ]");
13 JsonParser p2 = JSON_FACTORY.createParser("[ 2 ]");
Tatu Saloranta0d8b14d2016-07-03 22:02:12 -070014 JsonParserSequence seq = JsonParserSequence.createFlattened(false, p1, p2);
Cowtowncoder88c296c2015-05-27 12:08:24 -070015 assertEquals(2, seq.containedParsersCount());
16
17 assertFalse(p1.isClosed());
18 assertFalse(p2.isClosed());
19 assertFalse(seq.isClosed());
20 assertToken(JsonToken.START_ARRAY, seq.nextToken());
21 assertToken(JsonToken.VALUE_NUMBER_INT, seq.nextToken());
22 assertEquals(1, seq.getIntValue());
23 assertToken(JsonToken.END_ARRAY, seq.nextToken());
24 assertFalse(p1.isClosed());
25 assertFalse(p2.isClosed());
26 assertFalse(seq.isClosed());
27 assertToken(JsonToken.START_ARRAY, seq.nextToken());
28
29 // first parser ought to be closed now
30 assertTrue(p1.isClosed());
31 assertFalse(p2.isClosed());
32 assertFalse(seq.isClosed());
33
34 assertToken(JsonToken.VALUE_NUMBER_INT, seq.nextToken());
35 assertEquals(2, seq.getIntValue());
36 assertToken(JsonToken.END_ARRAY, seq.nextToken());
37 assertTrue(p1.isClosed());
38 assertFalse(p2.isClosed());
39 assertFalse(seq.isClosed());
40
41 assertNull(seq.nextToken());
42 assertTrue(p1.isClosed());
43 assertTrue(p2.isClosed());
44 assertTrue(seq.isClosed());
45
46 seq.close();
Tatu Salorantae052c312016-07-01 21:11:25 -070047 }
48
Tatu Saloranta42e0aff2016-11-04 19:52:05 -070049 public void testMultiLevel() throws Exception
50 {
51 JsonParser p1 = JSON_FACTORY.createParser("[ 1 ] ");
52 JsonParser p2 = JSON_FACTORY.createParser(" 5");
53 JsonParser p3 = JSON_FACTORY.createParser(" { } ");
54 JsonParserSequence seq1 = JsonParserSequence.createFlattened(true, p1, p2);
55 JsonParserSequence seq = JsonParserSequence.createFlattened(false, seq1, p3);
56 assertEquals(3, seq.containedParsersCount());
57
58 assertToken(JsonToken.START_ARRAY, seq.nextToken());
59 assertToken(JsonToken.VALUE_NUMBER_INT, seq.nextToken());
60 assertToken(JsonToken.END_ARRAY, seq.nextToken());
61
62 assertToken(JsonToken.VALUE_NUMBER_INT, seq.nextToken());
63
64 assertToken(JsonToken.START_OBJECT, seq.nextToken());
65 assertToken(JsonToken.END_OBJECT, seq.nextToken());
66
67 assertNull(seq.nextToken());
68 assertTrue(p1.isClosed());
69 assertTrue(p2.isClosed());
70 assertTrue(p3.isClosed());
71 assertTrue(seq.isClosed());
72 }
73
Tatu Salorantae052c312016-07-01 21:11:25 -070074 // for [jackson-core#296]
Tatu Saloranta0d8b14d2016-07-03 22:02:12 -070075 public void testInitializationDisabled() throws Exception
Tatu Salorantae052c312016-07-01 21:11:25 -070076 {
Tatu Saloranta0d8b14d2016-07-03 22:02:12 -070077 // // First, with old legacy settings
Tatu Salorantae052c312016-07-01 21:11:25 -070078
Tatu Saloranta0d8b14d2016-07-03 22:02:12 -070079 JsonParser p1 = JSON_FACTORY.createParser("1 2");
80 JsonParser p2 = JSON_FACTORY.createParser("3 true");
81 assertToken(JsonToken.VALUE_NUMBER_INT, p1.nextToken());
82 assertEquals(1, p1.getIntValue());
83 assertToken(JsonToken.VALUE_NUMBER_INT, p2.nextToken());
84 assertEquals(3, p2.getIntValue());
85
86 // with legacy settings, will see neither '1' nor '3'
87
88 JsonParserSequence seq = JsonParserSequence.createFlattened(false, p1, p2);
89 assertToken(JsonToken.VALUE_NUMBER_INT, seq.nextToken());
90 assertEquals(2, seq.getIntValue());
91 assertToken(JsonToken.VALUE_TRUE, seq.nextToken());
92 assertNull(seq.nextToken());
93 seq.close();
94 }
95
96 // for [jackson-core#296]
97 public void testInitializationEnabled() throws Exception
98 {
99 // // and then with new "check for current":
100 JsonParser p1 = JSON_FACTORY.createParser("1 2");
101 JsonParser p2 = JSON_FACTORY.createParser("3 true");
102 assertToken(JsonToken.VALUE_NUMBER_INT, p1.nextToken());
103 assertEquals(1, p1.getIntValue());
104 assertToken(JsonToken.VALUE_NUMBER_INT, p2.nextToken());
105 assertEquals(3, p2.getIntValue());
106
107 // with new settings, both '1' and '3' will be visible
108
109 JsonParserSequence seq = JsonParserSequence.createFlattened(true, p1, p2);
110 assertToken(JsonToken.VALUE_NUMBER_INT, seq.nextToken());
111 assertEquals(1, seq.getIntValue());
Tatu Salorantae052c312016-07-01 21:11:25 -0700112 assertToken(JsonToken.VALUE_NUMBER_INT, seq.nextToken());
113 assertEquals(2, seq.getIntValue());
114 assertToken(JsonToken.VALUE_NUMBER_INT, seq.nextToken());
115 assertEquals(3, seq.getIntValue());
Tatu Saloranta0d8b14d2016-07-03 22:02:12 -0700116 assertToken(JsonToken.VALUE_TRUE, seq.nextToken());
117 assertNull(seq.nextToken());
Tatu Salorantae052c312016-07-01 21:11:25 -0700118 seq.close();
Cowtowncoder88c296c2015-05-27 12:08:24 -0700119 }
120}