diff options
Diffstat (limited to 'platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerTest.kt')
-rw-r--r-- | platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerTest.kt | 177 |
1 files changed, 91 insertions, 86 deletions
diff --git a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerTest.kt b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerTest.kt index 121c8f2d22..d7823031fc 100644 --- a/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerTest.kt +++ b/platform/android/MapboxGLAndroidSDKTestApp/src/androidTest/java/com/mapbox/mapboxsdk/plugins/locationlayer/LocationLayerTest.kt @@ -10,11 +10,8 @@ import android.support.test.espresso.UiController import android.support.test.espresso.assertion.ViewAssertions.matches import android.support.test.espresso.matcher.ViewMatchers.isDisplayed import android.support.test.espresso.matcher.ViewMatchers.withId -import android.support.test.filters.LargeTest -import android.support.test.rule.ActivityTestRule import android.support.test.rule.GrantPermissionRule import android.support.test.rule.GrantPermissionRule.grant -import android.support.test.runner.AndroidJUnit4 import com.mapbox.mapboxsdk.camera.CameraUpdateFactory import com.mapbox.mapboxsdk.constants.Style import com.mapbox.mapboxsdk.geometry.LatLng @@ -23,10 +20,11 @@ import com.mapbox.mapboxsdk.plugins.locationlayer.LocationLayerConstants.* import com.mapbox.mapboxsdk.plugins.locationlayer.modes.RenderMode import com.mapbox.mapboxsdk.plugins.utils.* import com.mapbox.mapboxsdk.plugins.utils.MapboxTestingUtils.Companion.MAPBOX_HEAVY_STYLE +import com.mapbox.mapboxsdk.plugins.utils.MapboxTestingUtils.Companion.MAP_CONNECTION_DELAY +import com.mapbox.mapboxsdk.plugins.utils.MapboxTestingUtils.Companion.MAP_RENDER_DELAY import com.mapbox.mapboxsdk.plugins.utils.MapboxTestingUtils.Companion.pushSourceUpdates -import com.mapbox.mapboxsdk.plugins.utils.PluginGenerationUtil.Companion.MAP_CONNECTION_DELAY -import com.mapbox.mapboxsdk.plugins.utils.PluginGenerationUtil.Companion.MAP_RENDER_DELAY import com.mapbox.mapboxsdk.style.sources.GeoJsonSource +import com.mapbox.mapboxsdk.testapp.activity.BaseActivityTest import com.mapbox.mapboxsdk.testapp.activity.SingleActivity import org.hamcrest.CoreMatchers.`is` import org.hamcrest.CoreMatchers.notNullValue @@ -37,47 +35,32 @@ import org.junit.Assert.assertThat import org.junit.Before import org.junit.Rule import org.junit.Test -import org.junit.rules.TestName -import org.junit.runner.RunWith -import timber.log.Timber -@RunWith(AndroidJUnit4::class) -@LargeTest -class LocationLayerTest { - - @Rule - @JvmField - val activityRule = ActivityTestRule(SingleActivity::class.java) - - @Rule - @JvmField - val nameRule = TestName() +class LocationLayerTest : BaseActivityTest() { @Rule @JvmField val permissionRule: GrantPermissionRule = grant(Manifest.permission.ACCESS_FINE_LOCATION) - private lateinit var idlingResource: OnMapReadyIdlingResource + override fun getActivityClass(): Class<*> { + return SingleActivity::class.java + } + private lateinit var styleChangeIdlingResource: StyleChangeIdlingResource - private lateinit var mapboxMap: MapboxMap private val location: Location by lazy { val initLocation = Location("test") initLocation.latitude = 15.0 initLocation.longitude = 17.0 + initLocation.bearing = 10f initLocation.accuracy = 2000f initLocation } @Before - fun beforeTest() { - Timber.e("@Before: ${nameRule.methodName} - register idle resource") - // If idlingResource is null, throw Kotlin exception - idlingResource = OnMapReadyIdlingResource(activityRule.activity) + override fun beforeTest() { + super.beforeTest() styleChangeIdlingResource = StyleChangeIdlingResource() - IdlingRegistry.getInstance().register(idlingResource) IdlingRegistry.getInstance().register(styleChangeIdlingResource) - onView(withId(android.R.id.content)).check(matches(isDisplayed())) - mapboxMap = idlingResource.mapboxMap } // @@ -86,9 +69,10 @@ class LocationLayerTest { @Test fun renderModeNormal_sourceDoesGetAdded() { - val pluginAction = object : GenericPluginAction.OnPerformGenericPluginAction<LocationLayerPlugin> { - override fun onGenericPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, - uiController: UiController, context: Context) { + val pluginAction = object : LocationLayerPluginAction.OnPerformLocationLayerPluginAction { + override fun onLocationLayerPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, + uiController: UiController, context: Context) { + plugin.activateLocationLayerPlugin(context, false) plugin.renderMode = RenderMode.NORMAL uiController.loopMainThreadForAtLeast(MAP_RENDER_DELAY) assertThat(mapboxMap.getSource(LOCATION_SOURCE), notNullValue()) @@ -103,12 +87,13 @@ class LocationLayerTest { @Test fun renderModeNormal_trackingNormalLayersDoGetAdded() { - val pluginAction = object : GenericPluginAction.OnPerformGenericPluginAction<LocationLayerPlugin> { - override fun onGenericPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, - uiController: UiController, context: Context) { + val pluginAction = object : LocationLayerPluginAction.OnPerformLocationLayerPluginAction { + override fun onLocationLayerPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, + uiController: UiController, context: Context) { + plugin.activateLocationLayerPlugin(context, false) plugin.renderMode = RenderMode.NORMAL plugin.forceLocationUpdate(location) - uiController.loopMainThreadForAtLeast(MAP_RENDER_DELAY) + mapboxMap.waitForLayer(uiController, location, FOREGROUND_LAYER) assertThat(mapboxMap.isLayerVisible(FOREGROUND_LAYER), `is`(true)) assertThat(mapboxMap.isLayerVisible(BACKGROUND_LAYER), `is`(true)) assertThat(mapboxMap.isLayerVisible(SHADOW_LAYER), `is`(true)) @@ -121,12 +106,13 @@ class LocationLayerTest { @Test fun renderModeCompass_bearingLayersDoGetAdded() { - val pluginAction = object : GenericPluginAction.OnPerformGenericPluginAction<LocationLayerPlugin> { - override fun onGenericPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, - uiController: UiController, context: Context) { + val pluginAction = object : LocationLayerPluginAction.OnPerformLocationLayerPluginAction { + override fun onLocationLayerPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, + uiController: UiController, context: Context) { + plugin.activateLocationLayerPlugin(context, false) plugin.renderMode = RenderMode.COMPASS plugin.forceLocationUpdate(location) - uiController.loopMainThreadForAtLeast(MAP_RENDER_DELAY) + mapboxMap.waitForLayer(uiController, location, FOREGROUND_LAYER) assertThat(mapboxMap.isLayerVisible(FOREGROUND_LAYER), `is`(true)) assertThat(mapboxMap.isLayerVisible(BACKGROUND_LAYER), `is`(true)) assertThat(mapboxMap.isLayerVisible(SHADOW_LAYER), `is`(true)) @@ -139,12 +125,13 @@ class LocationLayerTest { @Test fun renderModeGps_navigationLayersDoGetAdded() { - val pluginAction = object : GenericPluginAction.OnPerformGenericPluginAction<LocationLayerPlugin> { - override fun onGenericPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, - uiController: UiController, context: Context) { + val pluginAction = object : LocationLayerPluginAction.OnPerformLocationLayerPluginAction { + override fun onLocationLayerPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, + uiController: UiController, context: Context) { + plugin.activateLocationLayerPlugin(context, false) plugin.renderMode = RenderMode.GPS plugin.forceLocationUpdate(location) - uiController.loopMainThreadForAtLeast(MAP_RENDER_DELAY) + mapboxMap.waitForLayer(uiController, location, FOREGROUND_LAYER) assertThat(mapboxMap.isLayerVisible(FOREGROUND_LAYER), `is`(true)) assertThat(mapboxMap.isLayerVisible(BACKGROUND_LAYER), `is`(true)) assertThat(mapboxMap.isLayerVisible(SHADOW_LAYER), `is`(false)) @@ -157,11 +144,14 @@ class LocationLayerTest { @Test fun dontShowPuckWhenRenderModeSetAndPluginDisabled() { - val pluginAction = object : GenericPluginAction.OnPerformGenericPluginAction<LocationLayerPlugin> { - override fun onGenericPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, - uiController: UiController, context: Context) { + val pluginAction = object : LocationLayerPluginAction.OnPerformLocationLayerPluginAction { + override fun onLocationLayerPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, + uiController: UiController, context: Context) { + plugin.activateLocationLayerPlugin(context, false) plugin.forceLocationUpdate(location) - plugin.isLocationLayerEnabled = false + mapboxMap.waitForLayer(uiController, location, FOREGROUND_LAYER) + plugin.deactivateLocationLayerPlugin() + mapboxMap.waitForLayer(uiController, location, FOREGROUND_LAYER, shouldDisappear = true) plugin.renderMode = RenderMode.GPS uiController.loopMainThreadForAtLeast(MAP_RENDER_DELAY) assertThat(mapboxMap.isLayerVisible(FOREGROUND_LAYER), `is`(false)) @@ -176,12 +166,15 @@ class LocationLayerTest { @Test fun whenLocationLayerPluginDisabled_doesSetAllLayersToVisibilityNone() { - val pluginAction = object : GenericPluginAction.OnPerformGenericPluginAction<LocationLayerPlugin> { - override fun onGenericPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, - uiController: UiController, context: Context) { + val pluginAction = object : LocationLayerPluginAction.OnPerformLocationLayerPluginAction { + override fun onLocationLayerPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, + uiController: UiController, context: Context) { + plugin.activateLocationLayerPlugin(context, false) plugin.renderMode = RenderMode.NORMAL plugin.forceLocationUpdate(location) - plugin.isLocationLayerEnabled = false + mapboxMap.waitForLayer(uiController, location, FOREGROUND_LAYER) + plugin.deactivateLocationLayerPlugin() + mapboxMap.waitForLayer(uiController, location, FOREGROUND_LAYER, shouldDisappear = true) uiController.loopMainThreadForAtLeast(MAP_RENDER_DELAY) // Check that all layers visibilities are set to none @@ -197,14 +190,17 @@ class LocationLayerTest { @Test fun onMapChange_locationLayerLayersDoGetRedrawn() { - val pluginAction = object : GenericPluginAction.OnPerformGenericPluginAction<LocationLayerPlugin> { - override fun onGenericPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, - uiController: UiController, context: Context) { + val pluginAction = object : LocationLayerPluginAction.OnPerformLocationLayerPluginAction { + override fun onLocationLayerPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, + uiController: UiController, context: Context) { + plugin.activateLocationLayerPlugin(context, false) plugin.renderMode = RenderMode.NORMAL plugin.forceLocationUpdate(location) + mapboxMap.waitForLayer(uiController, location, FOREGROUND_LAYER) mapboxMap.setStyleUrl(Style.LIGHT) - plugin.forceLocationUpdate(location) uiController.loopMainThreadForAtLeast(MAP_CONNECTION_DELAY) + plugin.forceLocationUpdate(location) + mapboxMap.waitForLayer(uiController, location, FOREGROUND_LAYER) assertThat(plugin.renderMode, `is`(equalTo(RenderMode.NORMAL))) @@ -229,18 +225,21 @@ class LocationLayerTest { @Test fun whenStyleChanged_continuesUsingStaleIcons() { - val pluginAction = object : GenericPluginAction.OnPerformGenericPluginAction<LocationLayerPlugin> { - override fun onGenericPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, - uiController: UiController, context: Context) { + val pluginAction = object : LocationLayerPluginAction.OnPerformLocationLayerPluginAction { + override fun onLocationLayerPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, + uiController: UiController, context: Context) { + plugin.activateLocationLayerPlugin(context, false) plugin.applyStyle(LocationLayerOptions.builder(context).staleStateTimeout(100).build()) plugin.forceLocationUpdate(location) - uiController.loopMainThreadForAtLeast(200) + mapboxMap.waitForLayer(uiController, location, FOREGROUND_LAYER) + uiController.loopMainThreadForAtLeast(150) uiController.loopMainThreadForAtLeast(MAP_RENDER_DELAY) assertThat(mapboxMap.querySourceFeatures(LOCATION_SOURCE)[0].getBooleanProperty(PROPERTY_LOCATION_STALE), `is`(true)) mapboxMap.setStyleUrl(Style.LIGHT) uiController.loopMainThreadForAtLeast(MAP_CONNECTION_DELAY) + mapboxMap.waitForLayer(uiController, location, FOREGROUND_LAYER) assertThat(mapboxMap.querySourceFeatures(LOCATION_SOURCE)[0].getBooleanProperty(PROPERTY_LOCATION_STALE), `is`(true)) } @@ -250,11 +249,12 @@ class LocationLayerTest { @Test fun whenStyleChanged_staleStateChanges() { - val pluginAction = object : GenericPluginAction.OnPerformGenericPluginAction<LocationLayerPlugin> { - override fun onGenericPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, - uiController: UiController, context: Context) { + val pluginAction = object : LocationLayerPluginAction.OnPerformLocationLayerPluginAction { + override fun onLocationLayerPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, + uiController: UiController, context: Context) { + plugin.activateLocationLayerPlugin(context, false) plugin.applyStyle(LocationLayerOptions.builder(context).staleStateTimeout(1).build()) - styleChangeIdlingResource.waitForStyle(idlingResource.mapView, mapboxMap, MAPBOX_HEAVY_STYLE) + styleChangeIdlingResource.waitForStyle((rule.activity as SingleActivity).mapView, mapboxMap, MAPBOX_HEAVY_STYLE) pushSourceUpdates(styleChangeIdlingResource) { plugin.forceLocationUpdate(location) } @@ -268,13 +268,17 @@ class LocationLayerTest { @Test fun whenStyleChanged_layerVisibilityUpdates() { - val pluginAction = object : GenericPluginAction.OnPerformGenericPluginAction<LocationLayerPlugin> { - override fun onGenericPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, - uiController: UiController, context: Context) { - styleChangeIdlingResource.waitForStyle(idlingResource.mapView, mapboxMap, MAPBOX_HEAVY_STYLE) + val pluginAction = object : LocationLayerPluginAction.OnPerformLocationLayerPluginAction { + override fun onLocationLayerPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, + uiController: UiController, context: Context) { + styleChangeIdlingResource.waitForStyle((rule.activity as SingleActivity).mapView, mapboxMap, MAPBOX_HEAVY_STYLE) var show = true pushSourceUpdates(styleChangeIdlingResource) { - plugin.isLocationLayerEnabled = show + if (show) { + plugin.activateLocationLayerPlugin(context, false) + } else { + plugin.deactivateLocationLayerPlugin() + } show = !show } @@ -289,13 +293,14 @@ class LocationLayerTest { @Test fun accuracy_visibleWithNewLocation() { - val pluginAction = object : GenericPluginAction.OnPerformGenericPluginAction<LocationLayerPlugin> { - override fun onGenericPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, - uiController: UiController, context: Context) { + val pluginAction = object : LocationLayerPluginAction.OnPerformLocationLayerPluginAction { + override fun onLocationLayerPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, + uiController: UiController, context: Context) { + plugin.activateLocationLayerPlugin(context, false) mapboxMap.moveCamera(CameraUpdateFactory.newLatLngZoom(LatLng(location), 16.0)) - uiController.loopMainThreadForAtLeast(MAP_RENDER_DELAY) plugin.forceLocationUpdate(location) - uiController.loopMainThreadForAtLeast(MAP_RENDER_DELAY + ACCURACY_RADIUS_ANIMATION_DURATION) + mapboxMap.waitForLayer(uiController, location, FOREGROUND_LAYER) + uiController.loopMainThreadForAtLeast(ACCURACY_RADIUS_ANIMATION_DURATION) assertEquals(Utils.calculateZoomLevelRadius(mapboxMap, location) /*meters projected to radius on zoom 16*/, mapboxMap.querySourceFeatures(LOCATION_SOURCE)[0] @@ -307,12 +312,12 @@ class LocationLayerTest { @Test fun accuracy_visibleWhenCameraEased() { - val pluginAction = object : GenericPluginAction.OnPerformGenericPluginAction<LocationLayerPlugin> { - override fun onGenericPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, - uiController: UiController, context: Context) { - uiController.loopMainThreadForAtLeast(MAP_RENDER_DELAY) + val pluginAction = object : LocationLayerPluginAction.OnPerformLocationLayerPluginAction { + override fun onLocationLayerPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, + uiController: UiController, context: Context) { + plugin.activateLocationLayerPlugin(context, false) plugin.forceLocationUpdate(location) - uiController.loopMainThreadForAtLeast(MAP_RENDER_DELAY) + mapboxMap.waitForLayer(uiController, location, FOREGROUND_LAYER) mapboxMap.easeCamera(CameraUpdateFactory.newLatLngZoom(LatLng(location), 16.0), 300) uiController.loopMainThreadForAtLeast(MAP_RENDER_DELAY + 300) @@ -326,9 +331,10 @@ class LocationLayerTest { @Test fun accuracy_visibleWhenCameraMoved() { - val pluginAction = object : GenericPluginAction.OnPerformGenericPluginAction<LocationLayerPlugin> { - override fun onGenericPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, - uiController: UiController, context: Context) { + val pluginAction = object : LocationLayerPluginAction.OnPerformLocationLayerPluginAction { + override fun onLocationLayerPluginAction(plugin: LocationLayerPlugin, mapboxMap: MapboxMap, + uiController: UiController, context: Context) { + plugin.activateLocationLayerPlugin(context, false) uiController.loopMainThreadForAtLeast(MAP_RENDER_DELAY) plugin.forceLocationUpdate(location) uiController.loopMainThreadForAtLeast(MAP_RENDER_DELAY) @@ -344,13 +350,12 @@ class LocationLayerTest { } @After - fun afterTest() { - Timber.e("@After: ${nameRule.methodName} - unregister idle resource") - IdlingRegistry.getInstance().unregister(idlingResource) + override fun afterTest() { + super.afterTest() IdlingRegistry.getInstance().unregister(styleChangeIdlingResource) } - private fun executePluginTest(listener: GenericPluginAction.OnPerformGenericPluginAction<LocationLayerPlugin>) { - onView(withId(android.R.id.content)).perform(GenericPluginAction(idlingResource.mapView, mapboxMap, PluginGenerationUtil.getLocationLayerPluginProvider(activityRule.activity), listener)) + private fun executePluginTest(listener: LocationLayerPluginAction.OnPerformLocationLayerPluginAction) { + onView(withId(R.id.content)).perform(LocationLayerPluginAction(mapboxMap, listener)) } } |