1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
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()));
}
}
}
|