Skip to content

Commit 86f8560

Browse files
committed
Add (failing) tests for #2525
1 parent 36cbb80 commit 86f8560

File tree

3 files changed

+236
-0
lines changed

3 files changed

+236
-0
lines changed

src/test/java/com/fasterxml/jackson/databind/node/ArrayNodeTest.java

+3
Original file line numberDiff line numberDiff line change
@@ -260,6 +260,7 @@ public void testParser() throws Exception
260260
p.setCodec(null);
261261
assertNull(p.getCodec());
262262
assertNotNull(p.getParsingContext());
263+
// assertTrue(p.getParsingContext().inRoot());
263264
assertNotNull(p.getTokenLocation());
264265
assertNotNull(p.getCurrentLocation());
265266
assertNull(p.getEmbeddedObject());
@@ -268,6 +269,8 @@ public void testParser() throws Exception
268269
//assertNull(p.getNumberType());
269270

270271
assertToken(JsonToken.START_ARRAY, p.nextToken());
272+
assertNotNull(p.getParsingContext());
273+
assertTrue(p.getParsingContext().inArray());
271274
p.skipChildren();
272275
assertToken(JsonToken.END_ARRAY, p.getCurrentToken());
273276
p.close();
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,232 @@
1+
package com.fasterxml.jackson.failing;
2+
3+
import java.io.IOException;
4+
5+
import com.fasterxml.jackson.core.JsonParser;
6+
import com.fasterxml.jackson.core.JsonPointer;
7+
import com.fasterxml.jackson.core.JsonToken;
8+
9+
import com.fasterxml.jackson.databind.*;
10+
import com.fasterxml.jackson.databind.util.TokenBuffer;
11+
12+
public class ParsingContext2525Test extends BaseMapTest
13+
{
14+
private final ObjectMapper MAPPER = sharedMapper();
15+
16+
private final String MINIMAL_ARRAY_DOC = "[ 42 ]";
17+
18+
private final String MINIMAL_OBJECT_DOC = "{\"answer\" : 42 }";
19+
20+
private final String FULL_DOC = aposToQuotes("{'a':123,'array':[1,2,[3],5,{'obInArray':4}],"
21+
+"'ob':{'first':[false,true],'second':{'sub':37}},'b':true}");
22+
23+
/*
24+
/**********************************************************************
25+
/* Baseline sanity check first
26+
/**********************************************************************
27+
*/
28+
29+
public void testAllWithRegularParser() throws Exception
30+
{
31+
try (JsonParser p = MAPPER.getFactory().createParser(MINIMAL_ARRAY_DOC)) {
32+
_testSimpleArrayUsingPathAsPointer(p);
33+
}
34+
try (JsonParser p = MAPPER.getFactory().createParser(MINIMAL_OBJECT_DOC)) {
35+
_testSimpleObjectUsingPathAsPointer(p);
36+
}
37+
try (JsonParser p = MAPPER.getFactory().createParser(FULL_DOC)) {
38+
_testFullDocUsingPathAsPointer(p);
39+
}
40+
}
41+
42+
/*
43+
/**********************************************************************
44+
/* Then TokenBuffer-backed tests
45+
/**********************************************************************
46+
*/
47+
48+
// 25-Oct-2019, tatu: These appear more problematic than I thought, wrt
49+
// parent contexts...
50+
51+
public void testSimpleArrayWithBuffer() throws Exception
52+
{
53+
try (TokenBuffer buf = _readAsTokenBuffer(MINIMAL_ARRAY_DOC)) {
54+
_testSimpleArrayUsingPathAsPointer(buf.asParser());
55+
}
56+
}
57+
58+
public void testSimpleObjectWithBuffer() throws Exception
59+
{
60+
try (TokenBuffer buf = _readAsTokenBuffer(MINIMAL_OBJECT_DOC)) {
61+
_testSimpleObjectUsingPathAsPointer(buf.asParser());
62+
}
63+
}
64+
65+
public void testFullDocWithBuffer() throws Exception
66+
{
67+
try (TokenBuffer buf = _readAsTokenBuffer(FULL_DOC)) {
68+
_testFullDocUsingPathAsPointer(buf.asParser());
69+
}
70+
}
71+
72+
private TokenBuffer _readAsTokenBuffer(String doc) throws IOException
73+
{
74+
try (JsonParser p = MAPPER.getFactory().createParser(doc)) {
75+
p.nextToken();
76+
return TokenBuffer.asCopyOfValue(p)
77+
.overrideParentContext(null);
78+
}
79+
}
80+
81+
/*
82+
/**********************************************************************
83+
/* And Tree-backed tests
84+
/**********************************************************************
85+
*/
86+
87+
public void testSimpleArrayWithTree() throws Exception
88+
{
89+
JsonNode root = MAPPER.readTree(MINIMAL_ARRAY_DOC);
90+
try (JsonParser p = root.traverse(null)) {
91+
_testSimpleArrayUsingPathAsPointer(p);
92+
}
93+
}
94+
95+
public void testSimpleObjectWithTree() throws Exception
96+
{
97+
JsonNode root = MAPPER.readTree(MINIMAL_OBJECT_DOC);
98+
try (JsonParser p = root.traverse(null)) {
99+
_testSimpleObjectUsingPathAsPointer(p);
100+
}
101+
}
102+
103+
public void testFullDocWithTree() throws Exception
104+
{
105+
JsonNode root = MAPPER.readTree(FULL_DOC);
106+
try (JsonParser p = root.traverse(null)) {
107+
_testFullDocUsingPathAsPointer(p);
108+
}
109+
}
110+
111+
/*
112+
/**********************************************************************
113+
/* Shared helper methods
114+
/**********************************************************************
115+
*/
116+
117+
private void _testSimpleArrayUsingPathAsPointer(JsonParser p) throws Exception
118+
{
119+
assertSame(JsonPointer.empty(), p.getParsingContext().pathAsPointer());
120+
121+
assertToken(JsonToken.START_ARRAY, p.nextToken());
122+
assertSame(JsonPointer.empty(), p.getParsingContext().pathAsPointer());
123+
124+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
125+
assertEquals("/0", p.getParsingContext().pathAsPointer().toString());
126+
127+
assertToken(JsonToken.END_ARRAY, p.nextToken());
128+
assertSame(JsonPointer.empty(), p.getParsingContext().pathAsPointer());
129+
130+
assertNull(p.nextToken());
131+
}
132+
133+
private void _testSimpleObjectUsingPathAsPointer(JsonParser p) throws Exception
134+
{
135+
assertSame(JsonPointer.empty(), p.getParsingContext().pathAsPointer());
136+
137+
assertToken(JsonToken.START_OBJECT, p.nextToken());
138+
assertSame(JsonPointer.empty(), p.getParsingContext().pathAsPointer());
139+
140+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
141+
assertEquals("/answer", p.getParsingContext().pathAsPointer().toString());
142+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
143+
assertEquals(42, p.getIntValue());
144+
assertEquals("/answer", p.getParsingContext().pathAsPointer().toString());
145+
146+
assertToken(JsonToken.END_OBJECT, p.nextToken());
147+
assertSame(JsonPointer.empty(), p.getParsingContext().pathAsPointer());
148+
149+
assertNull(p.nextToken());
150+
}
151+
152+
private void _testFullDocUsingPathAsPointer(JsonParser p) throws Exception
153+
{
154+
// by default should just get "empty"
155+
assertSame(JsonPointer.empty(), p.getParsingContext().pathAsPointer());
156+
157+
// let's just traverse, then:
158+
assertToken(JsonToken.START_OBJECT, p.nextToken());
159+
assertSame(JsonPointer.empty(), p.getParsingContext().pathAsPointer());
160+
161+
assertToken(JsonToken.FIELD_NAME, p.nextToken()); // a
162+
assertEquals("/a", p.getParsingContext().pathAsPointer().toString());
163+
164+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
165+
assertEquals("/a", p.getParsingContext().pathAsPointer().toString());
166+
167+
assertToken(JsonToken.FIELD_NAME, p.nextToken()); // array
168+
assertEquals("/array", p.getParsingContext().pathAsPointer().toString());
169+
assertToken(JsonToken.START_ARRAY, p.nextToken());
170+
assertEquals("/array", p.getParsingContext().pathAsPointer().toString());
171+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken()); // 1
172+
assertEquals("/array/0", p.getParsingContext().pathAsPointer().toString());
173+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken()); // 2
174+
assertEquals("/array/1", p.getParsingContext().pathAsPointer().toString());
175+
assertToken(JsonToken.START_ARRAY, p.nextToken());
176+
assertEquals("/array/2", p.getParsingContext().pathAsPointer().toString());
177+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken()); // 3
178+
assertEquals("/array/2/0", p.getParsingContext().pathAsPointer().toString());
179+
assertToken(JsonToken.END_ARRAY, p.nextToken());
180+
assertEquals("/array/2", p.getParsingContext().pathAsPointer().toString());
181+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken()); // 5
182+
assertEquals("/array/3", p.getParsingContext().pathAsPointer().toString());
183+
assertToken(JsonToken.START_OBJECT, p.nextToken());
184+
assertEquals("/array/4", p.getParsingContext().pathAsPointer().toString());
185+
assertToken(JsonToken.FIELD_NAME, p.nextToken()); // obInArray
186+
assertEquals("/array/4/obInArray", p.getParsingContext().pathAsPointer().toString());
187+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken()); // 4
188+
assertEquals("/array/4/obInArray", p.getParsingContext().pathAsPointer().toString());
189+
assertToken(JsonToken.END_OBJECT, p.nextToken());
190+
assertEquals("/array/4", p.getParsingContext().pathAsPointer().toString());
191+
assertToken(JsonToken.END_ARRAY, p.nextToken()); // /array
192+
assertEquals("/array", p.getParsingContext().pathAsPointer().toString());
193+
194+
assertToken(JsonToken.FIELD_NAME, p.nextToken()); // ob
195+
assertEquals("/ob", p.getParsingContext().pathAsPointer().toString());
196+
assertToken(JsonToken.START_OBJECT, p.nextToken());
197+
assertEquals("/ob", p.getParsingContext().pathAsPointer().toString());
198+
assertToken(JsonToken.FIELD_NAME, p.nextToken()); // first
199+
assertEquals("/ob/first", p.getParsingContext().pathAsPointer().toString());
200+
assertToken(JsonToken.START_ARRAY, p.nextToken());
201+
assertEquals("/ob/first", p.getParsingContext().pathAsPointer().toString());
202+
assertToken(JsonToken.VALUE_FALSE, p.nextToken());
203+
assertEquals("/ob/first/0", p.getParsingContext().pathAsPointer().toString());
204+
assertToken(JsonToken.VALUE_TRUE, p.nextToken());
205+
assertEquals("/ob/first/1", p.getParsingContext().pathAsPointer().toString());
206+
assertToken(JsonToken.END_ARRAY, p.nextToken());
207+
assertEquals("/ob/first", p.getParsingContext().pathAsPointer().toString());
208+
assertToken(JsonToken.FIELD_NAME, p.nextToken()); // second
209+
assertEquals("/ob/second", p.getParsingContext().pathAsPointer().toString());
210+
assertToken(JsonToken.START_OBJECT, p.nextToken());
211+
assertEquals("/ob/second", p.getParsingContext().pathAsPointer().toString());
212+
assertToken(JsonToken.FIELD_NAME, p.nextToken()); // sub
213+
assertEquals("/ob/second/sub", p.getParsingContext().pathAsPointer().toString());
214+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken()); // 37
215+
assertEquals("/ob/second/sub", p.getParsingContext().pathAsPointer().toString());
216+
assertToken(JsonToken.END_OBJECT, p.nextToken());
217+
assertEquals("/ob/second", p.getParsingContext().pathAsPointer().toString());
218+
assertToken(JsonToken.END_OBJECT, p.nextToken()); // /ob
219+
assertEquals("/ob", p.getParsingContext().pathAsPointer().toString());
220+
221+
assertToken(JsonToken.FIELD_NAME, p.nextToken()); // b
222+
assertEquals("/b", p.getParsingContext().pathAsPointer().toString());
223+
assertToken(JsonToken.VALUE_TRUE, p.nextToken());
224+
assertEquals("/b", p.getParsingContext().pathAsPointer().toString());
225+
226+
assertToken(JsonToken.END_OBJECT, p.nextToken());
227+
assertSame(JsonPointer.empty(), p.getParsingContext().pathAsPointer());
228+
229+
assertNull(p.nextToken());
230+
}
231+
232+
}

src/test/java/com/fasterxml/jackson/failing/TestUnknownProperty426.java

+1
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@ public void setUserId(Integer v) {
3838

3939
private final ObjectMapper MAPPER = new ObjectMapper();
4040

41+
// Aside from [databind#426], also relevant: [databind#1044]?
4142
public void testIssue426() throws Exception
4243
{
4344
final String JSON = aposToQuotes("{'userId': 9, 'firstName': 'Mike' }");

0 commit comments

Comments
 (0)