Skip to content

Commit 489becb

Browse files
committed
add tests for #330
1 parent 5370412 commit 489becb

File tree

4 files changed

+139
-15
lines changed

4 files changed

+139
-15
lines changed

src/main/java/com/fasterxml/jackson/core/json/ReaderBasedJsonParser.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -1892,7 +1892,7 @@ protected JsonToken _handleOddValue(int i) throws IOException
18921892
}
18931893
return _handleInvalidNumberStart(_inputBuffer[_inputPtr++], false);
18941894
}
1895-
// [Issue#77] Try to decode most likely token
1895+
// [core#77] Try to decode most likely token
18961896
if (Character.isJavaIdentifierStart(i)) {
18971897
_reportInvalidToken(""+((char) i), "('true', 'false' or 'null')");
18981898
}

src/test/java/com/fasterxml/jackson/core/BaseTest.java

+1
Original file line numberDiff line numberDiff line change
@@ -422,6 +422,7 @@ protected String readAndWrite(JsonFactory f, JsonParser p) throws IOException
422422
{
423423
StringWriter sw = new StringWriter(100);
424424
JsonGenerator g = f.createGenerator(sw);
425+
g.disable(JsonGenerator.Feature.AUTO_CLOSE_JSON_CONTENT);
425426
try {
426427
while (p.nextToken() != null) {
427428
g.copyCurrentEvent(p);

src/test/java/com/fasterxml/jackson/core/filter/BasicParserFilteringTest.java

-14
Original file line numberDiff line numberDiff line change
@@ -90,20 +90,6 @@ public void testSingleMatchFilteringWithoutPath() throws Exception
9090
assertEquals(aposToQuotes("3"), result);
9191
}
9292

93-
@SuppressWarnings("resource")
94-
public void testSingleMatchFilteringWithPath() throws Exception
95-
{
96-
JsonParser p0 = JSON_F.createParser(SIMPLE);
97-
JsonParser p = new FilteringParserDelegate(p0,
98-
new NameMatchFilter("value"),
99-
true, // includePath
100-
false // multipleMatches
101-
);
102-
String result = readAndWrite(JSON_F, p);
103-
assertEquals(aposToQuotes("{'ob':{'value':3}}"), result);
104-
}
105-
106-
10793
@SuppressWarnings("resource")
10894
public void testNotAllowMultipleMatches() throws Exception
10995
{
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,137 @@
1+
package com.fasterxml.jackson.failing;
2+
3+
import java.util.Arrays;
4+
import java.util.HashSet;
5+
import java.util.Set;
6+
7+
import com.fasterxml.jackson.core.*;
8+
import com.fasterxml.jackson.core.JsonParser.NumberType;
9+
import com.fasterxml.jackson.core.filter.FilteringParserDelegate;
10+
import com.fasterxml.jackson.core.filter.TokenFilter;
11+
12+
// Tests for [core#330]
13+
public class TokenVerifyingParserFiltering330Test extends BaseTest
14+
{
15+
static class NameMatchFilter extends TokenFilter
16+
{
17+
private final Set<String> _names;
18+
19+
public NameMatchFilter(String... names) {
20+
_names = new HashSet<String>(Arrays.asList(names));
21+
}
22+
23+
@Override
24+
public TokenFilter includeElement(int index) {
25+
return this;
26+
}
27+
28+
@Override
29+
public TokenFilter includeProperty(String name) {
30+
if (_names.contains(name)) {
31+
return TokenFilter.INCLUDE_ALL;
32+
}
33+
return this;
34+
}
35+
36+
@Override
37+
protected boolean _includeScalar() { return false; }
38+
}
39+
40+
/*
41+
/**********************************************************
42+
/* Test methods
43+
/**********************************************************
44+
*/
45+
46+
private final JsonFactory JSON_F = new JsonFactory();
47+
48+
private final String SIMPLE = aposToQuotes("{'a':123,'array':[1,2],'ob':{'value0':2,'value':3,'value2':4},'b':true}");
49+
50+
@SuppressWarnings("resource")
51+
public void testBasicSingleMatchFilteringWithPath() throws Exception
52+
{
53+
JsonParser p0 = JSON_F.createParser(SIMPLE);
54+
JsonParser p = new FilteringParserDelegate(p0,
55+
new NameMatchFilter("value"),
56+
true, // includePath
57+
false // multipleMatches
58+
);
59+
60+
// {'a':123,'array':[1,2],'ob':{'value0':2,'value':3,'value2':4},'b':true}
61+
String result = readAndWrite(JSON_F, p);
62+
assertEquals(aposToQuotes("{'ob':{'value':3}}"), result);
63+
}
64+
65+
@SuppressWarnings("resource")
66+
public void testTokensSingleMatchWithPath() throws Exception
67+
{
68+
JsonParser p0 = JSON_F.createParser(SIMPLE);
69+
JsonParser p = new FilteringParserDelegate(p0,
70+
new NameMatchFilter("value"),
71+
true, // includePath
72+
false // multipleMatches
73+
);
74+
75+
assertFalse(p.hasCurrentToken());
76+
assertNull(p.getCurrentToken());
77+
assertEquals(JsonTokenId.ID_NO_TOKEN, p.getCurrentTokenId());
78+
assertFalse(p.isExpectedStartObjectToken());
79+
assertFalse(p.isExpectedStartArrayToken());
80+
81+
// {'a':123,'array':[1,2],'ob':{'value0':2,'value':3,'value2':4},'b':true}
82+
// String result = readAndWrite(JSON_F, p);
83+
// assertEquals(aposToQuotes("{'ob':{'value':3}}"), result);
84+
85+
assertToken(JsonToken.START_OBJECT, p.nextToken());
86+
assertEquals(JsonToken.START_OBJECT, p.getCurrentToken());
87+
assertTrue(p.isExpectedStartObjectToken());
88+
assertFalse(p.isExpectedStartArrayToken());
89+
90+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
91+
assertEquals(JsonToken.FIELD_NAME, p.getCurrentToken());
92+
assertEquals("ob", p.getCurrentName());
93+
// assertEquals("ob", p.getText());
94+
95+
assertToken(JsonToken.START_OBJECT, p.nextToken());
96+
assertEquals("ob", p.getCurrentName());
97+
98+
assertToken(JsonToken.FIELD_NAME, p.nextToken());
99+
assertEquals("value", p.getCurrentName());
100+
assertEquals("value", p.getText());
101+
102+
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
103+
assertEquals(JsonToken.VALUE_NUMBER_INT, p.getCurrentToken());
104+
assertEquals(NumberType.INT, p.getNumberType());
105+
assertEquals(3, p.getIntValue());
106+
assertEquals("value", p.getCurrentName());
107+
108+
assertToken(JsonToken.END_OBJECT, p.nextToken());
109+
assertEquals(JsonToken.END_OBJECT, p.getCurrentToken());
110+
111+
assertToken(JsonToken.END_OBJECT, p.nextToken());
112+
assertEquals(JsonToken.END_OBJECT, p.getCurrentToken());
113+
114+
p.clearCurrentToken();
115+
assertNull(p.getCurrentToken());
116+
117+
p.close();
118+
}
119+
120+
@SuppressWarnings("resource")
121+
public void testSkippingForSingleWithPath() throws Exception
122+
{
123+
JsonParser p0 = JSON_F.createParser(SIMPLE);
124+
JsonParser p = new FilteringParserDelegate(p0,
125+
new NameMatchFilter("value"),
126+
true, // includePath
127+
false // multipleMatches
128+
);
129+
130+
// assertEquals(aposToQuotes("{'ob':{'value':3}}"), result);
131+
132+
assertToken(JsonToken.START_OBJECT, p.nextToken());
133+
p.skipChildren();
134+
assertEquals(JsonToken.END_OBJECT, p.getCurrentToken());
135+
assertNull(p.nextToken());
136+
}
137+
}

0 commit comments

Comments
 (0)