Skip to content

Commit

Permalink
Add a failing test for #2974
Browse files Browse the repository at this point in the history
  • Loading branch information
cowtowncoder committed Dec 6, 2020
1 parent 093cdcb commit b66dfb6
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 5 deletions.
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package com.fasterxml.jackson.databind;

import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.annotation.JsonProperty;
import com.fasterxml.jackson.annotation.*;

import com.fasterxml.jackson.databind.json.JsonMapper;
import com.fasterxml.jackson.databind.util.ClassUtil;
Expand Down Expand Up @@ -148,18 +146,24 @@ public void testDeserializeWithAltCtor() throws Exception {
assertEquals("name2", value.name());
}

public void testSerializeJsonRenameRecord() throws Exception {
public void testSerializeJsonRename() throws Exception {
String json = MAPPER.writeValueAsString(new RecordWithRename(123, "Bob"));
final Object EXP = map("id", Integer.valueOf(123), "rename", "Bob");
assertEquals(EXP, MAPPER.readValue(json, Object.class));
}

public void testDeserializeJsonRenameRecord() throws Exception {
public void testDeserializeJsonRename() throws Exception {
RecordWithRename value = MAPPER.readValue("{\"id\":123,\"rename\":\"Bob\"}",
RecordWithRename.class);
assertEquals(new RecordWithRename(123, "Bob"), value);
}

/*
/**********************************************************************
/* Internal helper methods
/**********************************************************************
*/

private Map<String,Object> map(String key1, Object value1,
String key2, Object value2) {
final Map<String, Object> result = new LinkedHashMap<>();
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
package com.fasterxml.jackson.databind;

import java.util.List;
import java.util.Map;

import com.fasterxml.jackson.annotation.JsonSetter;
import com.fasterxml.jackson.annotation.Nulls;
import com.fasterxml.jackson.databind.RecordTest.RecordWithRename;
import com.fasterxml.jackson.databind.exc.InvalidNullException;

public class RecordWithJsonSetter2974Test extends BaseMapTest
{
record RecordWithNonNullDefs(@JsonSetter(nulls=Nulls.AS_EMPTY) List<String> names,
@JsonSetter(nulls=Nulls.FAIL) Map<String, Integer> agesByNames)
{ }

private final ObjectMapper MAPPER = newJsonMapper();

/*
/**********************************************************************
/* Test methods, Record type introspection
/**********************************************************************
*/

// [databind#2974]
public void testDeserializeWithNullAsEmpty() throws Exception
{
final ObjectReader r = MAPPER.readerFor(RecordWithNonNullDefs.class);
// First, regular case
RecordWithNonNullDefs value = r.readValue(a2q(
"{'names':['bob'],'agesByNames':{'bob':39}}"));
assertEquals(1, value.names().size());
assertEquals("bob", value.names().get(0));
assertEquals(1, value.agesByNames().size());
assertEquals(Integer.valueOf(39), value.agesByNames().get("bob"));

// Then leave out list
value = r.readValue(a2q("{'agesByNames':{'bob':42}}"));
assertNotNull(value.names());
assertEquals(0, value.names().size());
assertNotNull(value.agesByNames());
assertEquals(1, value.agesByNames().size());
assertEquals(Integer.valueOf(42), value.agesByNames().get("bob"));

assertEquals(new RecordWithRename(123, "Bob"), value);
}

// [databind#2974]
public void testDeserializeWithFailForNull() throws Exception
{
final ObjectReader r = MAPPER.readerFor(RecordWithNonNullDefs.class);
// First, regular case
// But attempting to leave out Map ought to fail
try {
/*RecordWithNonNullDefs value =*/ r.readValue(a2q("{'names':['bob']}"));
fail("Should not pass with missing/null 'agesByNames'");
} catch (InvalidNullException e) {
verifyException(e, "property \"agesByNames\"");
}
}
}

0 comments on commit b66dfb6

Please sign in to comment.