package com.revolsys.geometry.test.model;
import org.junit.Assert;
import com.revolsys.geometry.cs.CoordinateSystem;
import com.revolsys.geometry.cs.ProjectedCoordinateSystem;
import com.revolsys.geometry.model.Geometry;
import com.revolsys.geometry.model.GeometryFactory;
import com.revolsys.io.Reader;
import com.revolsys.record.Record;
import com.revolsys.record.io.RecordReader;
import com.revolsys.spring.resource.ClassPathResource;
import com.revolsys.spring.resource.Resource;
public class TestUtil {
public static boolean assertEqualsExact(final int axisCount, final Geometry expectedGeometry,
final Geometry actualGeometry) {
if (actualGeometry.equals(axisCount, expectedGeometry)) {
return true;
} else {
failNotEquals("Equals Exact", expectedGeometry, actualGeometry);
return false;
}
}
public static void doTestGeometry(final Class<?> clazz, final String file) {
boolean valid = true;
final Resource resource = new ClassPathResource(file, clazz);
try (
Reader<Record> reader = RecordReader.newRecordReader(resource)) {
int i = 0;
for (final Record object : reader) {
final int srid = object.getInteger("srid");
final int axisCount = object.getInteger("axisCount");
final double scaleXy = object.getInteger("scaleXy");
final double scaleZ = object.getInteger("scaleZ");
final GeometryFactory geometryFactory = GeometryFactory.fixed(srid, axisCount, scaleXy,
scaleXy, scaleZ);
final String wkt = object.getValue("wkt");
final Geometry geometry = geometryFactory.geometry(wkt);
valid &= equalsExpectedWkt(i, object, geometry);
final CoordinateSystem coordinateSystem = geometry.getCoordinateSystem();
GeometryFactory otherGeometryFactory;
if (coordinateSystem instanceof ProjectedCoordinateSystem) {
final ProjectedCoordinateSystem projectedCoordinateSystem = (ProjectedCoordinateSystem)coordinateSystem;
otherGeometryFactory = GeometryFactory.fixed(
projectedCoordinateSystem.getCoordinateSystemId(), axisCount, scaleXy, scaleXy, scaleZ);
} else {
otherGeometryFactory = GeometryFactory.fixed(3005, axisCount, scaleXy, scaleXy, scaleZ);
}
final Geometry convertedGeometry = geometry.convertGeometry(otherGeometryFactory);
final Geometry convertedBackGeometry = convertedGeometry.convertGeometry(geometryFactory);
valid &= equalsExpectedGeometry(i, geometry, convertedBackGeometry);
i++;
}
}
if (!valid) {
Assert.fail("Has Errors");
}
}
public static boolean equalsExact(final int axisCount, final Geometry actualGeometry,
final Geometry expectedGeometry) {
if (actualGeometry.equals(axisCount, expectedGeometry)) {
return true;
} else {
System.err.println("Equals Exact\t" + expectedGeometry + "\t" + actualGeometry);
return false;
}
}
public static boolean equalsExpectedGeometry(final int i, final Geometry actualGeometry,
final Geometry expectedGeometry) {
final int actualSrid = actualGeometry.getCoordinateSystemId();
final int expectedSrid = expectedGeometry.getCoordinateSystemId();
if (actualSrid != expectedSrid) {
System.err.println(i + "\tEquals Srid\t" + expectedSrid + "\t" + actualSrid);
return false;
} else if (actualGeometry.equals(2, expectedGeometry)) {
return true;
} else {
System.err.println(i + "\tEquals Exact\t" + expectedGeometry + "\t" + actualGeometry);
return false;
}
}
public static boolean equalsExpectedWkt(final int i, final Record object,
final Geometry actualGeometry) {
final GeometryFactory geometryFactory = GeometryFactory.DEFAULT_3D;
final String wkt = object.getValue("expectedWkt");
final Geometry expectedGeometry = geometryFactory.geometry(wkt, true);
return equalsExpectedGeometry(i, actualGeometry, expectedGeometry);
}
public static void failNotEquals(final String message, final Object expected,
final Object actual) {
Assert.fail(format(message, expected, actual));
}
public static String format(final String message, final Object expected, final Object actual) {
String formatted = "";
if (message != null && !message.equals("")) {
formatted = message + " ";
}
final String expectedString = String.valueOf(expected);
final String actualString = String.valueOf(actual);
if (expectedString.equals(actualString)) {
return formatted + "expected: " + formatClassAndValue(expected, expectedString) + " but was: "
+ formatClassAndValue(actual, actualString);
} else {
return formatted + "expected:<" + expectedString + "> but was:<" + actualString + ">";
}
}
public static String formatClassAndValue(final Object value, final String valueString) {
final String className = value == null ? "null" : value.getClass().getName();
return className + "<" + valueString + ">";
}
}