EnumSameName4302Test.java

package com.fasterxml.jackson.databind.deser.enums;

import org.junit.jupiter.api.Test;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
import com.fasterxml.jackson.databind.testutil.DatabindTestUtil;

import static org.junit.jupiter.api.Assertions.assertEquals;

// [databind#4302]
public class EnumSameName4302Test
    extends DatabindTestUtil
{
    enum Field4302Enum {
        FOO(0);

        public final int foo;

        Field4302Enum(int foo) {
            this.foo = foo;
        }
    }

    enum Getter4302Enum {
        BAR("bar");

        public String bar;

        Getter4302Enum(String bar) {
            this.bar = bar;
        }

        public String getBar() {
            return "bar";
        }
    }

    enum Setter4302Enum {
        CAT("dog");

        public String cat;

        Setter4302Enum(String cat) {
            this.cat = cat;
        }

        public void setCat(String cat) {
            this.cat = cat;
        }
    }

    static class Field4302Wrapper {
        public Field4302Enum wrapped;

        Field4302Wrapper() { }
        public Field4302Wrapper(Field4302Enum w) {
            wrapped = w;
        }
    }

    private final ObjectMapper MAPPER = jsonMapperBuilder()
        .propertyNamingStrategy(PropertyNamingStrategies.LOWER_CASE)
        .build();

    @Test
    void testStandaloneShouldWork() throws Exception
    {
        // First, try roundtrip with same-ignore-case name field
        assertEquals(Field4302Enum.FOO,
            MAPPER.readValue("\"FOO\"", Field4302Enum.class));
        assertEquals(q("FOO"),
            MAPPER.writeValueAsString(Field4302Enum.FOO));

        // Now, try roundtrip with same-ignore-case name getter
        assertEquals(Getter4302Enum.BAR,
            MAPPER.readValue("\"BAR\"", Getter4302Enum.class));
        assertEquals(q("BAR"),
            MAPPER.writeValueAsString(Getter4302Enum.BAR));

        // Now, try roundtrip with same-ignore-case name setter
        Setter4302Enum.CAT.setCat("cat");
        assertEquals(Setter4302Enum.CAT,
            MAPPER.readValue("\"CAT\"", Setter4302Enum.class));
        assertEquals(q("CAT"),
            MAPPER.writeValueAsString(Setter4302Enum.CAT));
    }

    @Test
    void testWrappedShouldWork() throws Exception
    {
        // First, try roundtrip with same-ignore-case name field
        Field4302Wrapper input = new Field4302Wrapper(Field4302Enum.FOO);
        String json = MAPPER.writeValueAsString(input);
        assertEquals(a2q("{'wrapped':'FOO'}"), json);

        Field4302Wrapper result = MAPPER.readValue(json, Field4302Wrapper.class);
        assertEquals(Field4302Enum.FOO, result.wrapped);
    }
}