com.liferay.dynamic.data.mapping.BaseDDMTestCase.java Source code

Java tutorial

Introduction

Here is the source code for com.liferay.dynamic.data.mapping.BaseDDMTestCase.java

Source

/**
 * Copyright (c) 2000-present Liferay, Inc. All rights reserved.
 *
 * This library is free software; you can redistribute it and/or modify it under
 * the terms of the GNU Lesser General Public License as published by the Free
 * Software Foundation; either version 2.1 of the License, or (at your option)
 * any later version.
 *
 * This library is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
 * FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
 * details.
 */

package com.liferay.dynamic.data.mapping;

import com.liferay.dynamic.data.mapping.form.field.type.DDMFormFieldRenderer;
import com.liferay.dynamic.data.mapping.form.field.type.DDMFormFieldType;
import com.liferay.dynamic.data.mapping.form.field.type.DDMFormFieldTypeServicesTracker;
import com.liferay.dynamic.data.mapping.form.field.type.DDMFormFieldTypeSettings;
import com.liferay.dynamic.data.mapping.internal.util.DDMImpl;
import com.liferay.dynamic.data.mapping.io.DDMFormJSONDeserializer;
import com.liferay.dynamic.data.mapping.io.DDMFormJSONSerializer;
import com.liferay.dynamic.data.mapping.io.internal.DDMFormJSONDeserializerImpl;
import com.liferay.dynamic.data.mapping.io.internal.DDMFormJSONSerializerImpl;
import com.liferay.dynamic.data.mapping.model.DDMForm;
import com.liferay.dynamic.data.mapping.model.DDMFormField;
import com.liferay.dynamic.data.mapping.model.DDMFormLayoutColumn;
import com.liferay.dynamic.data.mapping.model.DDMFormLayoutRow;
import com.liferay.dynamic.data.mapping.model.DDMStructure;
import com.liferay.dynamic.data.mapping.model.DDMTemplate;
import com.liferay.dynamic.data.mapping.model.LocalizedValue;
import com.liferay.dynamic.data.mapping.model.Value;
import com.liferay.dynamic.data.mapping.model.impl.DDMStructureImpl;
import com.liferay.dynamic.data.mapping.model.impl.DDMTemplateImpl;
import com.liferay.dynamic.data.mapping.service.DDMStructureLocalServiceUtil;
import com.liferay.dynamic.data.mapping.service.DDMTemplateLocalServiceUtil;
import com.liferay.dynamic.data.mapping.storage.DDMFormFieldValue;
import com.liferay.dynamic.data.mapping.storage.DDMFormValues;
import com.liferay.dynamic.data.mapping.storage.Field;
import com.liferay.dynamic.data.mapping.storage.Fields;
import com.liferay.dynamic.data.mapping.test.util.DDMFormFieldTypeSettingsTestUtil;
import com.liferay.portal.json.JSONFactoryImpl;
import com.liferay.portal.kernel.configuration.Configuration;
import com.liferay.portal.kernel.configuration.ConfigurationFactory;
import com.liferay.portal.kernel.configuration.ConfigurationFactoryUtil;
import com.liferay.portal.kernel.json.JSONFactoryUtil;
import com.liferay.portal.kernel.language.Language;
import com.liferay.portal.kernel.language.LanguageUtil;
import com.liferay.portal.kernel.test.util.RandomTestUtil;
import com.liferay.portal.kernel.util.HtmlUtil;
import com.liferay.portal.kernel.util.LocaleUtil;
import com.liferay.portal.kernel.util.LocalizationUtil;
import com.liferay.portal.kernel.util.PortalClassLoaderUtil;
import com.liferay.portal.kernel.util.ReflectionUtil;
import com.liferay.portal.kernel.util.ResourceBundleUtil;
import com.liferay.portal.kernel.util.SetUtil;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.xml.Document;
import com.liferay.portal.kernel.xml.Element;
import com.liferay.portal.kernel.xml.SAXReaderUtil;
import com.liferay.portal.kernel.xml.UnsecureSAXReaderUtil;
import com.liferay.portal.util.HtmlImpl;
import com.liferay.portal.util.LocalizationImpl;
import com.liferay.portal.util.PropsValues;
import com.liferay.portal.xml.SAXReaderImpl;

import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.LinkedHashSet;
import java.util.List;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;
import java.util.Set;

import org.junit.Before;
import org.junit.runner.RunWith;

import org.mockito.Matchers;
import org.mockito.Mock;
import org.mockito.invocation.InvocationOnMock;
import org.mockito.stubbing.Answer;

import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.core.classloader.annotations.SuppressStaticInitializationFor;
import org.powermock.modules.junit4.PowerMockRunner;

/**
 * @author Pablo Carvalho
 * @author Miguel Angelo Caldas Gallindo
 */
@PrepareForTest({ DDMStructureLocalServiceUtil.class, DDMTemplateLocalServiceUtil.class, LocaleUtil.class,
        PortalClassLoaderUtil.class, ResourceBundleUtil.class })
@RunWith(PowerMockRunner.class)
@SuppressStaticInitializationFor({ "com.liferay.dynamic.data.mapping.service.DDMStructureLocalServiceUtil",
        "com.liferay.dynamic.data.mapping.service.DDMTemplateLocalServiceUtil" })
public abstract class BaseDDMTestCase extends PowerMockito {

    @Before
    public void setUp() throws Exception {
        setUpPortalClassLoaderUtil();
        setUpResourceBundleUtil();
    }

    protected void addDDMFormFields(DDMForm ddmForm, DDMFormField... ddmFormFieldsArray) {

        List<DDMFormField> ddmFormFields = ddmForm.getDDMFormFields();

        for (DDMFormField ddmFormField : ddmFormFieldsArray) {
            ddmFormFields.add(ddmFormField);
        }
    }

    protected void addNestedTextDDMFormFields(DDMFormField ddmFormField, String... fieldNames) {

        List<DDMFormField> nestedDDMFormFields = ddmFormField.getNestedDDMFormFields();

        for (String fieldName : fieldNames) {
            nestedDDMFormFields.add(createTextDDMFormField(fieldName));
        }
    }

    protected void addTextDDMFormFields(DDMForm ddmForm, String... fieldNames) {
        List<DDMFormField> ddmFormFields = ddmForm.getDDMFormFields();

        for (String fieldName : fieldNames) {
            ddmFormFields.add(createTextDDMFormField(fieldName));
        }
    }

    protected Element addTextElement(Element element, String name, String label, boolean localizable) {

        Element dynamicElement = element.addElement("dynamic-element");

        dynamicElement.addAttribute("dataType", "string");
        dynamicElement.addAttribute("localizable", String.valueOf(localizable));
        dynamicElement.addAttribute("name", name);
        dynamicElement.addAttribute("type", "text");

        Element metadataElement = dynamicElement.addElement("meta-data");

        metadataElement.addAttribute("locale", LocaleUtil.toLanguageId(LocaleUtil.US));

        Element entryElement = metadataElement.addElement("entry");

        entryElement.addAttribute("name", "label");
        entryElement.setText(label);

        return dynamicElement;
    }

    protected Set<Locale> createAvailableLocales(Locale... locales) {
        Set<Locale> availableLocales = new LinkedHashSet<>();

        for (Locale locale : locales) {
            availableLocales.add(locale);
        }

        return availableLocales;
    }

    protected Field createBRField(long ddmStructureId, String fieldName, List<Serializable> ptValues) {

        return new MockField(ddmStructureId, fieldName, ptValues, LocaleUtil.BRAZIL);
    }

    protected DDMForm createDDMForm(Set<Locale> availableLocales, Locale defaultLocale) {

        DDMForm ddmForm = new DDMForm();

        ddmForm.setAvailableLocales(availableLocales);
        ddmForm.setDefaultLocale(defaultLocale);

        return ddmForm;
    }

    protected DDMForm createDDMForm(String... fieldNames) {
        DDMForm ddmForm = createDDMForm(createAvailableLocales(LocaleUtil.US), LocaleUtil.US);

        addTextDDMFormFields(ddmForm, fieldNames);

        return ddmForm;
    }

    protected DDMFormFieldValue createDDMFormFieldValue(String instanceId, String name, Value value) {

        DDMFormFieldValue ddmFormFieldValue = new DDMFormFieldValue();

        ddmFormFieldValue.setInstanceId(instanceId);
        ddmFormFieldValue.setName(name);
        ddmFormFieldValue.setValue(value);

        return ddmFormFieldValue;
    }

    protected DDMFormFieldValue createDDMFormFieldValue(String name, Value value) {

        return createDDMFormFieldValue(StringUtil.randomString(), name, value);
    }

    protected DDMFormLayoutColumn createDDMFormLayoutColumn(int size, String... fieldNames) {

        DDMFormLayoutColumn ddmFormLayoutColumn = new DDMFormLayoutColumn(size, fieldNames);

        return ddmFormLayoutColumn;
    }

    protected List<DDMFormLayoutColumn> createDDMFormLayoutColumns(String... fieldNames) {

        List<DDMFormLayoutColumn> ddmFormLayoutColumns = new ArrayList<>();

        int size = 12 / fieldNames.length;

        for (String fieldName : fieldNames) {
            ddmFormLayoutColumns.add(new DDMFormLayoutColumn(size, fieldName));
        }

        return ddmFormLayoutColumns;
    }

    protected DDMFormLayoutRow createDDMFormLayoutRow(DDMFormLayoutColumn... ddmFormLayoutColumns) {

        return createDDMFormLayoutRow(Arrays.asList(ddmFormLayoutColumns));
    }

    protected DDMFormLayoutRow createDDMFormLayoutRow(List<DDMFormLayoutColumn> ddmFormLayoutColumns) {

        DDMFormLayoutRow ddmFormLayoutRow = new DDMFormLayoutRow();

        ddmFormLayoutRow.setDDMFormLayoutColumns(ddmFormLayoutColumns);

        return ddmFormLayoutRow;
    }

    protected DDMFormValues createDDMFormValues(DDMForm ddmForm) {
        return createDDMFormValues(ddmForm, createAvailableLocales(LocaleUtil.US), LocaleUtil.US);
    }

    protected DDMFormValues createDDMFormValues(DDMForm ddmForm, Set<Locale> availableLocales,
            Locale defaultLocale) {

        DDMFormValues ddmFormValues = new DDMFormValues(ddmForm);

        ddmFormValues.setAvailableLocales(availableLocales);
        ddmFormValues.setDefaultLocale(defaultLocale);

        return ddmFormValues;
    }

    protected Document createDocument(String... fieldNames) {
        Document document = createEmptyDocument();

        for (String fieldName : fieldNames) {
            addTextElement(document.getRootElement(), fieldName, fieldName, false);
        }

        return document;
    }

    protected Document createEmptyDocument() {
        Document document = SAXReaderUtil.createDocument();

        Element rootElement = document.addElement("root");

        rootElement.addAttribute("available-locales", "en_US");
        rootElement.addAttribute("default-locale", "en_US");

        return document;
    }

    protected Field createField(long ddmStructureId, String fieldName, List<Serializable> enValues,
            List<Serializable> ptValues) {

        Map<Locale, List<Serializable>> valuesMap = createValuesMap(enValues, ptValues);

        return new MockField(ddmStructureId, fieldName, valuesMap, LocaleUtil.US);
    }

    protected Fields createFields(Field... fieldsArray) {
        Fields fields = new Fields();

        for (Field field : fieldsArray) {
            fields.put(field);
        }

        return fields;
    }

    protected Field createFieldsDisplayField(long ddmStructureId, String value) {

        Field fieldsDisplayField = new MockField(ddmStructureId, DDMImpl.FIELDS_DISPLAY_NAME,
                createValuesList(value), LocaleUtil.US);

        fieldsDisplayField.setDefaultLocale(LocaleUtil.US);

        return fieldsDisplayField;
    }

    protected Value createLocalizedValue(String enValue, String ptValue, Locale defaultLocale) {

        Value value = new LocalizedValue(defaultLocale);

        value.addString(LocaleUtil.BRAZIL, ptValue);
        value.addString(LocaleUtil.US, enValue);

        return value;
    }

    protected DDMFormField createParagraphDDMFormField(String name) {
        DDMFormField ddmFormField = new DDMFormField(name, "paragraph");

        ddmFormField.setLocalizable(false);
        ddmFormField.setRepeatable(false);
        ddmFormField.setRequired(false);

        LocalizedValue localizedValue = ddmFormField.getLabel();

        localizedValue.addString(LocaleUtil.US, name);

        return ddmFormField;
    }

    protected Document createSampleDocument() {
        Document document = createEmptyDocument();

        addTextElement(document.getRootElement(), "Unlocalizable", "Text 2", false);

        return document;
    }

    protected DDMFormField createSeparatorDDMFormField(String name, boolean repeatable) {

        DDMFormField ddmFormField = new DDMFormField(name, "separator");

        ddmFormField.setRepeatable(repeatable);

        LocalizedValue localizedValue = ddmFormField.getLabel();

        localizedValue.addString(LocaleUtil.US, name);

        return ddmFormField;
    }

    protected DDMStructure createStructure(String name, DDMForm ddmForm) {
        return createStructure(name, ddmFormJSONSerializer.serialize(ddmForm));
    }

    protected DDMStructure createStructure(String name, String definition) {
        DDMStructure structure = new DDMStructureImpl();

        structure.setStructureId(RandomTestUtil.randomLong());
        structure.setName(name);
        structure.setDefinition(definition);

        structures.put(structure.getStructureId(), structure);

        return structure;
    }

    protected DDMStructure createStructure(String name, String... fieldNames) {
        DDMForm ddmForm = createDDMForm(fieldNames);

        return createStructure(name, ddmForm);
    }

    protected DDMTemplate createTemplate(long templateId, String name, String mode, String script) {

        DDMTemplate template = new DDMTemplateImpl();

        template.setTemplateId(templateId);
        template.setName(name);
        template.setMode(mode);
        template.setScript(script);

        templates.put(template.getTemplateId(), template);

        return template;
    }

    protected DDMFormField createTextDDMFormField(String name) {
        return createTextDDMFormField(name, name, true, false, false);
    }

    protected DDMFormField createTextDDMFormField(String name, String label, boolean localizable,
            boolean repeatable, boolean required) {

        DDMFormField ddmFormField = new DDMFormField(name, "text");

        ddmFormField.setDataType("string");
        ddmFormField.setLocalizable(localizable);
        ddmFormField.setRepeatable(repeatable);
        ddmFormField.setRequired(required);

        LocalizedValue localizedValue = ddmFormField.getLabel();

        localizedValue.addString(LocaleUtil.US, label);

        return ddmFormField;
    }

    protected List<Serializable> createValuesList(String... valuesString) {
        List<Serializable> values = new ArrayList<>();

        for (String valueString : valuesString) {
            values.add(valueString);
        }

        return values;
    }

    protected Map<Locale, List<Serializable>> createValuesMap(List<Serializable> enValues,
            List<Serializable> ptValues) {

        Map<Locale, List<Serializable>> valuesMap = new HashMap<>();

        if (enValues != null) {
            valuesMap.put(LocaleUtil.US, enValues);
        }

        if (ptValues != null) {
            valuesMap.put(LocaleUtil.BRAZIL, ptValues);
        }

        return valuesMap;
    }

    protected DDMFormFieldTypeServicesTracker getMockedDDMFormFieldTypeServicesTracker() {

        setUpDefaultDDMFormFieldType();

        DDMFormFieldTypeServicesTracker ddmFormFieldTypeServicesTracker = mock(
                DDMFormFieldTypeServicesTracker.class);

        DDMFormFieldRenderer ddmFormFieldRenderer = mock(DDMFormFieldRenderer.class);

        when(ddmFormFieldTypeServicesTracker.getDDMFormFieldRenderer(Matchers.anyString()))
                .thenReturn(ddmFormFieldRenderer);

        when(ddmFormFieldTypeServicesTracker.getDDMFormFieldType(Matchers.anyString()))
                .thenReturn(_defaultDDMFormFieldType);

        Map<String, Object> properties = new HashMap<>();

        properties.put("ddm.form.field.type.icon", "my-icon");
        properties.put("ddm.form.field.type.js.class.name", "myJavaScriptClass");
        properties.put("ddm.form.field.type.js.module", "myJavaScriptModule");

        when(ddmFormFieldTypeServicesTracker.getDDMFormFieldTypeProperties(Matchers.anyString()))
                .thenReturn(properties);

        return ddmFormFieldTypeServicesTracker;
    }

    protected DDMStructure getStructure(long structureId) {
        try {
            return DDMStructureLocalServiceUtil.getStructure(structureId);
        } catch (Exception e) {
            return null;
        }
    }

    protected DDMForm getStructureDDMForm(DDMStructure structure) {
        try {
            return DDMStructureLocalServiceUtil.getStructureDDMForm(structure);
        } catch (Exception e) {
            return null;
        }
    }

    protected DDMTemplate getTemplate(long templateId) {
        try {
            return DDMTemplateLocalServiceUtil.getTemplate(templateId);
        } catch (Exception e) {
            return null;
        }
    }

    protected String read(String fileName) throws IOException {
        Class<?> clazz = getClass();

        InputStream inputStream = clazz.getResourceAsStream("dependencies/" + fileName);

        return StringUtil.read(inputStream);
    }

    protected void setUpConfigurationFactoryUtil() {
        mockStatic(ConfigurationFactoryUtil.class);

        when(_configurationFactory.getConfiguration(Matchers.any(ClassLoader.class), Matchers.anyString()))
                .thenReturn(_configuration);

        ConfigurationFactoryUtil.setConfigurationFactory(_configurationFactory);
    }

    protected void setUpDDMFormJSONDeserializer() throws Exception {

        // DDM form field type services tracker

        java.lang.reflect.Field field = ReflectionUtil.getDeclaredField(DDMFormJSONDeserializerImpl.class,
                "_ddmFormFieldTypeServicesTracker");

        field.set(ddmFormJSONDeserializer, getMockedDDMFormFieldTypeServicesTracker());

        // JSON factory

        field = ReflectionUtil.getDeclaredField(DDMFormJSONDeserializerImpl.class, "_jsonFactory");

        field.set(ddmFormJSONDeserializer, new JSONFactoryImpl());
    }

    protected void setUpDDMFormJSONSerializer() throws Exception {

        // DDM form field type services tracker

        java.lang.reflect.Field field = ReflectionUtil.getDeclaredField(DDMFormJSONSerializerImpl.class,
                "_ddmFormFieldTypeServicesTracker");

        field.set(ddmFormJSONSerializer, getMockedDDMFormFieldTypeServicesTracker());

        // JSON factory

        field = ReflectionUtil.getDeclaredField(DDMFormJSONSerializerImpl.class, "_jsonFactory");

        field.set(ddmFormJSONSerializer, new JSONFactoryImpl());
    }

    protected void setUpDDMStructureLocalServiceUtil() {
        mockStatic(DDMStructureLocalServiceUtil.class);

        when(getStructure(Matchers.anyLong())).then(new Answer<DDMStructure>() {

            @Override
            public DDMStructure answer(InvocationOnMock invocationOnMock) throws Throwable {

                Object[] args = invocationOnMock.getArguments();

                Long structureId = (Long) args[0];

                return structures.get(structureId);
            }

        });

        when(getStructureDDMForm(Matchers.any(DDMStructure.class))).then(new Answer<DDMForm>() {

            @Override
            public DDMForm answer(InvocationOnMock invocationOnMock) throws Throwable {

                Object[] args = invocationOnMock.getArguments();

                DDMStructure structure = (DDMStructure) args[0];

                return ddmFormJSONDeserializer.deserialize(structure.getDefinition());
            }

        });
    }

    protected void setUpDDMTemplateLocalServiceUtil() {
        mockStatic(DDMTemplateLocalServiceUtil.class);

        when(getTemplate(Matchers.anyLong())).then(new Answer<DDMTemplate>() {

            @Override
            public DDMTemplate answer(InvocationOnMock invocationOnMock) throws Throwable {

                Object[] args = invocationOnMock.getArguments();

                Long templateId = (Long) args[0];

                return templates.get(templateId);
            }

        });
    }

    protected void setUpDefaultDDMFormFieldType() {
        when(_defaultDDMFormFieldType.getDDMFormFieldTypeSettings())
                .then(new Answer<Class<? extends DDMFormFieldTypeSettings>>() {

                    @Override
                    public Class<? extends DDMFormFieldTypeSettings> answer(InvocationOnMock invocationOnMock)
                            throws Throwable {

                        return DDMFormFieldTypeSettingsTestUtil.getSettings();
                    }

                });
    }

    protected void setUpHtmlUtil() {
        HtmlUtil htmlUtil = new HtmlUtil();

        htmlUtil.setHtml(new HtmlImpl());
    }

    protected void setUpJSONFactoryUtil() {
        JSONFactoryUtil jsonFactoryUtil = new JSONFactoryUtil();

        jsonFactoryUtil.setJSONFactory(new JSONFactoryImpl());
    }

    protected void setUpLanguageUtil() {
        Set<Locale> availableLocales = SetUtil
                .fromArray(new Locale[] { LocaleUtil.BRAZIL, LocaleUtil.SPAIN, LocaleUtil.US });

        whenLanguageGetAvailableLocalesThen(availableLocales);

        whenLanguageGet(LocaleUtil.BRAZIL, "no", "No");
        whenLanguageGet(LocaleUtil.BRAZIL, "yes", "Sim");
        whenLanguageGet(LocaleUtil.SPAIN, "latitude", "Latitud");
        whenLanguageGet(LocaleUtil.SPAIN, "longitude", "Longitud");
        whenLanguageGet(LocaleUtil.US, "latitude", "Latitude");
        whenLanguageGet(LocaleUtil.US, "longitude", "Longitude");
        whenLanguageGet(LocaleUtil.US, "no", "No");
        whenLanguageGet(LocaleUtil.US, "yes", "Yes");

        whenLanguageGetLanguageId(LocaleUtil.BRAZIL, "pt_BR");
        whenLanguageGetLanguageId(LocaleUtil.SPAIN, "es_ES");
        whenLanguageGetLanguageId(LocaleUtil.US, "en_US");

        whenLanguageIsAvailableLocale("en_US");
        whenLanguageIsAvailableLocale("es_ES");
        whenLanguageIsAvailableLocale("pt_BR");

        whenLanguageIsAvailableLocale(LocaleUtil.BRAZIL);
        whenLanguageIsAvailableLocale(LocaleUtil.SPAIN);
        whenLanguageIsAvailableLocale(LocaleUtil.US);

        LanguageUtil languageUtil = new LanguageUtil();

        languageUtil.setLanguage(language);
    }

    protected void setUpLocaleUtil() {
        mockStatic(LocaleUtil.class);

        when(LocaleUtil.fromLanguageId("en_US")).thenReturn(LocaleUtil.US);

        when(LocaleUtil.fromLanguageId("pt_BR")).thenReturn(LocaleUtil.BRAZIL);

        when(LocaleUtil.getDefault()).thenReturn(LocaleUtil.US);

        when(LocaleUtil.toLanguageId(LocaleUtil.US)).thenReturn("en_US");

        when(LocaleUtil.toLanguageId(LocaleUtil.BRAZIL)).thenReturn("pt_BR");

        when(LocaleUtil.toLanguageIds((Locale[]) Matchers.any())).then(new Answer<String[]>() {

            @Override
            public String[] answer(InvocationOnMock invocationOnMock) throws Throwable {

                Object[] args = invocationOnMock.getArguments();

                Locale[] locales = (Locale[]) args[0];

                String[] languageIds = new String[locales.length];

                for (int i = 0; i < locales.length; i++) {
                    languageIds[i] = LocaleUtil.toLanguageId(locales[i]);
                }

                return languageIds;
            }

        });
    }

    protected void setUpLocalizationUtil() {
        spy(LocalizationUtil.class);

        when(LocalizationUtil.getLocalization()).thenReturn(new LocalizationImpl());
    }

    protected void setUpPortalClassLoaderUtil() {
        mockStatic(PortalClassLoaderUtil.class);

        when(PortalClassLoaderUtil.getClassLoader()).thenReturn(_classLoader);
    }

    protected void setUpPropsValues() {
        mockStatic(PropsValues.class);
    }

    protected void setUpResourceBundleUtil() {
        mockStatic(ResourceBundleUtil.class);

        when(ResourceBundleUtil.getBundle("content.Language", LocaleUtil.BRAZIL, _classLoader))
                .thenReturn(_resourceBundle);

        when(ResourceBundleUtil.getBundle("content.Language", LocaleUtil.US, _classLoader))
                .thenReturn(_resourceBundle);
    }

    protected void setUpSAXReaderUtil() {
        SAXReaderUtil saxReaderUtil = new SAXReaderUtil();

        SAXReaderImpl secureSAXReader = new SAXReaderImpl();

        secureSAXReader.setSecure(true);

        saxReaderUtil.setSAXReader(secureSAXReader);

        UnsecureSAXReaderUtil unsecureSAXReaderUtil = new UnsecureSAXReaderUtil();

        SAXReaderImpl unsecureSAXReader = new SAXReaderImpl();

        unsecureSAXReaderUtil.setSAXReader(unsecureSAXReader);
    }

    protected void whenLanguageGet(Locale locale, String key, String returnValue) {

        when(language.get(Matchers.eq(locale), Matchers.eq(key))).thenReturn(returnValue);
    }

    protected void whenLanguageGetAvailableLocalesThen(Set<Locale> availableLocales) {

        when(language.getAvailableLocales()).thenReturn(availableLocales);
    }

    protected void whenLanguageGetLanguageId(Locale locale, String languageId) {
        when(language.getLanguageId(Matchers.eq(locale))).thenReturn(languageId);
    }

    protected void whenLanguageIsAvailableLocale(Locale locale) {
        when(language.isAvailableLocale(Matchers.eq(locale))).thenReturn(true);
    }

    protected void whenLanguageIsAvailableLocale(String languageId) {
        when(language.isAvailableLocale(Matchers.eq(languageId))).thenReturn(true);
    }

    protected final DDMFormJSONDeserializer ddmFormJSONDeserializer = new DDMFormJSONDeserializerImpl();
    protected final DDMFormJSONSerializer ddmFormJSONSerializer = new DDMFormJSONSerializerImpl();

    @Mock
    protected Language language;

    protected Map<Long, DDMStructure> structures = new HashMap<>();
    protected Map<Long, DDMTemplate> templates = new HashMap<>();

    protected class MockField extends Field {

        public MockField(long ddmStructureId, String name, List<Serializable> values, Locale locale) {

            super(ddmStructureId, name, values, locale);
        }

        public MockField(long ddmStructureId, String name, Map<Locale, List<Serializable>> valuesMap,
                Locale defaultLocale) {

            super(ddmStructureId, name, valuesMap, defaultLocale);
        }

        @Override
        public DDMStructure getDDMStructure() {
            return structures.get(getDDMStructureId());
        }

        private static final long serialVersionUID = 1L;

    }

    @Mock
    private ClassLoader _classLoader;

    @Mock
    private Configuration _configuration;

    @Mock
    private ConfigurationFactory _configurationFactory;

    @Mock
    private DDMFormFieldType _defaultDDMFormFieldType;

    @Mock
    private ResourceBundle _resourceBundle;

}