Mercurial > dive4elements > river
diff 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 diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/gwt-client/src/test/java/test/ModuleRunnerOutput.java Mon Nov 05 13:21:57 2018 +0100 @@ -0,0 +1,155 @@ +/** 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; + } + +} \ No newline at end of file