Skip to content

Commit 74cd91f

Browse files
authored
Add tests for #1418 (#1497)
1 parent 2bf3937 commit 74cd91f

File tree

1 file changed

+160
-0
lines changed

1 file changed

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

0 commit comments

Comments
 (0)