diff options
author | Bananeweizen <bananeweizen@gmx.de> | 2012-11-10 13:32:12 +0100 |
---|---|---|
committer | Bananeweizen <bananeweizen@gmx.de> | 2012-11-10 13:32:12 +0100 |
commit | 3fcc78ed24d987bca508bd2ba126d4a274680643 (patch) | |
tree | e850dd22e46cdfc8b2ca1181935c8e32b0aeb0bd /tests/src/cgeo/geocaching/files | |
parent | c92010b00ae5f407d5deaceb4b112edb0af20abc (diff) | |
download | cgeo-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.java | 61 | ||||
-rw-r--r-- | tests/src/cgeo/geocaching/files/GPXParserTest.java | 32 |
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")); } } |