Skip to content

Commit 0112a09

Browse files
authored
Merge pull request commons-app#673 from tobias47n9e/bugfix/nearby-crash
Fix crash of nearby list when the places list is null
2 parents 40c1ea3 + bc61f8d commit 0112a09

File tree

2 files changed

+67
-4
lines changed

2 files changed

+67
-4
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,57 @@
1+
package fr.free.nrw.commons;
2+
3+
import android.content.Context;
4+
import android.support.test.InstrumentationRegistry;
5+
import android.support.test.runner.AndroidJUnit4;
6+
7+
import org.junit.Assert;
8+
import org.junit.Before;
9+
import org.junit.Test;
10+
import org.junit.runner.RunWith;
11+
12+
import java.util.ArrayList;
13+
import java.util.List;
14+
15+
import fr.free.nrw.commons.location.LatLng;
16+
import fr.free.nrw.commons.nearby.NearbyBaseMarker;
17+
import fr.free.nrw.commons.nearby.NearbyController;
18+
import fr.free.nrw.commons.nearby.Place;
19+
20+
import static org.hamcrest.CoreMatchers.is;
21+
22+
@RunWith(AndroidJUnit4.class)
23+
public class NearbyControllerTest {
24+
private Context instrumentationContext;
25+
26+
@Before
27+
public void setup() {
28+
instrumentationContext = InstrumentationRegistry.getContext();
29+
}
30+
31+
@Test public void testNullAttractions() {
32+
LatLng location = new LatLng(0, 0);
33+
34+
List<NearbyBaseMarker> options =
35+
NearbyController.loadAttractionsFromLocationToBaseMarkerOptions(
36+
location,
37+
null,
38+
instrumentationContext
39+
);
40+
41+
Assert.assertThat(options.size(), is(0));
42+
}
43+
44+
@Test public void testEmptyList() {
45+
LatLng location = new LatLng(0, 0);
46+
List<Place> emptyList = new ArrayList<>();
47+
48+
List<NearbyBaseMarker> options =
49+
NearbyController.loadAttractionsFromLocationToBaseMarkerOptions(
50+
location,
51+
emptyList,
52+
instrumentationContext
53+
);
54+
55+
Assert.assertThat(options.size(), is(0));
56+
}
57+
}

app/src/main/java/fr/free/nrw/commons/nearby/NearbyController.java

+10-4
Original file line numberDiff line numberDiff line change
@@ -84,14 +84,20 @@ public static List<Place> loadAttractionsFromLocationToPlaces(
8484
*Loads attractions from location for map view, we need to return BaseMarkerOption data type.
8585
* @param curLatLng users current location
8686
* @param placeList list of nearby places in Place data type
87-
* @return BaseMarkerOprions list that holds nearby places
87+
* @return BaseMarkerOptions list that holds nearby places
8888
*/
8989
public static List<NearbyBaseMarker> loadAttractionsFromLocationToBaseMarkerOptions(
9090
LatLng curLatLng,
9191
List<Place> placeList,
9292
Context context) {
93-
List<NearbyBaseMarker> baseMarkerOptionses = new ArrayList<>();
93+
List<NearbyBaseMarker> baseMarkerOptions = new ArrayList<>();
94+
95+
if (placeList == null) {
96+
return baseMarkerOptions;
97+
}
98+
9499
placeList = placeList.subList(0, Math.min(placeList.size(), MAX_RESULTS));
100+
95101
for (Place place: placeList) {
96102
String distance = formatDistanceBetween(curLatLng, place.location);
97103
place.setDistance(distance);
@@ -108,8 +114,8 @@ public static List<NearbyBaseMarker> loadAttractionsFromLocationToBaseMarkerOpti
108114
nearbyBaseMarker.place(place);
109115
nearbyBaseMarker.icon(icon);
110116

111-
baseMarkerOptionses.add(nearbyBaseMarker);
117+
baseMarkerOptions.add(nearbyBaseMarker);
112118
}
113-
return baseMarkerOptionses;
119+
return baseMarkerOptions;
114120
}
115121
}

0 commit comments

Comments
 (0)