diff options
Diffstat (limited to 'app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java')
-rw-r--r-- | app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java | 453 |
1 files changed, 453 insertions, 0 deletions
diff --git a/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java b/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java new file mode 100644 index 000000000..eb1cb9c71 --- /dev/null +++ b/app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java @@ -0,0 +1,453 @@ +package de.test.antennapod.ui; + +import android.content.Context; +import android.content.res.Resources; +import android.test.ActivityInstrumentationTestCase2; +import android.test.FlakyTest; + +import com.robotium.solo.Condition; +import com.robotium.solo.Solo; +import com.robotium.solo.Timeout; + +import org.apache.commons.io.IOUtils; + +import java.io.IOException; +import java.io.InputStream; +import java.util.List; + +import de.danoeh.antennapod.R; +import de.danoeh.antennapod.activity.PreferenceActivity; +import de.danoeh.antennapod.core.preferences.UserPreferences; + +public class PreferencesTest extends ActivityInstrumentationTestCase2<PreferenceActivity> { + + private static final String TAG = "PreferencesTest"; + + private Solo solo; + private Context context; + private Resources res; + + public PreferencesTest() { + super(PreferenceActivity.class); + } + + @Override + public void setUp() throws Exception { + super.setUp(); + solo = new Solo(getInstrumentation(), getActivity()); + Timeout.setSmallTimeout(500); + Timeout.setLargeTimeout(1000); + context = getInstrumentation().getTargetContext(); + res = getActivity().getResources(); + UserPreferences.createInstance(context); + } + + @Override + public void tearDown() throws Exception { + solo.finishOpenedActivities(); + super.tearDown(); + } + + public void testSwitchTheme() { + final int theme = UserPreferences.getTheme(); + int otherTheme; + if(theme == de.danoeh.antennapod.core.R.style.Theme_AntennaPod_Light) { + otherTheme = R.string.pref_theme_title_dark; + } else { + otherTheme = R.string.pref_theme_title_light; + } + solo.clickOnText(solo.getString(R.string.pref_set_theme_title)); + solo.waitForDialogToOpen(); + solo.clickOnText(solo.getString(otherTheme)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return UserPreferences.getTheme() != theme; + } + }, Timeout.getLargeTimeout()); + } + + public void testSwitchThemeBack() { + final int theme = UserPreferences.getTheme(); + int otherTheme; + if(theme == de.danoeh.antennapod.core.R.style.Theme_AntennaPod_Light) { + otherTheme = R.string.pref_theme_title_dark; + } else { + otherTheme = R.string.pref_theme_title_light; + } + solo.clickOnText(solo.getString(R.string.pref_set_theme_title)); + solo.waitForDialogToOpen(1000); + solo.clickOnText(solo.getString(otherTheme)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return UserPreferences.getTheme() != theme; + } + }, Timeout.getLargeTimeout()); + } + + public void testExpandNotification() { + final int priority = UserPreferences.getNotifyPriority(); + solo.clickOnText(solo.getString(R.string.pref_expandNotify_title)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return priority != UserPreferences.getNotifyPriority(); + } + }, Timeout.getLargeTimeout()); + solo.clickOnText(solo.getString(R.string.pref_expandNotify_title)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return priority == UserPreferences.getNotifyPriority(); + } + }, Timeout.getLargeTimeout()); + } + + public void testEnablePersistentPlaybackControls() { + final boolean persistNotify = UserPreferences.isPersistNotify(); + solo.clickOnText(solo.getString(R.string.pref_persistNotify_title)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return persistNotify != UserPreferences.isPersistNotify(); + } + }, Timeout.getLargeTimeout()); + solo.clickOnText(solo.getString(R.string.pref_persistNotify_title)); + solo.waitForCondition(new Condition() { + @Override public boolean isSatisfied() { + return persistNotify == UserPreferences.isPersistNotify(); + } + }, Timeout.getLargeTimeout()); + } + + public void testEnqueueAtFront() { + final boolean enqueueAtFront = UserPreferences.enqueueAtFront(); + solo.clickOnText(solo.getString(R.string.pref_queueAddToFront_title)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return enqueueAtFront != UserPreferences.enqueueAtFront(); + } + }, Timeout.getLargeTimeout()); + solo.clickOnText(solo.getString(R.string.pref_queueAddToFront_title)); + solo.waitForCondition(new Condition() { + @Override public boolean isSatisfied() { + return enqueueAtFront == UserPreferences.enqueueAtFront(); + } + }, Timeout.getLargeTimeout()); + } + + public void testHeadPhonesDisconnect() { + final boolean pauseOnHeadsetDisconnect = UserPreferences.isPauseOnHeadsetDisconnect(); + solo.clickOnText(solo.getString(R.string.pref_pauseOnHeadsetDisconnect_title)); + solo.waitForCondition(new Condition() { + @Override public boolean isSatisfied() { + return pauseOnHeadsetDisconnect != UserPreferences.isPauseOnHeadsetDisconnect(); + } + }, Timeout.getLargeTimeout()); + solo.clickOnText(solo.getString(R.string.pref_pauseOnHeadsetDisconnect_title)); + solo.waitForCondition(new Condition() { + @Override public boolean isSatisfied() { + return pauseOnHeadsetDisconnect == UserPreferences.isPauseOnHeadsetDisconnect(); + } + }, Timeout.getLargeTimeout()); + } + + public void testHeadPhonesReconnect() { + if(UserPreferences.isPauseOnHeadsetDisconnect() == false) { + solo.clickOnText(solo.getString(R.string.pref_pauseOnHeadsetDisconnect_title)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return UserPreferences.isPauseOnHeadsetDisconnect(); + } + }, Timeout.getLargeTimeout()); + } + final boolean unpauseOnHeadsetReconnect = UserPreferences.isUnpauseOnHeadsetReconnect(); + solo.clickOnText(solo.getString(R.string.pref_unpauseOnHeadsetReconnect_title)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return unpauseOnHeadsetReconnect != UserPreferences.isUnpauseOnHeadsetReconnect(); + } + }, Timeout.getLargeTimeout()); + solo.clickOnText(solo.getString(R.string.pref_unpauseOnHeadsetReconnect_title)); + solo.waitForCondition(new Condition() { + @Override public boolean isSatisfied() { + return unpauseOnHeadsetReconnect == UserPreferences.isUnpauseOnHeadsetReconnect(); + } + }, Timeout.getLargeTimeout()); + } + + public void testContinuousPlayback() { + final boolean continuousPlayback = UserPreferences.isFollowQueue(); + solo.clickOnText(solo.getString(R.string.pref_followQueue_title)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return continuousPlayback != UserPreferences.isFollowQueue(); + } + }, Timeout.getLargeTimeout()); + solo.clickOnText(solo.getString(R.string.pref_followQueue_title)); + solo.waitForCondition(new Condition() { + @Override public boolean isSatisfied() { + return continuousPlayback == UserPreferences.isFollowQueue(); + } + }, Timeout.getLargeTimeout()); + } + + public void testAutoDelete() { + final boolean autoDelete = UserPreferences.isAutoDelete(); + solo.clickOnText(solo.getString(R.string.pref_auto_delete_title)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return autoDelete != UserPreferences.isAutoDelete(); + } + }, Timeout.getLargeTimeout()); + solo.clickOnText(solo.getString(R.string.pref_auto_delete_title)); + solo.waitForCondition(new Condition() { + @Override public boolean isSatisfied() { + return autoDelete == UserPreferences.isAutoDelete(); + } + }, Timeout.getLargeTimeout()); + } + + public void testPlaybackSpeeds() { + solo.clickOnText(solo.getString(R.string.pref_playback_speed_title)); + solo.waitForDialogToOpen(1000); + assertTrue(solo.searchText(solo.getString(R.string.no_playback_plugin_title))); + solo.clickOnText(solo.getString(R.string.close_label)); + solo.waitForDialogToClose(1000); + } + + public void testPauseForInterruptions() { + final boolean pauseForFocusLoss = UserPreferences.shouldPauseForFocusLoss(); + solo.clickOnText(solo.getString(R.string.pref_pausePlaybackForFocusLoss_title)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return pauseForFocusLoss != UserPreferences.shouldPauseForFocusLoss(); + } + }, Timeout.getLargeTimeout()); + solo.clickOnText(solo.getString(R.string.pref_auto_delete_title)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return pauseForFocusLoss == UserPreferences.shouldPauseForFocusLoss(); + } + }, Timeout.getLargeTimeout()); + } + + public void testDisableUpdateInterval() { + solo.clickOnText(solo.getString(R.string.pref_autoUpdateIntervall_title)); + solo.waitForDialogToOpen(); + solo.clickOnText(solo.getString(R.string.pref_update_interval_hours_manual)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return UserPreferences.getUpdateInterval() == 0; + } + }, 1000); + } + + public void testSetUpdateInterval() { + solo.clickOnText(solo.getString(R.string.pref_autoUpdateIntervall_title)); + solo.waitForDialogToOpen(); + String search = "12 " + solo.getString(R.string.pref_update_interval_hours_plural); + solo.clickOnText(search); + solo.waitForDialogToClose(); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return UserPreferences.getUpdateInterval() == 12; + } + }, Timeout.getLargeTimeout()); + } + + public void testMobileUpdates() { + final boolean mobileUpdates = UserPreferences.isAllowMobileUpdate(); + solo.clickOnText(solo.getString(R.string.pref_mobileUpdate_title)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return mobileUpdates != UserPreferences.isAllowMobileUpdate(); + } + }, Timeout.getLargeTimeout()); + solo.clickOnText(solo.getString(R.string.pref_mobileUpdate_title)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return mobileUpdates == UserPreferences.isAllowMobileUpdate(); + } + }, Timeout.getLargeTimeout()); + } + + public void testSetSequentialDownload() { + solo.clickOnText(solo.getString(R.string.pref_parallel_downloads_title)); + solo.waitForDialogToOpen(); + solo.clearEditText(0); + solo.enterText(0, "1"); + solo.clickOnText(solo.getString(android.R.string.ok)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return UserPreferences.getParallelDownloads() == 1; + } + }, Timeout.getLargeTimeout()); + } + + public void testSetParallelDownloads() { + solo.clickOnText(solo.getString(R.string.pref_parallel_downloads_title)); + solo.waitForDialogToOpen(); + solo.clearEditText(0); + solo.enterText(0, "10"); + solo.clickOnText(solo.getString(android.R.string.ok)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return UserPreferences.getParallelDownloads() == 10; + } + }, Timeout.getLargeTimeout()); + } + + public void testSetParallelDownloadsInvalidInput() { + solo.clickOnText(solo.getString(R.string.pref_parallel_downloads_title)); + solo.waitForDialogToOpen(); + solo.clearEditText(0); + solo.enterText(0, "0"); + assertEquals("1", solo.getEditText(0).getText().toString()); + solo.clearEditText(0); + solo.enterText(0, "100"); + assertEquals("50", solo.getEditText(0).getText().toString()); + } + + public void testSetEpisodeCache() { + String[] entries = res.getStringArray(R.array.episode_cache_size_entries); + 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]); + solo.clickOnText(solo.getString(R.string.pref_episode_cache_title)); + solo.waitForDialogToOpen(); + solo.clickOnText(entry); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return UserPreferences.getEpisodeCacheSize() == value; + } + }, Timeout.getLargeTimeout()); + } + + public void testSetEpisodeCacheMin() { + String[] entries = res.getStringArray(R.array.episode_cache_size_entries); + String[] values = res.getStringArray(R.array.episode_cache_size_values); + String minEntry = entries[0]; + final int minValue = Integer.valueOf(values[0]); + solo.clickOnText(solo.getString(R.string.pref_episode_cache_title)); + solo.waitForDialogToOpen(1000); + solo.scrollUp(); + solo.clickOnText(minEntry); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return UserPreferences.getEpisodeCacheSize() == minValue; + } + }, Timeout.getLargeTimeout()); + } + + + public void testSetEpisodeCacheMax() { + String[] entries = res.getStringArray(R.array.episode_cache_size_entries); + 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.pref_episode_cache_title)); + solo.waitForDialogToOpen(); + solo.clickOnText(maxEntry); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return UserPreferences.getEpisodeCacheSize() == maxValue; + } + }, Timeout.getLargeTimeout()); + } + + public void testAutomaticDownload() { + final boolean automaticDownload = UserPreferences.isEnableAutodownload(); + 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_automatic_download_title)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return automaticDownload != UserPreferences.isEnableAutodownload(); + } + }, Timeout.getLargeTimeout()); + if(UserPreferences.isEnableAutodownload() == false) { + solo.clickOnText(solo.getString(R.string.pref_automatic_download_title)); + } + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return UserPreferences.isEnableAutodownload() == true; + } + }, Timeout.getLargeTimeout()); + final boolean enableAutodownloadOnBattery = UserPreferences.isEnableAutodownloadOnBattery(); + solo.clickOnText(solo.getString(R.string.pref_automatic_download_on_battery_title)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return enableAutodownloadOnBattery != UserPreferences.isEnableAutodownloadOnBattery(); + } + }, Timeout.getLargeTimeout()); + solo.clickOnText(solo.getString(R.string.pref_automatic_download_on_battery_title)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return enableAutodownloadOnBattery == UserPreferences.isEnableAutodownloadOnBattery(); + } + }, Timeout.getLargeTimeout()); + final boolean enableWifiFilter = UserPreferences.isEnableAutodownloadWifiFilter(); + solo.clickOnText(solo.getString(R.string.pref_autodl_wifi_filter_title)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return enableWifiFilter != UserPreferences.isEnableAutodownloadWifiFilter(); + } + }, Timeout.getLargeTimeout()); + solo.clickOnText(solo.getString(R.string.pref_automatic_download_on_battery_title)); + solo.waitForCondition(new Condition() { + @Override + public boolean isSatisfied() { + return enableWifiFilter == UserPreferences.isEnableAutodownloadWifiFilter(); + } + }, Timeout.getLargeTimeout()); + } + + @FlakyTest(tolerance = 3) + public void testAbout() throws IOException { + int numViews = 0, numLinks = 0; + InputStream input = getActivity().getResources().getAssets().open("about.html"); + List<String> lines = IOUtils.readLines(input); + input.close(); + for(String line : lines) { + if(line.contains("(View)")) { + numViews++; + } else if(line.contains("(Link)")) { + numLinks++; + } + } + for(int i=0; i < numViews; i++) { + solo.clickOnText(solo.getString(R.string.about_pref)); + solo.clickOnText("(View)", i); + solo.goBack(); + } + for(int i=0; i < numLinks; i++) { + solo.clickOnText(solo.getString(R.string.about_pref)); + solo.clickOnText("(Link)", i); + solo.goBack(); + } + } + +} |