package org.geojson.jackson;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.geojson.LngLatAlt;
import org.geojson.Polygon;
import org.junit.Test;
import java.util.List;
import static org.junit.Assert.assertEquals;
public class PolygonTest {
private ObjectMapper mapper = new ObjectMapper();
@Test
public void itShouldSerialize() throws Exception {
Polygon polygon = new Polygon(MockData.EXTERNAL);
assertEquals("{\"type\":\"Polygon\",\"coordinates\":"
+ "[[[100.0,0.0],[101.0,0.0],[101.0,1.0],[100.0,1.0],[100.0,0.0]]]}",
mapper.writeValueAsString(polygon));
}
@Test
public void itShouldSerializeWithHole() throws Exception {
Polygon polygon = new Polygon(MockData.EXTERNAL);
polygon.addInteriorRing(MockData.INTERNAL);
assertEquals("{\"type\":\"Polygon\",\"coordinates\":"
+ "[[[100.0,0.0],[101.0,0.0],[101.0,1.0],[100.0,1.0],[100.0,0.0]],"
+ "[[100.2,0.2],[100.8,0.2],[100.8,0.8],[100.2,0.8],[100.2,0.2]]]}", mapper.writeValueAsString(polygon));
}
@Test(expected = RuntimeException.class)
public void itShouldFailOnAddInteriorRingWithoutExteriorRing() throws Exception {
Polygon polygon = new Polygon();
polygon.addInteriorRing(MockData.EXTERNAL);
}
@Test
public void itShouldDeserialize() throws Exception {
Polygon polygon = mapper.readValue("{\"type\":\"Polygon\",\"coordinates\":"
+ "[[[100.0,0.0],[101.0,0.0],[101.0,1.0],[100.0,1.0],[100.0,0.0]],"
+ "[[100.2,0.2],[100.8,0.2],[100.8,0.8],[100.2,0.8],[100.2,0.2]]]}", Polygon.class);
assertListEquals(MockData.EXTERNAL, polygon.getExteriorRing());
assertListEquals(MockData.INTERNAL, polygon.getInteriorRing(0));
assertListEquals(MockData.INTERNAL, polygon.getInteriorRings().get(0));
}
private void assertListEquals(List<LngLatAlt> expectedList, List<LngLatAlt> actualList) {
for (int x = 0; x < actualList.size(); x++) {
LngLatAlt expected = expectedList.get(x);
LngLatAlt actual = actualList.get(x);
PointTest.assertLngLatAlt(expected.getLongitude(), expected.getLatitude(), expected.getAltitude(), actual);
}
}
}