diff options
| author | Bananeweizen <bananeweizen@gmx.de> | 2013-01-13 08:33:49 +0100 |
|---|---|---|
| committer | Bananeweizen <bananeweizen@gmx.de> | 2013-01-13 08:33:49 +0100 |
| commit | 37b6f8103d9fb50d287d8bf9d06fa3d0c8fba79d (patch) | |
| tree | 18bd81e2bd7c018884a93c66264d2ffce11a39a5 | |
| parent | c0d057890cc0489115b47f80ec09e02167305ef5 (diff) | |
| parent | 6e66c8f2da1d6893e2d9e100957a966bc3f9e69a (diff) | |
| download | cgeo-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.java | 35 | ||||
| -rw-r--r-- | tests/src/cgeo/geocaching/geopoint/GeopointTest.java | 67 |
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"); + } + }); + } } |
