package cgeo.geocaching.location;
import static org.assertj.core.api.Java6Assertions.assertThat;
import static org.assertj.core.api.Assertions.offset;
import org.junit.Test;
/**
* Test the UTMPoint parsing and formatting.
*/
public class UTMPointFormatTest {
@Test
public void testParseUTMStringSimple() {
final UTMPoint utm = new UTMPoint("54S 293848 3915114");
assertThat(utm.getZoneNumber()).isEqualTo(54);
assertThat(utm.getZoneLetter()).isEqualTo('S');
assertThat(utm.getEasting()).isEqualTo(293848, offset(1.1d));
assertThat(utm.getNorthing()).isEqualTo(3915114, offset(1.1d));
}
@Test
public void testParseUTMStringWithEandN() {
final UTMPoint utm = new UTMPoint("54S E 293848 N 3915114");
assertThat(utm.getZoneNumber()).isEqualTo(54);
assertThat(utm.getZoneLetter()).isEqualTo('S');
assertThat(utm.getEasting()).isEqualTo(293848, offset(1.1d));
assertThat(utm.getNorthing()).isEqualTo(3915114, offset(1.1d));
}
@Test
public void testParseUTMStringWithDecimals() {
final UTMPoint utm = new UTMPoint("54S 293848.4 3915114.5");
assertThat(utm.getZoneNumber()).isEqualTo(54);
assertThat(utm.getZoneLetter()).isEqualTo('S');
assertThat(utm.getEasting()).isEqualTo(293848.4, offset(1.1d));
assertThat(utm.getNorthing()).isEqualTo(3915114.5, offset(1.1d));
}
@Test
public void testParseUTMStringWithLowerCaseLetters() {
final UTMPoint utm = new UTMPoint("54s e 293848 n 3915114");
assertThat(utm.getZoneNumber()).isEqualTo(54);
assertThat(utm.getZoneLetter()).isEqualTo('S');
assertThat(utm.getEasting()).isEqualTo(293848, offset(1.1d));
assertThat(utm.getNorthing()).isEqualTo(3915114, offset(1.1d));
}
@Test
public void testParseUTMStringWithCommaAsDecimalSeparator() {
final UTMPoint utm = new UTMPoint("54S 293848,4 3915114,5");
assertThat(utm.getZoneNumber()).isEqualTo(54);
assertThat(utm.getZoneLetter()).isEqualTo('S');
assertThat(utm.getEasting()).isEqualTo(293848.4, offset(1.1d));
assertThat(utm.getNorthing()).isEqualTo(3915114.5, offset(1.1d));
}
@Test
public void testParseUTMStringWithBlankAfterZoneNumber() {
final UTMPoint utm = new UTMPoint("54 S 293848 3915114");
assertThat(utm.getZoneNumber()).isEqualTo(54);
assertThat(utm.getZoneLetter()).isEqualTo('S');
assertThat(utm.getEasting()).isEqualTo(293848, offset(1.1d));
assertThat(utm.getNorthing()).isEqualTo(3915114, offset(1.1d));
}
@Test
public void testParseUTMStringWithSingleDigitZoneNumber() {
final UTMPoint utm = new UTMPoint("5S 293848 3915114");
assertThat(utm.getZoneNumber()).isEqualTo(5);
assertThat(utm.getZoneLetter()).isEqualTo('S');
assertThat(utm.getEasting()).isEqualTo(293848, offset(1.1d));
assertThat(utm.getNorthing()).isEqualTo(3915114, offset(1.1d));
}
@SuppressWarnings({ "unused" })
@Test(expected = UTMPoint.ParseException.class)
public void testParseUTMStringWithException() {
new UTMPoint("5S blah blub");
}
@Test
public void testToString() {
assertThat(new UTMPoint(54, 'S', 293848, 3915114).toString()).isEqualTo("54S E 293848 N 3915114");
}
@Test
public void testToStringWithRoundedDecimals() {
assertThat(new UTMPoint(54, 'S', 293847.5, 3915114.3).toString()).isEqualTo("54S E 293848 N 3915114");
}
}