ModuleRegistrationTest.java

package com.fasterxml.jackson.databind;

import org.junit.jupiter.api.Test;

import com.fasterxml.jackson.core.Version;
import com.fasterxml.jackson.databind.module.SimpleModule;

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

import static com.fasterxml.jackson.databind.testutil.DatabindTestUtil.newJsonMapper;
import static com.fasterxml.jackson.databind.testutil.DatabindTestUtil.verifyException;

public class ModuleRegistrationTest
{

    @Test
    public void testCopyHasSameRegisteredModulesInDifferentSetInstances() {
        ObjectMapper originalMapper = newJsonMapper();
        originalMapper.registerModule(_testModuleWithId("first"));
        originalMapper.registerModule(_testModuleWithId("second"));

        ObjectMapper copyMapper = originalMapper.copy();

        assertNotSame(originalMapper, copyMapper);
        assertNotSame(originalMapper._registeredModuleTypes, copyMapper._registeredModuleTypes);
        assertEquals(originalMapper.getRegisteredModuleIds(), copyMapper.getRegisteredModuleIds());
        assertTrue(originalMapper._registeredModuleTypes.containsAll(copyMapper._registeredModuleTypes));
    }

    @SuppressWarnings("serial")
    private SimpleModule _testModuleWithId(String id) {
        return new SimpleModule() {
            @Override
            public Object getTypeId() {
                return id;
            }
        };
    }

    @Test
    public void testRegisterNullModuleFails() {
        ObjectMapper objectMapper = newJsonMapper();
        try {
            objectMapper.registerModule(null);
            fail("should not pass");
        } catch (IllegalArgumentException e) {
            verifyException(e, "argument \"module\" is null");
        }
    }

    @Test
    public void testRegisterModuleWithNullNameFails() {
        ObjectMapper objectMapper = newJsonMapper();
        try {
            objectMapper.registerModule(new Module() {
                @Override
                public String getModuleName() {
                    return null;
                }

                @Override
                public Version version() {
                    return Version.unknownVersion();
                }

                @Override
                public void setupModule(SetupContext context) {}
            });
            fail("should not pass");
        } catch (IllegalArgumentException e) {
            verifyException(e, "Module without defined name");
        }
    }

    @Test
    public void testRegisterModuleWithNullVersionFails() {
        ObjectMapper objectMapper = newJsonMapper();
        try {
            objectMapper.registerModule(new Module() {
                @Override
                public String getModuleName() {
                    return "some-module-name";
                }

                @Override
                public Version version() {
                    return null;
                }

                @Override
                public void setupModule(SetupContext context) {}
            });
            fail("should not pass");
        } catch (IllegalArgumentException e) {
            verifyException(e, "Module without defined version");
        }
    }
    
}