package org.geotools.referencing;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
import java.util.List;
import java.util.Map;
import org.geotools.factory.Hints;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import org.junit.runners.Parameterized.Parameters;
import org.opengis.referencing.FactoryException;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
@RunWith(Parameterized.class)
public class EsriLookupTest {
@BeforeClass
public static void setup() {
System.setProperty("org.geotools.referencing.forceXY", "true");
Hints.putSystemDefault(Hints.COMPARISON_TOLERANCE, 1e-8);
CRS.getAuthorityFactory(true);
}
@AfterClass
public static void teardown() {
System.clearProperty("org.geotools.referencing.forceXY");
Hints.removeSystemDefault(Hints.COMPARISON_TOLERANCE);
CRS.reset("all");
}
@Parameters(name = "{0}")
public static Collection<Object[]> data() throws IOException {
java.util.Properties props = new java.util.Properties();
try(InputStream is = EsriLookupTest.class.getResourceAsStream("esri_tests.properties")) {
props.load(is);
}
List<Object[]> result = new ArrayList<>();
for (Map.Entry entry : props.entrySet()) {
Integer code = Integer.valueOf((String) entry.getKey());
String wkt = (String) entry.getValue();
result.add(new Object[] {code, wkt});
}
Collections.sort(result, (a, b) -> ((Integer) a[0]).compareTo((Integer) b[0]));
return result;
}
private String wkt;
private Integer expectedCode;
public EsriLookupTest(Integer code, String wkt) {
this.expectedCode = code;
this.wkt = wkt;
}
@Test
public void testCodeLookup() throws FactoryException {
CoordinateReferenceSystem crs = CRS.parseWKT(wkt);
Integer actualCode = CRS.lookupEpsgCode(crs, false);
assertNotNull("Could not find code for " + expectedCode + "\n" + wkt + "\n" + crs.toWKT(), actualCode);
assertEquals(expectedCode, actualCode);
}
}