aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2013-01-13 08:33:49 +0100
committerBananeweizen <bananeweizen@gmx.de>2013-01-13 08:33:49 +0100
commit37b6f8103d9fb50d287d8bf9d06fa3d0c8fba79d (patch)
tree18bd81e2bd7c018884a93c66264d2ffce11a39a5
parentc0d057890cc0489115b47f80ec09e02167305ef5 (diff)
parent6e66c8f2da1d6893e2d9e100957a966bc3f9e69a (diff)
downloadcgeo-37b6f8103d9fb50d287d8bf9d06fa3d0c8fba79d.zip
cgeo-37b6f8103d9fb50d287d8bf9d06fa3d0c8fba79d.tar.gz
cgeo-37b6f8103d9fb50d287d8bf9d06fa3d0c8fba79d.tar.bz2
Merge remote-tracking branch 'origin/release'
Conflicts: main/src/cgeo/geocaching/geopoint/Geopoint.java
-rw-r--r--main/src/cgeo/geocaching/geopoint/Geopoint.java35
-rw-r--r--tests/src/cgeo/geocaching/geopoint/GeopointTest.java67
2 files changed, 79 insertions, 23 deletions
diff --git a/main/src/cgeo/geocaching/geopoint/Geopoint.java b/main/src/cgeo/geocaching/geopoint/Geopoint.java
index fc5bfbc..a4821b9 100644
--- a/main/src/cgeo/geocaching/geopoint/Geopoint.java
+++ b/main/src/cgeo/geocaching/geopoint/Geopoint.java
@@ -104,11 +104,9 @@ public final class Geopoint implements ICoordinates, Parcelable {
* @param lonDegFrac
*/
public Geopoint(final String latDir, final String latDeg, final String latDegFrac,
- final String lonDir, final String lonDeg, final String lonDegFrac) {
- latitude = Double.parseDouble(latDeg + "." + addZeros(Integer.parseInt(latDegFrac), 5)) *
- getLatSign(latDir);
- longitude = Double.parseDouble(lonDeg + "." + addZeros(Integer.parseInt(lonDegFrac), 5)) *
- getLonSign(lonDir);
+ final String lonDir, final String lonDeg, final String lonDegFrac) {
+ this(getLatSign(latDir) + latDeg + "." + addZeros(latDegFrac, 5),
+ getLonSign(lonDir) + lonDeg + "." + addZeros(lonDegFrac, 5));
}
/**
@@ -124,11 +122,9 @@ public final class Geopoint implements ICoordinates, Parcelable {
* @param lonMinFrac
*/
public Geopoint(final String latDir, final String latDeg, final String latMin, final String latMinFrac,
- final String lonDir, final String lonDeg, final String lonMin, final String lonMinFrac) {
- latitude = (Double.parseDouble(latDeg) + Double.parseDouble(latMin + "." + addZeros(Integer.parseInt(latMinFrac), 3)) / 60) *
- (getLatSign(latDir));
- longitude = (Double.parseDouble(lonDeg) + Double.parseDouble(lonMin + "." + addZeros(Integer.parseInt(lonMinFrac), 3)) / 60) *
- (getLonSign(lonDir));
+ final String lonDir, final String lonDeg, final String lonMin, final String lonMinFrac) {
+ this(latDir + " " + latDeg + " " + latMin + "." + addZeros(latMinFrac, 3),
+ lonDir + " " + lonDeg + " " + lonMin + "." + addZeros(lonMinFrac, 3));
}
/**
@@ -147,10 +143,8 @@ public final class Geopoint implements ICoordinates, Parcelable {
*/
public Geopoint(final String latDir, final String latDeg, final String latMin, final String latSec, final String latSecFrac,
final String lonDir, final String lonDeg, final String lonMin, final String lonSec, final String lonSecFrac) {
- latitude = (Double.parseDouble(latDeg) + Double.parseDouble(latMin) / 60 + Double.parseDouble(latSec + "." + addZeros(Integer.parseInt(latSecFrac), 3)) / 3600) *
- (getLatSign(latDir));
- longitude = (Double.parseDouble(lonDeg) + Double.parseDouble(lonMin) / 60 + Double.parseDouble(lonSec + "." + addZeros(Integer.parseInt(lonSecFrac), 3)) / 3600) *
- (getLonSign(lonDir));
+ this(latDir + " " + latDeg + " " + latMin + " " + latSec + "." + addZeros(latSecFrac, 3),
+ lonDir + " " + lonDeg + " " + lonMin + " " + lonSec + "." + addZeros(lonSecFrac, 3));
}
/**
@@ -580,16 +574,15 @@ public final class Geopoint implements ICoordinates, Parcelable {
return (Math.abs(deg) * 3600) % 60;
}
- private static String addZeros(final int value, final int len) {
- return StringUtils.leftPad(Integer.toString(value), len, '0');
+ private static String addZeros(final String value, final int len) {
+ return StringUtils.leftPad(value.trim(), len, '0');
}
- private static int getLonSign(final String lonDir) {
- return "W".equalsIgnoreCase(lonDir) ? -1 : 1;
+ private static String getLonSign(final String lonDir) {
+ return "W".equalsIgnoreCase(lonDir) ? "-" : "";
}
- private static int getLatSign(final String latDir) {
- return "S".equalsIgnoreCase(latDir) ? -1 : 1;
+ private static String getLatSign(final String latDir) {
+ return "S".equalsIgnoreCase(latDir) ? "-" : "";
}
-
}
diff --git a/tests/src/cgeo/geocaching/geopoint/GeopointTest.java b/tests/src/cgeo/geocaching/geopoint/GeopointTest.java
index 93b1339..1401cb6 100644
--- a/tests/src/cgeo/geocaching/geopoint/GeopointTest.java
+++ b/tests/src/cgeo/geocaching/geopoint/GeopointTest.java
@@ -1,10 +1,10 @@
package cgeo.geocaching.geopoint;
-import junit.framework.Assert;
-
import android.os.Bundle;
import android.test.AndroidTestCase;
+import junit.framework.Assert;
+
public class GeopointTest extends AndroidTestCase {
public static void testCreation() {
@@ -234,4 +234,67 @@ public class GeopointTest extends AndroidTestCase {
assertEquals(125.663703918457, (new Geopoint(48.0, 2.0)).getElevation(), 0.1);
}
+ private static void assertParseException(Runnable runnable) {
+ try {
+ runnable.run();
+ Assert.fail("Should have thrown Geopoint.ParseException");
+ } catch (Geopoint.ParseException e) {
+ //success
+ }
+ }
+
+ public static void testParseParam1() {
+ assertParseException(new Runnable() {
+
+ @SuppressWarnings("unused")
+ @Override
+ public void run() {
+ new Geopoint("some nonsense text");
+ }
+ });
+ }
+
+ public static void testParseParam2() throws Exception {
+ assertParseException(new Runnable() {
+
+ @SuppressWarnings("unused")
+ @Override
+ public void run() {
+ new Geopoint("latitude", "longitude");
+ }
+ });
+ }
+
+ public static void testParseParam6() throws Exception {
+ assertParseException(new Runnable() {
+
+ @SuppressWarnings("unused")
+ @Override
+ public void run() {
+ new Geopoint("latDir", "latDeg", "latDegFrac", "lonDir", "lonDeg", "lonDegFrac");
+ }
+ });
+ }
+
+ public static void testParseParam8() throws Exception {
+ assertParseException(new Runnable() {
+
+ @SuppressWarnings("unused")
+ @Override
+ public void run() {
+ new Geopoint("latDir", "latDeg", "latMin", "latMinFrac", "lonDir", "lonDeg", "lonMin", "lonMinFrac");
+ }
+ });
+ }
+
+ public static void testParseParam10() throws Exception {
+ assertParseException(new Runnable() {
+
+ @SuppressWarnings("unused")
+ @Override
+ public void run() {
+ new Geopoint("latDir", "latDeg", "latMin", "latSec", "latSecFrac", "lonDir", "lonDeg", "lonMin", "lonSec", "lonSecFrac");
+ }
+ });
+ }
}