/**
*
* Copyright
* 2009-2015 Jayway Products AB
* 2016-2017 Föreningen Sambruk
*
* Licensed under AGPL, Version 3.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.gnu.org/licenses/agpl.txt
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package se.streamsource.streamflow.client.ui.workspace.cases.general.forms.geo;
import static org.hamcrest.CoreMatchers.equalTo;
import static org.hamcrest.CoreMatchers.instanceOf;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.junit.Assert.assertThat;
import java.util.Arrays;
import org.junit.Test;
import org.jxmapviewer.viewer.GeoPosition;
public class GeoMarkerTest {
@Test
public void parseEmpty() {
GeoMarker marker = GeoMarker.parseGeoMarker("");
assertThat(marker, nullValue());
}
@Test
public void parseNull() {
GeoMarker marker = GeoMarker.parseGeoMarker("");
assertThat(marker, nullValue());
}
@Test(expected=IllegalArgumentException.class)
public void parseInvalidString() {
GeoMarker.parseGeoMarker("invalid");
}
@Test(expected=IllegalArgumentException.class)
public void parseInvalidOneNumberOnly() {
GeoMarker.parseGeoMarker("1.234");
}
@Test(expected=IllegalArgumentException.class)
public void parseInvalidPair() {
GeoMarker.parseGeoMarker("1.234,foo");
}
@Test
public void parsePointMarker() {
GeoMarker marker = GeoMarker.parseGeoMarker("1.500,2.750");
checkPointMarker(marker, 1.5, 2.75);
}
@Test
public void parsePointMarkerWithSpaces() {
GeoMarker marker = GeoMarker.parseGeoMarker(" 1.500 , 2.750 ");
checkPointMarker(marker, 1.5, 2.75);
}
@Test(expected=IllegalArgumentException.class)
public void parseUnterminatedPointList() {
GeoMarker.parseGeoMarker("(1.234,1.234");
}
@Test
public void parseLine() {
GeoMarker marker = GeoMarker.parseGeoMarker("(1.500,2.750), ( 3.5, 4.75 ) ");
assertThat(marker, instanceOf(LineMarker.class));
LineMarker line = (LineMarker) marker;
assertThat(line.getPoints().size(), equalTo(2));
checkGeoPosition(line.getPoints().get(0), 1.5, 2.75);
checkGeoPosition(line.getPoints().get(1), 3.5, 4.75);
}
@Test
public void parsePolygon() {
GeoMarker marker = GeoMarker.parseGeoMarker("(1.500,2.750), ( 3.5, 4.75 ), (1.500,2.750)");
assertThat(marker, instanceOf(PolygonMarker.class));
PolygonMarker polygon = (PolygonMarker) marker;
assertThat(polygon.getPoints().size(), equalTo(3));
checkGeoPosition(polygon.getPoints().get(0), 1.5, 2.75);
checkGeoPosition(polygon.getPoints().get(1), 3.5, 4.75);
checkGeoPosition(polygon.getPoints().get(2), 1.5, 2.75);
}
@Test
public void stringifyPoint() {
PointMarker marker = new PointMarker(new GeoPosition(1.5, 2.75));
String stringified = marker.stringify();
assertThat(stringified, equalTo("1.500000000000000,2.750000000000000"));
}
@Test
public void stringifyLine() {
LineMarker marker = new LineMarker(Arrays.asList(
new GeoPosition(1.5, 2.75), new GeoPosition(3.5, 4.75)));
String stringified = marker.stringify();
assertThat(stringified, equalTo("(1.500000000000000,2.750000000000000),(3.500000000000000,4.750000000000000)"));
}
@Test
public void stringifyPolygon() {
PolygonMarker marker = new PolygonMarker(Arrays.asList(
new GeoPosition(1.5, 2.75),
new GeoPosition(3.5, 4.75),
new GeoPosition(5.5, 6.75),
new GeoPosition(1.5, 2.75)
));
String stringified = marker.stringify();
assertThat(stringified, equalTo("(1.500000000000000,2.750000000000000),(3.500000000000000,4.750000000000000),(5.500000000000000,6.750000000000000),(1.500000000000000,2.750000000000000)"));
}
private void checkPointMarker(GeoMarker marker, double lat, double lon) {
assertThat(marker, notNullValue());
assertThat(marker, instanceOf(PointMarker.class));
PointMarker point = (PointMarker) marker;
assertThat(point.getPosition().getLongitude(), equalTo(lon));
assertThat(point.getPosition().getLatitude(), equalTo(lat));
}
private void checkGeoPosition(GeoPosition position, double lat, double lon) {
assertThat(position.getLongitude(), equalTo(lon));
assertThat(position.getLatitude(), equalTo(lat));
}
}