diff options
author | ByteHamster <info@bytehamster.com> | 2019-08-11 21:21:28 +0200 |
---|---|---|
committer | ByteHamster <info@bytehamster.com> | 2019-08-11 21:21:28 +0200 |
commit | c29b0ce8c760b75b4c61781acaf56542530ca3cc (patch) | |
tree | 56f8509d615bd11ed9fe90c188fd7f6e7415587e /app/src/androidTest/java/de/test/antennapod/ui | |
parent | aca6e3e9e4a69cef4ad7032eb06d49f3c842408f (diff) | |
download | AntennaPod-c29b0ce8c760b75b4c61781acaf56542530ca3cc.zip |
Fixed app integration tests
Diffstat (limited to 'app/src/androidTest/java/de/test/antennapod/ui')
8 files changed, 537 insertions, 436 deletions
diff --git a/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java b/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java index 8e0064079..d013ab9cf 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java @@ -1,28 +1,22 @@ package de.test.antennapod.ui; +import android.app.Activity; import android.content.Context; +import android.content.Intent; import android.content.SharedPreferences; -import android.support.test.espresso.contrib.DrawerActions; +import android.support.test.InstrumentationRegistry; import android.support.test.espresso.intent.Intents; -import android.support.test.filters.FlakyTest; import android.support.test.rule.ActivityTestRule; import android.support.test.runner.AndroidJUnit4; -import android.view.Gravity; -import android.widget.ListView; import com.robotium.solo.Solo; import com.robotium.solo.Timeout; import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.MainActivity; import de.danoeh.antennapod.activity.OnlineFeedViewActivity; -import de.danoeh.antennapod.activity.PreferenceActivity; import de.danoeh.antennapod.core.feed.Feed; -import de.danoeh.antennapod.core.preferences.UserPreferences; import de.danoeh.antennapod.core.storage.PodDBAdapter; import de.danoeh.antennapod.dialog.RatingDialog; -import de.danoeh.antennapod.fragment.DownloadsFragment; -import de.danoeh.antennapod.fragment.EpisodesFragment; -import de.danoeh.antennapod.fragment.PlaybackHistoryFragment; -import de.danoeh.antennapod.fragment.QueueFragment; +import de.test.antennapod.EspressoTestUtils; import org.junit.After; import org.junit.Before; import org.junit.Rule; @@ -30,23 +24,18 @@ import org.junit.Test; import org.junit.runner.RunWith; import java.io.IOException; -import java.util.ArrayList; -import java.util.Arrays; -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.action.ViewActions.click; -import static android.support.test.espresso.action.ViewActions.longClick; -import static android.support.test.espresso.assertion.ViewAssertions.matches; -import static android.support.test.espresso.contrib.DrawerMatchers.isClosed; -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.contrib.ActivityResultMatchers.hasResultCode; import static android.support.test.espresso.matcher.ViewMatchers.withId; import static android.support.test.espresso.matcher.ViewMatchers.withText; -import static de.test.antennapod.NthMatcher.first; +import static de.test.antennapod.EspressoTestUtils.clickPreference; +import static de.test.antennapod.EspressoTestUtils.openNavDrawer; import static junit.framework.TestCase.assertTrue; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThat; /** * User interface tests for MainActivity @@ -59,10 +48,19 @@ public class MainActivityTest { private SharedPreferences prefs; @Rule - public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class); + public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class, false, false); @Before public void setUp() throws IOException { + // override first launch preference + // 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); @@ -75,11 +73,6 @@ public class MainActivityTest { adapter.open(); adapter.close(); - // override first launch preference - // do this BEFORE calling getActivity()! - prefs = context.getSharedPreferences(MainActivity.PREF_NAME, Context.MODE_PRIVATE); - prefs.edit().putBoolean(MainActivity.PREF_IS_FIRST_LAUNCH, false).commit(); - RatingDialog.init(context); RatingDialog.saveRated(); @@ -95,19 +88,13 @@ public class MainActivityTest { prefs.edit().clear().commit(); } - private void openNavDrawer() { - onView(withId(R.id.drawer_layout)) - .check(matches(isClosed(Gravity.LEFT))) - .perform(DrawerActions.open()); - } - @Test public void testAddFeed() throws Exception { uiTestUtils.addHostedFeedData(); final Feed feed = uiTestUtils.hostedFeeds.get(0); openNavDrawer(); solo.clickOnText(solo.getString(R.string.add_feed_label)); - solo.enterText(0, feed.getDownload_url()); + solo.enterText(1, feed.getDownload_url()); solo.clickOnButton(solo.getString(R.string.confirm_label)); solo.waitForActivity(OnlineFeedViewActivity.class); solo.waitForView(R.id.butSubscribe); @@ -116,154 +103,23 @@ public class MainActivityTest { assertTrue(solo.waitForText(solo.getString(R.string.open_podcast), 0, Timeout.getLargeTimeout(), false)); } - - @Test - @FlakyTest - public void testClickNavDrawer() throws Exception { - uiTestUtils.addLocalFeedData(false); - - UserPreferences.setHiddenDrawerItems(new ArrayList<>()); - - // queue - openNavDrawer(); - solo.clickOnText(solo.getString(R.string.queue_label)); - solo.waitForView(android.R.id.list); - assertEquals(solo.getString(R.string.queue_label), getActionbarTitle()); - - // episodes - openNavDrawer(); - solo.clickOnText(solo.getString(R.string.episodes_label)); - solo.waitForView(android.R.id.list); - assertEquals(solo.getString(R.string.episodes_label), getActionbarTitle()); - - // Subscriptions - openNavDrawer(); - solo.clickOnText(solo.getString(R.string.subscriptions_label)); - solo.waitForView(R.id.subscriptions_grid); - assertEquals(solo.getString(R.string.subscriptions_label), getActionbarTitle()); - - // downloads - openNavDrawer(); - solo.clickOnText(solo.getString(R.string.downloads_label)); - solo.waitForView(android.R.id.list); - assertEquals(solo.getString(R.string.downloads_label), getActionbarTitle()); - - // playback history - openNavDrawer(); - solo.clickOnText(solo.getString(R.string.playback_history_label)); - solo.waitForView(android.R.id.list); - assertEquals(solo.getString(R.string.playback_history_label), getActionbarTitle()); - - // add podcast - openNavDrawer(); - solo.clickOnText(solo.getString(R.string.add_feed_label)); - solo.waitForView(R.id.txtvFeedurl); - assertEquals(solo.getString(R.string.add_feed_label), getActionbarTitle()); - - // podcasts - ListView list = (ListView) solo.getView(R.id.nav_list); - for (int i = 0; i < uiTestUtils.hostedFeeds.size(); i++) { - Feed f = uiTestUtils.hostedFeeds.get(i); - openNavDrawer(); - solo.scrollListToLine(list, i); - solo.clickOnText(f.getTitle()); - solo.waitForView(android.R.id.list); - assertEquals("", getActionbarTitle()); - } - } - private String getActionbarTitle() { return ((MainActivity) solo.getCurrentActivity()).getSupportActionBar().getTitle().toString(); } - @Test - @FlakyTest - public void testGoToPreferences() { + public void testBackButtonBehaviorGoToPage() { openNavDrawer(); onView(withText(R.string.settings_label)).perform(click()); - intended(hasComponent(PreferenceActivity.class.getName())); - } + clickPreference(R.string.user_interface_label); + clickPreference(R.string.pref_back_button_behavior_title); - @Test - public void testDrawerPreferencesHideSomeElements() { - UserPreferences.setHiddenDrawerItems(new ArrayList<>()); - openNavDrawer(); - onView(first(withText(R.string.queue_label))).perform(longClick()); - onView(withText(R.string.episodes_label)).perform(click()); - onView(withText(R.string.playback_history_label)).perform(click()); - onView(withText(R.string.confirm_label)).perform(click()); - - List<String> hidden = UserPreferences.getHiddenDrawerItems(); - assertEquals(2, hidden.size()); - assertTrue(hidden.contains(EpisodesFragment.TAG)); - assertTrue(hidden.contains(PlaybackHistoryFragment.TAG)); - } - - @Test - public void testDrawerPreferencesUnhideSomeElements() { - List<String> hidden = Arrays.asList(PlaybackHistoryFragment.TAG, DownloadsFragment.TAG); - UserPreferences.setHiddenDrawerItems(hidden); - openNavDrawer(); - onView(first(withText(R.string.queue_label))).perform(longClick()); - - onView(withText(R.string.downloads_label)).perform(click()); - onView(withText(R.string.queue_label)).perform(click()); - onView(withText(R.string.confirm_label)).perform(click()); - - hidden = UserPreferences.getHiddenDrawerItems(); - assertEquals(2, hidden.size()); - assertTrue(hidden.contains(QueueFragment.TAG)); - assertTrue(hidden.contains(PlaybackHistoryFragment.TAG)); - } - - - @Test - public void testDrawerPreferencesHideAllElements() { - UserPreferences.setHiddenDrawerItems(new ArrayList<>()); - String[] titles = mActivityRule.getActivity().getResources().getStringArray(R.array.nav_drawer_titles); - - openNavDrawer(); - onView(first(withText(R.string.queue_label))).perform(longClick()); - for (String title : titles) { - onView(first(withText(title))).perform(click()); - } + onView(withText(R.string.back_button_go_to_page)).perform(click()); + onView(withText(R.string.subscriptions_label)).perform(click()); onView(withText(R.string.confirm_label)).perform(click()); - List<String> hidden = UserPreferences.getHiddenDrawerItems(); - assertEquals(titles.length, hidden.size()); - for (String tag : MainActivity.NAV_DRAWER_TAGS) { - assertTrue(hidden.contains(tag)); - } - } - - @Test - public void testDrawerPreferencesHideCurrentElement() { - UserPreferences.setHiddenDrawerItems(new ArrayList<>()); - openNavDrawer(); - onView(withText(R.string.downloads_label)).perform(click()); - openNavDrawer(); - - onView(first(withText(R.string.queue_label))).perform(longClick()); - onView(first(withText(R.string.downloads_label))).perform(click()); - onView(withText(R.string.confirm_label)).perform(click()); - - List<String> hidden = UserPreferences.getHiddenDrawerItems(); - assertEquals(1, hidden.size()); - assertTrue(hidden.contains(DownloadsFragment.TAG)); - } - - @Test - public void testBackButtonBehaviorGoToPage() { - openNavDrawer(); - solo.clickOnText(solo.getString(R.string.settings_label)); - solo.clickOnText(solo.getString(R.string.user_interface_label)); - solo.clickOnText(solo.getString(R.string.pref_back_button_behavior_title)); - solo.clickOnText(solo.getString(R.string.back_button_go_to_page)); - solo.waitForDialogToOpen(); - solo.clickOnText(solo.getString(R.string.subscriptions_label)); - solo.clickOnText(solo.getString(R.string.confirm_label)); solo.goBackToActivity(MainActivity.class.getSimpleName()); + solo.goBack(); // Close nav drawer solo.goBack(); assertEquals(solo.getString(R.string.subscriptions_label), getActionbarTitle()); } @@ -271,11 +127,12 @@ public class MainActivityTest { @Test public void testBackButtonBehaviorOpenDrawer() { openNavDrawer(); - solo.clickOnText(solo.getString(R.string.settings_label)); - solo.clickOnText(solo.getString(R.string.user_interface_label)); - solo.clickOnText(solo.getString(R.string.pref_back_button_behavior_title)); - solo.clickOnText(solo.getString(R.string.back_button_open_drawer)); + onView(withText(R.string.settings_label)).perform(click()); + clickPreference(R.string.user_interface_label); + clickPreference(R.string.pref_back_button_behavior_title); + onView(withText(R.string.back_button_open_drawer)).perform(click()); solo.goBackToActivity(MainActivity.class.getSimpleName()); + solo.goBack(); // Close nav drawer solo.goBack(); assertTrue(((MainActivity)solo.getCurrentActivity()).isDrawerOpen()); } @@ -283,39 +140,42 @@ public class MainActivityTest { @Test public void testBackButtonBehaviorDoubleTap() { openNavDrawer(); - solo.clickOnText(solo.getString(R.string.settings_label)); - solo.clickOnText(solo.getString(R.string.user_interface_label)); - solo.clickOnText(solo.getString(R.string.pref_back_button_behavior_title)); - solo.clickOnText(solo.getString(R.string.back_button_double_tap)); + onView(withText(R.string.settings_label)).perform(click()); + clickPreference(R.string.user_interface_label); + clickPreference(R.string.pref_back_button_behavior_title); + onView(withText(R.string.back_button_double_tap)).perform(click()); solo.goBackToActivity(MainActivity.class.getSimpleName()); + solo.goBack(); // Close nav drawer solo.goBack(); solo.goBack(); - assertTrue(solo.getCurrentActivity().isFinishing()); + assertThat(mActivityRule.getActivityResult(), hasResultCode(Activity.RESULT_CANCELED)); } @Test - public void testBackButtonBehaviorPrompt() { + public void testBackButtonBehaviorPrompt() throws Exception { openNavDrawer(); - solo.clickOnText(solo.getString(R.string.settings_label)); - solo.clickOnText(solo.getString(R.string.user_interface_label)); - solo.clickOnText(solo.getString(R.string.pref_back_button_behavior_title)); - solo.clickOnText(solo.getString(R.string.back_button_show_prompt)); + onView(withText(R.string.settings_label)).perform(click()); + clickPreference(R.string.user_interface_label); + clickPreference(R.string.pref_back_button_behavior_title); + onView(withText(R.string.back_button_show_prompt)).perform(click()); solo.goBackToActivity(MainActivity.class.getSimpleName()); + solo.goBack(); // Close nav drawer solo.goBack(); - solo.clickOnText(solo.getString(R.string.yes)); - solo.waitForDialogToClose(); - assertTrue(solo.getCurrentActivity().isFinishing()); + onView(withText(R.string.yes)).perform(click()); + Thread.sleep(100); + assertThat(mActivityRule.getActivityResult(), hasResultCode(Activity.RESULT_CANCELED)); } @Test public void testBackButtonBehaviorDefault() { openNavDrawer(); - solo.clickOnText(solo.getString(R.string.settings_label)); - solo.clickOnText(solo.getString(R.string.user_interface_label)); - solo.clickOnText(solo.getString(R.string.pref_back_button_behavior_title)); - solo.clickOnText(solo.getString(R.string.back_button_default)); + onView(withText(R.string.settings_label)).perform(click()); + clickPreference(R.string.user_interface_label); + clickPreference(R.string.pref_back_button_behavior_title); + onView(withText(R.string.back_button_default)).perform(click()); solo.goBackToActivity(MainActivity.class.getSimpleName()); + solo.goBack(); // Close nav drawer solo.goBack(); - assertTrue(solo.getCurrentActivity().isFinishing()); + assertThat(mActivityRule.getActivityResult(), hasResultCode(Activity.RESULT_CANCELED)); } } diff --git a/app/src/androidTest/java/de/test/antennapod/ui/NavigationDrawerTest.java b/app/src/androidTest/java/de/test/antennapod/ui/NavigationDrawerTest.java new file mode 100644 index 000000000..0ed62010b --- /dev/null +++ b/app/src/androidTest/java/de/test/antennapod/ui/NavigationDrawerTest.java @@ -0,0 +1,253 @@ +package de.test.antennapod.ui; + +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.support.test.InstrumentationRegistry; +import android.support.test.espresso.contrib.DrawerActions; +import android.support.test.espresso.intent.Intents; +import android.support.test.filters.FlakyTest; +import android.support.test.rule.ActivityTestRule; +import android.support.test.runner.AndroidJUnit4; +import android.widget.ListView; +import com.robotium.solo.Solo; +import de.danoeh.antennapod.R; +import de.danoeh.antennapod.activity.MainActivity; +import de.danoeh.antennapod.activity.PreferenceActivity; +import de.danoeh.antennapod.core.feed.Feed; +import de.danoeh.antennapod.core.preferences.UserPreferences; +import de.danoeh.antennapod.core.storage.PodDBAdapter; +import de.danoeh.antennapod.dialog.RatingDialog; +import de.danoeh.antennapod.fragment.DownloadsFragment; +import de.danoeh.antennapod.fragment.EpisodesFragment; +import de.danoeh.antennapod.fragment.PlaybackHistoryFragment; +import de.danoeh.antennapod.fragment.QueueFragment; +import de.test.antennapod.EspressoTestUtils; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +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.action.ViewActions.click; +import static android.support.test.espresso.action.ViewActions.longClick; +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.matcher.ViewMatchers.isRoot; +import static android.support.test.espresso.matcher.ViewMatchers.withId; +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 junit.framework.TestCase.assertTrue; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.fail; + +/** + * User interface tests for MainActivity drawer + */ +@RunWith(AndroidJUnit4.class) +public class NavigationDrawerTest { + + private Solo solo; + private UITestUtils uiTestUtils; + private SharedPreferences prefs; + + @Rule + public ActivityTestRule<MainActivity> mActivityRule = new ActivityTestRule<>(MainActivity.class, false, false); + + @Before + public void setUp() throws IOException { + // override first launch preference + // 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(); + + // create new database + PodDBAdapter.init(context); + PodDBAdapter.deleteDatabase(); + PodDBAdapter adapter = PodDBAdapter.getInstance(); + adapter.open(); + adapter.close(); + + RatingDialog.init(context); + RatingDialog.saveRated(); + + solo = new Solo(getInstrumentation(), mActivityRule.getActivity()); + } + + @After + public void tearDown() throws Exception { + uiTestUtils.tearDown(); + solo.finishOpenedActivities(); + Intents.release(); + PodDBAdapter.deleteDatabase(); + prefs.edit().clear().commit(); + } + + private void openNavDrawer() { + onView(isRoot()).perform(waitForView(withId(R.id.drawer_layout), 1000)); + onView(withId(R.id.drawer_layout)).perform(DrawerActions.open()); + } + + @Test + @FlakyTest + public void testClickNavDrawer() throws Exception { + uiTestUtils.addLocalFeedData(false); + + setHiddenDrawerItems(new ArrayList<>()); + + // queue + openNavDrawer(); + solo.clickOnText(solo.getString(R.string.queue_label)); + solo.waitForView(R.id.recyclerView); + assertEquals(solo.getString(R.string.queue_label), getActionbarTitle()); + + // episodes + openNavDrawer(); + solo.clickOnText(solo.getString(R.string.episodes_label)); + solo.waitForView(android.R.id.list); + assertEquals(solo.getString(R.string.episodes_label), getActionbarTitle()); + + // Subscriptions + openNavDrawer(); + solo.clickOnText(solo.getString(R.string.subscriptions_label)); + solo.waitForView(R.id.subscriptions_grid); + assertEquals(solo.getString(R.string.subscriptions_label), getActionbarTitle()); + + // downloads + openNavDrawer(); + solo.clickOnText(solo.getString(R.string.downloads_label)); + solo.waitForView(android.R.id.list); + assertEquals(solo.getString(R.string.downloads_label), getActionbarTitle()); + + // playback history + openNavDrawer(); + solo.clickOnText(solo.getString(R.string.playback_history_label)); + solo.waitForView(android.R.id.list); + assertEquals(solo.getString(R.string.playback_history_label), getActionbarTitle()); + + // add podcast + openNavDrawer(); + solo.clickOnText(solo.getString(R.string.add_feed_label)); + solo.waitForView(R.id.txtvFeedurl); + assertEquals(solo.getString(R.string.add_feed_label), getActionbarTitle()); + + // podcasts + ListView list = (ListView) solo.getView(R.id.nav_list); + for (int i = 0; i < uiTestUtils.hostedFeeds.size(); i++) { + Feed f = uiTestUtils.hostedFeeds.get(i); + openNavDrawer(); + solo.scrollListToLine(list, i); + solo.clickOnText(f.getTitle()); + solo.waitForView(android.R.id.list); + assertEquals("", getActionbarTitle()); + } + } + + private String getActionbarTitle() { + return ((MainActivity) solo.getCurrentActivity()).getSupportActionBar().getTitle().toString(); + } + + + @Test + @FlakyTest + public void testGoToPreferences() { + openNavDrawer(); + onView(withText(R.string.settings_label)).perform(click()); + intended(hasComponent(PreferenceActivity.class.getName())); + } + + @Test + public void testDrawerPreferencesHideSomeElements() { + setHiddenDrawerItems(new ArrayList<>()); + openNavDrawer(); + onView(first(withText(R.string.queue_label))).perform(longClick()); + onView(withText(R.string.episodes_label)).perform(click()); + onView(withText(R.string.playback_history_label)).perform(click()); + onView(withText(R.string.confirm_label)).perform(click()); + + List<String> hidden = UserPreferences.getHiddenDrawerItems(); + assertEquals(2, hidden.size()); + assertTrue(hidden.contains(EpisodesFragment.TAG)); + assertTrue(hidden.contains(PlaybackHistoryFragment.TAG)); + } + + @Test + public void testDrawerPreferencesUnhideSomeElements() { + List<String> hidden = Arrays.asList(PlaybackHistoryFragment.TAG, DownloadsFragment.TAG); + setHiddenDrawerItems(hidden); + openNavDrawer(); + onView(first(withText(R.string.queue_label))).perform(longClick()); + + onView(withText(R.string.downloads_label)).perform(click()); + onView(withText(R.string.queue_label)).perform(click()); + onView(withText(R.string.confirm_label)).perform(click()); + + hidden = UserPreferences.getHiddenDrawerItems(); + assertEquals(2, hidden.size()); + assertTrue(hidden.contains(QueueFragment.TAG)); + assertTrue(hidden.contains(PlaybackHistoryFragment.TAG)); + } + + + @Test + public void testDrawerPreferencesHideAllElements() { + setHiddenDrawerItems(new ArrayList<>()); + String[] titles = mActivityRule.getActivity().getResources().getStringArray(R.array.nav_drawer_titles); + + openNavDrawer(); + onView(first(withText(R.string.queue_label))).perform(longClick()); + for (String title : titles) { + onView(first(withText(title))).perform(click()); + } + onView(withText(R.string.confirm_label)).perform(click()); + + List<String> hidden = UserPreferences.getHiddenDrawerItems(); + assertEquals(titles.length, hidden.size()); + for (String tag : MainActivity.NAV_DRAWER_TAGS) { + assertTrue(hidden.contains(tag)); + } + } + + @Test + public void testDrawerPreferencesHideCurrentElement() { + setHiddenDrawerItems(new ArrayList<>()); + openNavDrawer(); + onView(withText(R.string.downloads_label)).perform(click()); + openNavDrawer(); + + onView(first(withText(R.string.queue_label))).perform(longClick()); + onView(first(withText(R.string.downloads_label))).perform(click()); + onView(withText(R.string.confirm_label)).perform(click()); + + List<String> hidden = UserPreferences.getHiddenDrawerItems(); + assertEquals(1, hidden.size()); + 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(); + } + } +} diff --git a/app/src/androidTest/java/de/test/antennapod/ui/PlaybackSonicTest.java b/app/src/androidTest/java/de/test/antennapod/ui/PlaybackSonicTest.java index 55ed998bb..6b41ad0ea 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/PlaybackSonicTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/PlaybackSonicTest.java @@ -1,13 +1,12 @@ package de.test.antennapod.ui; -import android.annotation.TargetApi; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; -import android.os.Build; import android.preference.PreferenceManager; -import android.test.ActivityInstrumentationTestCase2; -import android.test.FlakyTest; +import android.support.test.InstrumentationRegistry; +import android.support.test.filters.LargeTest; +import android.support.test.rule.ActivityTestRule; import android.view.View; import android.widget.ListView; @@ -25,14 +24,21 @@ import de.danoeh.antennapod.core.service.playback.PlayerStatus; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.PodDBAdapter; +import de.test.antennapod.EspressoTestUtils; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; + +import static android.support.test.InstrumentationRegistry.getInstrumentation; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; /** * test cases for starting and ending playback from the MainActivity and AudioPlayerActivity */ -@TargetApi(Build.VERSION_CODES.JELLY_BEAN) -public class PlaybackSonicTest extends ActivityInstrumentationTestCase2<MainActivity> { - - private static final String TAG = PlaybackTest.class.getSimpleName(); +@LargeTest +public class PlaybackSonicTest { private static final int EPISODES_DRAWER_LIST_INDEX = 1; private static final int QUEUE_DRAWER_LIST_INDEX = 0; @@ -41,15 +47,13 @@ public class PlaybackSonicTest extends ActivityInstrumentationTestCase2<MainActi private Context context; - public PlaybackSonicTest() { - super(MainActivity.class); - } + @Rule + public ActivityTestRule<MainActivity> activityTestRule = new ActivityTestRule<>(MainActivity.class, false, false); - @Override + @Before public void setUp() throws Exception { - super.setUp(); - - context = getInstrumentation().getTargetContext(); + EspressoTestUtils.clearAppData(); + context = InstrumentationRegistry.getTargetContext(); PodDBAdapter.init(context); PodDBAdapter.deleteDatabase(); @@ -62,7 +66,8 @@ public class PlaybackSonicTest extends ActivityInstrumentationTestCase2<MainActi .putString(UserPreferences.PREF_MEDIA_PLAYER, "sonic") .commit(); - solo = new Solo(getInstrumentation(), getActivity()); + activityTestRule.launchActivity(new Intent()); + solo = new Solo(getInstrumentation(), activityTestRule.getActivity()); uiTestUtils = new UITestUtils(context); uiTestUtils.setup(); @@ -73,7 +78,7 @@ public class PlaybackSonicTest extends ActivityInstrumentationTestCase2<MainActi adapter.close(); } - @Override + @After public void tearDown() throws Exception { solo.finishOpenedActivities(); uiTestUtils.tearDown(); @@ -81,8 +86,10 @@ public class PlaybackSonicTest extends ActivityInstrumentationTestCase2<MainActi // shut down playback service skipEpisode(); context.sendBroadcast(new Intent(PlaybackService.ACTION_SHUTDOWN_PLAYBACK_SERVICE)); + } - super.tearDown(); + private MainActivity getActivity() { + return activityTestRule.getActivity(); } private void openNavDrawer() { @@ -158,12 +165,14 @@ public class PlaybackSonicTest extends ActivityInstrumentationTestCase2<MainActi assertTrue(playing); } + @Test public void testStartLocal() throws Exception { uiTestUtils.addLocalFeedData(true); DBWriter.clearQueue().get(); startLocalPlayback(); } + @Test public void testContinousPlaybackOffSingleEpisode() throws Exception { setContinuousPlaybackPreference(false); uiTestUtils.addLocalFeedData(true); @@ -171,7 +180,7 @@ public class PlaybackSonicTest extends ActivityInstrumentationTestCase2<MainActi startLocalPlayback(); } - @FlakyTest(tolerance = 3) + @Test public void testContinousPlaybackOffMultipleEpisodes() throws Exception { setContinuousPlaybackPreference(false); uiTestUtils.addLocalFeedData(true); @@ -196,7 +205,7 @@ public class PlaybackSonicTest extends ActivityInstrumentationTestCase2<MainActi assertFalse(status.equals(PlayerStatus.PLAYING)); } - @FlakyTest(tolerance = 3) + @Test public void testContinuousPlaybackOnMultipleEpisodes() throws Exception { setContinuousPlaybackPreference(true); uiTestUtils.addLocalFeedData(true); @@ -262,13 +271,14 @@ public class PlaybackSonicTest extends ActivityInstrumentationTestCase2<MainActi assertTrue(startedReplay); } + @Test public void testReplayEpisodeContinuousPlaybackOn() throws Exception { replayEpisodeCheck(true); } + @Test public void testReplayEpisodeContinuousPlaybackOff() throws Exception { replayEpisodeCheck(false); } - } diff --git a/app/src/androidTest/java/de/test/antennapod/ui/PlaybackTest.java b/app/src/androidTest/java/de/test/antennapod/ui/PlaybackTest.java index 74d59abd7..099549a69 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/PlaybackTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/PlaybackTest.java @@ -4,8 +4,9 @@ import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.preference.PreferenceManager; -import android.test.ActivityInstrumentationTestCase2; -import android.test.FlakyTest; +import android.support.test.InstrumentationRegistry; +import android.support.test.filters.LargeTest; +import android.support.test.rule.ActivityTestRule; import android.view.View; import android.widget.ListView; @@ -23,30 +24,32 @@ import de.danoeh.antennapod.core.service.playback.PlayerStatus; import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.PodDBAdapter; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; /** * test cases for starting and ending playback from the MainActivity and AudioPlayerActivity */ -public class PlaybackTest extends ActivityInstrumentationTestCase2<MainActivity> { - - private static final String TAG = PlaybackTest.class.getSimpleName(); +@LargeTest +public class PlaybackTest { private static final int EPISODES_DRAWER_LIST_INDEX = 1; private static final int QUEUE_DRAWER_LIST_INDEX = 0; + @Rule + public ActivityTestRule<MainActivity> activityTestRule = new ActivityTestRule<>(MainActivity.class); + private Solo solo; private UITestUtils uiTestUtils; - private Context context; - public PlaybackTest() { - super(MainActivity.class); - } - - @Override + @Before public void setUp() throws Exception { - super.setUp(); - - context = getInstrumentation().getTargetContext(); + context = InstrumentationRegistry.getTargetContext(); PodDBAdapter.init(context); PodDBAdapter.deleteDatabase(); @@ -58,7 +61,7 @@ public class PlaybackTest extends ActivityInstrumentationTestCase2<MainActivity> .putBoolean(UserPreferences.PREF_PAUSE_ON_HEADSET_DISCONNECT, false) .commit(); - solo = new Solo(getInstrumentation(), getActivity()); + solo = new Solo(InstrumentationRegistry.getInstrumentation(), getActivity()); uiTestUtils = new UITestUtils(context); uiTestUtils.setup(); @@ -69,7 +72,7 @@ public class PlaybackTest extends ActivityInstrumentationTestCase2<MainActivity> adapter.close(); } - @Override + @After public void tearDown() throws Exception { solo.finishOpenedActivities(); uiTestUtils.tearDown(); @@ -77,12 +80,15 @@ public class PlaybackTest extends ActivityInstrumentationTestCase2<MainActivity> // shut down playback service skipEpisode(); context.sendBroadcast(new Intent(PlaybackService.ACTION_SHUTDOWN_PLAYBACK_SERVICE)); + } - super.tearDown(); + private MainActivity getActivity() { + return activityTestRule.getActivity(); } + private void openNavDrawer() { solo.clickOnImageButton(0); - getInstrumentation().waitForIdleSync(); + InstrumentationRegistry.getInstrumentation().waitForIdleSync(); } private void setContinuousPlaybackPreference(boolean value) { @@ -150,12 +156,14 @@ public class PlaybackTest extends ActivityInstrumentationTestCase2<MainActivity> assertTrue(playing); } + @Test public void testStartLocal() throws Exception { uiTestUtils.addLocalFeedData(true); DBWriter.clearQueue().get(); startLocalPlayback(); } + @Test public void testContinousPlaybackOffSingleEpisode() throws Exception { setContinuousPlaybackPreference(false); uiTestUtils.addLocalFeedData(true); @@ -163,7 +171,7 @@ public class PlaybackTest extends ActivityInstrumentationTestCase2<MainActivity> startLocalPlayback(); } - @FlakyTest(tolerance = 3) + @Test public void testContinousPlaybackOffMultipleEpisodes() throws Exception { setContinuousPlaybackPreference(false); uiTestUtils.addLocalFeedData(true); @@ -187,7 +195,7 @@ public class PlaybackTest extends ActivityInstrumentationTestCase2<MainActivity> assertFalse(status.equals(PlayerStatus.PLAYING)); } - @FlakyTest(tolerance = 3) + @Test public void testContinuousPlaybackOnMultipleEpisodes() throws Exception { setContinuousPlaybackPreference(true); uiTestUtils.addLocalFeedData(true); @@ -252,13 +260,13 @@ public class PlaybackTest extends ActivityInstrumentationTestCase2<MainActivity> assertTrue(startedReplay); } + @Test public void testReplayEpisodeContinuousPlaybackOn() throws Exception { replayEpisodeCheck(true); } + @Test public void testReplayEpisodeContinuousPlaybackOff() throws Exception { replayEpisodeCheck(false); } - - } diff --git a/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java b/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java index d934bf3e2..4b2dc75a9 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java @@ -1,22 +1,19 @@ package de.test.antennapod.ui; +import android.content.Intent; import android.content.SharedPreferences; import android.content.res.Resources; import android.preference.PreferenceManager; -import android.support.test.espresso.contrib.RecyclerViewActions; -import android.support.test.rule.ActivityTestRule; -import android.support.test.runner.AndroidJUnit4; -import android.view.View; +import android.support.test.filters.LargeTest; +import android.support.test.rule.ActivityTestRule; import com.robotium.solo.Solo; import com.robotium.solo.Timeout; -import org.hamcrest.Matcher; -import org.junit.After; +import de.test.antennapod.EspressoTestUtils; import org.junit.Before; import org.junit.Rule; import org.junit.Test; -import org.junit.runner.RunWith; import java.util.Arrays; import java.util.concurrent.TimeUnit; @@ -35,38 +32,33 @@ import de.danoeh.antennapod.fragment.SubscriptionFragment; import static android.support.test.InstrumentationRegistry.getInstrumentation; import static android.support.test.espresso.Espresso.onView; import static android.support.test.espresso.action.ViewActions.click; -import static android.support.test.espresso.matcher.ViewMatchers.hasDescendant; -import static android.support.test.espresso.matcher.ViewMatchers.withId; +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.withText; +import static de.test.antennapod.EspressoTestUtils.clickPreference; import static junit.framework.TestCase.assertEquals; import static junit.framework.TestCase.assertTrue; -@RunWith(AndroidJUnit4.class) +@LargeTest public class PreferencesTest { private Solo solo; private Resources res; - private SharedPreferences prefs; @Rule - public ActivityTestRule<PreferenceActivity> mActivityRule = new ActivityTestRule<>(PreferenceActivity.class); + public ActivityTestRule<PreferenceActivity> mActivityRule = new ActivityTestRule<>(PreferenceActivity.class, false, false); @Before public void setUp() { + EspressoTestUtils.clearAppData(); + mActivityRule.launchActivity(new Intent()); + SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(mActivityRule.getActivity()); + prefs.edit().putBoolean(UserPreferences.PREF_ENABLE_AUTODL, true).commit(); + solo = new Solo(getInstrumentation(), mActivityRule.getActivity()); Timeout.setSmallTimeout(500); Timeout.setLargeTimeout(1000); res = mActivityRule.getActivity().getResources(); UserPreferences.init(mActivityRule.getActivity()); - - prefs = PreferenceManager.getDefaultSharedPreferences(mActivityRule.getActivity()); - prefs.edit().clear(); - prefs.edit().putBoolean(UserPreferences.PREF_ENABLE_AUTODL, true).commit(); - } - - @After - public void tearDown() { - solo.finishOpenedActivities(); - prefs.edit().clear(); } @Test @@ -78,8 +70,8 @@ public class PreferencesTest { } else { otherTheme = R.string.pref_theme_title_light; } - clickPreference(withText(R.string.user_interface_label)); - clickPreference(withText(R.string.pref_set_theme_title)); + clickPreference(R.string.user_interface_label); + clickPreference(R.string.pref_set_theme_title); onView(withText(otherTheme)).perform(click()); assertTrue(solo.waitForCondition(() -> UserPreferences.getTheme() != theme, Timeout.getLargeTimeout())); } @@ -93,8 +85,8 @@ public class PreferencesTest { } else { otherTheme = R.string.pref_theme_title_light; } - clickPreference(withText(R.string.user_interface_label)); - clickPreference(withText(R.string.pref_set_theme_title)); + clickPreference(R.string.user_interface_label); + clickPreference(R.string.pref_set_theme_title); onView(withText(otherTheme)).perform(click()); assertTrue(solo.waitForCondition(() -> UserPreferences.getTheme() != theme, Timeout.getLargeTimeout())); } @@ -102,34 +94,31 @@ public class PreferencesTest { @Test public void testEnablePersistentPlaybackControls() { final boolean persistNotify = UserPreferences.isPersistNotify(); - clickPreference(withText(R.string.user_interface_label)); - clickPreference(withText(R.string.pref_persistNotify_title)); + clickPreference(R.string.user_interface_label); + clickPreference(R.string.pref_persistNotify_title); assertTrue(solo.waitForCondition(() -> persistNotify != UserPreferences.isPersistNotify(), Timeout.getLargeTimeout())); - clickPreference(withText(R.string.pref_persistNotify_title)); + clickPreference(R.string.pref_persistNotify_title); assertTrue(solo.waitForCondition(() -> persistNotify == UserPreferences.isPersistNotify(), Timeout.getLargeTimeout())); } @Test public void testSetLockscreenButtons() { - solo.clickOnText(solo.getString(R.string.user_interface_label)); + onView(withText(R.string.user_interface_label)).perform(click()); solo.scrollDown(); String[] buttons = res.getStringArray(R.array.compact_notification_buttons_options); - solo.clickOnText(solo.getString(R.string.pref_compact_notification_buttons_title)); + onView(withText(R.string.pref_compact_notification_buttons_title)).perform(click()); solo.waitForDialogToOpen(1000); - // First uncheck every checkbox - for (String button : buttons) { - assertTrue(solo.searchText(button)); - if (solo.isTextChecked(button)) { - solo.clickOnText(button); - } - } + // First uncheck checkbox + onView(withText(buttons[2])).perform(click()); + // Now try to check all checkboxes - solo.clickOnText(buttons[0]); - solo.clickOnText(buttons[1]); - solo.clickOnText(buttons[2]); + onView(withText(buttons[0])).perform(click()); + onView(withText(buttons[1])).perform(click()); + onView(withText(buttons[2])).perform(click()); + // Make sure that the third checkbox is unchecked assertTrue(!solo.isTextChecked(buttons[2])); - solo.clickOnText(solo.getString(R.string.confirm_label)); + onView(withText(R.string.confirm_label)).perform(click()); solo.waitForDialogToClose(1000); assertTrue(solo.waitForCondition(UserPreferences::showRewindOnCompactNotification, Timeout.getLargeTimeout())); assertTrue(solo.waitForCondition(UserPreferences::showFastForwardOnCompactNotification, Timeout.getLargeTimeout())); @@ -138,107 +127,109 @@ public class PreferencesTest { @Test public void testEnqueueAtFront() { - solo.clickOnText(solo.getString(R.string.playback_pref)); + onView(withText(R.string.playback_pref)).perform(click()); final boolean enqueueAtFront = UserPreferences.enqueueAtFront(); solo.scrollDown(); solo.scrollDown(); - solo.clickOnText(solo.getString(R.string.pref_queueAddToFront_title)); + onView(withText(R.string.pref_queueAddToFront_title)).perform(click()); assertTrue(solo.waitForCondition(() -> enqueueAtFront != UserPreferences.enqueueAtFront(), Timeout.getLargeTimeout())); - solo.clickOnText(solo.getString(R.string.pref_queueAddToFront_title)); + onView(withText(R.string.pref_queueAddToFront_title)).perform(click()); assertTrue(solo.waitForCondition(() -> enqueueAtFront == UserPreferences.enqueueAtFront(), Timeout.getLargeTimeout())); } @Test public void testHeadPhonesDisconnect() { - solo.clickOnText(solo.getString(R.string.playback_pref)); + onView(withText(R.string.playback_pref)).perform(click()); final boolean pauseOnHeadsetDisconnect = UserPreferences.isPauseOnHeadsetDisconnect(); - solo.clickOnText(solo.getString(R.string.pref_pauseOnHeadsetDisconnect_title)); + onView(withText(R.string.pref_pauseOnHeadsetDisconnect_title)).perform(click()); assertTrue(solo.waitForCondition(() -> pauseOnHeadsetDisconnect != UserPreferences.isPauseOnHeadsetDisconnect(), Timeout.getLargeTimeout())); - solo.clickOnText(solo.getString(R.string.pref_pauseOnHeadsetDisconnect_title)); + onView(withText(R.string.pref_pauseOnHeadsetDisconnect_title)).perform(click()); assertTrue(solo.waitForCondition(() -> pauseOnHeadsetDisconnect == UserPreferences.isPauseOnHeadsetDisconnect(), Timeout.getLargeTimeout())); } @Test public void testHeadPhonesReconnect() { - solo.clickOnText(solo.getString(R.string.playback_pref)); + onView(withText(R.string.playback_pref)).perform(click()); if(UserPreferences.isPauseOnHeadsetDisconnect() == false) { - solo.clickOnText(solo.getString(R.string.pref_pauseOnHeadsetDisconnect_title)); + onView(withText(R.string.pref_pauseOnHeadsetDisconnect_title)).perform(click()); assertTrue(solo.waitForCondition(UserPreferences::isPauseOnHeadsetDisconnect, Timeout.getLargeTimeout())); } final boolean unpauseOnHeadsetReconnect = UserPreferences.isUnpauseOnHeadsetReconnect(); - solo.clickOnText(solo.getString(R.string.pref_unpauseOnHeadsetReconnect_title)); + onView(withText(R.string.pref_unpauseOnHeadsetReconnect_title)).perform(click()); assertTrue(solo.waitForCondition(() -> unpauseOnHeadsetReconnect != UserPreferences.isUnpauseOnHeadsetReconnect(), Timeout.getLargeTimeout())); - solo.clickOnText(solo.getString(R.string.pref_unpauseOnHeadsetReconnect_title)); + onView(withText(R.string.pref_unpauseOnHeadsetReconnect_title)).perform(click()); assertTrue(solo.waitForCondition(() -> unpauseOnHeadsetReconnect == UserPreferences.isUnpauseOnHeadsetReconnect(), Timeout.getLargeTimeout())); } @Test public void testBluetoothReconnect() { - solo.clickOnText(solo.getString(R.string.playback_pref)); + onView(withText(R.string.playback_pref)).perform(click()); if(UserPreferences.isPauseOnHeadsetDisconnect() == false) { - solo.clickOnText(solo.getString(R.string.pref_pauseOnHeadsetDisconnect_title)); + onView(withText(R.string.pref_pauseOnHeadsetDisconnect_title)).perform(click()); assertTrue(solo.waitForCondition(UserPreferences::isPauseOnHeadsetDisconnect, Timeout.getLargeTimeout())); } final boolean unpauseOnBluetoothReconnect = UserPreferences.isUnpauseOnBluetoothReconnect(); - solo.clickOnText(solo.getString(R.string.pref_unpauseOnBluetoothReconnect_title)); + onView(withText(R.string.pref_unpauseOnBluetoothReconnect_title)).perform(click()); assertTrue(solo.waitForCondition(() -> unpauseOnBluetoothReconnect != UserPreferences.isUnpauseOnBluetoothReconnect(), Timeout.getLargeTimeout())); - solo.clickOnText(solo.getString(R.string.pref_unpauseOnBluetoothReconnect_title)); + onView(withText(R.string.pref_unpauseOnBluetoothReconnect_title)).perform(click()); assertTrue(solo.waitForCondition(() -> unpauseOnBluetoothReconnect == UserPreferences.isUnpauseOnBluetoothReconnect(), Timeout.getLargeTimeout())); } @Test public void testContinuousPlayback() { - solo.clickOnText(solo.getString(R.string.playback_pref)); + onView(withText(R.string.playback_pref)).perform(click()); final boolean continuousPlayback = UserPreferences.isFollowQueue(); solo.scrollDown(); solo.scrollDown(); - solo.clickOnText(solo.getString(R.string.pref_followQueue_title)); + onView(withText(R.string.pref_followQueue_title)).perform(click()); assertTrue(solo.waitForCondition(() -> continuousPlayback != UserPreferences.isFollowQueue(), Timeout.getLargeTimeout())); - solo.clickOnText(solo.getString(R.string.pref_followQueue_title)); + onView(withText(R.string.pref_followQueue_title)).perform(click()); assertTrue(solo.waitForCondition(() -> continuousPlayback == UserPreferences.isFollowQueue(), Timeout.getLargeTimeout())); } @Test public void testAutoDelete() { - solo.clickOnText(solo.getString(R.string.storage_pref)); + onView(withText(R.string.storage_pref)).perform(click()); final boolean autoDelete = UserPreferences.isAutoDelete(); - solo.clickOnText(solo.getString(R.string.pref_auto_delete_title)); + onView(withText(R.string.pref_auto_delete_title)).perform(click()); assertTrue(solo.waitForCondition(() -> autoDelete != UserPreferences.isAutoDelete(), Timeout.getLargeTimeout())); - solo.clickOnText(solo.getString(R.string.pref_auto_delete_title)); + onView(withText(R.string.pref_auto_delete_title)).perform(click()); assertTrue(solo.waitForCondition(() -> autoDelete == UserPreferences.isAutoDelete(), Timeout.getLargeTimeout())); } @Test public void testPlaybackSpeeds() { - clickPreference(withText(R.string.playback_pref)); - clickPreference(withText(R.string.pref_playback_speed_title)); - assertTrue(solo.searchText(res.getStringArray(R.array.playback_speed_values)[0])); + clickPreference(R.string.playback_pref); + clickPreference(R.string.media_player); + onView(withText(R.string.media_player_exoplayer)).perform(click()); + clickPreference(R.string.pref_playback_speed_title); + solo.waitForDialogToOpen(); + onView(withText("0.50")).check(matches(isDisplayed())); onView(withText(R.string.cancel_label)).perform(click()); } @Test public void testPauseForInterruptions() { - solo.clickOnText(solo.getString(R.string.playback_pref)); + onView(withText(R.string.playback_pref)).perform(click()); final boolean pauseForFocusLoss = UserPreferences.shouldPauseForFocusLoss(); - solo.clickOnText(solo.getString(R.string.pref_pausePlaybackForFocusLoss_title)); + onView(withText(R.string.pref_pausePlaybackForFocusLoss_title)).perform(click()); assertTrue(solo.waitForCondition(() -> pauseForFocusLoss != UserPreferences.shouldPauseForFocusLoss(), Timeout.getLargeTimeout())); - solo.clickOnText(solo.getString(R.string.pref_pausePlaybackForFocusLoss_title)); + onView(withText(R.string.pref_pausePlaybackForFocusLoss_title)).perform(click()); assertTrue(solo.waitForCondition(() -> pauseForFocusLoss == UserPreferences.shouldPauseForFocusLoss(), Timeout.getLargeTimeout())); } @Test public void testDisableUpdateInterval() { - solo.clickOnText(solo.getString(R.string.network_pref)); - solo.clickOnText(solo.getString(R.string.pref_autoUpdateIntervallOrTime_sum)); - solo.waitForDialogToOpen(); - solo.clickOnText(solo.getString(R.string.pref_autoUpdateIntervallOrTime_Disable)); + onView(withText(R.string.network_pref)).perform(click()); + onView(withText(R.string.pref_autoUpdateIntervallOrTime_title)).perform(click()); + onView(withText(R.string.pref_autoUpdateIntervallOrTime_Disable)).perform(click()); assertTrue(solo.waitForCondition(() -> UserPreferences.getUpdateInterval() == 0, 1000)); } @Test public void testSetUpdateInterval() { - clickPreference(withText(R.string.network_pref)); - clickPreference(withText(R.string.pref_autoUpdateIntervallOrTime_title)); + clickPreference(R.string.network_pref); + clickPreference(R.string.pref_autoUpdateIntervallOrTime_title); onView(withText(R.string.pref_autoUpdateIntervallOrTime_Interval)).perform(click()); String search = "12 " + solo.getString(R.string.pref_update_interval_hours_plural); onView(withText(search)).perform(click()); @@ -247,41 +238,31 @@ public class PreferencesTest { } @Test - public void testMobileUpdates() { - clickPreference(withText(R.string.network_pref)); - final boolean mobileUpdates = UserPreferences.isAllowMobileUpdate(); - clickPreference(withText(R.string.pref_mobileUpdate_title)); - assertTrue(solo.waitForCondition(() -> mobileUpdates != UserPreferences.isAllowMobileUpdate(), Timeout.getLargeTimeout())); - clickPreference(withText(R.string.pref_mobileUpdate_title)); - assertTrue(solo.waitForCondition(() -> mobileUpdates == UserPreferences.isAllowMobileUpdate(), Timeout.getLargeTimeout())); - } - - @Test public void testSetSequentialDownload() { - clickPreference(withText(R.string.network_pref)); - clickPreference(withText(R.string.pref_parallel_downloads_title)); + clickPreference(R.string.network_pref); + clickPreference(R.string.pref_parallel_downloads_title); solo.waitForDialogToOpen(); solo.clearEditText(0); solo.enterText(0, "1"); - solo.clickOnText(solo.getString(android.R.string.ok)); + onView(withText(android.R.string.ok)).perform(click()); assertTrue(solo.waitForCondition(() -> UserPreferences.getParallelDownloads() == 1, Timeout.getLargeTimeout())); } @Test public void testSetParallelDownloads() { - clickPreference(withText(R.string.network_pref)); - clickPreference(withText(R.string.pref_parallel_downloads_title)); + clickPreference(R.string.network_pref); + clickPreference(R.string.pref_parallel_downloads_title); solo.waitForDialogToOpen(); solo.clearEditText(0); solo.enterText(0, "10"); - solo.clickOnText(solo.getString(android.R.string.ok)); + onView(withText(android.R.string.ok)).perform(click()); assertTrue(solo.waitForCondition(() -> UserPreferences.getParallelDownloads() == 10, Timeout.getLargeTimeout())); } @Test public void testSetParallelDownloadsInvalidInput() { - clickPreference(withText(R.string.network_pref)); - clickPreference(withText(R.string.pref_parallel_downloads_title)); + clickPreference(R.string.network_pref); + clickPreference(R.string.pref_parallel_downloads_title); solo.waitForDialogToOpen(); solo.clearEditText(0); solo.enterText(0, "0"); @@ -297,9 +278,9 @@ public class PreferencesTest { String[] values = res.getStringArray(R.array.episode_cache_size_values); String entry = entries[entries.length/2]; final int value = Integer.valueOf(values[values.length/2]); - clickPreference(withText(R.string.network_pref)); - clickPreference(withText(R.string.pref_automatic_download_title)); - clickPreference(withText(R.string.pref_episode_cache_title)); + clickPreference(R.string.network_pref); + clickPreference(R.string.pref_automatic_download_title); + clickPreference(R.string.pref_episode_cache_title); solo.waitForDialogToOpen(); solo.clickOnText(entry); assertTrue(solo.waitForCondition(() -> UserPreferences.getEpisodeCacheSize() == value, Timeout.getLargeTimeout())); @@ -312,12 +293,11 @@ public class PreferencesTest { String minEntry = entries[0]; final int minValue = Integer.valueOf(values[0]); - clickPreference(withText(R.string.network_pref)); - clickPreference(withText(R.string.pref_automatic_download_title)); - clickPreference(withText(R.string.pref_episode_cache_title)); - solo.waitForDialogToOpen(1000); + clickPreference(R.string.network_pref); + clickPreference(R.string.pref_automatic_download_title); + clickPreference(R.string.pref_episode_cache_title); solo.scrollUp(); - solo.clickOnText(minEntry); + onView(withText(minEntry)).perform(click()); assertTrue(solo.waitForCondition(() -> UserPreferences.getEpisodeCacheSize() == minValue, Timeout.getLargeTimeout())); } @@ -327,46 +307,44 @@ public class PreferencesTest { String[] values = res.getStringArray(R.array.episode_cache_size_values); String maxEntry = entries[entries.length-1]; final int maxValue = Integer.valueOf(values[values.length-1]); - solo.clickOnText(solo.getString(R.string.network_pref)); - solo.clickOnText(solo.getString(R.string.pref_automatic_download_title)); - solo.waitForText(solo.getString(R.string.pref_automatic_download_title)); - solo.clickOnText(solo.getString(R.string.pref_episode_cache_title)); - solo.waitForDialogToOpen(); - solo.clickOnText(maxEntry); + onView(withText(R.string.network_pref)).perform(click()); + onView(withText(R.string.pref_automatic_download_title)).perform(click()); + onView(withText(R.string.pref_episode_cache_title)).perform(click()); + onView(withText(maxEntry)).perform(click()); assertTrue(solo.waitForCondition(() -> UserPreferences.getEpisodeCacheSize() == maxValue, Timeout.getLargeTimeout())); } @Test public void testAutomaticDownload() { final boolean automaticDownload = UserPreferences.isEnableAutodownload(); - clickPreference(withText(R.string.network_pref)); - clickPreference(withText(R.string.pref_automatic_download_title)); - clickPreference(withText(R.string.pref_automatic_download_title)); + clickPreference(R.string.network_pref); + clickPreference(R.string.pref_automatic_download_title); + clickPreference(R.string.pref_automatic_download_title); assertTrue(solo.waitForCondition(() -> automaticDownload != UserPreferences.isEnableAutodownload(), Timeout.getLargeTimeout())); if(UserPreferences.isEnableAutodownload() == false) { - clickPreference(withText(R.string.pref_automatic_download_title)); + clickPreference(R.string.pref_automatic_download_title); } assertTrue(solo.waitForCondition(() -> UserPreferences.isEnableAutodownload() == true, Timeout.getLargeTimeout())); final boolean enableAutodownloadOnBattery = UserPreferences.isEnableAutodownloadOnBattery(); - solo.clickOnText(solo.getString(R.string.pref_automatic_download_on_battery_title)); + onView(withText(R.string.pref_automatic_download_on_battery_title)).perform(click()); assertTrue(solo.waitForCondition(() -> enableAutodownloadOnBattery != UserPreferences.isEnableAutodownloadOnBattery(), Timeout.getLargeTimeout())); - solo.clickOnText(solo.getString(R.string.pref_automatic_download_on_battery_title)); + onView(withText(R.string.pref_automatic_download_on_battery_title)).perform(click()); assertTrue(solo.waitForCondition(() -> enableAutodownloadOnBattery == UserPreferences.isEnableAutodownloadOnBattery(), Timeout.getLargeTimeout())); final boolean enableWifiFilter = UserPreferences.isEnableAutodownloadWifiFilter(); - solo.clickOnText(solo.getString(R.string.pref_autodl_wifi_filter_title)); + onView(withText(R.string.pref_autodl_wifi_filter_title)).perform(click()); assertTrue(solo.waitForCondition(() -> enableWifiFilter != UserPreferences.isEnableAutodownloadWifiFilter(), Timeout.getLargeTimeout())); - solo.clickOnText(solo.getString(R.string.pref_autodl_wifi_filter_title)); + onView(withText(R.string.pref_autodl_wifi_filter_title)).perform(click()); assertTrue(solo.waitForCondition(() -> enableWifiFilter == UserPreferences.isEnableAutodownloadWifiFilter(), Timeout.getLargeTimeout())); } @Test public void testEpisodeCleanupQueueOnly() { - solo.clickOnText(solo.getString(R.string.network_pref)); - solo.clickOnText(solo.getString(R.string.pref_automatic_download_title)); - solo.clickOnText(solo.getString(R.string.pref_episode_cleanup_title)); + onView(withText(R.string.network_pref)).perform(click()); + onView(withText(R.string.pref_automatic_download_title)).perform(click()); + onView(withText(R.string.pref_episode_cleanup_title)).perform(click()); solo.waitForText(solo.getString(R.string.episode_cleanup_queue_removal)); - solo.clickOnText(solo.getString(R.string.episode_cleanup_queue_removal)); + onView(withText(R.string.episode_cleanup_queue_removal)).perform(click()); assertTrue(solo.waitForCondition(() -> { EpisodeCleanupAlgorithm alg = UserPreferences.getEpisodeCleanupAlgorithm(); return alg instanceof APQueueCleanupAlgorithm; @@ -376,11 +354,11 @@ public class PreferencesTest { @Test public void testEpisodeCleanupNeverAlg() { - solo.clickOnText(solo.getString(R.string.network_pref)); - solo.clickOnText(solo.getString(R.string.pref_automatic_download_title)); - solo.clickOnText(solo.getString(R.string.pref_episode_cleanup_title)); + onView(withText(R.string.network_pref)).perform(click()); + onView(withText(R.string.pref_automatic_download_title)).perform(click()); + onView(withText(R.string.pref_episode_cleanup_title)).perform(click()); solo.waitForText(solo.getString(R.string.episode_cleanup_never)); - solo.clickOnText(solo.getString(R.string.episode_cleanup_never)); + onView(withText(R.string.episode_cleanup_never)).perform(click()); assertTrue(solo.waitForCondition(() -> { EpisodeCleanupAlgorithm alg = UserPreferences.getEpisodeCleanupAlgorithm(); return alg instanceof APNullCleanupAlgorithm; @@ -390,11 +368,11 @@ public class PreferencesTest { @Test public void testEpisodeCleanupClassic() { - solo.clickOnText(solo.getString(R.string.network_pref)); - solo.clickOnText(solo.getString(R.string.pref_automatic_download_title)); - solo.clickOnText(solo.getString(R.string.pref_episode_cleanup_title)); + onView(withText(R.string.network_pref)).perform(click()); + onView(withText(R.string.pref_automatic_download_title)).perform(click()); + onView(withText(R.string.pref_episode_cleanup_title)).perform(click()); solo.waitForText(solo.getString(R.string.episode_cleanup_after_listening)); - solo.clickOnText(solo.getString(R.string.episode_cleanup_after_listening)); + onView(withText(R.string.episode_cleanup_after_listening)).perform(click()); assertTrue(solo.waitForCondition(() -> { EpisodeCleanupAlgorithm alg = UserPreferences.getEpisodeCleanupAlgorithm(); if (alg instanceof APCleanupAlgorithm) { @@ -408,9 +386,9 @@ public class PreferencesTest { @Test public void testEpisodeCleanupNumDays() { - clickPreference(withText(R.string.network_pref)); - clickPreference(withText(R.string.pref_automatic_download_title)); - clickPreference(withText(R.string.pref_episode_cleanup_title)); + clickPreference(R.string.network_pref); + clickPreference(R.string.pref_automatic_download_title); + clickPreference(R.string.pref_episode_cleanup_title); solo.waitForDialogToOpen(); String search = res.getQuantityString(R.plurals.episode_cleanup_days_after_listening, 5, 5); onView(withText(search)).perform(click()); @@ -430,9 +408,8 @@ public class PreferencesTest { int seconds = UserPreferences.getRewindSecs(); int deltas[] = res.getIntArray(R.array.seek_delta_values); - clickPreference(withText(R.string.playback_pref)); - clickPreference(withText(R.string.pref_rewind)); - solo.waitForDialogToOpen(); + clickPreference(R.string.playback_pref); + clickPreference(R.string.pref_rewind); int currentIndex = Arrays.binarySearch(deltas, seconds); assertTrue(currentIndex >= 0 && currentIndex < deltas.length); // found? @@ -442,20 +419,18 @@ public class PreferencesTest { onView(withText(String.valueOf(deltas[newIndex]) + " seconds")).perform(click()); onView(withText("Confirm")).perform(click()); - solo.waitForDialogToClose(); assertTrue(solo.waitForCondition(() -> UserPreferences.getRewindSecs() == deltas[newIndex], Timeout.getLargeTimeout())); } @Test public void testFastForwardChange() { - clickPreference(withText(R.string.playback_pref)); + clickPreference(R.string.playback_pref); for (int i = 2; i > 0; i--) { // repeat twice to catch any error where fastforward is tracking rewind int seconds = UserPreferences.getFastForwardSecs(); int deltas[] = res.getIntArray(R.array.seek_delta_values); - clickPreference(withText(R.string.pref_fast_forward)); - solo.waitForDialogToOpen(); + clickPreference(R.string.pref_fast_forward); int currentIndex = Arrays.binarySearch(deltas, seconds); assertTrue(currentIndex >= 0 && currentIndex < deltas.length); // found? @@ -463,7 +438,7 @@ public class PreferencesTest { // Find next value (wrapping around to next) int newIndex = (currentIndex + 1) % deltas.length; - onView(withText(String.valueOf(deltas[newIndex]) + " seconds")).perform(click()); + onView(withText(deltas[newIndex] + " seconds")).perform(click()); onView(withText("Confirm")).perform(click()); solo.waitForDialogToClose(); @@ -474,33 +449,27 @@ public class PreferencesTest { @Test public void testBackButtonBehaviorGoToPageSelector() { - clickPreference(withText(R.string.user_interface_label)); - clickPreference(withText(R.string.pref_back_button_behavior_title)); - solo.waitForDialogToOpen(); - solo.clickOnText(solo.getString(R.string.back_button_go_to_page)); - solo.waitForDialogToOpen(); - solo.clickOnText(solo.getString(R.string.queue_label)); - solo.clickOnText(solo.getString(R.string.confirm_label)); + clickPreference(R.string.user_interface_label); + clickPreference(R.string.pref_back_button_behavior_title); + onView(withText(R.string.back_button_go_to_page)).perform(click()); + onView(withText(R.string.queue_label)).perform(click()); + onView(withText(R.string.confirm_label)).perform(click()); assertTrue(solo.waitForCondition(() -> UserPreferences.getBackButtonBehavior() == UserPreferences.BackButtonBehavior.GO_TO_PAGE, Timeout.getLargeTimeout())); assertTrue(solo.waitForCondition(() -> UserPreferences.getBackButtonGoToPage().equals(QueueFragment.TAG), Timeout.getLargeTimeout())); - clickPreference(withText(R.string.pref_back_button_behavior_title)); - solo.waitForDialogToOpen(); - solo.clickOnText(solo.getString(R.string.back_button_go_to_page)); - solo.waitForDialogToOpen(); - solo.clickOnText(solo.getString(R.string.episodes_label)); - solo.clickOnText(solo.getString(R.string.confirm_label)); + clickPreference(R.string.pref_back_button_behavior_title); + onView(withText(R.string.back_button_go_to_page)).perform(click()); + onView(withText(R.string.episodes_label)).perform(click()); + onView(withText(R.string.confirm_label)).perform(click()); assertTrue(solo.waitForCondition(() -> UserPreferences.getBackButtonBehavior() == UserPreferences.BackButtonBehavior.GO_TO_PAGE, Timeout.getLargeTimeout())); assertTrue(solo.waitForCondition(() -> UserPreferences.getBackButtonGoToPage().equals(EpisodesFragment.TAG), Timeout.getLargeTimeout())); - clickPreference(withText(R.string.pref_back_button_behavior_title)); - solo.waitForDialogToOpen(); - solo.clickOnText(solo.getString(R.string.back_button_go_to_page)); - solo.waitForDialogToOpen(); - solo.clickOnText(solo.getString(R.string.subscriptions_label)); - solo.clickOnText(solo.getString(R.string.confirm_label)); + clickPreference(R.string.pref_back_button_behavior_title); + onView(withText(R.string.back_button_go_to_page)).perform(click()); + onView(withText(R.string.subscriptions_label)).perform(click()); + onView(withText(R.string.confirm_label)).perform(click()); assertTrue(solo.waitForCondition(() -> UserPreferences.getBackButtonBehavior() == UserPreferences.BackButtonBehavior.GO_TO_PAGE, Timeout.getLargeTimeout())); assertTrue(solo.waitForCondition(() -> UserPreferences.getBackButtonGoToPage().equals(SubscriptionFragment.TAG), @@ -509,20 +478,15 @@ public class PreferencesTest { @Test public void testDeleteRemovesFromQueue() { - clickPreference(withText(R.string.storage_pref)); + clickPreference(R.string.storage_pref); if (!UserPreferences.shouldDeleteRemoveFromQueue()) { - clickPreference(withText(R.string.pref_delete_removes_from_queue_title)); + clickPreference(R.string.pref_delete_removes_from_queue_title); assertTrue(solo.waitForCondition(UserPreferences::shouldDeleteRemoveFromQueue, Timeout.getLargeTimeout())); } final boolean deleteRemovesFromQueue = UserPreferences.shouldDeleteRemoveFromQueue(); - solo.clickOnText(solo.getString(R.string.pref_delete_removes_from_queue_title)); + onView(withText(R.string.pref_delete_removes_from_queue_title)).perform(click()); assertTrue(solo.waitForCondition(() -> deleteRemovesFromQueue != UserPreferences.shouldDeleteRemoveFromQueue(), Timeout.getLargeTimeout())); - solo.clickOnText(solo.getString(R.string.pref_delete_removes_from_queue_title)); + onView(withText(R.string.pref_delete_removes_from_queue_title)).perform(click()); assertTrue(solo.waitForCondition(() -> deleteRemovesFromQueue == UserPreferences.shouldDeleteRemoveFromQueue(), Timeout.getLargeTimeout())); } - - private void clickPreference(Matcher<View> matcher) { - onView(withId(R.id.list)) - .perform(RecyclerViewActions.actionOnItem(hasDescendant(matcher), click())); - } } diff --git a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java index 263790c2f..20c54cb15 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java @@ -4,8 +4,6 @@ import android.content.Context; import android.graphics.Bitmap; import android.util.Log; -import junit.framework.Assert; - import org.apache.commons.io.FileUtils; import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.StringUtils; @@ -30,6 +28,7 @@ import de.danoeh.antennapod.fragment.ExternalPlayerFragment; import de.test.antennapod.util.service.download.HTTPBin; import de.test.antennapod.util.syndication.feedgenerator.RSS2Generator; import org.greenrobot.eventbus.EventBus; +import org.junit.Assert; /** * Utility methods for UI tests. @@ -39,8 +38,6 @@ class UITestUtils { private static final String TAG = UITestUtils.class.getSimpleName(); - private static final String DATA_FOLDER = "test/UITestUtils"; - private static final int NUM_FEEDS = 5; private static final int NUM_ITEMS_PER_FEED = 10; @@ -61,7 +58,7 @@ class UITestUtils { public void setup() throws IOException { - destDir = context.getExternalFilesDir(DATA_FOLDER); + destDir = new File(context.getFilesDir(), "test/UITestUtils"); destDir.mkdir(); hostedFeedDir = new File(destDir, "hostedFeeds"); hostedFeedDir.mkdir(); diff --git a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtilsTest.java b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtilsTest.java index 45ba472ff..7555bb69a 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtilsTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtilsTest.java @@ -1,35 +1,44 @@ package de.test.antennapod.ui; -import android.test.InstrumentationTestCase; - import java.io.File; import java.net.HttpURLConnection; import java.net.URL; import java.util.List; +import android.support.test.InstrumentationRegistry; +import android.support.test.filters.LargeTest; +import android.support.test.filters.MediumTest; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedItem; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; /** * Test for the UITestUtils. Makes sure that all URLs are reachable and that the class does not cause any crashes. */ -public class UITestUtilsTest extends InstrumentationTestCase { +@MediumTest +public class UITestUtilsTest { private UITestUtils uiTestUtils; - @Override - protected void setUp() throws Exception { - super.setUp(); - uiTestUtils = new UITestUtils(getInstrumentation().getTargetContext()); + @Before + public void setUp() throws Exception { + uiTestUtils = new UITestUtils(InstrumentationRegistry.getTargetContext()); uiTestUtils.setup(); } - @Override + @After public void tearDown() throws Exception { - super.tearDown(); uiTestUtils.tearDown(); } + @Test public void testAddHostedFeeds() throws Exception { uiTestUtils.addHostedFeedData(); final List<Feed> feeds = uiTestUtils.hostedFeeds; @@ -46,7 +55,7 @@ public class UITestUtilsTest extends InstrumentationTestCase { } } - private void testUrlReachable(String strUtl) throws Exception { + public void testUrlReachable(String strUtl) throws Exception { URL url = new URL(strUtl); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); @@ -78,10 +87,12 @@ public class UITestUtilsTest extends InstrumentationTestCase { } } + @Test public void testAddLocalFeedDataNoDownload() throws Exception { addLocalFeedDataCheck(false); } + @Test public void testAddLocalFeedDataDownload() throws Exception { addLocalFeedDataCheck(true); } diff --git a/app/src/androidTest/java/de/test/antennapod/ui/VideoplayerActivityTest.java b/app/src/androidTest/java/de/test/antennapod/ui/VideoplayerActivityTest.java index da6f07cab..c4dd032d7 100644 --- a/app/src/androidTest/java/de/test/antennapod/ui/VideoplayerActivityTest.java +++ b/app/src/androidTest/java/de/test/antennapod/ui/VideoplayerActivityTest.java @@ -1,38 +1,36 @@ package de.test.antennapod.ui; -import android.test.ActivityInstrumentationTestCase2; - -import com.robotium.solo.Solo; +import android.content.Intent; +import android.support.test.filters.MediumTest; +import android.support.test.rule.ActivityTestRule; +import de.danoeh.antennapod.R; import de.danoeh.antennapod.activity.VideoplayerActivity; +import org.junit.Ignore; +import org.junit.Rule; +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; /** * Test class for VideoplayerActivity */ -public class VideoplayerActivityTest extends ActivityInstrumentationTestCase2<VideoplayerActivity> { - - private Solo solo; - - public VideoplayerActivityTest() { - super(VideoplayerActivity.class); - } - - @Override - public void setUp() throws Exception { - super.setUp(); - solo = new Solo(getInstrumentation(), getActivity()); - } +@MediumTest +@Ignore +public class VideoplayerActivityTest { - @Override - public void tearDown() throws Exception { - solo.finishOpenedActivities(); - super.tearDown(); - } + @Rule + public ActivityTestRule<VideoplayerActivity> activityTestRule = new ActivityTestRule<>(VideoplayerActivity.class, false, false); /** * Test if activity can be started. */ + @Test public void testStartActivity() throws Exception { - solo.waitForActivity(VideoplayerActivity.class); + activityTestRule.launchActivity(new Intent()); + onView(withId(R.id.videoframe)).check(matches(isDisplayed())); } } |