MixinForCreators2795Test.java

package com.fasterxml.jackson.databind.mixins;

import java.util.*;

import org.junit.jupiter.api.Test;

import com.fasterxml.jackson.annotation.*;

import com.fasterxml.jackson.databind.*;
import com.fasterxml.jackson.databind.testutil.DatabindTestUtil;

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

// [databind#2795]: Regression in 2.11.0, no mix-ins for JDK collections
public class MixinForCreators2795Test extends DatabindTestUtil
{
    @JsonTypeInfo(use = JsonTypeInfo.Id.CLASS)
    static class UnmodifiableCollectionMixin {
        @JsonCreator(mode = JsonCreator.Mode.DELEGATING)
        public UnmodifiableCollectionMixin(final Collection<?> collection) { }
    }

    @Test
    public void testMixinWithUnmmodifiableCollection() throws Exception
    {
        ObjectMapper mapper = jsonMapperBuilder()
                .addMixIn(Collections.unmodifiableCollection(Collections.emptyList()).getClass(),
                        UnmodifiableCollectionMixin.class)
                .build();
        mapper.activateDefaultTypingAsProperty(mapper.getPolymorphicTypeValidator(),
                ObjectMapper.DefaultTyping.NON_FINAL, "@class");

        final List<String> strings = Arrays.asList("1", "2");
        final Collection<String> unmodifiableCollection = Collections.unmodifiableCollection(strings);
        final byte[] bytes = mapper.writeValueAsBytes(unmodifiableCollection);

        final Collection<?> result = mapper.readValue(bytes, Collection.class);

        assertEquals(2, result.size());
    }
}