Package sortpom.util

Source Code of sortpom.util.XmlProcessorTestUtil

package sortpom.util;

import org.apache.commons.io.IOUtils;
import org.jdom.Content;
import org.jdom.Element;
import refutils.ReflectionHelper;
import sortpom.XmlProcessor;
import sortpom.parameter.PluginParameters;
import sortpom.parameter.PluginParametersBuilder;
import sortpom.wrapper.*;
import sortpom.wrapper.content.AlphabeticalSortedWrapper;
import sortpom.wrapper.content.UnsortedWrapper;
import sortpom.wrapper.content.Wrapper;
import sortpom.wrapper.operation.HierarchyWrapper;
import sortpom.wrapper.operation.WrapperFactory;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.FileInputStream;

import static org.junit.Assert.assertEquals;

/**
* @author bjorn
* @since 2012-06-10
*/
public class XmlProcessorTestUtil {
    private static final String UTF_8 = "UTF-8";
    private boolean sortAlfabeticalOnly = false;
    private boolean keepBlankLines = false;
    private boolean indentBlankLines = false;
    private String predefinedSortOrder = "default_0_4_0";
    private boolean expandEmptyElements = true;
    private String lineSeparator = "\r\n";

    public static XmlProcessorTestUtil create() {
        return new XmlProcessorTestUtil();
    }

    private XmlProcessorTestUtil() {
    }

    public void testInputAndExpected(final String inputFileName, final String expectedFileName) throws Exception {
        String actual = sortXmlAndReturnResult(inputFileName);

        final String expected = IOUtils.toString(new FileInputStream(expectedFileName), UTF_8);

        assertEquals(expected, actual);
    }

    public String sortXmlAndReturnResult(String inputFileName) throws Exception {
        final XmlProcessor xmlProcessor = setup(inputFileName);
        xmlProcessor.sortXml();
        final ByteArrayOutputStream sortedXmlOutputStream = xmlProcessor.getSortedXml();
        return sortedXmlOutputStream.toString(UTF_8);
    }

    public void testVerifyXmlIsOrdered(final String inputFileName) throws Exception {
        final XmlProcessor xmlProcessor = setup(inputFileName);
        xmlProcessor.sortXml();
        assertEquals(true, xmlProcessor.isXmlOrdered().isOrdered());
    }

    public void testVerifyXmlIsNotOrdered(final String inputFileName, String infoMessage) throws Exception {
        final XmlProcessor xmlProcessor = setup(inputFileName);
        xmlProcessor.sortXml();
        XmlOrderedResult xmlOrdered = xmlProcessor.isXmlOrdered();
        assertEquals(false, xmlOrdered.isOrdered());
        assertEquals(infoMessage, xmlOrdered.getErrorMessage());
    }

    private XmlProcessor setup(String inputFileName) throws Exception {
        PluginParameters pluginParameters = new PluginParametersBuilder()
                .setPomFile(null)
                .setBackupInfo(false, ".bak")
                .setEncoding("UTF-8")
                .setFormatting(lineSeparator, expandEmptyElements, keepBlankLines)
                .setIndent(2, indentBlankLines)
                .setSortOrder(predefinedSortOrder + ".xml", null)
                .setSortEntities("", "", false).createPluginParameters();
        final String xml = IOUtils.toString(new FileInputStream(inputFileName), UTF_8);

        final FileUtil fileUtil = new FileUtil();
        fileUtil.setup(pluginParameters);

        WrapperFactory wrapperFactory = new WrapperFactoryImpl(fileUtil);
        ((WrapperFactoryImpl) wrapperFactory).setup(pluginParameters);

        final XmlProcessor xmlProcessor = new XmlProcessor(wrapperFactory);
        xmlProcessor.setup(pluginParameters);

        if (sortAlfabeticalOnly) {
            wrapperFactory = new WrapperFactory() {

                @Override
                public HierarchyWrapper createFromRootElement(final Element rootElement) {
                    return new HierarchyWrapper(new AlphabeticalSortedWrapper(rootElement));
                }

                @SuppressWarnings("unchecked")
                @Override
                public <T extends Content> Wrapper<T> create(final T content) {
                    if (content instanceof Element) {
                        Element element = (Element) content;
                        return (Wrapper<T>) new AlphabeticalSortedWrapper(element);
                    }
                    return new UnsortedWrapper<T>(content);
                }

            };
        } else {
            new ReflectionHelper(wrapperFactory).setField(fileUtil);
        }
        new ReflectionHelper(xmlProcessor).setField(wrapperFactory);
        xmlProcessor.setOriginalXml(new ByteArrayInputStream(xml.getBytes(UTF_8)));
        return xmlProcessor;
    }

    public XmlProcessorTestUtil sortAlfabeticalOnly() {
        sortAlfabeticalOnly = true;
        return this;
    }

    public XmlProcessorTestUtil keepBlankLines() {
        keepBlankLines = true;
        return this;
    }

    public XmlProcessorTestUtil lineSeparator(String lineSeparator) {
        this.lineSeparator = lineSeparator;
        return this;
    }

    public XmlProcessorTestUtil indentBlankLines() {
        indentBlankLines = true;
        return this;
    }

    public XmlProcessorTestUtil predefinedSortOrder(String predefinedSortOrder) {
        this.predefinedSortOrder = predefinedSortOrder;
        return this;
    }

    public XmlProcessorTestUtil expandEmptyElements(boolean expand) {
        this.expandEmptyElements = expand;
        return this;
    }
}
TOP

Related Classes of sortpom.util.XmlProcessorTestUtil

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.