Skip to content

Commit b56139e

Browse files
authored
Improve test robustness to help with #3406 (#4903)
1 parent 49f4dae commit b56139e

File tree

10 files changed

+73
-53
lines changed

10 files changed

+73
-53
lines changed

src/test/java/com/fasterxml/jackson/databind/MapperViaParserTest.java

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,9 @@ public void testIncrementalPojoReading() throws IOException
116116
assertToken(JsonToken.VALUE_NUMBER_INT, p.nextToken());
117117
assertEquals(Integer.valueOf(1), p.readValueAs(Integer.class));
118118
assertEquals(Boolean.TRUE, p.readValueAs(Boolean.class));
119-
/* note: null can be returned both when there is no more
120-
* data in current scope, AND when Json null literal is
121-
* bound!
122-
*/
119+
120+
// note: null can be returned both when there is no more
121+
// data in current scope, AND when Json null literal is bound!
123122
assertNull(p.readValueAs(Object.class));
124123
// but we can verify that it was Json null by:
125124
assertEquals(JsonToken.VALUE_NULL, p.getLastClearedToken());

src/test/java/com/fasterxml/jackson/databind/SerializeUsingJDKTest.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,6 @@
1313

1414
import static com.fasterxml.jackson.databind.testutil.DatabindTestUtil.*;
1515

16-
1716
/**
1817
* Tests to verify that most core Jackson components can be serialized
1918
* using default JDK serialization: this feature is useful for some

src/test/java/com/fasterxml/jackson/databind/convert/UpdateViaObjectReaderTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -80,6 +80,7 @@ public DataA deserialize(JsonParser p, DeserializationContext ctxt) throws IOExc
8080
}
8181
/*JsonNode node =*/ p.readValueAsTree();
8282

83+
p.skipChildren(); // important, must consume input
8384
DataA da = new DataA();
8485
da.i = 5;
8586
return da;

src/test/java/com/fasterxml/jackson/databind/deser/BeanDeserializerTest.java

Lines changed: 14 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -98,9 +98,10 @@ public BogusBeanDeserializer(String a, String b) {
9898
}
9999

100100
@Override
101-
public Object deserialize(JsonParser jp, DeserializationContext ctxt)
101+
public Object deserialize(JsonParser p, DeserializationContext ctxt)
102102
throws IOException
103103
{
104+
p.skipChildren();
104105
return new Bean(a, b);
105106
}
106107
}
@@ -242,8 +243,10 @@ static class ArrayDeserializerModifier extends BeanDeserializerModifier {
242243
public JsonDeserializer<?> modifyArrayDeserializer(DeserializationConfig config, ArrayType valueType,
243244
BeanDescription beanDesc, JsonDeserializer<?> deserializer) {
244245
return (JsonDeserializer<?>) new StdDeserializer<Object>(Object.class) {
245-
@Override public Object deserialize(JsonParser jp,
246-
DeserializationContext ctxt) {
246+
@Override public Object deserialize(JsonParser p,
247+
DeserializationContext ctxt) throws IOException
248+
{
249+
p.skipChildren();
247250
return new String[] { "foo" };
248251
}
249252
};
@@ -255,8 +258,10 @@ static class CollectionDeserializerModifier extends BeanDeserializerModifier {
255258
public JsonDeserializer<?> modifyCollectionDeserializer(DeserializationConfig config, CollectionType valueType,
256259
BeanDescription beanDesc, JsonDeserializer<?> deserializer) {
257260
return (JsonDeserializer<?>) new StdDeserializer<Object>(Object.class) {
258-
@Override public Object deserialize(JsonParser jp,
259-
DeserializationContext ctxt) {
261+
@Override public Object deserialize(JsonParser p,
262+
DeserializationContext ctxt) throws IOException
263+
{
264+
p.skipChildren();
260265
ArrayList<String> list = new ArrayList<String>();
261266
list.add("foo");
262267
return list;
@@ -270,8 +275,10 @@ static class MapDeserializerModifier extends BeanDeserializerModifier {
270275
public JsonDeserializer<?> modifyMapDeserializer(DeserializationConfig config, MapType valueType,
271276
BeanDescription beanDesc, JsonDeserializer<?> deserializer) {
272277
return (JsonDeserializer<?>) new StdDeserializer<Object>(Object.class) {
273-
@Override public Object deserialize(JsonParser jp,
274-
DeserializationContext ctxt) {
278+
@Override public Object deserialize(JsonParser p,
279+
DeserializationContext ctxt) throws IOException
280+
{
281+
p.skipChildren();
275282
HashMap<String,String> map = new HashMap<String,String>();
276283
map.put("a", "foo");
277284
return map;

src/test/java/com/fasterxml/jackson/databind/deser/filter/ProblemHandlerTest.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,7 @@ public Object handleUnexpectedToken(DeserializationContext ctxt,
147147
String failureMsg)
148148
throws IOException
149149
{
150+
p.skipChildren();
150151
return value;
151152
}
152153
}

src/test/java/com/fasterxml/jackson/databind/deser/jdk/JDKScalarsDeserTest.java

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,16 @@
1414
import com.fasterxml.jackson.databind.*;
1515
import com.fasterxml.jackson.databind.exc.MismatchedInputException;
1616
import com.fasterxml.jackson.databind.util.ClassUtil;
17+
import com.fasterxml.jackson.databind.testutil.DatabindTestUtil;
1718

1819
import static org.junit.jupiter.api.Assertions.*;
1920

20-
import static com.fasterxml.jackson.databind.testutil.DatabindTestUtil.*;
21-
2221
/**
2322
* Unit tests for verifying handling of simple basic non-structured
2423
* types; primitives (and/or their wrappers), Strings.
2524
*/
2625
public class JDKScalarsDeserTest
26+
extends DatabindTestUtil
2727
{
2828
final static String NAN_STRING = "NaN";
2929

@@ -434,7 +434,7 @@ public void testBase64Variants() throws Exception
434434

435435
/**
436436
* Then a unit test to verify that we can conveniently bind sequence of
437-
* space-separate simple values
437+
* space-separated simple values
438438
*/
439439
@Test
440440
public void testSequenceOfInts() throws Exception
@@ -446,12 +446,15 @@ public void testSequenceOfInts() throws Exception
446446
sb.append(" ");
447447
sb.append(i);
448448
}
449-
JsonParser jp = MAPPER.createParser(sb.toString());
450-
for (int i = 0; i < NR_OF_INTS; ++i) {
451-
Integer result = MAPPER.readValue(jp, Integer.class);
452-
assertEquals(Integer.valueOf(i), result);
449+
ObjectMapper mapper = jsonMapperBuilder()
450+
.disable(DeserializationFeature.FAIL_ON_TRAILING_TOKENS)
451+
.build();
452+
try (JsonParser p = mapper.createParser(sb.toString())) {
453+
for (int i = 0; i < NR_OF_INTS; ++i) {
454+
Integer result = mapper.readValue(p, Integer.class);
455+
assertEquals(Integer.valueOf(i), result);
456+
}
453457
}
454-
jp.close();
455458
}
456459

457460
/*

src/test/java/com/fasterxml/jackson/databind/deser/jdk/LocaleDeserTest.java

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
import org.junit.jupiter.api.Test;
88

99
import com.fasterxml.jackson.core.type.TypeReference;
10+
import com.fasterxml.jackson.databind.DeserializationFeature;
1011
import com.fasterxml.jackson.databind.ObjectMapper;
1112

1213
import static org.junit.jupiter.api.Assertions.assertEquals;
@@ -260,7 +261,9 @@ private void assertLocale(Locale expected, Locale actual) {
260261
@Test
261262
public void testLocaleFuzz47034() throws Exception
262263
{
263-
Locale loc = MAPPER.readValue(getClass().getResourceAsStream("/fuzz/oss-fuzz-47034.json"),
264+
Locale loc = MAPPER.reader()
265+
.without(DeserializationFeature.FAIL_ON_TRAILING_TOKENS)
266+
.readValue(getClass().getResourceAsStream("/fuzz/oss-fuzz-47034.json"),
264267
Locale.class);
265268
assertNotNull(loc);
266269
}
@@ -270,7 +273,9 @@ public void testLocaleFuzz47034() throws Exception
270273
@Test
271274
public void testLocaleFuzz47036() throws Exception
272275
{
273-
Locale loc = MAPPER.readValue(getClass().getResourceAsStream("/fuzz/oss-fuzz-47036.json"),
276+
Locale loc = MAPPER.reader()
277+
.without(DeserializationFeature.FAIL_ON_TRAILING_TOKENS)
278+
.readValue(getClass().getResourceAsStream("/fuzz/oss-fuzz-47036.json"),
274279
Locale.class);
275280
assertNotNull(loc);
276281
}

src/test/java/com/fasterxml/jackson/databind/deser/validate/FullStreamReadTest.java

Lines changed: 26 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -6,21 +6,16 @@
66

77
import com.fasterxml.jackson.core.exc.StreamReadException;
88
import com.fasterxml.jackson.core.json.JsonReadFeature;
9-
import com.fasterxml.jackson.databind.DeserializationFeature;
10-
import com.fasterxml.jackson.databind.JsonNode;
11-
import com.fasterxml.jackson.databind.ObjectMapper;
12-
import com.fasterxml.jackson.databind.ObjectReader;
9+
import com.fasterxml.jackson.databind.*;
1310
import com.fasterxml.jackson.databind.exc.MismatchedInputException;
11+
import com.fasterxml.jackson.databind.testutil.DatabindTestUtil;
1412

1513
import static org.junit.jupiter.api.Assertions.*;
1614

17-
import static com.fasterxml.jackson.databind.testutil.DatabindTestUtil.newJsonMapper;
18-
import static com.fasterxml.jackson.databind.testutil.DatabindTestUtil.verifyException;
19-
2015
/**
21-
* Test for validating {@link com.fasterxml.jackson.databind.DeserializationFeature#FAIL_ON_TRAILING_TOKENS}.
16+
* Test for validating {@link DeserializationFeature#FAIL_ON_TRAILING_TOKENS}.
2217
*/
23-
public class FullStreamReadTest
18+
public class FullStreamReadTest extends DatabindTestUtil
2419
{
2520
private final static String JSON_OK_ARRAY = " [ 1, 2, 3] ";
2621
private final static String JSON_OK_ARRAY_WITH_COMMENT = JSON_OK_ARRAY + " // stuff ";
@@ -42,35 +37,40 @@ public class FullStreamReadTest
4237
@Test
4338
public void testMapperAcceptTrailing() throws Exception
4439
{
45-
assertFalse(MAPPER.isEnabled(DeserializationFeature.FAIL_ON_TRAILING_TOKENS));
40+
ObjectMapper mapper = jsonMapperBuilder()
41+
.disable(DeserializationFeature.FAIL_ON_TRAILING_TOKENS)
42+
.build();
43+
44+
assertFalse(mapper.isEnabled(DeserializationFeature.FAIL_ON_TRAILING_TOKENS));
4645

4746
// by default, should be ok to read, all
48-
_verifyArray(MAPPER.readTree(JSON_OK_ARRAY));
49-
_verifyArray(MAPPER.readTree(JSON_OK_ARRAY_WITH_COMMENT));
50-
_verifyArray(MAPPER.readTree(JSON_FAIL_ARRAY));
47+
_verifyArray(mapper.readTree(JSON_OK_ARRAY));
48+
_verifyArray(mapper.readTree(JSON_OK_ARRAY_WITH_COMMENT));
49+
_verifyArray(mapper.readTree(JSON_FAIL_ARRAY));
5150

5251
// and also via "untyped"
53-
_verifyCollection(MAPPER.readValue(JSON_OK_ARRAY, List.class));
54-
_verifyCollection(MAPPER.readValue(JSON_OK_ARRAY_WITH_COMMENT, List.class));
55-
_verifyCollection(MAPPER.readValue(JSON_FAIL_ARRAY, List.class));
52+
_verifyCollection(mapper.readValue(JSON_OK_ARRAY, List.class));
53+
_verifyCollection(mapper.readValue(JSON_OK_ARRAY_WITH_COMMENT, List.class));
54+
_verifyCollection(mapper.readValue(JSON_FAIL_ARRAY, List.class));
5655

5756
// ditto for getting `null` and some other token
5857

59-
assertTrue(MAPPER.readTree(JSON_OK_NULL).isNull());
60-
assertTrue(MAPPER.readTree(JSON_OK_NULL_WITH_COMMENT).isNull());
61-
assertTrue(MAPPER.readTree(JSON_FAIL_NULL).isNull());
58+
assertTrue(mapper.readTree(JSON_OK_NULL).isNull());
59+
assertTrue(mapper.readTree(JSON_OK_NULL_WITH_COMMENT).isNull());
60+
assertTrue(mapper.readTree(JSON_FAIL_NULL).isNull());
6261

63-
assertNull(MAPPER.readValue(JSON_OK_NULL, Object.class));
64-
assertNull(MAPPER.readValue(JSON_OK_NULL_WITH_COMMENT, Object.class));
65-
assertNull(MAPPER.readValue(JSON_FAIL_NULL, Object.class));
62+
assertNull(mapper.readValue(JSON_OK_NULL, Object.class));
63+
assertNull(mapper.readValue(JSON_OK_NULL_WITH_COMMENT, Object.class));
64+
assertNull(mapper.readValue(JSON_FAIL_NULL, Object.class));
6665
}
6766

6867
@Test
6968
public void testMapperFailOnTrailing() throws Exception
7069
{
7170
// but things change if we enforce checks
72-
ObjectMapper strict = newJsonMapper()
73-
.enable(DeserializationFeature.FAIL_ON_TRAILING_TOKENS);
71+
ObjectMapper strict = jsonMapperBuilder()
72+
.enable(DeserializationFeature.FAIL_ON_TRAILING_TOKENS)
73+
.build();
7474
assertTrue(strict.isEnabled(DeserializationFeature.FAIL_ON_TRAILING_TOKENS));
7575

7676
// some still ok
@@ -177,8 +177,8 @@ public void testMapperFailOnTrailingWithNull() throws Exception
177177
@Test
178178
public void testReaderAcceptTrailing() throws Exception
179179
{
180-
ObjectReader R = MAPPER.reader();
181-
assertFalse(R.isEnabled(DeserializationFeature.FAIL_ON_TRAILING_TOKENS));
180+
ObjectReader R = MAPPER.reader()
181+
.without(DeserializationFeature.FAIL_ON_TRAILING_TOKENS);
182182

183183
_verifyArray(R.readTree(JSON_OK_ARRAY));
184184
_verifyArray(R.readTree(JSON_OK_ARRAY_WITH_COMMENT));

src/test/java/com/fasterxml/jackson/databind/module/SimpleModuleAddMethodsTest.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,8 @@ public void serialize(Dog value, JsonGenerator gen, SerializerProvider serialize
5252

5353
static class ClassDogDeserializer extends JsonDeserializer<Dog> {
5454
@Override
55-
public Dog deserialize(JsonParser p, DeserializationContext ctxt) {
55+
public Dog deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
56+
p.skipChildren();
5657
return new Dog("class-dog");
5758
}
5859
}
@@ -73,7 +74,8 @@ public Object deserializeKey(String key, DeserializationContext ctxt) {
7374

7475
static class ModuleDogDeserializer extends JsonDeserializer<Dog> {
7576
@Override
76-
public Dog deserialize(JsonParser p, DeserializationContext ctxt) {
77+
public Dog deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
78+
p.skipChildren();
7779
return new Dog("module-dog");
7880
}
7981
}
@@ -143,6 +145,7 @@ public BuildFailBean build() {
143145
static class BuildSuccessBeanDeserializer extends JsonDeserializer<BuildSuccessBean> {
144146
@Override
145147
public BuildSuccessBean deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
148+
p.skipChildren();
146149
return new BuildSuccessBean(7, 8);
147150
}
148151
}

src/test/java/com/fasterxml/jackson/databind/module/SimpleModuleTest.java

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -202,6 +202,7 @@ static class Test3787Bean {
202202
static class Deserializer3787A extends JsonDeserializer<Test3787Bean> {
203203
@Override
204204
public Test3787Bean deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
205+
p.skipChildren(); // important to consume value
205206
Test3787Bean simpleTestBean = new Test3787Bean();
206207
simpleTestBean.value = "I am A";
207208
return simpleTestBean;
@@ -211,6 +212,7 @@ public Test3787Bean deserialize(JsonParser p, DeserializationContext ctxt) throw
211212
static class Deserializer3787B extends JsonDeserializer<Test3787Bean> {
212213
@Override
213214
public Test3787Bean deserialize(JsonParser p, DeserializationContext ctxt) throws IOException {
215+
p.skipChildren(); // important to consume value
214216
Test3787Bean simpleTestBean = new Test3787Bean();
215217
simpleTestBean.value = "I am B";
216218
return simpleTestBean;
@@ -492,7 +494,7 @@ public void testAutoDiscovery() throws Exception
492494
}
493495

494496
@Test
495-
public void testAddSerializerTwiceThenOnlyLatestIsKept() throws JsonProcessingException {
497+
public void testAddSerializerTwiceThenOnlyLatestIsKept() throws Exception {
496498
SimpleModule module = new SimpleModule()
497499
.addSerializer(Test3787Bean.class, new Serializer3787A())
498500
.addSerializer(Test3787Bean.class, new Serializer3787B());
@@ -503,7 +505,7 @@ public void testAddSerializerTwiceThenOnlyLatestIsKept() throws JsonProcessingEx
503505
}
504506

505507
@Test
506-
public void testAddModuleWithSerializerTwiceThenOnlyLatestIsKept() throws JsonProcessingException {
508+
public void testAddModuleWithSerializerTwiceThenOnlyLatestIsKept() throws Exception {
507509
SimpleModule firstModule = new SimpleModule()
508510
.addSerializer(Test3787Bean.class, new Serializer3787A());
509511
SimpleModule secondModule = new SimpleModule()
@@ -520,7 +522,7 @@ public void testAddModuleWithSerializerTwiceThenOnlyLatestIsKept() throws JsonPr
520522
}
521523

522524
@Test
523-
public void testAddModuleWithSerializerTwiceThenOnlyLatestIsKept_reverseOrder() throws JsonProcessingException {
525+
public void testAddModuleWithSerializerTwiceThenOnlyLatestIsKept_reverseOrder() throws Exception {
524526
SimpleModule firstModule = new SimpleModule()
525527
.addSerializer(Test3787Bean.class, new Serializer3787A());
526528
SimpleModule secondModule = new SimpleModule()

0 commit comments

Comments
 (0)