blob: 18882cb490144370cd1072fa9e5231be74eb2e96 [file] [log] [blame]
package com.fasterxml.jackson.databind.deser.creators;
import java.util.AbstractCollection;
import java.util.Collection;
import java.util.Collections;
import java.util.Iterator;
import com.fasterxml.jackson.annotation.JsonCreator;
import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
// for [databind#2324]
public class DelegatingArrayCreator2324Test extends BaseMapTest
{
@JsonDeserialize(as=ImmutableBag.class)
public interface Bag<T> extends Collection<T> { }
public static class ImmutableBag<T> extends AbstractCollection<T> implements Bag<T> {
@Override
public Iterator<T> iterator() { return elements.iterator(); }
@Override
public int size() { return elements.size(); }
@JsonCreator(mode=JsonCreator.Mode.DELEGATING)
private ImmutableBag(Collection<T> elements ) {
this.elements = Collections.unmodifiableCollection(elements);
}
private final Collection<T> elements;
}
static class Value {
public String value;
public Value(String v) { value = v; }
@Override
public boolean equals(Object o) {
return value.equals(((Value) o).value);
}
}
static class WithBagOfStrings {
public Bag<String> getStrings() { return this.bagOfStrings; }
public void setStrings(Bag<String> bagOfStrings) { this.bagOfStrings = bagOfStrings; }
private Bag<String> bagOfStrings;
}
static class WithBagOfValues {
public Bag<Value> getValues() { return this.bagOfValues; }
public void setValues(Bag<Value> bagOfValues) { this.bagOfValues = bagOfValues; }
private Bag<Value> bagOfValues;
}
private final ObjectMapper MAPPER = objectMapper();
public void testDeserializeBagOfStrings() throws Exception {
WithBagOfStrings result = MAPPER.readerFor(WithBagOfStrings.class)
.readValue("{\"strings\": [ \"a\", \"b\", \"c\"]}");
assertEquals(3, result.getStrings().size());
}
public void testDeserializeBagOfPOJOs() throws Exception {
WithBagOfValues result = MAPPER.readerFor(WithBagOfValues.class)
.readValue("{\"values\": [ \"a\", \"b\", \"c\"]}");
assertEquals(3, result.getValues().size());
assertEquals(new Value("a"), result.getValues().iterator().next());
}
}