cleaned up ORC certificate (de-)serialization tests and strengthened verdicts

This commit is contained in:
Axel Uhl
2020-02-11 09:46:47 +01:00
parent 7854c5f3ae
commit 1bc2f8099f
4 changed files with 30 additions and 62 deletions
@@ -50,10 +50,10 @@ public class ORCCertificateJsonDeserializer implements JsonDeserializer<ORCCerti
Map<Speed, Speed> longDistanceSpeedPredictionPerTrueWindSpeed = new HashMap<>();
Map<Speed, Speed> circularRandomSpeedPredictionPerTrueWindSpeed = new HashMap<>();
Map<Speed, Speed> nonSpinnakerSpeedPredictionPerTrueWindSpeed = new HashMap<>();
Speed[] trueWindSpeeds = convertJsonArrayOfDoublesToArrayOfObjectsOrReturnDefault(json.get(ORCCertificateJsonSerializer.ORC_CERTIFICATE_TRUE_WIND_ANGLES_IN_TRUE_DEGREES),
ORCCertificate.ALLOWANCES_TRUE_WIND_SPEEDS, speedInKnots->new KnotSpeedImpl(speedInKnots));
Bearing[] trueWindAngles = convertJsonArrayOfDoublesToArrayOfObjectsOrReturnDefault(json.get(ORCCertificateJsonSerializer.ORC_CERTIFICATE_TRUE_WIND_SPEEDS_IN_KNOTS),
ORCCertificate.ALLOWANCES_TRUE_WIND_ANGLES, twaInTrueDegrees->new DegreeBearingImpl(twaInTrueDegrees));
Speed[] trueWindSpeeds = convertJsonArrayOfDoublesToArrayOfObjectsOrReturnDefault(json.get(ORCCertificateJsonSerializer.ORC_CERTIFICATE_TRUE_WIND_SPEEDS_IN_KNOTS),
ORCCertificate.ALLOWANCES_TRUE_WIND_SPEEDS, speedInKnots->new KnotSpeedImpl(speedInKnots), new Speed[0]);
Bearing[] trueWindAngles = convertJsonArrayOfDoublesToArrayOfObjectsOrReturnDefault(json.get(ORCCertificateJsonSerializer.ORC_CERTIFICATE_TRUE_WIND_ANGLES_IN_TRUE_DEGREES),
ORCCertificate.ALLOWANCES_TRUE_WIND_ANGLES, twaInTrueDegrees->new DegreeBearingImpl(twaInTrueDegrees), new Bearing[0]);
for (Speed tws : trueWindSpeeds) {
String twsKey = ORCCertificateJsonSerializer.speedToKnotsString(tws);
beatAngles.put(tws, new DegreeBearingImpl(
@@ -113,19 +113,18 @@ public class ORCCertificateJsonDeserializer implements JsonDeserializer<ORCCerti
return certificate;
}
private <T> T[] convertJsonArrayOfDoublesToArrayOfObjectsOrReturnDefault(final Object windAnglesObject,
final T[] defaults, final Function<Double, T> constructor) {
private <T> T[] convertJsonArrayOfDoublesToArrayOfObjectsOrReturnDefault(final Object supposedJsonArray,
final T[] defaults, final Function<Double, T> constructor, T[] array) {
final T[] result;
final JSONArray windAnglesJsonArray;
if (windAnglesObject == null || !(windAnglesObject instanceof JSONArray) || (windAnglesJsonArray=(JSONArray) windAnglesObject).isEmpty()) {
if (supposedJsonArray == null || !(supposedJsonArray instanceof JSONArray) || (windAnglesJsonArray=(JSONArray) supposedJsonArray).isEmpty()) {
result = defaults;
} else {
final List<T> resultList = new ArrayList<>();
for (final Object number : windAnglesJsonArray) {
resultList.add(constructor.apply((Double) number));
}
@SuppressWarnings("unchecked")
final T[] tArray = (T[]) resultList.toArray();
final T[] tArray = resultList.toArray(array);
result = tArray;
}
return result;
@@ -141,8 +141,8 @@ public class ORCCertificateJsonSerializer implements JsonSerializer<ORCCertifica
} else if (speed.equals(ORCCertificate.ALLOWANCES_TRUE_WIND_SPEEDS[6])) {
result = ORC_CERTIFICATE_TWS_20KT;
} else {
String speedKnots =String.valueOf(speed.getKnots());
speedKnots =speedKnots.replace(".", "P");
String speedKnots = String.valueOf(speed.getKnots());
speedKnots = speedKnots.replace(".", "P");
result = MessageFormat.format(ORC_CERTIFICATE_TWS_KNOTS, speedKnots);
}
return result;
@@ -8,6 +8,7 @@ import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Arrays;
import java.util.Iterator;
import org.json.simple.JSONObject;
@@ -15,22 +16,27 @@ import org.json.simple.parser.ParseException;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.domain.common.impl.KnotSpeedImpl;
import com.sap.sailing.domain.common.orc.ORCCertificate;
import com.sap.sailing.domain.orc.ORCCertificatesCollection;
import com.sap.sailing.domain.orc.ORCCertificatesImporter;
import com.sap.sailing.server.gateway.deserialization.racelog.impl.ORCCertificateJsonDeserializer;
import com.sap.sailing.server.gateway.serialization.racelog.impl.ORCCertificateJsonSerializer;
import com.sap.sse.common.Bearing;
import com.sap.sse.common.Speed;
import com.sap.sse.common.impl.DegreeBearingImpl;
public class ORCCertificateJsonDeserializerTest {
private ORCCertificateJsonSerializer serializer;
private ORCCertificateJsonDeserializer deserializer;
private static final String RESOURCES = "resources/rms/";
@Before
public void setup() {
deserializer = new ORCCertificateJsonDeserializer();
serializer = new ORCCertificateJsonSerializer();
}
@Test
public void testNewFormateOrcCertificateDeserializer() throws FileNotFoundException, IOException, ParseException {
File fileGER = new File(RESOURCES + "newFormatCertificate.json");
@@ -38,10 +44,17 @@ public class ORCCertificateJsonDeserializerTest {
Iterator<ORCCertificate> iterator = importer.getCertificates().iterator();
assertTrue(iterator.hasNext());
ORCCertificate certificate = iterator.next();
JSONObject serializedCertificate =serializer.serialize(certificate);
final Speed[] expectedTrueWindSpeeds = { new KnotSpeedImpl(6.1), new KnotSpeedImpl(8.2), new KnotSpeedImpl(10.6), new KnotSpeedImpl(12.1), new KnotSpeedImpl(14.9), new KnotSpeedImpl(16.7), new KnotSpeedImpl(20.1) };
assertTrue(Arrays.equals(expectedTrueWindSpeeds, certificate.getTrueWindSpeeds()));
final Bearing[] expectedTrueWindAngles = { new DegreeBearingImpl(52.7), new DegreeBearingImpl(64.4), new DegreeBearingImpl(75), new DegreeBearingImpl(90),
new DegreeBearingImpl(110), new DegreeBearingImpl(120), new DegreeBearingImpl(135), new DegreeBearingImpl(150) };
assertTrue(Arrays.equals(expectedTrueWindAngles, certificate.getTrueWindAngles()));
JSONObject serializedCertificate = serializer.serialize(certificate);
assertNotNull(serializedCertificate);
ORCCertificate certificateAfterDeserialize = deserializer.deserialize(serializedCertificate);
assertEquals(certificate.getId(), certificateAfterDeserialize.getId());
assertTrue(Arrays.equals(expectedTrueWindSpeeds, certificateAfterDeserialize.getTrueWindSpeeds()));
assertTrue(Arrays.equals(expectedTrueWindAngles, certificateAfterDeserialize.getTrueWindAngles()));
}
@Test
@@ -51,9 +64,13 @@ public class ORCCertificateJsonDeserializerTest {
Iterator<ORCCertificate> iterator = importer.getCertificates().iterator();
assertTrue(iterator.hasNext());
ORCCertificate certificate = iterator.next();
JSONObject serializedCertificate =serializer.serialize(certificate);
assertTrue(Arrays.equals(ORCCertificate.ALLOWANCES_TRUE_WIND_SPEEDS, certificate.getTrueWindSpeeds()));
assertTrue(Arrays.equals(ORCCertificate.ALLOWANCES_TRUE_WIND_ANGLES, certificate.getTrueWindAngles()));
JSONObject serializedCertificate = serializer.serialize(certificate);
assertNotNull(serializedCertificate);
ORCCertificate certificateAfterDeserialize = deserializer.deserialize(serializedCertificate);
assertEquals(certificate.getId(), certificateAfterDeserialize.getId());
assertTrue(Arrays.equals(ORCCertificate.ALLOWANCES_TRUE_WIND_SPEEDS, certificateAfterDeserialize.getTrueWindSpeeds()));
assertTrue(Arrays.equals(ORCCertificate.ALLOWANCES_TRUE_WIND_ANGLES, certificateAfterDeserialize.getTrueWindAngles()));
}
}
@@ -1,48 +0,0 @@
package com.sap.sailing.server.gateway.serialization.test;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.Iterator;
import org.json.simple.JSONObject;
import org.json.simple.parser.ParseException;
import org.junit.Before;
import org.junit.Test;
import com.sap.sailing.domain.common.orc.ORCCertificate;
import com.sap.sailing.domain.orc.ORCCertificatesCollection;
import com.sap.sailing.domain.orc.ORCCertificatesImporter;
import com.sap.sailing.server.gateway.serialization.racelog.impl.ORCCertificateJsonSerializer;
public class ORCCertificateJsonSerializerTest {
private ORCCertificateJsonSerializer serializer;
private static final String RESOURCES = "resources/rms/";
@Before
public void setUp() {
serializer = new ORCCertificateJsonSerializer();
}
@Test
public void testOrcCertificateNewFormatSerializer() throws IOException, ParseException {
File fileGER = new File(RESOURCES + "newFormatCertificate.json");
ORCCertificatesCollection importer = ORCCertificatesImporter.INSTANCE.read(new FileInputStream(fileGER));
Iterator<ORCCertificate> iterator = importer.getCertificates().iterator();
assertTrue(iterator.hasNext());
ORCCertificate certificate = iterator.next();
JSONObject serializedCertificate =serializer.serialize(certificate);
assertNotNull(serializedCertificate);
}
@Test
public void testOrcCertificateOldFormatSerializer() throws IOException, ParseException {
File fileGER = new File(RESOURCES + "oldFormatCertificate.json");
ORCCertificatesCollection importer = ORCCertificatesImporter.INSTANCE.read(new FileInputStream(fileGER));
Iterator<ORCCertificate> iterator = importer.getCertificates().iterator();
assertTrue(iterator.hasNext());
ORCCertificate certificate = iterator.next();
JSONObject serializedCertificate =serializer.serialize(certificate);
assertNotNull(serializedCertificate);
}
}