From 6fa578aa4e372c8d91dc617970386290e4571d5c Mon Sep 17 00:00:00 2001 From: Ivo van Dongen Date: Thu, 23 Mar 2017 17:54:22 +0200 Subject: [android] geojson source - add conversion tests --- .../testapp/style/GeoJsonSourceTests.java | 215 +++++++++++++++++++++ .../main/res/raw/test_feature_collection.geojson | 26 +++ .../main/res/raw/test_feature_properties.geojson | 21 ++ .../main/res/raw/test_line_string_feature.geojson | 17 ++ .../res/raw/test_multi_line_string_feature.geojson | 29 +++ .../main/res/raw/test_multi_point_feature.geojson | 17 ++ .../res/raw/test_multi_polygon_feature.geojson | 49 +++++ .../src/main/res/raw/test_point_feature.geojson | 11 ++ .../src/main/res/raw/test_polygon_feature.geojson | 27 +++ .../res/raw/test_polygon_with_hole_feature.geojson | 45 +++++ 10 files changed, 457 insertions(+) create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/GeoJsonSourceTests.java create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_feature_collection.geojson create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_feature_properties.geojson create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_line_string_feature.geojson create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_multi_line_string_feature.geojson create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_multi_point_feature.geojson create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_multi_polygon_feature.geojson create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_point_feature.geojson create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_polygon_feature.geojson create mode 100644 platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_polygon_with_hole_feature.geojson diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/GeoJsonSourceTests.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/GeoJsonSourceTests.java new file mode 100644 index 0000000000..a8d1ee5911 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/GeoJsonSourceTests.java @@ -0,0 +1,215 @@ +package com.mapbox.mapboxsdk.testapp.style; + +import android.content.res.Resources; +import android.support.annotation.RawRes; +import android.support.test.espresso.Espresso; +import android.support.test.espresso.UiController; +import android.support.test.espresso.ViewAction; +import android.support.test.rule.ActivityTestRule; +import android.support.test.runner.AndroidJUnit4; +import android.view.View; + +import com.mapbox.mapboxsdk.maps.MapboxMap; +import com.mapbox.mapboxsdk.style.layers.CircleLayer; +import com.mapbox.mapboxsdk.style.layers.Layer; +import com.mapbox.mapboxsdk.style.sources.GeoJsonSource; +import com.mapbox.mapboxsdk.testapp.R; +import com.mapbox.mapboxsdk.testapp.activity.style.RuntimeStyleTestActivity; +import com.mapbox.mapboxsdk.testapp.utils.OnMapReadyIdlingResource; +import com.mapbox.mapboxsdk.testapp.utils.ViewUtils; +import com.mapbox.services.commons.geojson.Feature; +import com.mapbox.services.commons.geojson.FeatureCollection; +import com.mapbox.services.commons.geojson.Point; + +import org.hamcrest.Matcher; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.Reader; +import java.io.StringWriter; +import java.io.Writer; + +import static android.support.test.espresso.Espresso.onView; +import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; +import static android.support.test.espresso.matcher.ViewMatchers.withId; +import static org.junit.Assert.fail; + +/** + * Tests for {@link GeoJsonSource} + */ +@RunWith(AndroidJUnit4.class) +public class GeoJsonSourceTests { + + @Rule + public final ActivityTestRule rule = + new ActivityTestRule<>(RuntimeStyleTestActivity.class); + + private OnMapReadyIdlingResource idlingResource; + + @Before + public void registerIdlingResource() { + idlingResource = new OnMapReadyIdlingResource(rule.getActivity()); + Espresso.registerIdlingResources(idlingResource); + } + + @After + public void unregisterIntentServiceIdlingResource() { + Espresso.unregisterIdlingResources(idlingResource); + } + + @Test + public void testFeatureCollection() { + ViewUtils.checkViewIsDisplayed(R.id.mapView); + onView(withId(R.id.mapView)).perform(new BaseViewAction() { + + @Override + public void perform(UiController uiController, View view) { + MapboxMap mapboxMap = rule.getActivity().getMapboxMap(); + + GeoJsonSource source = new GeoJsonSource("source", FeatureCollection + .fromJson(readRawResource(rule.getActivity().getResources(), R.raw.test_feature_collection))); + mapboxMap.addSource(source); + + mapboxMap.addLayer(new CircleLayer("layer", source.getId())); + } + + }); + } + + @Test + public void testPointGeometry() { + ViewUtils.checkViewIsDisplayed(R.id.mapView); + onView(withId(R.id.mapView)).perform(new BaseViewAction() { + + @Override + public void perform(UiController uiController, View view) { + MapboxMap mapboxMap = rule.getActivity().getMapboxMap(); + + GeoJsonSource source = new GeoJsonSource("source", Point.fromCoordinates(new double[] {0d, 0d})); + mapboxMap.addSource(source); + + mapboxMap.addLayer(new CircleLayer("layer", source.getId())); + } + + }); + } + + @Test + public void testFeatureProperties() { + ViewUtils.checkViewIsDisplayed(R.id.mapView); + onView(withId(R.id.mapView)).perform(new BaseViewAction() { + + @Override + public void perform(UiController uiController, View view) { + MapboxMap mapboxMap = rule.getActivity().getMapboxMap(); + + GeoJsonSource source = new GeoJsonSource("source", + readRawResource(rule.getActivity().getResources(), R.raw.test_feature_properties)); + mapboxMap.addSource(source); + + mapboxMap.addLayer(new CircleLayer("layer", source.getId())); + } + + }); + } + + @Test + public void testPointFeature() { + testFeatureFromResource(R.raw.test_point_feature); + } + + @Test + public void testLineStringFeature() { + testFeatureFromResource(R.raw.test_line_string_feature); + } + + @Test + public void testPolygonFeature() { + testFeatureFromResource(R.raw.test_polygon_feature); + } + + @Test + public void testPolygonWithHoleFeature() { + testFeatureFromResource(R.raw.test_polygon_with_hole_feature); + } + + @Test + public void testMultiPointFeature() { + testFeatureFromResource(R.raw.test_multi_point_feature); + } + + @Test + public void testMultiLineStringFeature() { + testFeatureFromResource(R.raw.test_multi_line_string_feature); + } + + @Test + public void testMultiPolygonFeature() { + testFeatureFromResource(R.raw.test_multi_polygon_feature); + } + + protected void testFeatureFromResource(final @RawRes int resource) { + ViewUtils.checkViewIsDisplayed(R.id.mapView); + onView(withId(R.id.mapView)).perform(new BaseViewAction() { + + @Override + public void perform(UiController uiController, View view) { + MapboxMap mapboxMap = rule.getActivity().getMapboxMap(); + + GeoJsonSource source = new GeoJsonSource("source"); + mapboxMap.addSource(source); + Layer layer = new CircleLayer("layer", source.getId()); + mapboxMap.addLayer(layer); + + source.setGeoJson(Feature.fromJson( + readRawResource(rule.getActivity().getResources(), resource))); + + mapboxMap.removeLayer(layer); + mapboxMap.removeSource(source); + } + + }); + } + + private String readRawResource(Resources resources, @RawRes int rawResource) { + InputStream is = resources.openRawResource(rawResource); + Writer writer = new StringWriter(); + char[] buffer = new char[1024]; + try { + try { + Reader reader = new BufferedReader(new InputStreamReader(is, "UTF-8")); + int numRead; + while ((numRead = reader.read(buffer)) != -1) { + writer.write(buffer, 0, numRead); + } + } finally { + is.close(); + } + } catch (IOException err) { + fail(err.getMessage()); + } + + return writer.toString(); + } + + public abstract class BaseViewAction implements ViewAction { + + @Override + public Matcher getConstraints() { + return isDisplayed(); + } + + @Override + public String getDescription() { + return getClass().getSimpleName(); + } + + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_feature_collection.geojson b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_feature_collection.geojson new file mode 100644 index 0000000000..4a0d1968cf --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_feature_collection.geojson @@ -0,0 +1,26 @@ +{ + "type": "FeatureCollection", + "features": [ + { + "type": "Feature", + "geometry": { + "type": "Point", + "coordinates": [ + 5.1080, + 52.0962 + ] + } + }, + { + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [ + 5.1090, + 52.0962 + ] + } + } + ] +} \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_feature_properties.geojson b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_feature_properties.geojson new file mode 100644 index 0000000000..751c0a4939 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_feature_properties.geojson @@ -0,0 +1,21 @@ +{ + "type": "Feature", + "id": 1, + "properties": { + "null_prop": null, + "integer_prop": 10000, + "float_prop": 10000.10, + "string_prop": "my_string", + "bool_prop": true, + "object_prop": { + "nested_string_prop": "my_string" + } + }, + "geometry": { + "type": "Point", + "coordinates": [ + 5.112419128417969, + 52.09622422366772 + ] + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_line_string_feature.geojson b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_line_string_feature.geojson new file mode 100644 index 0000000000..c63c23d87a --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_line_string_feature.geojson @@ -0,0 +1,17 @@ +{ + "type": "Feature", + "properties": {}, + "geometry": { + "type": "LineString", + "coordinates": [ + [ + 5.1080, + 52.0960 + ], + [ + 5.1080, + 52.0970 + ] + ] + } +} \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_multi_line_string_feature.geojson b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_multi_line_string_feature.geojson new file mode 100644 index 0000000000..cae631d987 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_multi_line_string_feature.geojson @@ -0,0 +1,29 @@ +{ + "type": "Feature", + "properties": {}, + "geometry": { + "type": "MultiLineString", + "coordinates": [ + [ + [ + 5.1080, + 52.0960 + ], + [ + 5.1080, + 52.0970 + ] + ], + [ + [ + 5.1090, + 52.0960 + ], + [ + 5.1090, + 52.0970 + ] + ] + ] + } +} \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_multi_point_feature.geojson b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_multi_point_feature.geojson new file mode 100644 index 0000000000..6be05156e7 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_multi_point_feature.geojson @@ -0,0 +1,17 @@ +{ + "type": "Feature", + "properties": {}, + "geometry": { + "type": "MultiPoint", + "coordinates": [ + [ + 5.1080, + 52.0960 + ], + [ + 5.1080, + 52.0970 + ] + ] + } +} \ No newline at end of file diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_multi_polygon_feature.geojson b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_multi_polygon_feature.geojson new file mode 100644 index 0000000000..469a054c4e --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_multi_polygon_feature.geojson @@ -0,0 +1,49 @@ +{ + "type": "Feature", + "properties": {}, + "geometry": { + "type": "MultiPolygon", + "coordinates": [ + [ + [ + [ + 5.112419128417969, + 52.09622422366772 + ], + [ + 5.112419128417969, + 52.094062282906954 + ], + [ + 5.115251541137695, + 52.094747787662364 + ], + [ + 5.112419128417969, + 52.09622422366772 + ] + ] + ], + [ + [ + [ + 5.11662483215332, + 52.09485324899753 + ], + [ + 5.11662483215332, + 52.09306037239377 + ], + [ + 5.120058059692383, + 52.093376767618174 + ], + [ + 5.11662483215332, + 52.09485324899753 + ] + ] + ] + ] + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_point_feature.geojson b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_point_feature.geojson new file mode 100644 index 0000000000..ae069de151 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_point_feature.geojson @@ -0,0 +1,11 @@ +{ + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Point", + "coordinates": [ + 5.1080, + 52.0962 + ] + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_polygon_feature.geojson b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_polygon_feature.geojson new file mode 100644 index 0000000000..2fc9f88669 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_polygon_feature.geojson @@ -0,0 +1,27 @@ +{ + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.112419128417969, + 52.09622422366772 + ], + [ + 5.112419128417969, + 52.094062282906954 + ], + [ + 5.115251541137695, + 52.094747787662364 + ], + [ + 5.112419128417969, + 52.09622422366772 + ] + ] + ] + } +} diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_polygon_with_hole_feature.geojson b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_polygon_with_hole_feature.geojson new file mode 100644 index 0000000000..1008e2e937 --- /dev/null +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/main/res/raw/test_polygon_with_hole_feature.geojson @@ -0,0 +1,45 @@ +{ + "type": "Feature", + "properties": {}, + "geometry": { + "type": "Polygon", + "coordinates": [ + [ + [ + 5.112419128417969, + 52.09622422366772 + ], + [ + 5.112419128417969, + 52.094062282906954 + ], + [ + 5.115251541137695, + 52.094747787662364 + ], + [ + 5.112419128417969, + 52.09622422366772 + ] + ], + [ + [ + 5.1127249002456665, + 52.094362192533545 + ], + [ + 5.114580988883972, + 52.0948104053602 + ], + [ + 5.11263906955719, + 52.095845232479846 + ], + [ + 5.1127249002456665, + 52.094362192533545 + ] + ] + ] + } +} -- cgit v1.2.1