package com.mapbox.mapboxsdk.testapp.maps.widgets; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.Canvas; import android.graphics.drawable.BitmapDrawable; import android.graphics.drawable.Drawable; import android.support.test.espresso.UiController; import android.support.test.espresso.ViewAction; import android.view.View; import com.mapbox.mapboxsdk.Mapbox; import com.mapbox.mapboxsdk.camera.CameraPosition; import com.mapbox.mapboxsdk.camera.CameraUpdateFactory; import com.mapbox.mapboxsdk.constants.MyBearingTracking; import com.mapbox.mapboxsdk.constants.MyLocationTracking; import com.mapbox.mapboxsdk.geometry.LatLng; import com.mapbox.mapboxsdk.maps.MapboxMap; import com.mapbox.mapboxsdk.maps.widgets.MyLocationView; import com.mapbox.mapboxsdk.testapp.R; import com.mapbox.mapboxsdk.testapp.activity.BaseActivityTest; import com.mapbox.mapboxsdk.testapp.activity.espresso.EspressoTestActivity; import org.hamcrest.Description; import org.hamcrest.Matcher; import org.hamcrest.TypeSafeMatcher; import org.junit.Ignore; import org.junit.Test; import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.assertion.ViewAssertions.matches; import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed; import static android.support.test.espresso.matcher.ViewMatchers.withId; import static org.hamcrest.Matchers.not; /** * Experimental MyLocationView tests, * requires application to be granted with runtime location permissions. *
* Tests for enabling and disabling the {@link MyLocationView}. * Tests for enabling tracking modes and if the correct default images are shown when toggling * {@link com.mapbox.mapboxsdk.maps.TrackingSettings#setMyLocationTrackingMode(int)} & * {@link com.mapbox.mapboxsdk.maps.TrackingSettings#setMyBearingTrackingMode(int)}. *
*/ public class MyLocationViewTest extends BaseActivityTest { @Override protected Class getActivityClass() { return EspressoTestActivity.class; } @Test @Ignore // requires runtime permissions, disabled for CI public void testEnabled() { validateTestSetup(); onView(withId(R.id.userLocationView)).check(matches(not(isDisplayed()))); onView(withId(R.id.mapView)).perform(new ToggleLocationAction(mapboxMap, true)); onView(withId(R.id.userLocationView)).check(matches(isDisplayed())); onView(withId(R.id.mapView)).perform(new ToggleLocationAction(mapboxMap, false)); onView(withId(R.id.userLocationView)).check(matches(not(isDisplayed()))); } @Test @Ignore // requires runtime permissions, disabled for CI + issue with android.support.test.espresso.AppNotIdleException: // Looped for 5049 iterations over 60 SECONDS. public void testTracking() { validateTestSetup(); onView(withId(R.id.userLocationView)).check(matches(not(isDisplayed()))); onView(withId(R.id.mapView)).perform(new EnableLocationTrackingAction(mapboxMap)); onView(withId(R.id.userLocationView)).check(matches(isDisplayed())); onView(withId(R.id.userLocationView)).check(matches(new DrawableMatcher(mapboxMap, R.drawable.mapbox_mylocation_icon_default, false))); onView(withId(R.id.mapView)).perform(new EnableCompassBearingTrackingAction(mapboxMap)); onView(withId(R.id.userLocationView)).check(matches(new DrawableMatcher(mapboxMap, R.drawable.mapbox_mylocation_icon_bearing, true))); } private class ToggleLocationAction implements ViewAction { private MapboxMap mapboxMap; private boolean isEnabled; ToggleLocationAction(MapboxMap map, boolean enable) { mapboxMap = map; isEnabled = enable; } @Override public Matcher