Skip to content
This repository has been archived by the owner on Aug 8, 2023. It is now read-only.

Commit

Permalink
[android] - espresso tests rework
Browse files Browse the repository at this point in the history
  • Loading branch information
tobrun committed Jan 10, 2019
1 parent 4be7345 commit 3a77ea6
Show file tree
Hide file tree
Showing 58 changed files with 283 additions and 834 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,8 @@ import com.mapbox.mapboxsdk.location.utils.MapboxTestingUtils.Companion.MAP_CONN
import com.mapbox.mapboxsdk.location.utils.MapboxTestingUtils.Companion.MAP_RENDER_DELAY
import com.mapbox.mapboxsdk.location.utils.MapboxTestingUtils.Companion.pushSourceUpdates
import com.mapbox.mapboxsdk.maps.MapboxMap
import com.mapbox.mapboxsdk.testapp.activity.BaseActivityTest
import com.mapbox.mapboxsdk.testapp.activity.SingleActivity
import com.mapbox.mapboxsdk.testapp.activity.EspressoTest
import com.mapbox.mapboxsdk.testapp.activity.espresso.EspressoTestActivity
import com.mapbox.mapboxsdk.utils.ColorUtils
import org.hamcrest.CoreMatchers.*
import org.junit.*
Expand All @@ -37,16 +37,12 @@ import org.junit.Assert.assertTrue
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
class LocationComponentTest : BaseActivityTest() {
class LocationComponentTest : EspressoTest() {

@Rule
@JvmField
val permissionRule: GrantPermissionRule = GrantPermissionRule.grant(Manifest.permission.ACCESS_FINE_LOCATION)

override fun getActivityClass(): Class<*> {
return SingleActivity::class.java
}

private lateinit var styleChangeIdlingResource: StyleChangeIdlingResource
private val location: Location by lazy {
val initLocation = Location("")
Expand Down Expand Up @@ -188,7 +184,7 @@ class LocationComponentTest : BaseActivityTest() {
component.isLocationComponentEnabled = true

// Source should be present but empty
val mapView = (rule.activity as SingleActivity).mapView
val mapView = (rule.activity as EspressoTestActivity).mapView
assertThat(mapboxMap.queryRenderedFeatures(
RectF(0f, 0f, mapView.width.toFloat(), mapView.height.toFloat()), FOREGROUND_LAYER)
.isEmpty(), `is`(true))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,7 @@ import com.mapbox.mapboxsdk.location.utils.MapboxTestingUtils.Companion.MAP_REND
import com.mapbox.mapboxsdk.location.utils.MapboxTestingUtils.Companion.pushSourceUpdates
import com.mapbox.mapboxsdk.maps.MapboxMap
import com.mapbox.mapboxsdk.style.sources.GeoJsonSource
import com.mapbox.mapboxsdk.testapp.activity.BaseActivityTest
import com.mapbox.mapboxsdk.testapp.activity.SingleActivity
import com.mapbox.mapboxsdk.testapp.activity.EspressoTest
import org.hamcrest.CoreMatchers.`is`
import org.hamcrest.CoreMatchers.notNullValue
import org.hamcrest.Matchers.equalTo
Expand All @@ -39,16 +38,12 @@ import org.junit.Test
import org.junit.runner.RunWith

@RunWith(AndroidJUnit4::class)
class LocationLayerControllerTest : BaseActivityTest() {
class LocationLayerControllerTest : EspressoTest() {

@Rule
@JvmField
val permissionRule: GrantPermissionRule = grant(Manifest.permission.ACCESS_FINE_LOCATION)

override fun getActivityClass(): Class<*> {
return SingleActivity::class.java
}

private lateinit var styleChangeIdlingResource: StyleChangeIdlingResource
private val location: Location by lazy {
val initLocation = Location("")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,7 @@
import com.mapbox.mapboxsdk.exceptions.InvalidMarkerPositionException;
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.testapp.R;
import com.mapbox.mapboxsdk.testapp.activity.BaseActivityTest;
import com.mapbox.mapboxsdk.testapp.activity.espresso.EspressoTestActivity;
import com.mapbox.mapboxsdk.testapp.activity.EspressoTest;
import org.hamcrest.Matcher;
import org.junit.Test;

Expand All @@ -39,18 +38,7 @@
* @deprecated remove this file when removing deprecated annotations
*/
@Deprecated
public class MapboxMapTest extends BaseActivityTest {

@Override
protected Class getActivityClass() {
return EspressoTestActivity.class;
}

@Test
public void testSanity() {
validateTestSetup();
assertNotNull("mapboxMap should not be null", mapboxMap);
}
public class MapboxMapTest extends EspressoTest {

//
// InfoWindow
Expand Down
Original file line number Diff line number Diff line change
@@ -1,27 +1,22 @@
package com.mapbox.mapboxsdk.maps;

import android.support.test.runner.AndroidJUnit4;
import com.mapbox.mapboxsdk.Mapbox;
import com.mapbox.mapboxsdk.testapp.activity.BaseActivityTest;
import com.mapbox.mapboxsdk.testapp.activity.espresso.EspressoTestActivity;
import org.junit.Test;
import org.junit.runner.RunWith;

import static junit.framework.Assert.assertFalse;
import static junit.framework.Assert.assertSame;
import static junit.framework.Assert.assertTrue;

public class MapboxTest extends BaseActivityTest {
@RunWith(AndroidJUnit4.class)
public class MapboxTest {

private static final String ACCESS_TOKEN = "pk.0000000001";
private static final String ACCESS_TOKEN_2 = "pk.0000000002";

@Override
protected Class getActivityClass() {
return EspressoTestActivity.class;
}

@Test
public void testConnected() {
validateTestSetup();
assertTrue(Mapbox.isConnected());

// test manual connectivity
Expand All @@ -37,7 +32,6 @@ public void testConnected() {

@Test
public void setAccessToken() {
validateTestSetup();
String realToken = Mapbox.getAccessToken();
Mapbox.setAccessToken(ACCESS_TOKEN);
assertSame(ACCESS_TOKEN, Mapbox.getAccessToken());
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
package com.mapbox.mapboxsdk.maps;

import com.mapbox.mapboxsdk.testapp.activity.BaseActivityTest;
import com.mapbox.mapboxsdk.testapp.activity.BaseTest;
import com.mapbox.mapboxsdk.testapp.activity.camera.CameraAnimationTypeActivity;
import org.junit.Test;

Expand All @@ -11,7 +11,7 @@
import static com.mapbox.mapboxsdk.testapp.action.OrientationChangeAction.orientationPortrait;
import static com.mapbox.mapboxsdk.testapp.action.OrientationChangeAction.orientationPortraitReverse;

public class OrientationTest extends BaseActivityTest {
public class OrientationTest extends BaseTest {

@Test
public void testChangeDeviceOrientation() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,15 +4,11 @@ import android.support.test.espresso.UiController
import com.mapbox.mapboxsdk.camera.CameraUpdateFactory
import com.mapbox.mapboxsdk.geometry.LatLng
import com.mapbox.mapboxsdk.testapp.action.MapboxMapAction.invoke
import com.mapbox.mapboxsdk.testapp.activity.BaseActivityTest
import com.mapbox.mapboxsdk.testapp.activity.maplayout.SimpleMapActivity
import com.mapbox.mapboxsdk.testapp.activity.EspressoTest
import org.junit.Assert.assertEquals
import org.junit.Test


class TransformTest: BaseActivityTest() {

override fun getActivityClass(): Class<*> = SimpleMapActivity::class.java
class TransformTest: EspressoTest() {

companion object {
val initialCameraUpdate = CameraUpdateFactory.newLatLngZoom(LatLng(12.0,12.0), 12.0)!!
Expand All @@ -21,7 +17,7 @@ class TransformTest: BaseActivityTest() {
@Test
fun mapboxMapScrollByWithPadding() {
validateTestSetup()
invoke(mapboxMap) { uiController: UiController, mapboxMap: MapboxMap ->
invoke(mapboxMap) { _: UiController, mapboxMap: MapboxMap ->
mapboxMap.moveCamera(initialCameraUpdate)
mapboxMap.scrollBy(400.0f, 0.0f)
val expectedCameraPosition = mapboxMap.cameraPosition
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,20 +7,16 @@ import com.mapbox.mapboxsdk.geometry.LatLng
import com.mapbox.mapboxsdk.maps.MapView
import com.mapbox.mapboxsdk.maps.MapboxMap
import com.mapbox.mapboxsdk.testapp.action.MapboxMapAction.invoke
import com.mapbox.mapboxsdk.testapp.activity.BaseActivityTest
import com.mapbox.mapboxsdk.testapp.activity.EspressoTest
import com.mapbox.mapboxsdk.testapp.activity.espresso.EspressoTestActivity
import org.junit.Assert.assertFalse
import org.junit.Assert.assertTrue
import org.junit.Test

class VisibleRegionTest : BaseActivityTest() {
class VisibleRegionTest : EspressoTest() {

private lateinit var mapView: MapView

override fun getActivityClass(): Class<*> {
return EspressoTestActivity::class.java
}

override fun beforeTest() {
super.beforeTest()
mapView = (rule.activity as EspressoTestActivity).mapView
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,8 @@

public final class WaitAction implements ViewAction {

private static final long DEFAULT_LOOP_TIME = 375;
private final long loopTime;

public WaitAction() {
this(DEFAULT_LOOP_TIME);
}

public WaitAction(long loopTime) {
this.loopTime = loopTime;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
import android.app.Activity;
import android.support.test.espresso.Espresso;
import android.support.test.espresso.IdlingRegistry;
import android.support.test.espresso.IdlingResource;
import android.support.test.espresso.IdlingResourceTimeoutException;
import android.support.test.espresso.ViewInteraction;
import android.support.test.rule.ActivityTestRule;
Expand All @@ -12,8 +13,9 @@
import com.mapbox.mapboxsdk.testapp.R;
import com.mapbox.mapboxsdk.testapp.action.MapboxMapAction;
import com.mapbox.mapboxsdk.testapp.action.WaitAction;
import com.mapbox.mapboxsdk.testapp.utils.OnMapReadyIdlingResource;
import com.mapbox.mapboxsdk.testapp.utils.FinishLoadingStyleIdlingResource;

import com.mapbox.mapboxsdk.testapp.utils.MapboxIdlingResource;
import junit.framework.Assert;

import org.junit.After;
Expand All @@ -28,7 +30,10 @@
import static android.support.test.espresso.matcher.ViewMatchers.isDisplayed;
import static android.support.test.espresso.matcher.ViewMatchers.withId;

public abstract class BaseActivityTest {
/**
* Base class for all Activity test hooking into an existing Activity that will load style.
*/
public abstract class BaseTest {

@Rule
public ActivityTestRule<Activity> rule = new ActivityTestRule<>(getActivityClass());
Expand All @@ -37,7 +42,7 @@ public abstract class BaseActivityTest {
public TestName testNameRule = new TestName();

protected MapboxMap mapboxMap;
protected OnMapReadyIdlingResource idlingResource;
protected MapboxIdlingResource idlingResource;

@Before
public void beforeTest() {
Expand All @@ -48,19 +53,25 @@ public void beforeTest() {
testNameRule.getMethodName(),
"@Before test: register idle resource"
));
idlingResource = new OnMapReadyIdlingResource(rule.getActivity());
idlingResource = (MapboxIdlingResource) generateIdlingResource();
IdlingRegistry.getInstance().register(idlingResource);
Espresso.onIdle();
mapboxMap = idlingResource.getMapboxMap();
} catch (IdlingResourceTimeoutException idlingResourceTimeoutException) {
throw new RuntimeException(String.format("Could not start %s test for %s.\n Either the ViewHierarchy doesn't "
+ "contain a view with resource id = R.id.mapView or \n the hosting Activity wasn't in an idle state.",
testNameRule.getMethodName(),
getActivityClass().getSimpleName())
throw new RuntimeException(
String.format(
"Could not start %s test for %s.",
testNameRule.getMethodName(),
getActivityClass().getSimpleName()
)
);
}
}

protected IdlingResource generateIdlingResource() {
return new FinishLoadingStyleIdlingResource(rule.getActivity());
}

protected void validateTestSetup() {
if (!Mapbox.isConnected()) {
Timber.e("Not connected to the internet while running test");
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.mapbox.mapboxsdk.testapp.activity;

import android.support.test.espresso.IdlingResource;
import com.mapbox.mapboxsdk.testapp.activity.espresso.EspressoTestActivity;
import com.mapbox.mapboxsdk.testapp.utils.LoadStyleIdlingResource;

/**
* Base class for all tests using EspressoTestActivity as wrapper.
* <p>
* Uses {@link LoadStyleIdlingResource} to load "assets/streets.json" as style.
* </p>
*/
public class EspressoTest extends BaseTest {

@Override
protected IdlingResource generateIdlingResource() {
return new LoadStyleIdlingResource(rule.getActivity());
}

@Override
protected final Class getActivityClass() {
return EspressoTestActivity.class;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -7,27 +7,22 @@ package com.mapbox.mapboxsdk.testapp.activity.gen.<%- subPackage %>;

import android.support.test.runner.AndroidJUnit4;

import com.mapbox.mapboxsdk.testapp.activity.BaseActivityTest;
import com.mapbox.mapboxsdk.testapp.R;
import com.mapbox.mapboxsdk.testapp.activity.BaseTest;
import com.mapbox.mapboxsdk.testapp.activity.<%- subPackage %>.<%- activity %>;

import junit.framework.Assert;
import org.junit.Test;
import org.junit.runner.RunWith;

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;

/**
* Sanity test for <%- activity %>
*/
@RunWith(AndroidJUnit4.class)
public class <%- activity %>Test extends BaseActivityTest {
public class <%- activity %>Test extends BaseTest {

@Test
public void testSanity() {
validateTestSetup();

}

@Override
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,7 @@
import com.mapbox.mapboxsdk.geometry.LatLng;
import com.mapbox.mapboxsdk.maps.IconManagerResolver;
import com.mapbox.mapboxsdk.testapp.R;
import com.mapbox.mapboxsdk.testapp.activity.BaseActivityTest;
import com.mapbox.mapboxsdk.testapp.activity.espresso.EspressoTestActivity;
import com.mapbox.mapboxsdk.testapp.activity.EspressoTest;
import com.mapbox.mapboxsdk.testapp.utils.IconUtils;
import org.junit.Before;
import org.junit.Test;
Expand All @@ -25,7 +24,7 @@
/**
* Tests integration between Icons and Markers
*/
public class IconTest extends BaseActivityTest {
public class IconTest extends EspressoTest {

private Map<Icon, Integer> iconMap;

Expand Down Expand Up @@ -145,9 +144,4 @@ public void testAddRemoveMany() {
assertEquals("Amount of icons should match 0", 0, iconMap.size());
}));
}

@Override
protected Class getActivityClass() {
return EspressoTestActivity.class;
}
}
Loading

0 comments on commit 3a77ea6

Please sign in to comment.