Skip to content

Commit 1452c82

Browse files
committed
Merge branch '2.x' into 3.0
2 parents 5b08924 + 74cd91f commit 1452c82

File tree

1 file changed

+162
-0
lines changed

1 file changed

+162
-0
lines changed
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
package tools.jackson.core.unittest.tofix;
2+
3+
import org.junit.jupiter.api.Test;
4+
5+
import tools.jackson.core.*;
6+
import tools.jackson.core.filter.FilteringParserDelegate;
7+
import tools.jackson.core.filter.TokenFilter;
8+
import tools.jackson.core.filter.TokenFilter.Inclusion;
9+
import tools.jackson.core.json.JsonFactory;
10+
import tools.jackson.core.testutil.failure.JacksonTestFailureExpected;
11+
import tools.jackson.core.unittest.JacksonCoreTestBase;
12+
13+
import static org.junit.jupiter.api.Assertions.assertEquals;
14+
import static org.junit.jupiter.api.Assertions.assertNull;
15+
16+
// for [core#1418]
17+
class ParserFilterEmpty1418Test extends JacksonCoreTestBase
18+
{
19+
// Custom TokenFilter that only includes the "one" property
20+
// and returns true for includeEmptyArray
21+
static class OnePropertyFilter extends TokenFilter {
22+
@Override
23+
public TokenFilter includeProperty(String name) {
24+
if ("one".equals(name)) {
25+
return this;
26+
}
27+
return null;
28+
}
29+
30+
@Override
31+
public boolean includeEmptyArray(boolean contentsFiltered) {
32+
return true;
33+
}
34+
}
35+
36+
/*
37+
/**********************************************************************
38+
/* Test methods
39+
/**********************************************************************
40+
*/
41+
42+
private final JsonFactory JSON_F = newStreamFactory();
43+
44+
// [core#1418]: case #1: failing
45+
@JacksonTestFailureExpected
46+
@Test
47+
void filterArrayWithObjectsEndingWithFilteredProperty1() throws Exception
48+
{
49+
final String json = "[{\"one\":1},{\"two\":2}]";
50+
JsonParser p0 = _createParser(JSON_F, json);
51+
JsonParser p = new FilteringParserDelegate(p0,
52+
new OnePropertyFilter(),
53+
Inclusion.INCLUDE_ALL_AND_PATH,
54+
true // multipleMatches
55+
);
56+
57+
// Expected output: [{"one":1},{}]
58+
assertToken(JsonToken.START_ARRAY, p.nextToken());
59+
assertToken(JsonToken.START_OBJECT, p.nextToken());
60+
assertToken(JsonToken.PROPERTY_NAME, p.nextToken());
61+
assertEquals("one", p.currentName());
62+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
63+
assertEquals(1, p.getIntValue());
64+
assertToken(JsonToken.END_OBJECT, p.nextToken());
65+
66+
// Second object has no "one" property, should be empty object
67+
assertToken(JsonToken.START_OBJECT, p.nextToken());
68+
assertToken(JsonToken.END_OBJECT, p.nextToken());
69+
70+
assertToken(JsonToken.END_ARRAY, p.nextToken());
71+
assertNull(p.nextToken());
72+
p.close();
73+
}
74+
75+
// [core#1418]: case #2: passing
76+
@Test
77+
void filterArrayWithObjectsEndingWithFilteredProperty2() throws Exception
78+
{
79+
final String json = "[{\"one\":1},{\"one\":1,\"two\":2}]";
80+
JsonParser p0 = _createParser(JSON_F, json);
81+
JsonParser p = new FilteringParserDelegate(p0,
82+
new OnePropertyFilter(),
83+
Inclusion.INCLUDE_ALL_AND_PATH,
84+
true // multipleMatches
85+
);
86+
87+
// Expected output: [{"one":1},{"one":1}]
88+
assertToken(JsonToken.START_ARRAY, p.nextToken());
89+
assertToken(JsonToken.START_OBJECT, p.nextToken());
90+
assertToken(JsonToken.PROPERTY_NAME, p.nextToken());
91+
assertEquals("one", p.currentName());
92+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
93+
assertEquals(1, p.getIntValue());
94+
assertToken(JsonToken.END_OBJECT, p.nextToken());
95+
96+
// Second object has "one" property
97+
assertToken(JsonToken.START_OBJECT, p.nextToken());
98+
assertToken(JsonToken.PROPERTY_NAME, p.nextToken());
99+
assertEquals("one", p.currentName());
100+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
101+
assertEquals(1, p.getIntValue());
102+
assertToken(JsonToken.END_OBJECT, p.nextToken());
103+
104+
assertToken(JsonToken.END_ARRAY, p.nextToken());
105+
assertNull(p.nextToken());
106+
p.close();
107+
}
108+
109+
// [core#1418]: case #3: passing
110+
@Test
111+
void filterArrayWithObjectsEndingWithFilteredProperty3() throws Exception
112+
{
113+
final String json = "[{\"one\":1},{\"one\":1,\"two\":2},{\"one\":1}]";
114+
JsonParser p0 = _createParser(JSON_F, json);
115+
JsonParser p = new FilteringParserDelegate(p0,
116+
new OnePropertyFilter(),
117+
Inclusion.INCLUDE_ALL_AND_PATH,
118+
true // multipleMatches
119+
);
120+
121+
// Expected output: [{"one":1},{"one":1},{"one":1}]
122+
assertToken(JsonToken.START_ARRAY, p.nextToken());
123+
124+
// First object
125+
assertToken(JsonToken.START_OBJECT, p.nextToken());
126+
assertToken(JsonToken.PROPERTY_NAME, p.nextToken());
127+
assertEquals("one", p.currentName());
128+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
129+
assertEquals(1, p.getIntValue());
130+
assertToken(JsonToken.END_OBJECT, p.nextToken());
131+
132+
// Second object
133+
assertToken(JsonToken.START_OBJECT, p.nextToken());
134+
assertToken(JsonToken.PROPERTY_NAME, p.nextToken());
135+
assertEquals("one", p.currentName());
136+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
137+
assertEquals(1, p.getIntValue());
138+
assertToken(JsonToken.END_OBJECT, p.nextToken());
139+
140+
// Third object
141+
assertToken(JsonToken.START_OBJECT, p.nextToken());
142+
assertToken(JsonToken.PROPERTY_NAME, p.nextToken());
143+
assertEquals("one", p.currentName());
144+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
145+
assertEquals(1, p.getIntValue());
146+
assertToken(JsonToken.END_OBJECT, p.nextToken());
147+
148+
assertToken(JsonToken.END_ARRAY, p.nextToken());
149+
assertNull(p.nextToken());
150+
p.close();
151+
}
152+
153+
/*
154+
/**********************************************************************
155+
/* Helper methods
156+
/**********************************************************************
157+
*/
158+
159+
private JsonParser _createParser(TokenStreamFactory f, String json) throws Exception {
160+
return f.createParser(ObjectReadContext.empty(), json);
161+
}
162+
}

0 commit comments

Comments
 (0)