aboutsummaryrefslogtreecommitdiffstats
path: root/tests/src/cgeo/geocaching/files
diff options
context:
space:
mode:
authorBananeweizen <bananeweizen@gmx.de>2012-11-10 13:32:12 +0100
committerBananeweizen <bananeweizen@gmx.de>2012-11-10 13:32:12 +0100
commit3fcc78ed24d987bca508bd2ba126d4a274680643 (patch)
treee850dd22e46cdfc8b2ca1181935c8e32b0aeb0bd /tests/src/cgeo/geocaching/files
parentc92010b00ae5f407d5deaceb4b112edb0af20abc (diff)
downloadcgeo-3fcc78ed24d987bca508bd2ba126d4a274680643.zip
cgeo-3fcc78ed24d987bca508bd2ba126d4a274680643.tar.gz
cgeo-3fcc78ed24d987bca508bd2ba126d4a274680643.tar.bz2
fix #2089: c:geo crashes when importing large GPX file
Diffstat (limited to 'tests/src/cgeo/geocaching/files')
-rw-r--r--tests/src/cgeo/geocaching/files/GPXImporterTest.java61
-rw-r--r--tests/src/cgeo/geocaching/files/GPXParserTest.java32
2 files changed, 54 insertions, 39 deletions
diff --git a/tests/src/cgeo/geocaching/files/GPXImporterTest.java b/tests/src/cgeo/geocaching/files/GPXImporterTest.java
index 6c28a07..da99c11 100644
--- a/tests/src/cgeo/geocaching/files/GPXImporterTest.java
+++ b/tests/src/cgeo/geocaching/files/GPXImporterTest.java
@@ -55,27 +55,27 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase {
}
public void testImportGpx() throws IOException {
+ final String geocode = "GC31J2H";
+ removeCacheCompletely(geocode);
File gc31j2h = new File(tempDir, "gc31j2h.gpx");
copyResourceToFile(R.raw.gc31j2h, gc31j2h);
GPXImporter.ImportGpxFileThread importThread = new GPXImporter.ImportGpxFileThread(gc31j2h, listId, importStepHandler, progressHandler);
runImportThread(importThread);
- assertEquals(5, importStepHandler.messages.size());
+ assertEquals(4, importStepHandler.messages.size());
Iterator<Message> iMsg = importStepHandler.messages.iterator();
assertEquals(GPXImporter.IMPORT_STEP_START, iMsg.next().what);
assertEquals(GPXImporter.IMPORT_STEP_READ_FILE, iMsg.next().what);
- assertEquals(GPXImporter.IMPORT_STEP_STORE_CACHES, iMsg.next().what);
assertEquals(GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, iMsg.next().what);
assertEquals(GPXImporter.IMPORT_STEP_FINISHED, iMsg.next().what);
- SearchResult search = (SearchResult) importStepHandler.messages.get(4).obj;
- assertEquals(Collections.singletonList("GC31J2H"), new ArrayList<String>(search.getGeocodes()));
+ SearchResult search = (SearchResult) importStepHandler.messages.get(3).obj;
+ assertEquals(Collections.singletonList(geocode), new ArrayList<String>(search.getGeocodes()));
- cgCache cache = cgeoapplication.getInstance().loadCache("GC31J2H", LoadFlags.LOAD_CACHE_OR_DB);
+ cgCache cache = cgeoapplication.getInstance().loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
assertCacheProperties(cache);
- // can't assert, for whatever reason the waypoints are remembered in DB
- // assertNull(cache.waypoints);
+ assertTrue(cache.getWaypoints().isEmpty());
}
private void runImportThread(GPXImporter.ImportThread importThread) {
@@ -96,8 +96,8 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase {
GPXImporter.ImportGpxFileThread importThread = new GPXImporter.ImportGpxFileThread(gc31j2h, listId, importStepHandler, progressHandler);
runImportThread(importThread);
- assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_READ_WPT_FILE, GPXImporter.IMPORT_STEP_STORE_CACHES, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED);
- SearchResult search = (SearchResult) importStepHandler.messages.get(5).obj;
+ assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_READ_WPT_FILE, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED);
+ SearchResult search = (SearchResult) importStepHandler.messages.get(4).obj;
assertEquals(Collections.singletonList("GC31J2H"), new ArrayList<String>(search.getGeocodes()));
cgCache cache = cgeoapplication.getInstance().loadCache("GC31J2H", LoadFlags.LOAD_CACHE_OR_DB);
@@ -112,7 +112,7 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase {
final GPXImporter.ImportGpxFileThread importThread = new GPXImporter.ImportGpxFileThread(tc2012, listId, importStepHandler, progressHandler);
runImportThread(importThread);
- assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_STORE_CACHES, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED);
+ assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED);
final cgCache cache = cgeoapplication.getInstance().loadCache("AID1", LoadFlags.LOAD_CACHE_OR_DB);
assertCacheProperties(cache);
@@ -120,10 +120,10 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase {
}
private void assertImportStepMessages(int... importSteps) {
- for (int i = 0; i < Math.min(importSteps.length, importStepHandler.messages.size()); i++) {
+ assertEquals(importSteps.length, importStepHandler.messages.size());
+ for (int i = 0; i < importSteps.length; i++) {
assertEquals(importSteps[i], importStepHandler.messages.get(i).what);
}
- assertEquals(importSteps.length, importStepHandler.messages.size());
}
public void testImportLoc() throws IOException {
@@ -133,8 +133,8 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase {
GPXImporter.ImportLocFileThread importThread = new GPXImporter.ImportLocFileThread(oc5952, listId, importStepHandler, progressHandler);
runImportThread(importThread);
- assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_STORE_CACHES, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED);
- SearchResult search = (SearchResult) importStepHandler.messages.get(4).obj;
+ assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED);
+ SearchResult search = (SearchResult) importStepHandler.messages.get(3).obj;
assertEquals(Collections.singletonList("OC5952"), new ArrayList<String>(search.getGeocodes()));
cgCache cache = cgeoapplication.getInstance().loadCache("OC5952", LoadFlags.LOAD_CACHE_OR_DB);
@@ -169,34 +169,37 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase {
}
public void testImportGpxAttachment() {
+ final String geocode = "GC31J2H";
+ removeCacheCompletely(geocode);
Uri uri = Uri.parse("android.resource://cgeo.geocaching.test/raw/gc31j2h");
GPXImporter.ImportGpxAttachmentThread importThread = new GPXImporter.ImportGpxAttachmentThread(uri, getInstrumentation().getContext().getContentResolver(), listId, importStepHandler, progressHandler);
runImportThread(importThread);
- assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_STORE_CACHES, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED);
- SearchResult search = (SearchResult) importStepHandler.messages.get(4).obj;
- assertEquals(Collections.singletonList("GC31J2H"), new ArrayList<String>(search.getGeocodes()));
+ assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED);
+ SearchResult search = (SearchResult) importStepHandler.messages.get(3).obj;
+ assertEquals(Collections.singletonList(geocode), new ArrayList<String>(search.getGeocodes()));
- cgCache cache = cgeoapplication.getInstance().loadCache("GC31J2H", LoadFlags.LOAD_CACHE_OR_DB);
+ cgCache cache = cgeoapplication.getInstance().loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
assertCacheProperties(cache);
- // can't assert, for whatever reason the waypoints are remembered in DB
- // assertNull(cache.waypoints);
+ assertTrue(cache.getWaypoints().isEmpty());
}
public void testImportGpxZip() throws IOException {
+ final String geocode = "GC31J2H";
+ removeCacheCompletely(geocode);
File pq7545915 = new File(tempDir, "7545915.zip");
copyResourceToFile(R.raw.pq7545915, pq7545915);
GPXImporter.ImportGpxZipFileThread importThread = new GPXImporter.ImportGpxZipFileThread(pq7545915, listId, importStepHandler, progressHandler);
runImportThread(importThread);
- assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_READ_WPT_FILE, GPXImporter.IMPORT_STEP_STORE_CACHES, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED);
- SearchResult search = (SearchResult) importStepHandler.messages.get(5).obj;
- assertEquals(Collections.singletonList("GC31J2H"), new ArrayList<String>(search.getGeocodes()));
+ assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_READ_WPT_FILE, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED);
+ SearchResult search = (SearchResult) importStepHandler.messages.get(4).obj;
+ assertEquals(Collections.singletonList(geocode), new ArrayList<String>(search.getGeocodes()));
- cgCache cache = cgeoapplication.getInstance().loadCache("GC31J2H", LoadFlags.LOAD_CACHE_OR_DB);
+ cgCache cache = cgeoapplication.getInstance().loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
assertCacheProperties(cache);
assertEquals(1, cache.getWaypoints().size()); // this is the original pocket query result without test waypoint
}
@@ -212,16 +215,18 @@ public class GPXImporterTest extends AbstractResourceInstrumentationTestCase {
}
public void testImportGpxZipAttachment() {
+ final String geocode = "GC31J2H";
+ removeCacheCompletely(geocode);
Uri uri = Uri.parse("android.resource://cgeo.geocaching.test/raw/pq7545915");
GPXImporter.ImportGpxZipAttachmentThread importThread = new GPXImporter.ImportGpxZipAttachmentThread(uri, getInstrumentation().getContext().getContentResolver(), listId, importStepHandler, progressHandler);
runImportThread(importThread);
- assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_READ_WPT_FILE, GPXImporter.IMPORT_STEP_STORE_CACHES, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED);
- SearchResult search = (SearchResult) importStepHandler.messages.get(5).obj;
- assertEquals(Collections.singletonList("GC31J2H"), new ArrayList<String>(search.getGeocodes()));
+ assertImportStepMessages(GPXImporter.IMPORT_STEP_START, GPXImporter.IMPORT_STEP_READ_FILE, GPXImporter.IMPORT_STEP_READ_WPT_FILE, GPXImporter.IMPORT_STEP_STORE_STATIC_MAPS, GPXImporter.IMPORT_STEP_FINISHED);
+ SearchResult search = (SearchResult) importStepHandler.messages.get(4).obj;
+ assertEquals(Collections.singletonList(geocode), new ArrayList<String>(search.getGeocodes()));
- cgCache cache = cgeoapplication.getInstance().loadCache("GC31J2H", LoadFlags.LOAD_CACHE_OR_DB);
+ cgCache cache = cgeoapplication.getInstance().loadCache(geocode, LoadFlags.LOAD_CACHE_OR_DB);
assertCacheProperties(cache);
assertEquals(1, cache.getWaypoints().size()); // this is the original pocket query result without test waypoint
}
diff --git a/tests/src/cgeo/geocaching/files/GPXParserTest.java b/tests/src/cgeo/geocaching/files/GPXParserTest.java
index 5ba4081..4b4f286 100644
--- a/tests/src/cgeo/geocaching/files/GPXParserTest.java
+++ b/tests/src/cgeo/geocaching/files/GPXParserTest.java
@@ -3,8 +3,10 @@ package cgeo.geocaching.files;
import cgeo.geocaching.LogEntry;
import cgeo.geocaching.cgCache;
import cgeo.geocaching.cgWaypoint;
+import cgeo.geocaching.cgeoapplication;
import cgeo.geocaching.enumerations.CacheSize;
import cgeo.geocaching.enumerations.CacheType;
+import cgeo.geocaching.enumerations.LoadFlags;
import cgeo.geocaching.enumerations.WaypointType;
import cgeo.geocaching.geopoint.Geopoint;
import cgeo.geocaching.test.AbstractResourceInstrumentationTestCase;
@@ -16,7 +18,9 @@ import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Collection;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
public class GPXParserTest extends AbstractResourceInstrumentationTestCase {
private static final SimpleDateFormat LOG_DATE_FORMAT = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss'Z'"); // 2010-04-20T07:00:00Z
@@ -73,6 +77,7 @@ public class GPXParserTest extends AbstractResourceInstrumentationTestCase {
}
public void testGc31j2h() throws IOException, ParserException {
+ removeCacheCompletely("GC31J2H");
final List<cgCache> caches = readGPX10(R.raw.gc31j2h);
assertEquals(1, caches.size());
final cgCache cache = caches.get(0);
@@ -86,6 +91,7 @@ public class GPXParserTest extends AbstractResourceInstrumentationTestCase {
}
public void testGc31j2hWpts() throws IOException, ParserException {
+ removeCacheCompletely("GC31J2H");
List<cgCache> caches = readGPX10(R.raw.gc31j2h, R.raw.gc31j2h_wpts);
assertEquals(1, caches.size());
cgCache cache = caches.get(0);
@@ -155,7 +161,7 @@ public class GPXParserTest extends AbstractResourceInstrumentationTestCase {
private static void assertGc31j2hWaypoints(final cgCache cache) {
assertNotNull(cache.getWaypoints());
assertEquals(2, cache.getWaypoints().size());
- cgWaypoint wp = cache.getWaypoints().get(0);
+ cgWaypoint wp = cache.getWaypoints().get(1);
assertEquals("GC31J2H", wp.getGeocode());
assertEquals("00", wp.getPrefix());
assertEquals("---", wp.getLookup());
@@ -165,7 +171,7 @@ public class GPXParserTest extends AbstractResourceInstrumentationTestCase {
assertEquals(49.317517, wp.getCoords().getLatitude(), 0.000001);
assertEquals(8.545083, wp.getCoords().getLongitude(), 0.000001);
- wp = cache.getWaypoints().get(1);
+ wp = cache.getWaypoints().get(0);
assertEquals("GC31J2H", wp.getGeocode());
assertEquals("S1", wp.getPrefix());
assertEquals("---", wp.getLookup());
@@ -187,18 +193,21 @@ public class GPXParserTest extends AbstractResourceInstrumentationTestCase {
}
private List<cgCache> readVersionedGPX(final GPXParser parser, int... resourceIds) throws IOException, ParserException {
- Collection<cgCache> caches = null;
+ final Set<String> result = new HashSet<String>();
for (int resourceId : resourceIds) {
final InputStream instream = getResourceStream(resourceId);
try {
- caches = parser.parse(instream, null);
+ Collection<cgCache> caches = parser.parse(instream, null);
assertNotNull(caches);
+ for (cgCache cache : caches) {
+ result.add(cache.getGeocode());
+ }
} finally {
instream.close();
}
}
-
- return new ArrayList<cgCache>(caches);
+ // reload caches, because the parser only returns the minimum version of each cache
+ return new ArrayList<cgCache>(cgeoapplication.getInstance().loadCaches(result, LoadFlags.LOAD_ALL_DB_ONLY));
}
public static void testParseDateWithFractionalSeconds() {
@@ -237,10 +246,11 @@ public class GPXParserTest extends AbstractResourceInstrumentationTestCase {
public void testGeoToad() throws Exception {
final List<cgCache> caches = readGPX10(R.raw.geotoad);
assertEquals(2, caches.size());
- cgCache cache;
- cache = caches.get(0);
- assertEquals("GC2KN6K", cache.getGeocode());
- cache = caches.get(1);
- assertEquals("GC1T3MK", cache.getGeocode());
+ List<String> codes = new ArrayList<String>();
+ for (cgCache cache : caches) {
+ codes.add(cache.getGeocode());
+ }
+ assertTrue(codes.contains("GC2KN6K"));
+ assertTrue(codes.contains("GC1T3MK"));
}
}