Skip to content

Commit

Permalink
add unit tests to drill down to #234
Browse files Browse the repository at this point in the history
  • Loading branch information
cowtowncoder committed Aug 13, 2013
1 parent 9142441 commit c77814e
Show file tree
Hide file tree
Showing 2 changed files with 103 additions and 1 deletion.
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,18 @@ public void testRoundTripMap() throws Exception
input.put("ama", new Dog("Amadeus", 13));
String json = m.writeValueAsString(input);
AnimalMap output = m.readValue(json, AnimalMap.class);
assertEquals(input, output);
assertNotNull(output);
assertEquals(AnimalMap.class, output.getClass());
assertEquals(input.size(), output.size());

// for some reason, straight comparison won't work...
for (String name : input.keySet()) {
Animal in = input.get(name);
Animal out = output.get(name);
if (!in.equals(out)) {
fail("Animal in input was ["+in+"]; output not matching: ["+out+"]");
}
}
}
}

Expand Down Expand Up @@ -96,6 +107,10 @@ public boolean equals(Object o) {
return name.equals(((Animal) o).name);
}

@Override
public String toString() {
return getClass().toString() + "('"+name+"')";
}
}

class Dog extends Animal
Expand Down Expand Up @@ -131,6 +146,11 @@ public Cat(String n, boolean p) {
public boolean equals(Object o) {
return super.equals(o) && ((Cat) o).purrs == purrs;
}

@Override
public String toString() {
return super.toString()+"(purrs: "+purrs+")";
}
}

/* uses default name ("MaineCoon") since there's no @JsonTypeName,
Expand Down
82 changes: 82 additions & 0 deletions src/test/java/com/fasterxml/jackson/failing/TestIssue234.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
package com.fasterxml.jackson.failing;

import java.util.*;

import com.fasterxml.jackson.annotation.JsonTypeInfo;
import com.fasterxml.jackson.databind.*;

public class TestIssue234 extends BaseMapTest
{
static class ItemList {
public String value;
public List<ItemList> childItems = new LinkedList<ItemList>();

public void addChildItem(ItemList l) { childItems.add(l); }
}

static class ItemMap
{
public String value;

public Map<String, List<ItemMap>> childItems = new HashMap<String, List<ItemMap>>();

public void addChildItem(String key, ItemMap childItem) {
List<ItemMap> items;
if (childItems.containsKey(key)) {
items = childItems.get(key);
} else {
items = new ArrayList<ItemMap>();
}
items.add(childItem);
childItems.put(key, items);
}
}

/*
public void testList() throws Exception {
String json = getMapper().writerWithDefaultPrettyPrinter().writeValueAsString(generateItemList());
System.out.println("ItemList as JSON:\n" +json);
Object o = getMapper().readValue(json, ItemList.class);
assertNotNull(o);
}
*/

public void testMap() throws Exception {
String json = getMapper().writerWithDefaultPrettyPrinter().writeValueAsString(generateItemMap());
System.out.println("ItemMap as JSON:\n"+json);
Object o = getMapper().readValue(json, ItemMap.class);
assertNotNull(o);
}
/*
*/

static ItemList generateItemList() {
ItemList child = new ItemList();
child.value = "I am child";

ItemList parent = new ItemList();
parent.value = "I am parent";
parent.addChildItem(child);
return parent;
}

static ItemMap generateItemMap() {
ItemMap child = new ItemMap();
child.value = "I am child";

ItemMap parent = new ItemMap();
parent.value = "I am parent";
parent.addChildItem("child", child);
return parent;
}

static ObjectMapper getMapper() {
final ObjectMapper objectMapper = new ObjectMapper();
objectMapper.enableDefaultTyping(
// ObjectMapper.DefaultTyping.OBJECT_AND_NON_CONCRETE,
ObjectMapper.DefaultTyping.NON_FINAL,
JsonTypeInfo.As.PROPERTY);
// JsonTypeInfo.As.WRAPPER_ARRAY);
return objectMapper;
}
}

0 comments on commit c77814e

Please sign in to comment.