summaryrefslogtreecommitdiff
path: root/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/RuntimeStyleTests.java
diff options
context:
space:
mode:
Diffstat (limited to 'platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/RuntimeStyleTests.java')
-rw-r--r--platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/RuntimeStyleTests.java370
1 files changed, 370 insertions, 0 deletions
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/RuntimeStyleTests.java b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/RuntimeStyleTests.java
new file mode 100644
index 0000000000..2d1fbf5fc4
--- /dev/null
+++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/testapp/style/RuntimeStyleTests.java
@@ -0,0 +1,370 @@
+package com.mapbox.mapboxsdk.testapp.style;
+
+import android.graphics.Color;
+import android.graphics.PointF;
+import android.support.test.espresso.UiController;
+import android.support.test.espresso.ViewAction;
+import android.support.test.runner.AndroidJUnit4;
+import android.view.View;
+import com.mapbox.mapboxsdk.style.layers.CannotAddLayerException;
+import com.mapbox.mapboxsdk.style.layers.CircleLayer;
+import com.mapbox.mapboxsdk.style.layers.FillLayer;
+import com.mapbox.mapboxsdk.style.layers.Layer;
+import com.mapbox.mapboxsdk.style.layers.LineLayer;
+import com.mapbox.mapboxsdk.style.layers.Property;
+import com.mapbox.mapboxsdk.style.layers.PropertyFactory;
+import com.mapbox.mapboxsdk.style.sources.CannotAddSourceException;
+import com.mapbox.mapboxsdk.style.sources.GeoJsonSource;
+import com.mapbox.mapboxsdk.style.sources.RasterSource;
+import com.mapbox.mapboxsdk.style.sources.Source;
+import com.mapbox.mapboxsdk.style.sources.VectorSource;
+import com.mapbox.mapboxsdk.testapp.R;
+import com.mapbox.mapboxsdk.testapp.activity.EspressoTest;
+import junit.framework.Assert;
+import org.hamcrest.Matcher;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import timber.log.Timber;
+
+import java.util.List;
+
+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 com.mapbox.mapboxsdk.testapp.action.MapboxMapAction.invoke;
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+import static org.junit.Assert.fail;
+
+/**
+ * Basic smoke tests for Layer and Source
+ */
+@RunWith(AndroidJUnit4.class)
+public class RuntimeStyleTests extends EspressoTest {
+
+ @Test
+ public void testListLayers() {
+ validateTestSetup();
+ onView(withId(R.id.mapView)).perform(new BaseViewAction() {
+
+ @Override
+ public void perform(UiController uiController, View view) {
+ List<Layer> layers = mapboxMap.getStyle().getLayers();
+ assertNotNull(layers);
+ assertTrue(layers.size() > 0);
+ for (Layer layer : layers) {
+ assertNotNull(layer);
+ }
+ }
+
+ });
+ }
+
+ @Test
+ public void testGetAddRemoveLayer() {
+ validateTestSetup();
+ onView(withId(R.id.mapView)).perform(new AddRemoveLayerAction());
+ }
+
+ @Test
+ public void testAddLayerAbove() {
+ validateTestSetup();
+ onView(withId(R.id.mapView)).perform(new BaseViewAction() {
+ @Override
+ public void perform(UiController uiController, View view) {
+ List<Layer> layers = mapboxMap.getStyle().getLayers();
+ Source source = mapboxMap.getStyle().getSources().get(0);
+
+ // Test inserting with invalid above-id
+ try {
+ mapboxMap.getStyle().addLayerAbove(
+ new CircleLayer("invalid-id-layer-test", source.getId()), "no-such-layer-here-man"
+ );
+ fail("Should have thrown exception");
+ } catch (CannotAddLayerException ex) {
+ // Yeah
+ assertNotNull(ex.getMessage());
+ }
+
+ // Insert as last
+ CircleLayer last = new CircleLayer("this is the last one", source.getId());
+ mapboxMap.getStyle().addLayerAbove(last, layers.get(layers.size() - 1).getId());
+ layers = mapboxMap.getStyle().getLayers();
+ assertEquals(last.getId(), layers.get(layers.size() - 1).getId());
+
+ // Insert
+ CircleLayer second = new CircleLayer("this is the second one", source.getId());
+ mapboxMap.getStyle().addLayerAbove(second, layers.get(0).getId());
+ layers = mapboxMap.getStyle().getLayers();
+ assertEquals(second.getId(), layers.get(1).getId());
+ }
+ });
+ }
+
+ @Test
+ public void testRemoveLayerAt() {
+ validateTestSetup();
+ onView(withId(R.id.mapView)).perform(new BaseViewAction() {
+
+ @Override
+ public void perform(UiController uiController, View view) {
+ // Remove by index
+ Layer firstLayer = mapboxMap.getStyle().getLayers().get(0);
+ boolean removed = mapboxMap.getStyle().removeLayerAt(0);
+ assertTrue(removed);
+ assertNotNull(firstLayer);
+
+ // Test remove by index bounds checks
+ Timber.i("Remove layer at index > size");
+ assertFalse(mapboxMap.getStyle().removeLayerAt(Integer.MAX_VALUE));
+ }
+ });
+ }
+
+ public void testAddLayerAt() {
+ validateTestSetup();
+ onView(withId(R.id.mapView)).perform(new BaseViewAction() {
+ @Override
+ public void perform(UiController uiController, View view) {
+ List<Layer> layers = mapboxMap.getStyle().getLayers();
+ Source source = mapboxMap.getStyle().getSources().get(0);
+
+ // Test inserting out of range
+ try {
+ mapboxMap.getStyle().addLayerAt(new CircleLayer("invalid-id-layer-test", source.getId()), layers.size());
+ fail("Should have thrown exception");
+ } catch (CannotAddLayerException ex) {
+ // Yeah
+ assertNotNull(ex.getMessage());
+ }
+
+ // Insert at current last position
+ CircleLayer last = new CircleLayer("this is the last one", source.getId());
+ mapboxMap.getStyle().addLayerAt(last, layers.size() - 1);
+ layers = mapboxMap.getStyle().getLayers();
+ assertEquals(last.getId(), layers.get(layers.size() - 2).getId());
+
+ // Insert at start
+ CircleLayer second = new CircleLayer("this is the first one", source.getId());
+ mapboxMap.getStyle().addLayerAt(second, 0);
+ layers = mapboxMap.getStyle().getLayers();
+ assertEquals(second.getId(), layers.get(0).getId());
+ }
+ });
+ }
+
+
+ @Test
+ public void testListSources() {
+ validateTestSetup();
+ onView(withId(R.id.mapView)).perform(new BaseViewAction() {
+
+ @Override
+ public void perform(UiController uiController, View view) {
+ List<Source> sources = mapboxMap.getStyle().getSources();
+ assertNotNull(sources);
+ assertTrue(sources.size() > 0);
+ for (Source source : sources) {
+ assertNotNull(source);
+ }
+ }
+
+ });
+ }
+
+ @Test
+ public void testAddRemoveSource() {
+ validateTestSetup();
+ invoke(mapboxMap, (uiController, mapboxMap) -> {
+ mapboxMap.getStyle().addSource(new VectorSource("my-source", "mapbox://mapbox.mapbox-terrain-v2"));
+ mapboxMap.getStyle().removeSource("my-source");
+
+ // Add initial source
+ mapboxMap.getStyle().addSource(new VectorSource("my-source", "mapbox://mapbox.mapbox-terrain-v2"));
+
+ // Remove
+ boolean removeOk = mapboxMap.getStyle().removeSource("my-source");
+ assertTrue(removeOk);
+ assertNull(mapboxMap.getStyle().getLayer("my-source"));
+
+ // Add
+ Source source = new VectorSource("my-source", "mapbox://mapbox.mapbox-terrain-v2");
+ mapboxMap.getStyle().addSource(source);
+
+ // Remove, preserving the reference
+ mapboxMap.getStyle().removeSource(source);
+
+ // Re-add the reference...
+ mapboxMap.getStyle().addSource(source);
+
+ // Ensure it's there
+ Assert.assertNotNull(mapboxMap.getStyle().getSource(source.getId()));
+
+ // Test adding a duplicate source
+ try {
+ Source source2 = new VectorSource("my-source", "mapbox://mapbox.mapbox-terrain-v2");
+ mapboxMap.getStyle().addSource(source2);
+ fail("Should not have been allowed to add a source with a duplicate id");
+ } catch (CannotAddSourceException cannotAddSourceException) {
+ // OK
+ }
+ });
+
+ }
+
+ @Test
+ public void testVectorSourceUrlGetter() {
+ validateTestSetup();
+ invoke(mapboxMap, (uiController, mapboxMap) -> {
+ VectorSource source = new VectorSource("my-source", "mapbox://mapbox.mapbox-terrain-v2");
+ mapboxMap.getStyle().addSource(source);
+ assertEquals("mapbox://mapbox.mapbox-terrain-v2", source.getUri());
+ });
+ }
+
+ @Test
+ public void testRasterSourceUrlGetter() {
+ validateTestSetup();
+ invoke(mapboxMap, (uiController, mapboxMap) -> {
+ RasterSource source = new RasterSource("my-source", "mapbox://mapbox.mapbox-terrain-v2");
+ mapboxMap.getStyle().addSource(source);
+ assertEquals("mapbox://mapbox.mapbox-terrain-v2", source.getUri());
+ });
+ }
+
+ @Test
+ public void testGeoJsonSourceUrlGetter() {
+ validateTestSetup();
+ invoke(mapboxMap, (uiController, mapboxMap) -> {
+ GeoJsonSource source = new GeoJsonSource("my-source");
+ mapboxMap.getStyle().addSource(source);
+ assertNull(source.getUri());
+ source.setUri("http://mapbox.com/my-file.json");
+ assertEquals("http://mapbox.com/my-file.json", source.getUri());
+ });
+ }
+
+ @Test
+ public void testRemoveSourceInUse() {
+ validateTestSetup();
+
+ onView(withId(R.id.mapView)).perform(new BaseViewAction() {
+
+ @Override
+ public void perform(UiController uiController, View view) {
+ mapboxMap.getStyle().addSource(new VectorSource("my-source", "mapbox://mapbox.mapbox-terrain-v2"));
+ mapboxMap.getStyle().addLayer(new LineLayer("my-layer", "my-source"));
+ mapboxMap.getStyle().removeSource("my-source");
+ assertNotNull(mapboxMap.getStyle().getSource("my-source"));
+ }
+
+ });
+ }
+
+ @Test
+ public void testRemoveNonExistingSource() {
+ invoke(mapboxMap, (uiController, mapboxMap) -> mapboxMap.getStyle().removeSource("source"));
+ }
+
+ @Test
+ public void testRemoveNonExistingLayer() {
+ invoke(mapboxMap, (uiController, mapboxMap) -> {
+ assertFalse(mapboxMap.getStyle().removeLayer("layer"));
+ assertFalse(mapboxMap.getStyle().removeLayerAt(mapboxMap.getStyle().getLayers().size() + 1));
+ assertFalse(mapboxMap.getStyle().removeLayerAt(-1));
+ });
+ }
+
+ @Test
+ public void testRemoveExistingLayer() {
+ invoke(mapboxMap, (uiController, mapboxMap) -> {
+ Layer firstLayer = mapboxMap.getStyle().getLayers().get(0);
+ assertTrue(mapboxMap.getStyle().removeLayer(firstLayer));
+
+ firstLayer = mapboxMap.getStyle().getLayers().get(0);
+ assertTrue(mapboxMap.getStyle().removeLayer(firstLayer.getId()));
+
+ assertTrue(mapboxMap.getStyle().removeLayerAt(0));
+ });
+ }
+
+ /**
+ * https://github.com/mapbox/mapbox-gl-native/issues/7973
+ */
+ @Test
+ public void testQueryRenderedFeaturesInputHandling() {
+ validateTestSetup();
+ onView(withId(R.id.mapView)).perform(new BaseViewAction() {
+
+ @Override
+ public void perform(UiController uiController, View view) {
+ String[] layerIds = new String[600];
+ for (int i = 0; i < layerIds.length; i++) {
+ layerIds[i] = "layer-" + i;
+ }
+ mapboxMap.queryRenderedFeatures(new PointF(100, 100), layerIds);
+ }
+
+ });
+ }
+
+ private class AddRemoveLayerAction extends BaseViewAction {
+
+ @Override
+ public void perform(UiController uiController, View view) {
+ // Get initial
+ assertNotNull(mapboxMap.getStyle().getLayer("building"));
+
+ // Remove
+ boolean removed = mapboxMap.getStyle().removeLayer("building");
+ assertTrue(removed);
+ assertNull(mapboxMap.getStyle().getLayer("building"));
+
+ // Add
+ FillLayer layer = new FillLayer("building", "composite");
+ layer.setSourceLayer("building");
+ mapboxMap.getStyle().addLayer(layer);
+ assertNotNull(mapboxMap.getStyle().getLayer("building"));
+
+ // Assure the reference still works
+ layer.setProperties(PropertyFactory.visibility(Property.VISIBLE));
+
+ // Remove, preserving the reference
+ mapboxMap.getStyle().removeLayer(layer);
+
+ // Property setters should still work
+ layer.setProperties(PropertyFactory.fillColor(Color.RED));
+
+ // Re-add the reference...
+ mapboxMap.getStyle().addLayer(layer);
+
+ // Ensure it's there
+ Assert.assertNotNull(mapboxMap.getStyle().getLayer(layer.getId()));
+
+ // Test adding a duplicate layer
+ try {
+ mapboxMap.getStyle().addLayer(new FillLayer("building", "composite"));
+ fail("Should not have been allowed to add a layer with a duplicate id");
+ } catch (CannotAddLayerException cannotAddLayerException) {
+ // OK
+ }
+ }
+ }
+
+ public abstract class BaseViewAction implements ViewAction {
+
+ @Override
+ public Matcher<View> getConstraints() {
+ return isDisplayed();
+ }
+
+ @Override
+ public String getDescription() {
+ return getClass().getSimpleName();
+ }
+
+ }
+}