Converted NavigationDrawerTest to Espresso
This commit is contained in:
parent
795952711e
commit
0e42c5d092
@ -5,8 +5,7 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.support.test.InstrumentationRegistry;
|
import android.support.test.InstrumentationRegistry;
|
||||||
import android.support.test.espresso.intent.Intents;
|
import android.support.test.espresso.intent.rule.IntentsTestRule;
|
||||||
import android.support.test.rule.ActivityTestRule;
|
|
||||||
import android.support.test.runner.AndroidJUnit4;
|
import android.support.test.runner.AndroidJUnit4;
|
||||||
import com.robotium.solo.Solo;
|
import com.robotium.solo.Solo;
|
||||||
import com.robotium.solo.Timeout;
|
import com.robotium.solo.Timeout;
|
||||||
@ -29,7 +28,6 @@ import static android.support.test.InstrumentationRegistry.getInstrumentation;
|
|||||||
import static android.support.test.espresso.Espresso.onView;
|
import static android.support.test.espresso.Espresso.onView;
|
||||||
import static android.support.test.espresso.action.ViewActions.click;
|
import static android.support.test.espresso.action.ViewActions.click;
|
||||||
import static android.support.test.espresso.contrib.ActivityResultMatchers.hasResultCode;
|
import static android.support.test.espresso.contrib.ActivityResultMatchers.hasResultCode;
|
||||||
import static android.support.test.espresso.matcher.ViewMatchers.withId;
|
|
||||||
import static android.support.test.espresso.matcher.ViewMatchers.withText;
|
import static android.support.test.espresso.matcher.ViewMatchers.withText;
|
||||||
import static de.test.antennapod.EspressoTestUtils.clickPreference;
|
import static de.test.antennapod.EspressoTestUtils.clickPreference;
|
||||||
import static de.test.antennapod.EspressoTestUtils.openNavDrawer;
|
import static de.test.antennapod.EspressoTestUtils.openNavDrawer;
|
||||||
@ -48,7 +46,7 @@ public class MainActivityTest {
|
|||||||
private SharedPreferences prefs;
|
private SharedPreferences prefs;
|
||||||
|
|
||||||
@Rule
|
@Rule
|
||||||
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class, false, false);
|
public IntentsTestRule<MainActivity> mActivityRule = new IntentsTestRule<>(MainActivity.class, false, false);
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws IOException {
|
public void setUp() throws IOException {
|
||||||
@ -61,7 +59,6 @@ public class MainActivityTest {
|
|||||||
|
|
||||||
mActivityRule.launchActivity(new Intent());
|
mActivityRule.launchActivity(new Intent());
|
||||||
|
|
||||||
Intents.init();
|
|
||||||
Context context = mActivityRule.getActivity();
|
Context context = mActivityRule.getActivity();
|
||||||
uiTestUtils = new UITestUtils(context);
|
uiTestUtils = new UITestUtils(context);
|
||||||
uiTestUtils.setup();
|
uiTestUtils.setup();
|
||||||
@ -83,7 +80,6 @@ public class MainActivityTest {
|
|||||||
public void tearDown() throws Exception {
|
public void tearDown() throws Exception {
|
||||||
uiTestUtils.tearDown();
|
uiTestUtils.tearDown();
|
||||||
solo.finishOpenedActivities();
|
solo.finishOpenedActivities();
|
||||||
Intents.release();
|
|
||||||
PodDBAdapter.deleteDatabase();
|
PodDBAdapter.deleteDatabase();
|
||||||
prefs.edit().clear().commit();
|
prefs.edit().clear().commit();
|
||||||
}
|
}
|
||||||
|
@ -4,13 +4,11 @@ import android.content.Context;
|
|||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.content.SharedPreferences;
|
import android.content.SharedPreferences;
|
||||||
import android.support.test.InstrumentationRegistry;
|
import android.support.test.InstrumentationRegistry;
|
||||||
|
import android.support.test.espresso.ViewInteraction;
|
||||||
import android.support.test.espresso.contrib.DrawerActions;
|
import android.support.test.espresso.contrib.DrawerActions;
|
||||||
import android.support.test.espresso.intent.Intents;
|
import android.support.test.espresso.intent.rule.IntentsTestRule;
|
||||||
import android.support.test.filters.FlakyTest;
|
|
||||||
import android.support.test.rule.ActivityTestRule;
|
|
||||||
import android.support.test.runner.AndroidJUnit4;
|
import android.support.test.runner.AndroidJUnit4;
|
||||||
import android.widget.ListView;
|
import android.view.View;
|
||||||
import com.robotium.solo.Solo;
|
|
||||||
import de.danoeh.antennapod.R;
|
import de.danoeh.antennapod.R;
|
||||||
import de.danoeh.antennapod.activity.MainActivity;
|
import de.danoeh.antennapod.activity.MainActivity;
|
||||||
import de.danoeh.antennapod.activity.PreferenceActivity;
|
import de.danoeh.antennapod.activity.PreferenceActivity;
|
||||||
@ -23,6 +21,7 @@ import de.danoeh.antennapod.fragment.EpisodesFragment;
|
|||||||
import de.danoeh.antennapod.fragment.PlaybackHistoryFragment;
|
import de.danoeh.antennapod.fragment.PlaybackHistoryFragment;
|
||||||
import de.danoeh.antennapod.fragment.QueueFragment;
|
import de.danoeh.antennapod.fragment.QueueFragment;
|
||||||
import de.test.antennapod.EspressoTestUtils;
|
import de.test.antennapod.EspressoTestUtils;
|
||||||
|
import org.hamcrest.Matcher;
|
||||||
import org.junit.After;
|
import org.junit.After;
|
||||||
import org.junit.Before;
|
import org.junit.Before;
|
||||||
import org.junit.Rule;
|
import org.junit.Rule;
|
||||||
@ -34,20 +33,20 @@ import java.util.ArrayList;
|
|||||||
import java.util.Arrays;
|
import java.util.Arrays;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
|
|
||||||
import static android.support.test.InstrumentationRegistry.getInstrumentation;
|
|
||||||
import static android.support.test.espresso.Espresso.onView;
|
import static android.support.test.espresso.Espresso.onView;
|
||||||
import static android.support.test.espresso.action.ViewActions.click;
|
import static android.support.test.espresso.action.ViewActions.click;
|
||||||
import static android.support.test.espresso.action.ViewActions.longClick;
|
import static android.support.test.espresso.action.ViewActions.longClick;
|
||||||
|
import static android.support.test.espresso.action.ViewActions.scrollTo;
|
||||||
import static android.support.test.espresso.intent.Intents.intended;
|
import static android.support.test.espresso.intent.Intents.intended;
|
||||||
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasComponent;
|
import static android.support.test.espresso.intent.matcher.IntentMatchers.hasComponent;
|
||||||
import static android.support.test.espresso.matcher.ViewMatchers.isRoot;
|
import static android.support.test.espresso.matcher.ViewMatchers.isRoot;
|
||||||
import static android.support.test.espresso.matcher.ViewMatchers.withId;
|
import static android.support.test.espresso.matcher.ViewMatchers.withId;
|
||||||
import static android.support.test.espresso.matcher.ViewMatchers.withText;
|
import static android.support.test.espresso.matcher.ViewMatchers.withText;
|
||||||
import static de.test.antennapod.NthMatcher.first;
|
|
||||||
import static de.test.antennapod.EspressoTestUtils.waitForView;
|
import static de.test.antennapod.EspressoTestUtils.waitForView;
|
||||||
|
import static de.test.antennapod.NthMatcher.first;
|
||||||
import static junit.framework.TestCase.assertTrue;
|
import static junit.framework.TestCase.assertTrue;
|
||||||
|
import static org.hamcrest.Matchers.allOf;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.fail;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* User interface tests for MainActivity drawer
|
* User interface tests for MainActivity drawer
|
||||||
@ -55,49 +54,35 @@ import static org.junit.Assert.fail;
|
|||||||
@RunWith(AndroidJUnit4.class)
|
@RunWith(AndroidJUnit4.class)
|
||||||
public class NavigationDrawerTest {
|
public class NavigationDrawerTest {
|
||||||
|
|
||||||
private Solo solo;
|
|
||||||
private UITestUtils uiTestUtils;
|
private UITestUtils uiTestUtils;
|
||||||
private SharedPreferences prefs;
|
|
||||||
|
|
||||||
@Rule
|
@Rule
|
||||||
public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class, false, false);
|
public IntentsTestRule<MainActivity> mActivityRule = new IntentsTestRule<>(MainActivity.class, false, false);
|
||||||
|
|
||||||
@Before
|
@Before
|
||||||
public void setUp() throws IOException {
|
public void setUp() throws IOException {
|
||||||
// override first launch preference
|
uiTestUtils = new UITestUtils(InstrumentationRegistry.getTargetContext());
|
||||||
// do this BEFORE calling getActivity()!
|
|
||||||
EspressoTestUtils.clearAppData();
|
|
||||||
prefs = InstrumentationRegistry.getContext()
|
|
||||||
.getSharedPreferences(MainActivity.PREF_NAME, Context.MODE_PRIVATE);
|
|
||||||
prefs.edit().putBoolean(MainActivity.PREF_IS_FIRST_LAUNCH, false).commit();
|
|
||||||
|
|
||||||
mActivityRule.launchActivity(new Intent());
|
|
||||||
|
|
||||||
Intents.init();
|
|
||||||
Context context = mActivityRule.getActivity();
|
|
||||||
uiTestUtils = new UITestUtils(context);
|
|
||||||
uiTestUtils.setup();
|
uiTestUtils.setup();
|
||||||
|
|
||||||
// create new database
|
EspressoTestUtils.clearAppData();
|
||||||
|
|
||||||
|
Context context = InstrumentationRegistry.getTargetContext();
|
||||||
|
SharedPreferences prefs = context.getSharedPreferences(MainActivity.PREF_NAME, Context.MODE_PRIVATE);
|
||||||
|
prefs.edit().putBoolean(MainActivity.PREF_IS_FIRST_LAUNCH, false).commit();
|
||||||
|
|
||||||
|
RatingDialog.init(context);
|
||||||
|
RatingDialog.saveRated();
|
||||||
|
|
||||||
PodDBAdapter.init(context);
|
PodDBAdapter.init(context);
|
||||||
PodDBAdapter.deleteDatabase();
|
PodDBAdapter.deleteDatabase();
|
||||||
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
PodDBAdapter adapter = PodDBAdapter.getInstance();
|
||||||
adapter.open();
|
adapter.open();
|
||||||
adapter.close();
|
adapter.close();
|
||||||
|
|
||||||
RatingDialog.init(context);
|
|
||||||
RatingDialog.saveRated();
|
|
||||||
|
|
||||||
solo = new Solo(getInstrumentation(), mActivityRule.getActivity());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
public void tearDown() throws Exception {
|
public void tearDown() throws Exception {
|
||||||
uiTestUtils.tearDown();
|
uiTestUtils.tearDown();
|
||||||
solo.finishOpenedActivities();
|
|
||||||
Intents.release();
|
|
||||||
PodDBAdapter.deleteDatabase();
|
|
||||||
prefs.edit().clear().commit();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private void openNavDrawer() {
|
private void openNavDrawer() {
|
||||||
@ -105,69 +90,66 @@ public class NavigationDrawerTest {
|
|||||||
onView(withId(R.id.drawer_layout)).perform(DrawerActions.open());
|
onView(withId(R.id.drawer_layout)).perform(DrawerActions.open());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ViewInteraction onDrawerItem(Matcher<View> viewMatcher) {
|
||||||
|
return onView(allOf(viewMatcher, withId(R.id.txtvTitle)));
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@FlakyTest
|
|
||||||
public void testClickNavDrawer() throws Exception {
|
public void testClickNavDrawer() throws Exception {
|
||||||
uiTestUtils.addLocalFeedData(false);
|
uiTestUtils.addLocalFeedData(false);
|
||||||
|
UserPreferences.setHiddenDrawerItems(new ArrayList<>());
|
||||||
setHiddenDrawerItems(new ArrayList<>());
|
mActivityRule.launchActivity(new Intent());
|
||||||
|
MainActivity activity = mActivityRule.getActivity();
|
||||||
|
|
||||||
// queue
|
// queue
|
||||||
openNavDrawer();
|
openNavDrawer();
|
||||||
solo.clickOnText(solo.getString(R.string.queue_label));
|
onDrawerItem(withText(R.string.queue_label)).perform(click());
|
||||||
solo.waitForView(R.id.recyclerView);
|
onView(isRoot()).perform(waitForView(withId(R.id.recyclerView), 1000));
|
||||||
assertEquals(solo.getString(R.string.queue_label), getActionbarTitle());
|
assertEquals(activity.getString(R.string.queue_label), activity.getSupportActionBar().getTitle());
|
||||||
|
|
||||||
// episodes
|
// episodes
|
||||||
openNavDrawer();
|
openNavDrawer();
|
||||||
solo.clickOnText(solo.getString(R.string.episodes_label));
|
onDrawerItem(withText(R.string.episodes_label)).perform(click());
|
||||||
solo.waitForView(android.R.id.list);
|
onView(isRoot()).perform(waitForView(withId(android.R.id.list), 1000));
|
||||||
assertEquals(solo.getString(R.string.episodes_label), getActionbarTitle());
|
assertEquals(activity.getString(R.string.episodes_label), activity.getSupportActionBar().getTitle());
|
||||||
|
|
||||||
// Subscriptions
|
// Subscriptions
|
||||||
openNavDrawer();
|
openNavDrawer();
|
||||||
solo.clickOnText(solo.getString(R.string.subscriptions_label));
|
onDrawerItem(withText(R.string.subscriptions_label)).perform(click());
|
||||||
solo.waitForView(R.id.subscriptions_grid);
|
onView(isRoot()).perform(waitForView(withId(R.id.subscriptions_grid), 1000));
|
||||||
assertEquals(solo.getString(R.string.subscriptions_label), getActionbarTitle());
|
assertEquals(activity.getString(R.string.subscriptions_label), activity.getSupportActionBar().getTitle());
|
||||||
|
|
||||||
// downloads
|
// downloads
|
||||||
openNavDrawer();
|
openNavDrawer();
|
||||||
solo.clickOnText(solo.getString(R.string.downloads_label));
|
onDrawerItem(withText(R.string.downloads_label)).perform(click());
|
||||||
solo.waitForView(android.R.id.list);
|
onView(isRoot()).perform(waitForView(withId(android.R.id.list), 1000));
|
||||||
assertEquals(solo.getString(R.string.downloads_label), getActionbarTitle());
|
assertEquals(activity.getString(R.string.downloads_label), activity.getSupportActionBar().getTitle());
|
||||||
|
|
||||||
// playback history
|
// playback history
|
||||||
openNavDrawer();
|
openNavDrawer();
|
||||||
solo.clickOnText(solo.getString(R.string.playback_history_label));
|
onDrawerItem(withText(R.string.playback_history_label)).perform(click());
|
||||||
solo.waitForView(android.R.id.list);
|
onView(isRoot()).perform(waitForView(withId(android.R.id.list), 1000));
|
||||||
assertEquals(solo.getString(R.string.playback_history_label), getActionbarTitle());
|
assertEquals(activity.getString(R.string.playback_history_label), activity.getSupportActionBar().getTitle());
|
||||||
|
|
||||||
// add podcast
|
// add podcast
|
||||||
openNavDrawer();
|
openNavDrawer();
|
||||||
solo.clickOnText(solo.getString(R.string.add_feed_label));
|
onDrawerItem(withText(R.string.add_feed_label)).perform(click());
|
||||||
solo.waitForView(R.id.txtvFeedurl);
|
onView(isRoot()).perform(waitForView(withId(R.id.txtvFeedurl), 1000));
|
||||||
assertEquals(solo.getString(R.string.add_feed_label), getActionbarTitle());
|
assertEquals(activity.getString(R.string.add_feed_label), activity.getSupportActionBar().getTitle());
|
||||||
|
|
||||||
// podcasts
|
// podcasts
|
||||||
ListView list = (ListView) solo.getView(R.id.nav_list);
|
|
||||||
for (int i = 0; i < uiTestUtils.hostedFeeds.size(); i++) {
|
for (int i = 0; i < uiTestUtils.hostedFeeds.size(); i++) {
|
||||||
Feed f = uiTestUtils.hostedFeeds.get(i);
|
Feed f = uiTestUtils.hostedFeeds.get(i);
|
||||||
openNavDrawer();
|
openNavDrawer();
|
||||||
solo.scrollListToLine(list, i);
|
onDrawerItem(withText(f.getTitle())).perform(scrollTo(), click());
|
||||||
solo.clickOnText(f.getTitle());
|
onView(isRoot()).perform(waitForView(withId(android.R.id.list), 1000));
|
||||||
solo.waitForView(android.R.id.list);
|
assertEquals("", activity.getSupportActionBar().getTitle());
|
||||||
assertEquals("", getActionbarTitle());
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private String getActionbarTitle() {
|
|
||||||
return ((MainActivity) solo.getCurrentActivity()).getSupportActionBar().getTitle().toString();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@FlakyTest
|
|
||||||
public void testGoToPreferences() {
|
public void testGoToPreferences() {
|
||||||
|
mActivityRule.launchActivity(new Intent());
|
||||||
openNavDrawer();
|
openNavDrawer();
|
||||||
onView(withText(R.string.settings_label)).perform(click());
|
onView(withText(R.string.settings_label)).perform(click());
|
||||||
intended(hasComponent(PreferenceActivity.class.getName()));
|
intended(hasComponent(PreferenceActivity.class.getName()));
|
||||||
@ -175,9 +157,10 @@ public class NavigationDrawerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDrawerPreferencesHideSomeElements() {
|
public void testDrawerPreferencesHideSomeElements() {
|
||||||
setHiddenDrawerItems(new ArrayList<>());
|
UserPreferences.setHiddenDrawerItems(new ArrayList<>());
|
||||||
|
mActivityRule.launchActivity(new Intent());
|
||||||
openNavDrawer();
|
openNavDrawer();
|
||||||
onView(first(withText(R.string.queue_label))).perform(longClick());
|
onDrawerItem(withText(R.string.queue_label)).perform(longClick());
|
||||||
onView(withText(R.string.episodes_label)).perform(click());
|
onView(withText(R.string.episodes_label)).perform(click());
|
||||||
onView(withText(R.string.playback_history_label)).perform(click());
|
onView(withText(R.string.playback_history_label)).perform(click());
|
||||||
onView(withText(R.string.confirm_label)).perform(click());
|
onView(withText(R.string.confirm_label)).perform(click());
|
||||||
@ -191,7 +174,8 @@ public class NavigationDrawerTest {
|
|||||||
@Test
|
@Test
|
||||||
public void testDrawerPreferencesUnhideSomeElements() {
|
public void testDrawerPreferencesUnhideSomeElements() {
|
||||||
List<String> hidden = Arrays.asList(PlaybackHistoryFragment.TAG, DownloadsFragment.TAG);
|
List<String> hidden = Arrays.asList(PlaybackHistoryFragment.TAG, DownloadsFragment.TAG);
|
||||||
setHiddenDrawerItems(hidden);
|
UserPreferences.setHiddenDrawerItems(hidden);
|
||||||
|
mActivityRule.launchActivity(new Intent());
|
||||||
openNavDrawer();
|
openNavDrawer();
|
||||||
onView(first(withText(R.string.queue_label))).perform(longClick());
|
onView(first(withText(R.string.queue_label))).perform(longClick());
|
||||||
|
|
||||||
@ -208,7 +192,8 @@ public class NavigationDrawerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDrawerPreferencesHideAllElements() {
|
public void testDrawerPreferencesHideAllElements() {
|
||||||
setHiddenDrawerItems(new ArrayList<>());
|
UserPreferences.setHiddenDrawerItems(new ArrayList<>());
|
||||||
|
mActivityRule.launchActivity(new Intent());
|
||||||
String[] titles = mActivityRule.getActivity().getResources().getStringArray(R.array.nav_drawer_titles);
|
String[] titles = mActivityRule.getActivity().getResources().getStringArray(R.array.nav_drawer_titles);
|
||||||
|
|
||||||
openNavDrawer();
|
openNavDrawer();
|
||||||
@ -227,7 +212,8 @@ public class NavigationDrawerTest {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testDrawerPreferencesHideCurrentElement() {
|
public void testDrawerPreferencesHideCurrentElement() {
|
||||||
setHiddenDrawerItems(new ArrayList<>());
|
UserPreferences.setHiddenDrawerItems(new ArrayList<>());
|
||||||
|
mActivityRule.launchActivity(new Intent());
|
||||||
openNavDrawer();
|
openNavDrawer();
|
||||||
onView(withText(R.string.downloads_label)).perform(click());
|
onView(withText(R.string.downloads_label)).perform(click());
|
||||||
openNavDrawer();
|
openNavDrawer();
|
||||||
@ -240,14 +226,4 @@ public class NavigationDrawerTest {
|
|||||||
assertEquals(1, hidden.size());
|
assertEquals(1, hidden.size());
|
||||||
assertTrue(hidden.contains(DownloadsFragment.TAG));
|
assertTrue(hidden.contains(DownloadsFragment.TAG));
|
||||||
}
|
}
|
||||||
|
|
||||||
private void setHiddenDrawerItems(List<String> items) {
|
|
||||||
UserPreferences.setHiddenDrawerItems(items);
|
|
||||||
try {
|
|
||||||
mActivityRule.runOnUiThread(() -> mActivityRule.getActivity().updateNavDrawer());
|
|
||||||
} catch (Throwable throwable) {
|
|
||||||
throwable.printStackTrace();
|
|
||||||
fail();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -59,7 +59,7 @@ class UITestUtils {
|
|||||||
|
|
||||||
public void setup() throws IOException {
|
public void setup() throws IOException {
|
||||||
destDir = new File(context.getFilesDir(), "test/UITestUtils");
|
destDir = new File(context.getFilesDir(), "test/UITestUtils");
|
||||||
destDir.mkdir();
|
destDir.mkdirs();
|
||||||
hostedFeedDir = new File(destDir, "hostedFeeds");
|
hostedFeedDir = new File(destDir, "hostedFeeds");
|
||||||
hostedFeedDir.mkdir();
|
hostedFeedDir.mkdir();
|
||||||
hostedMediaDir = new File(destDir, "hostedMediaDir");
|
hostedMediaDir = new File(destDir, "hostedMediaDir");
|
||||||
|
Loading…
x
Reference in New Issue
Block a user