package org.geojson;
import org.junit.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runners.Parameterized;
import java.util.Arrays;
import java.util.Collection;
@RunWith(Parameterized.class)
public class GeoJsonObjectVisitorTest {
private final GeoJsonObject geoJsonObject;
private GeoJsonObjectVisitor<GeoJsonObject> instance = new GeoJsonObjectVisitor<GeoJsonObject>() {
@Override
public GeoJsonObject visit(GeometryCollection geoJsonObject) {
Assert.assertEquals(GeometryCollection.class, geoJsonObject.getClass());
return geoJsonObject;
}
@Override
public GeoJsonObject visit(FeatureCollection geoJsonObject) {
Assert.assertEquals(FeatureCollection.class, geoJsonObject.getClass());
return geoJsonObject;
}
@Override
public GeoJsonObject visit(Point geoJsonObject) {
Assert.assertEquals(Point.class, geoJsonObject.getClass());
return geoJsonObject;
}
@Override
public GeoJsonObject visit(Feature geoJsonObject) {
Assert.assertEquals(Feature.class, geoJsonObject.getClass());
return geoJsonObject;
}
@Override
public GeoJsonObject visit(MultiLineString geoJsonObject) {
Assert.assertEquals(MultiLineString.class, geoJsonObject.getClass());
return geoJsonObject;
}
@Override
public GeoJsonObject visit(Polygon geoJsonObject) {
Assert.assertEquals(Polygon.class, geoJsonObject.getClass());
return geoJsonObject;
}
@Override
public GeoJsonObject visit(MultiPolygon geoJsonObject) {
Assert.assertEquals(MultiPolygon.class, geoJsonObject.getClass());
return geoJsonObject;
}
@Override
public GeoJsonObject visit(MultiPoint geoJsonObject) {
Assert.assertEquals(MultiPoint.class, geoJsonObject.getClass());
return geoJsonObject;
}
@Override
public GeoJsonObject visit(LineString geoJsonObject) {
Assert.assertEquals(LineString.class, geoJsonObject.getClass());
return geoJsonObject;
}
};
public GeoJsonObjectVisitorTest(GeoJsonObject geoJsonObject) {
this.geoJsonObject = geoJsonObject;
}
@Parameterized.Parameters
public static Collection<Object[]> data() {
return Arrays.asList(new Object[][] { { new GeometryCollection() }, { new FeatureCollection() },
{ new Point(12D, 13D) }, { new Feature() },
{ new MultiLineString(Arrays.asList(new LngLatAlt(12D, 13D))) }, { new Polygon() },
{ new MultiPolygon() }, { new MultiPoint() }, { new LineString() } });
}
@Test
public void should_visit_right_class() {
// When
GeoJsonObject result = geoJsonObject.accept(this.instance);
// Then
Assert.assertEquals(geoJsonObject, result);
}
@Test
public void itShouldAdapter() throws Exception {
Assert.assertNull(geoJsonObject.accept(new GeoJsonObjectVisitor.Adapter<Void>()));
}
}