view gwt-client/src/test/java/test/ModuleRunnerOutput.java @ 9570:531a60b7af95

failed tests will be saved to disk
author gernotbelger
date Mon, 05 Nov 2018 17:15:30 +0100
parents 86e522bc7f36
children
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.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
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");

    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, final File testFolder) 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));

        final File fileTmp = doGetWriteToDisk(actual, testFolder);
        Assert.assertEquals(expected, actual);

        fileTmp.delete(); // if assert fails, file won't be deleted

    }

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

        final File file = new File(testFolder, this.filename.getFilename());
        new File(file.getParent()).mkdir();

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

        FileUtils.write(file, actual_text, "UTF-8");
        return file;
    }

    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