view gwt-client/src/test/java/test/ModuleRunnerOutput.java @ 9567:86e522bc7f36

jUnit-Tests completed
author gernotbelger
date Mon, 05 Nov 2018 13:21:57 +0100
parents
children 531a60b7af95
line wrap: on
line source
/** Copyright (C) 2017 by Bundesanstalt für Gewässerkunde
 * Software engineering by
 *  Björnsen Beratende Ingenieure GmbH
 *  Dr. Schumacher Ingenieurbüro für Wasser und Umwelt
 *
 * This file is Free Software under the GNU AGPL (>=v3)
 * and comes with ABSOLUTELY NO WARRANTY! Check out the
 * documentation coming with Dive4Elements River for details.
 */
package test;

import java.io.ByteArrayInputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.URL;
import java.nio.charset.Charset;
import java.util.HashMap;
import java.util.Map;

import org.apache.commons.io.FileUtils;
import org.apache.commons.io.IOUtils;
import org.dive4elements.artifacts.common.utils.ClientProtocolUtils;
import org.dive4elements.artifacts.httpclient.http.HttpClient;
import org.dive4elements.river.client.server.ChartServiceHelper;
import org.junit.Assert;
import org.w3c.dom.Document;

/**
 * @author Domenico Nardi Tironi
 *
 */

public class ModuleRunnerOutput {

    private static final String IGNORE_ERSTELLDATUM = "# Datum der Erstellung";
    private static final String IGNORE_FLYS_VERSION = "# FLYS-Version:";
    private static final String IGNORE_BEARBEITER = "# Bearbeiter:";

    private static final String LINE_SEPARATOR = System.getProperty("line.separator");

    private static final String EXPORT_FILE_DIR = "D:" + File.separator;

    final FilenameSupplier filename;
    final String outputModeName;

    // private final String collectionIdentifier;

    private final Map<String, String> params;

    public final String getOutputModename() {
        return this.outputModeName;
    }

    public ModuleRunnerOutput(final FilenameSupplier filename, final String outputModeName, final String currentKm) {
        this.filename = filename;
        this.outputModeName = outputModeName;

        this.params = getChartExportAttributeMap(currentKm, outputModeName);
    }

    protected final void assertAndWriteToFile(final HttpClient client, final String collectionId) throws IOException {

        final String type = "csv";

        final String enc = "UTF-8";// req.getParameter("encoding");

        final URL expectedResource = getClass().getResource(this.filename.getFilename());
        final Document attr = ChartServiceHelper.getChartAttributes(this.params);

        final Document request = ClientProtocolUtils.newOutCollectionDocument(collectionId, this.outputModeName, type, attr);

        final InputStream response = client.collectionOut(request, collectionId, this.outputModeName);

        final String actual = deleteErstelldatum(IOUtils.toString(response, "UTF-8"));

        final String expected = deleteErstelldatum(FileUtils.readFileToString(new File(expectedResource.getFile()), enc));

        // if (!actual.equals(expected)) {
        // if (this.writeToFile != null && this.writeToFile == true) {
        doGetWriteToDisk(actual); // TODO: WENN der Test negativ ausfällt, Datei abspeichern -> Diskussion
        // }

        try {
            Assert.assertEquals(expected, actual);
        }
        catch (final AssertionError e) {
            // TODO write (both?) files

            // doGetWriteToDisk(actual); // TODO: WENN der Test negativ ausfällt, Datei abspeichern -> Diskussion
            throw e;
        }
    }

    public final void doGetWriteToDisk(final String actual_text) throws FileNotFoundException, IOException {

        // final String name = mode;
        final String type = "csv";

        final String fn = this.outputModeName + System.currentTimeMillis() + "." + type;
        final String enc = "windows-1252";

        final String filepath = EXPORT_FILE_DIR + fn;
        // BOM
        final byte[] BOM = new byte[] { (byte) 0xEF, (byte) 0xBB, (byte) 0xBF };
        final String bomChar = new String(BOM, "UTF-8");
        final String actualWithBom = new StringBuilder().append(BOM).append(actual_text).toString();

        final InputStreamReader in = new InputStreamReader(new ByteArrayInputStream(Charset.forName(enc).encode(actualWithBom).array()), enc);

        IOUtils.copy(in, new FileOutputStream(filepath), enc);
    }

    private final String deleteErstelldatum(final String input) {
        String result = "";
        final String[] lines = input.split(LINE_SEPARATOR);
        for (final String line : lines) {
            if (!line.contains(IGNORE_ERSTELLDATUM) && !line.contains(IGNORE_FLYS_VERSION) && !line.contains(IGNORE_BEARBEITER)) {
                result = result + line + LINE_SEPARATOR;
            }
        }
        return result;
    }

    private final Map<String, String> getChartExportAttributeMap(final String currentKm, final String outputmodeName) {

        // From ChartOutputServiceImpl
        final Map<String, String> attr = new HashMap<String, String>();

        attr.put("width", "-1"); // req.getParameter("width"));
        attr.put("height", "-1"); // req.getParameter("height"));
        // attr.put("minx", null);// req.getParameter("minx"));
        // attr.put("maxx", req.getParameter("maxx"));
        // attr.put("miny", req.getParameter("miny"));
        // attr.put("maxy", req.getParameter("maxy"));
        attr.put("format", "csv"); // req.getParameter("format"));
        attr.put("export", "true");// req.getParameter("export"));

        if (currentKm != null)
            attr.put("km", currentKm);// req.getParameter("currentKm"));
        // encoding?

        // Weiteres (nicht mehr von CHartOutputServiceImpl, sondern von URL-Parametern):
        attr.put("type", outputmodeName);
        attr.put("locale", "de");
        attr.put("timestamp", String.valueOf(System.currentTimeMillis()));
        attr.put("encoding", "windows-1252");

        return attr;
    }

}

http://dive4elements.wald.intevation.org