diff options
Diffstat (limited to 'tests/src/cgeo/geocaching/connector/gc/GCParserTest.java')
| -rw-r--r-- | tests/src/cgeo/geocaching/connector/gc/GCParserTest.java | 121 |
1 files changed, 121 insertions, 0 deletions
diff --git a/tests/src/cgeo/geocaching/connector/gc/GCParserTest.java b/tests/src/cgeo/geocaching/connector/gc/GCParserTest.java new file mode 100644 index 0000000..54f69ce --- /dev/null +++ b/tests/src/cgeo/geocaching/connector/gc/GCParserTest.java @@ -0,0 +1,121 @@ +package cgeo.geocaching.connector.gc; + +import cgeo.geocaching.SearchResult; +import cgeo.geocaching.Settings; +import cgeo.geocaching.cgCache; +import cgeo.geocaching.cgWaypoint; +import cgeo.geocaching.enumerations.LoadFlags; +import cgeo.geocaching.enumerations.StatusCode; +import cgeo.geocaching.geopoint.Geopoint; +import cgeo.geocaching.test.AbstractResourceInstrumentationTestCase; +import cgeo.geocaching.test.R; +import cgeo.geocaching.test.RegExPerformanceTest; +import cgeo.geocaching.test.mock.MockedCache; +import cgeo.geocaching.utils.CancellableHandler; +import cgeo.test.Compare; + +import org.apache.commons.lang3.StringUtils; + +import android.test.suitebuilder.annotation.MediumTest; + +import java.util.ArrayList; + +public class GCParserTest extends AbstractResourceInstrumentationTestCase { + public void testUnpublishedCache() { + final String page = getFileContent(R.raw.cache_unpublished); + SearchResult result = GCParser.parseCacheFromText(page, null); + assertNotNull(result); + assertTrue(result.isEmpty()); + assertEquals(StatusCode.UNPUBLISHED_CACHE, result.getError()); + } + + private static cgCache createCache(int index) { + final MockedCache mockedCache = RegExPerformanceTest.MOCKED_CACHES[index]; + // to get the same results we have to use the date format used when the mocked data was created + String oldCustomDate = Settings.getGcCustomDate(); + + SearchResult searchResult; + try { + Settings.setGcCustomDate(MockedCache.getDateFormat()); + searchResult = GCParser.parseCacheFromText(mockedCache.getData(), null); + } finally { + Settings.setGcCustomDate(oldCustomDate); + } + + assertNotNull(searchResult); + assertEquals(1, searchResult.getCount()); + + final cgCache cache = searchResult.getFirstCacheFromResult(LoadFlags.LOAD_CACHE_OR_DB); + assertNotNull(cache); + return cache; + } + + /** + * Test {@link cgBase#parseCacheFromText(String, int, CancellableHandler)} with "mocked" data + * + */ + @MediumTest + public static void testParseCacheFromTextWithMockedData() { + String gcCustomDate = Settings.getGcCustomDate(); + try { + for (MockedCache mockedCache : RegExPerformanceTest.MOCKED_CACHES) { + // to get the same results we have to use the date format used when the mocked data was created + Settings.setGcCustomDate(MockedCache.getDateFormat()); + SearchResult searchResult = GCParser.parseCacheFromText(mockedCache.getData(), null); + cgCache parsedCache = searchResult.getFirstCacheFromResult(LoadFlags.LOAD_CACHE_OR_DB); + assertTrue(StringUtils.isNotBlank(mockedCache.getMockedDataUser())); + Compare.assertCompareCaches(mockedCache, parsedCache, true); + } + } finally { + Settings.setGcCustomDate(gcCustomDate); + } + } + + public static void testWaypointsFromNote() { + final cgCache cache = createCache(0); + + final Geopoint[] empty = new Geopoint[] {}; + final Geopoint[] one = new Geopoint[] { new Geopoint("N51 21.523", "E7 2.680") }; + assertWaypointsFromNote(cache, empty, " "); + assertWaypointsFromNote(cache, empty, "some random strings 1 with n 2 numbers"); + assertWaypointsFromNote(cache, empty, "Station3 some coords"); + assertWaypointsFromNote(cache, one, "Station3: N51 21.523 / E07 02.680"); + assertWaypointsFromNote(cache, one, "N51 21.523 / E07 02.680"); + assertWaypointsFromNote(cache, empty, "N51 21.523"); + assertWaypointsFromNote(cache, one, " n 51° 21.523 - E07 02.680"); + assertWaypointsFromNote(cache, new Geopoint[] { + new Geopoint("N51 21.523", "E7 2.680"), + new Geopoint("N52 21.523", "E12 2.680") }, + "Station3: N51 21.523 / E07 02.680\r\n Station4: N52 21.523 / E012 02.680"); + assertWaypointsFromNote(cache, empty, "51 21 523 / 07 02 680"); + assertWaypointsFromNote(cache, empty, "N51"); + assertWaypointsFromNote(cache, empty, "N 821 O 321"); // issue 922 + assertWaypointsFromNote(cache, empty, "N 821-211 O 322+11"); + assertWaypointsFromNote(cache, empty, "von 240 meter"); + assertWaypointsFromNote(cache, new Geopoint[] { + new Geopoint("N 51 19.844", "E 7 03.625") }, + "A=7 bis B=12 Quellen\r\nC= 66 , Quersumme von 240 m NN\r\nD= 67 , Quersumme von 223 m NN\r\nParken:\r\nN 51 19.844\r\nE 7 03.625"); + assertWaypointsFromNote(cache, new Geopoint[] { + new Geopoint("N51 21.444", "E07 02.600"), + new Geopoint("N51 21.789", "E07 02.800"), + new Geopoint("N51 21.667", "E07 02.800"), + new Geopoint("N51 21.444", "E07 02.706"), + new Geopoint("N51 21.321", "E07 02.700"), + new Geopoint("N51 21.123", "E07 02.477"), + new Geopoint("N51 21.734", "E07 02.500"), + new Geopoint("N51 21.733", "E07 02.378"), + new Geopoint("N51 21.544", "E07 02.566") }, + "Station3: N51 21.444 / E07 02.600\r\nStation4: N51 21.789 / E07 02.800\r\nStation5: N51 21.667 / E07 02.800\r\nStation6: N51 21.444 / E07 02.706\r\nStation7: N51 21.321 / E07 02.700\r\nStation8: N51 21.123 / E07 02.477\r\nStation9: N51 21.734 / E07 02.500\r\nStation10: N51 21.733 / E07 02.378\r\nFinal: N51 21.544 / E07 02.566"); + } + + private static void assertWaypointsFromNote(final cgCache cache, Geopoint[] expected, String note) { + cache.setPersonalNote(note); + cache.setWaypoints(new ArrayList<cgWaypoint>(), false); + cache.parseWaypointsFromNote(); + assertEquals(expected.length, cache.getWaypoints().size()); + for (int i = 0; i < expected.length; i++) { + assertTrue(expected[i].equals(cache.getWaypoint(i).getCoords())); + } + } + +} |
