package com.fasterxml.jackson.failing;

import java.util.Objects;

import com.fasterxml.jackson.annotation.*;

import com.fasterxml.jackson.databind.*;

// Not sure if [databind#2572] is actually a bug, but behavior in 2.9 was
// different from 2.10 in that no exception thrown and databind quietly just
// left `null` for Beans as `null` even if "EMPTY" was indicated by configuration.
public class JsonSetter2572Test extends BaseMapTest
{
    static class Outer {
        @JsonProperty("inner")
        final Inner inner;

        @JsonCreator
        public Outer(@JsonProperty("inner") Inner inner) {
            this.inner = Objects.requireNonNull(inner, "inner");
        }
    }

    static class Inner {
        @JsonProperty("field")
        final String field;

        @JsonCreator
        public Inner(@JsonProperty("field") String field) {
            this.field = field;
        }
    }

    public void testSetterWithEmpty() throws Exception {
        /*
        ObjectMapper mapper = newObjectMapper()
                .setDefaultSetterInfo(JsonSetter.Value.construct(Nulls.AS_EMPTY, Nulls.AS_EMPTY));
                */
        ObjectMapper mapper = jsonMapperBuilder()
                .defaultSetterInfo(JsonSetter.Value.construct(Nulls.AS_EMPTY, Nulls.AS_EMPTY))
                .build();

        String json = mapper.writeValueAsString(new Outer(new Inner("inner")));
        Outer result = mapper.readValue(json, Outer.class);
        assertNotNull(result);
        assertNotNull(result.inner); // converted to "empty" bean

//System.err.println("Final -> "+mapper.writeValueAsString(result));        
    }
}
