summaryrefslogtreecommitdiff
path: root/app/src/androidTest/java/de
diff options
context:
space:
mode:
authorTom Hennen <TomHennen@users.noreply.github.com>2015-06-16 20:17:04 -0400
committerTom Hennen <TomHennen@users.noreply.github.com>2015-06-16 20:17:04 -0400
commitec4ed747b6de9ab98d3ad31a0256a77b8e8cc25c (patch)
tree7dfa03fff2e7a7a9fc0d32b74e313668e9b6bcb2 /app/src/androidTest/java/de
parentf88c80cced6c3b529a6ef1addafaa930fb41d58f (diff)
parent3d102449bc2bf78b6c5645ee738e6658c9cb155f (diff)
downloadAntennaPod-ec4ed747b6de9ab98d3ad31a0256a77b8e8cc25c.zip
Merge pull request #881 from AntennaPod/develop1.2
Release of 1.2
Diffstat (limited to 'app/src/androidTest/java/de')
-rw-r--r--app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java17
-rw-r--r--app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java18
-rw-r--r--app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java60
-rw-r--r--app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java2
-rw-r--r--app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java30
-rw-r--r--app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java106
-rw-r--r--app/src/androidTest/java/de/test/antennapod/ui/PlaybackTest.java117
-rw-r--r--app/src/androidTest/java/de/test/antennapod/ui/PreferencesTest.java453
-rw-r--r--app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java13
-rw-r--r--app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java14
-rw-r--r--app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/RSS2Generator.java4
11 files changed, 721 insertions, 113 deletions
diff --git a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java
index 81d684595..d74128c2f 100644
--- a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java
@@ -2,12 +2,6 @@ package de.test.antennapod.service.playback;
import android.content.Context;
import android.test.InstrumentationTestCase;
-import de.danoeh.antennapod.core.feed.EventDistributor;
-import de.danoeh.antennapod.core.feed.Feed;
-import de.danoeh.antennapod.core.feed.FeedItem;
-import de.danoeh.antennapod.core.service.playback.PlaybackServiceTaskManager;
-import de.danoeh.antennapod.core.storage.PodDBAdapter;
-import de.danoeh.antennapod.core.util.playback.Playable;
import java.util.ArrayList;
import java.util.Date;
@@ -15,6 +9,15 @@ import java.util.List;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
+import de.danoeh.antennapod.core.feed.EventDistributor;
+import de.danoeh.antennapod.core.feed.Feed;
+import de.danoeh.antennapod.core.feed.FeedItem;
+import de.danoeh.antennapod.core.feed.QueueEvent;
+import de.danoeh.antennapod.core.service.playback.PlaybackServiceTaskManager;
+import de.danoeh.antennapod.core.storage.PodDBAdapter;
+import de.danoeh.antennapod.core.util.playback.Playable;
+import de.greenrobot.event.EventBus;
+
/**
* Test class for PlaybackServiceTaskManager
*/
@@ -94,7 +97,7 @@ public class PlaybackServiceTaskManagerTest extends InstrumentationTestCase {
};
EventDistributor.getInstance().register(queueListener);
List<FeedItem> queue = writeTestQueue("a");
- EventDistributor.getInstance().sendQueueUpdateBroadcast();
+ EventBus.getDefault().post(new QueueEvent(QueueEvent.Action.ADDED_ITEMS, queue));
countDownLatch.await(5000, TimeUnit.MILLISECONDS);
assertNotNull(queue);
diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java
index 1f6a907d4..95d2ce58a 100644
--- a/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java
@@ -14,6 +14,7 @@ import de.danoeh.antennapod.core.feed.FeedMedia;
import de.danoeh.antennapod.core.storage.DBReader;
import de.danoeh.antennapod.core.storage.FeedItemStatistics;
import de.danoeh.antennapod.core.storage.PodDBAdapter;
+import de.danoeh.antennapod.core.util.LongList;
import de.danoeh.antennapod.core.util.flattr.FlattrStatus;
import static de.test.antennapod.storage.DBTestUtils.saveFeedlist;
@@ -44,7 +45,7 @@ public class DBReaderTest extends InstrumentationTestCase {
private void expiredFeedListTestHelper(long lastUpdate, long expirationTime, boolean shouldReturn) {
final Context context = getInstrumentation().getTargetContext();
Feed feed = new Feed(0, new Date(lastUpdate), "feed", "link", "descr", null,
- null, null, null, "feed", null, null, "url", false, new FlattrStatus(), false, null);
+ null, null, null, "feed", null, null, "url", false, new FlattrStatus(), false, null, null, false);
feed.setItems(new ArrayList<FeedItem>());
PodDBAdapter adapter = new PodDBAdapter(context);
adapter.open();
@@ -194,7 +195,7 @@ public class DBReaderTest extends InstrumentationTestCase {
final Context context = getInstrumentation().getTargetContext();
final int numItems = 10;
List<FeedItem> queue = saveQueue(numItems);
- List<Long> ids = DBReader.getQueueIDList(context);
+ LongList ids = DBReader.getQueueIDList(context);
assertNotNull(ids);
assertTrue(queue.size() == ids.size());
for (int i = 0; i < queue.size(); i++) {
@@ -300,7 +301,7 @@ public class DBReaderTest extends InstrumentationTestCase {
}
}
- public void testGetUnreadItemIds() {
+ public void testGetNewItemIds() {
final Context context = getInstrumentation().getTargetContext();
final int numItems = 10;
@@ -309,10 +310,11 @@ public class DBReaderTest extends InstrumentationTestCase {
for (int i = 0; i < unread.size(); i++) {
unreadIds[i] = unread.get(i).getId();
}
- long[] unreadSaved = DBReader.getUnreadItemIds(context);
+ LongList unreadSaved = DBReader.getNewItemIds(context);
assertNotNull(unreadSaved);
- assertTrue(unread.size() == unreadSaved.length);
- for (long savedId : unreadSaved) {
+ assertTrue(unread.size() == unreadSaved.size());
+ for(int i=0; i < unreadSaved.size(); i++) {
+ long savedId = unreadSaved.get(i);
boolean found = false;
for (long id : unreadIds) {
if (id == savedId) {
@@ -374,7 +376,7 @@ public class DBReaderTest extends InstrumentationTestCase {
List<Feed> feeds = DBTestUtils.saveFeedlist(context, NUM_FEEDS, NUM_ITEMS, true);
DBReader.NavDrawerData navDrawerData = DBReader.getNavDrawerData(context);
assertEquals(NUM_FEEDS, navDrawerData.feeds.size());
- assertEquals(0, navDrawerData.numUnreadItems);
+ assertEquals(0, navDrawerData.numNewItems);
assertEquals(0, navDrawerData.queueSize);
}
@@ -403,7 +405,7 @@ public class DBReaderTest extends InstrumentationTestCase {
DBReader.NavDrawerData navDrawerData = DBReader.getNavDrawerData(context);
assertEquals(NUM_FEEDS, navDrawerData.feeds.size());
- assertEquals(NUM_UNREAD, navDrawerData.numUnreadItems);
+ assertEquals(NUM_UNREAD, navDrawerData.numNewItems);
assertEquals(NUM_QUEUE, navDrawerData.queueSize);
}
diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java
index e28a7918f..16f50cf28 100644
--- a/app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/storage/DBTasksTest.java
@@ -3,7 +3,16 @@ package de.test.antennapod.storage;
import android.content.Context;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
+import android.test.FlakyTest;
import android.test.InstrumentationTestCase;
+
+import java.io.File;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
@@ -13,28 +22,23 @@ import de.danoeh.antennapod.core.storage.DBTasks;
import de.danoeh.antennapod.core.storage.PodDBAdapter;
import de.danoeh.antennapod.core.util.flattr.FlattrStatus;
-import java.io.File;
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.Collections;
-import java.util.Date;
-import java.util.List;
-
-import static de.test.antennapod.storage.DBTestUtils.*;
+import static de.test.antennapod.storage.DBTestUtils.saveFeedlist;
/**
* Test class for DBTasks
*/
public class DBTasksTest extends InstrumentationTestCase {
- private static final String TEST_FOLDER = "testDBTasks";
+
+ private static final String TAG = "DBTasksTest";
private static final int EPISODE_CACHE_SIZE = 5;
+ private Context context;
+
private File destFolder;
@Override
protected void tearDown() throws Exception {
super.tearDown();
- final Context context = getInstrumentation().getTargetContext();
assertTrue(PodDBAdapter.deleteDatabase(context));
for (File f : destFolder.listFiles()) {
@@ -47,23 +51,24 @@ public class DBTasksTest extends InstrumentationTestCase {
@Override
protected void setUp() throws Exception {
super.setUp();
- destFolder = getInstrumentation().getTargetContext().getExternalFilesDir(TEST_FOLDER);
+ context = getInstrumentation().getTargetContext();
+ destFolder = context.getExternalCacheDir();
assertNotNull(destFolder);
assertTrue(destFolder.exists());
assertTrue(destFolder.canWrite());
- final Context context = getInstrumentation().getTargetContext();
context.deleteDatabase(PodDBAdapter.DATABASE_NAME);
// make sure database is created
PodDBAdapter adapter = new PodDBAdapter(context);
adapter.open();
adapter.close();
- SharedPreferences.Editor prefEdit = PreferenceManager.getDefaultSharedPreferences(getInstrumentation().getTargetContext().getApplicationContext()).edit();
+ SharedPreferences.Editor prefEdit = PreferenceManager.getDefaultSharedPreferences(context.getApplicationContext()).edit();
prefEdit.putString(UserPreferences.PREF_EPISODE_CACHE_SIZE, Integer.toString(EPISODE_CACHE_SIZE));
prefEdit.commit();
}
+ @FlakyTest(tolerance = 3)
public void testPerformAutoCleanupShouldDelete() throws IOException {
final int NUM_ITEMS = EPISODE_CACHE_SIZE * 2;
@@ -81,7 +86,7 @@ public class DBTasksTest extends InstrumentationTestCase {
items.add(item);
}
- PodDBAdapter adapter = new PodDBAdapter(getInstrumentation().getTargetContext());
+ PodDBAdapter adapter = new PodDBAdapter(context);
adapter.open();
adapter.setCompleteFeed(feed);
adapter.close();
@@ -91,7 +96,7 @@ public class DBTasksTest extends InstrumentationTestCase {
assertTrue(item.getId() != 0);
assertTrue(item.getMedia().getId() != 0);
}
- DBTasks.performAutoCleanup(getInstrumentation().getTargetContext());
+ DBTasks.performAutoCleanup(context);
for (int i = 0; i < files.size(); i++) {
if (i < EPISODE_CACHE_SIZE) {
assertTrue(files.get(i).exists());
@@ -101,6 +106,7 @@ public class DBTasksTest extends InstrumentationTestCase {
}
}
+ @FlakyTest(tolerance = 3)
public void testPerformAutoCleanupShouldNotDeleteBecauseUnread() throws IOException {
final int NUM_ITEMS = EPISODE_CACHE_SIZE * 2;
@@ -119,7 +125,7 @@ public class DBTasksTest extends InstrumentationTestCase {
items.add(item);
}
- PodDBAdapter adapter = new PodDBAdapter(getInstrumentation().getTargetContext());
+ PodDBAdapter adapter = new PodDBAdapter(context);
adapter.open();
adapter.setCompleteFeed(feed);
adapter.close();
@@ -129,12 +135,13 @@ public class DBTasksTest extends InstrumentationTestCase {
assertTrue(item.getId() != 0);
assertTrue(item.getMedia().getId() != 0);
}
- DBTasks.performAutoCleanup(getInstrumentation().getTargetContext());
+ DBTasks.performAutoCleanup(context);
for (File file : files) {
assertTrue(file.exists());
}
}
+ @FlakyTest(tolerance = 3)
public void testPerformAutoCleanupShouldNotDeleteBecauseInQueue() throws IOException {
final int NUM_ITEMS = EPISODE_CACHE_SIZE * 2;
@@ -153,7 +160,7 @@ public class DBTasksTest extends InstrumentationTestCase {
items.add(item);
}
- PodDBAdapter adapter = new PodDBAdapter(getInstrumentation().getTargetContext());
+ PodDBAdapter adapter = new PodDBAdapter(context);
adapter.open();
adapter.setCompleteFeed(feed);
adapter.setQueue(items);
@@ -164,7 +171,7 @@ public class DBTasksTest extends InstrumentationTestCase {
assertTrue(item.getId() != 0);
assertTrue(item.getMedia().getId() != 0);
}
- DBTasks.performAutoCleanup(getInstrumentation().getTargetContext());
+ DBTasks.performAutoCleanup(context);
for (File file : files) {
assertTrue(file.exists());
}
@@ -175,13 +182,13 @@ public class DBTasksTest extends InstrumentationTestCase {
* call to DBWriter.deleteFeedMediaOfItem instead of the ID of the FeedMedia. This would cause the wrong item to be deleted.
* @throws IOException
*/
+ @FlakyTest(tolerance = 3)
public void testPerformAutoCleanupShouldNotDeleteBecauseInQueue_withFeedsWithNoMedia() throws IOException {
- final Context context = getInstrumentation().getTargetContext();
// add feed with no enclosures so that item ID != media ID
saveFeedlist(context, 1, 10, false);
// add candidate for performAutoCleanup
- List<Feed> feeds = saveFeedlist(getInstrumentation().getTargetContext(), 1, 1, true);
+ List<Feed> feeds = saveFeedlist(context, 1, 1, true);
FeedMedia m = feeds.get(0).getItems().get(0).getMedia();
m.setDownloaded(true);
m.setFile_url("file");
@@ -193,8 +200,8 @@ public class DBTasksTest extends InstrumentationTestCase {
testPerformAutoCleanupShouldNotDeleteBecauseInQueue();
}
+ @FlakyTest(tolerance = 3)
public void testUpdateFeedNewFeed() {
- final Context context = getInstrumentation().getTargetContext();
final int NUM_ITEMS = 10;
Feed feed = new Feed("url", new Date(), "title");
@@ -214,7 +221,6 @@ public class DBTasksTest extends InstrumentationTestCase {
/** Two feeds with the same title, but different download URLs should be treated as different feeds. */
public void testUpdateFeedSameTitle() {
- final Context context = getInstrumentation().getTargetContext();
Feed feed1 = new Feed("url1", new Date(), "title");
Feed feed2 = new Feed("url2", new Date(), "title");
@@ -229,7 +235,6 @@ public class DBTasksTest extends InstrumentationTestCase {
}
public void testUpdateFeedUpdatedFeed() {
- final Context context = getInstrumentation().getTargetContext();
final int NUM_ITEMS_OLD = 10;
final int NUM_ITEMS_NEW = 10;
@@ -269,6 +274,7 @@ public class DBTasksTest extends InstrumentationTestCase {
updatedFeedTest(feedFromDB, feedID, itemIDs, NUM_ITEMS_OLD, NUM_ITEMS_NEW);
}
+ @FlakyTest(tolerance = 3)
private void updatedFeedTest(final Feed newFeed, long feedID, List<Long> itemIDs, final int NUM_ITEMS_OLD, final int NUM_ITEMS_NEW) {
assertTrue(newFeed.getId() == feedID);
assertTrue(newFeed.getItems().size() == NUM_ITEMS_NEW + NUM_ITEMS_OLD);
@@ -292,11 +298,11 @@ public class DBTasksTest extends InstrumentationTestCase {
}
}
+ @FlakyTest(tolerance = 3)
private void expiredFeedListTestHelper(long lastUpdate, long expirationTime, boolean shouldReturn) {
- final Context context = getInstrumentation().getTargetContext();
UserPreferences.setUpdateInterval(context, expirationTime);
Feed feed = new Feed(0, new Date(lastUpdate), "feed", "link", "descr", null,
- null, null, null, "feed", null, null, "url", false, new FlattrStatus(), false, null);
+ null, null, null, "feed", null, null, "url", false, new FlattrStatus(), false, null, null, false);
feed.setItems(new ArrayList<FeedItem>());
PodDBAdapter adapter = new PodDBAdapter(context);
adapter.open();
@@ -314,11 +320,13 @@ public class DBTasksTest extends InstrumentationTestCase {
}
}
+ @FlakyTest(tolerance = 3)
public void testGetExpiredFeedsTestShouldReturn() {
final long expirationTime = 1000 * 60 * 60;
expiredFeedListTestHelper(System.currentTimeMillis() - expirationTime - 1, expirationTime, true);
}
+ @FlakyTest(tolerance = 3)
public void testGetExpiredFeedsTestShouldNotReturn() {
final long expirationTime = 1000 * 60 * 60;
expiredFeedListTestHelper(System.currentTimeMillis() - expirationTime / 2, expirationTime, false);
diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java b/app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java
index 17c926cc2..4f33cd798 100644
--- a/app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java
+++ b/app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java
@@ -47,7 +47,7 @@ public class DBTestUtils {
adapter.open();
for (int i = 0; i < numFeeds; i++) {
Feed f = new Feed(0, new Date(), "feed " + i, "link" + i, "descr", null, null,
- null, null, "id" + i, null, null, "url" + i, false, new FlattrStatus(), false, null);
+ null, null, "id" + i, null, null, "url" + i, false, new FlattrStatus(), false, null, null, false);
f.setItems(new ArrayList<FeedItem>());
for (int j = 0; j < numItems; j++) {
FeedItem item = new FeedItem(0, "item " + j, "id" + j, "link" + j, new Date(),
diff --git a/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java b/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java
index ec8e19e22..f3b0c9165 100644
--- a/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java
@@ -5,16 +5,6 @@ import android.database.Cursor;
import android.test.InstrumentationTestCase;
import android.util.Log;
-import de.danoeh.antennapod.core.feed.Chapter;
-import de.danoeh.antennapod.core.feed.Feed;
-import de.danoeh.antennapod.core.feed.FeedImage;
-import de.danoeh.antennapod.core.feed.FeedItem;
-import de.danoeh.antennapod.core.feed.FeedMedia;
-import de.danoeh.antennapod.core.feed.SimpleChapter;
-import de.danoeh.antennapod.core.storage.DBReader;
-import de.danoeh.antennapod.core.storage.DBWriter;
-import de.danoeh.antennapod.core.storage.PodDBAdapter;
-
import java.io.File;
import java.io.IOException;
import java.util.ArrayList;
@@ -25,6 +15,16 @@ import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.TimeoutException;
+import de.danoeh.antennapod.core.feed.Chapter;
+import de.danoeh.antennapod.core.feed.Feed;
+import de.danoeh.antennapod.core.feed.FeedImage;
+import de.danoeh.antennapod.core.feed.FeedItem;
+import de.danoeh.antennapod.core.feed.FeedMedia;
+import de.danoeh.antennapod.core.feed.SimpleChapter;
+import de.danoeh.antennapod.core.storage.DBReader;
+import de.danoeh.antennapod.core.storage.DBWriter;
+import de.danoeh.antennapod.core.storage.PodDBAdapter;
+
/**
* Test class for DBWriter
*/
@@ -674,13 +674,13 @@ public class DBWriterTest extends InstrumentationTestCase {
assertTrue(item.getId() != 0);
}
for (int removeIndex = 0; removeIndex < NUM_ITEMS; removeIndex++) {
- final long id = feed.getItems().get(removeIndex).getId();
+ final FeedItem item = feed.getItems().get(removeIndex);
adapter = new PodDBAdapter(context);
adapter.open();
adapter.setQueue(feed.getItems());
adapter.close();
- DBWriter.removeQueueItem(context, id, false).get(TIMEOUT, TimeUnit.SECONDS);
+ DBWriter.removeQueueItem(context, item, false).get(TIMEOUT, TimeUnit.SECONDS);
adapter = new PodDBAdapter(context);
adapter.open();
Cursor queue = adapter.getQueueIDCursor();
@@ -688,10 +688,10 @@ public class DBWriterTest extends InstrumentationTestCase {
for (int i = 0; i < queue.getCount(); i++) {
assertTrue(queue.moveToPosition(i));
final long queueID = queue.getLong(0);
- assertTrue(queueID != id); // removed item is no longer in queue
+ assertTrue(queueID != item.getId()); // removed item is no longer in queue
boolean idFound = false;
- for (FeedItem item : feed.getItems()) { // items that were not removed are still in the queue
- idFound = idFound | (item.getId() == queueID);
+ for (FeedItem other : feed.getItems()) { // items that were not removed are still in the queue
+ idFound = idFound | (other.getId() == queueID);
}
assertTrue(idFound);
}
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 bbcc4ce5c..0326174e3 100644
--- a/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/ui/MainActivityTest.java
@@ -3,15 +3,26 @@ package de.test.antennapod.ui;
import android.content.Context;
import android.content.SharedPreferences;
import android.test.ActivityInstrumentationTestCase2;
+import android.test.FlakyTest;
import android.widget.ListView;
import com.robotium.solo.Solo;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
import de.danoeh.antennapod.R;
import de.danoeh.antennapod.activity.DefaultOnlineFeedViewActivity;
import de.danoeh.antennapod.activity.MainActivity;
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.fragment.AllEpisodesFragment;
+import de.danoeh.antennapod.fragment.DownloadsFragment;
+import de.danoeh.antennapod.fragment.NewEpisodesFragment;
+import de.danoeh.antennapod.fragment.PlaybackHistoryFragment;
+import de.danoeh.antennapod.fragment.QueueFragment;
import de.danoeh.antennapod.preferences.PreferenceController;
/**
@@ -22,6 +33,8 @@ public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActiv
private Solo solo;
private UITestUtils uiTestUtils;
+ private SharedPreferences prefs;
+
public MainActivityTest() {
super(MainActivity.class);
}
@@ -38,7 +51,7 @@ public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActiv
adapter.close();
// override first launch preference
- SharedPreferences prefs = getInstrumentation().getTargetContext().getSharedPreferences(MainActivity.PREF_NAME, Context.MODE_PRIVATE);
+ prefs = getInstrumentation().getTargetContext().getSharedPreferences(MainActivity.PREF_NAME, Context.MODE_PRIVATE);
prefs.edit().putBoolean(MainActivity.PREF_IS_FIRST_LAUNCH, false).commit();
}
@@ -46,7 +59,12 @@ public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActiv
protected void tearDown() throws Exception {
uiTestUtils.tearDown();
solo.finishOpenedActivities();
+
PodDBAdapter.deleteDatabase(getInstrumentation().getTargetContext());
+
+ // reset preferences
+ prefs.edit().clear().commit();
+
super.tearDown();
}
@@ -68,14 +86,17 @@ public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActiv
solo.waitForText(solo.getString(R.string.subscribed_label));
}
+ @FlakyTest(tolerance = 3)
public void testClickNavDrawer() throws Exception {
uiTestUtils.addLocalFeedData(false);
- // all episodes
+ UserPreferences.setHiddenDrawerItems(getInstrumentation().getTargetContext(), new ArrayList<String>());
+
+ // queue
openNavDrawer();
- solo.clickOnText(solo.getString(R.string.all_episodes_label));
+ solo.clickOnText(solo.getString(R.string.queue_label));
solo.waitForView(android.R.id.list);
- assertEquals(solo.getString(R.string.all_episodes_label), getActionbarTitle());
+ assertEquals(solo.getString(R.string.queue_label), getActionbarTitle());
// new episodes
openNavDrawer();
@@ -83,11 +104,11 @@ public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActiv
solo.waitForView(android.R.id.list);
assertEquals(solo.getString(R.string.new_episodes_label), getActionbarTitle());
- // queue
+ // all episodes
openNavDrawer();
- solo.clickOnText(solo.getString(R.string.queue_label));
+ solo.clickOnText(solo.getString(R.string.all_episodes_label));
solo.waitForView(android.R.id.list);
- assertEquals(solo.getString(R.string.queue_label), getActionbarTitle());
+ assertEquals(solo.getString(R.string.all_episodes_label), getActionbarTitle());
// downloads
openNavDrawer();
@@ -123,9 +144,78 @@ public class MainActivityTest extends ActivityInstrumentationTestCase2<MainActiv
return ((MainActivity)solo.getCurrentActivity()).getMainActivtyActionBar().getTitle().toString();
}
+ @FlakyTest(tolerance = 3)
public void testGoToPreferences() {
openNavDrawer();
- solo.clickOnMenuItem(solo.getString(R.string.settings_label));
+ solo.clickOnText(solo.getString(R.string.settings_label));
solo.waitForActivity(PreferenceController.getPreferenceActivity());
}
+
+ public void testDrawerPreferencesHideSomeElements() {
+ UserPreferences.setHiddenDrawerItems(getInstrumentation().getTargetContext(), new ArrayList<String>());
+ openNavDrawer();
+ solo.clickLongOnText(solo.getString(R.string.queue_label));
+ solo.waitForDialogToOpen();
+ solo.clickOnText(solo.getString(R.string.all_episodes_label));
+ solo.clickOnText(solo.getString(R.string.playback_history_label));
+ solo.clickOnText(solo.getString(R.string.confirm_label));
+ solo.waitForDialogToClose();
+ List<String> hidden = UserPreferences.getHiddenDrawerItems();
+ assertEquals(2, hidden.size());
+ assertTrue(hidden.contains(AllEpisodesFragment.TAG));
+ assertTrue(hidden.contains(PlaybackHistoryFragment.TAG));
+ }
+
+ public void testDrawerPreferencesUnhideSomeElements() {
+ List<String> hidden = Arrays.asList(NewEpisodesFragment.TAG, DownloadsFragment.TAG);
+ UserPreferences.setHiddenDrawerItems(getInstrumentation().getTargetContext(), hidden);
+ openNavDrawer();
+ solo.clickLongOnText(solo.getString(R.string.queue_label));
+ solo.waitForDialogToOpen();
+ solo.clickOnText(solo.getString(R.string.downloads_label));
+ solo.clickOnText(solo.getString(R.string.queue_label));
+ solo.clickOnText(solo.getString(R.string.confirm_label));
+ solo.waitForDialogToClose();
+ hidden = UserPreferences.getHiddenDrawerItems();
+ assertEquals(2, hidden.size());
+ assertTrue(hidden.contains(QueueFragment.TAG));
+ assertTrue(hidden.contains(NewEpisodesFragment.TAG));
+ }
+
+ public void testDrawerPreferencesHideAllElements() {
+ UserPreferences.setHiddenDrawerItems(getInstrumentation().getTargetContext(), new ArrayList<String>());
+ String[] titles = getInstrumentation().getTargetContext().getResources().getStringArray(R.array.nav_drawer_titles);
+
+ openNavDrawer();
+ solo.clickLongOnText(solo.getString(R.string.queue_label));
+ solo.waitForDialogToOpen();
+ for(String title : titles) {
+ solo.clickOnText(title);
+ }
+ solo.clickOnText(solo.getString(R.string.confirm_label));
+ solo.waitForDialogToClose();
+ List<String> hidden = UserPreferences.getHiddenDrawerItems();
+ assertEquals(6, hidden.size());
+ for(String tag : MainActivity.NAV_DRAWER_TAGS) {
+ assertTrue(hidden.contains(tag));
+ }
+ }
+
+ public void testDrawerPreferencesHideCurrentElement() {
+ UserPreferences.setHiddenDrawerItems(getInstrumentation().getTargetContext(), new ArrayList<String>());
+
+ openNavDrawer();
+ String downloads = solo.getString(R.string.downloads_label);
+ solo.clickOnText(downloads);
+ solo.waitForView(android.R.id.list);
+ openNavDrawer();
+ solo.clickLongOnText(downloads);
+ solo.waitForDialogToOpen();
+ solo.clickOnText(downloads);
+ solo.clickOnText(solo.getString(R.string.confirm_label));
+ solo.waitForDialogToClose();
+ List<String> hidden = UserPreferences.getHiddenDrawerItems();
+ assertEquals(1, hidden.size());
+ assertTrue(hidden.contains(DownloadsFragment.TAG));
+ }
}
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 8f1477192..775bc0ecd 100644
--- a/app/src/androidTest/java/de/test/antennapod/ui/PlaybackTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/ui/PlaybackTest.java
@@ -1,17 +1,18 @@
package de.test.antennapod.ui;
+import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;
import android.test.ActivityInstrumentationTestCase2;
-import android.widget.TextView;
+import com.robotium.solo.Condition;
import com.robotium.solo.Solo;
+import com.robotium.solo.Timeout;
import java.util.List;
import de.danoeh.antennapod.R;
-import de.danoeh.antennapod.activity.AudioplayerActivity;
import de.danoeh.antennapod.activity.MainActivity;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.preferences.UserPreferences;
@@ -28,6 +29,8 @@ public class PlaybackTest extends ActivityInstrumentationTestCase2<MainActivity>
private Solo solo;
private UITestUtils uiTestUtils;
+ private Context context;
+
public PlaybackTest() {
super(MainActivity.class);
}
@@ -36,28 +39,33 @@ public class PlaybackTest extends ActivityInstrumentationTestCase2<MainActivity>
public void setUp() throws Exception {
super.setUp();
solo = new Solo(getInstrumentation(), getActivity());
- uiTestUtils = new UITestUtils(getInstrumentation().getTargetContext());
+ context = getInstrumentation().getContext();
+
+ uiTestUtils = new UITestUtils(context);
uiTestUtils.setup();
+
// create database
- PodDBAdapter adapter = new PodDBAdapter(getInstrumentation().getTargetContext());
+ PodDBAdapter adapter = new PodDBAdapter(context);
adapter.open();
adapter.close();
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getInstrumentation().getTargetContext());
- prefs.edit().putBoolean(UserPreferences.PREF_UNPAUSE_ON_HEADSET_RECONNECT, false).commit();
- prefs.edit().putBoolean(UserPreferences.PREF_PAUSE_ON_HEADSET_DISCONNECT, false).commit();
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
+ prefs.edit()
+ .putBoolean(UserPreferences.PREF_UNPAUSE_ON_HEADSET_RECONNECT, false)
+ .putBoolean(UserPreferences.PREF_PAUSE_ON_HEADSET_DISCONNECT, false)
+ .putString(UserPreferences.PREF_HIDDEN_DRAWER_ITEMS, "")
+ .commit();
}
@Override
public void tearDown() throws Exception {
uiTestUtils.tearDown();
solo.finishOpenedActivities();
- PodDBAdapter.deleteDatabase(getInstrumentation().getTargetContext());
+ PodDBAdapter.deleteDatabase(context);
// shut down playback service
skipEpisode();
- getInstrumentation().getTargetContext().sendBroadcast(
- new Intent(PlaybackService.ACTION_SHUTDOWN_PLAYBACK_SERVICE));
+ context.sendBroadcast(new Intent(PlaybackService.ACTION_SHUTDOWN_PLAYBACK_SERVICE));
super.tearDown();
}
@@ -67,70 +75,97 @@ public class PlaybackTest extends ActivityInstrumentationTestCase2<MainActivity>
}
private void setContinuousPlaybackPreference(boolean value) {
- SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getInstrumentation().getTargetContext());
+ SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
prefs.edit().putBoolean(UserPreferences.PREF_FOLLOW_QUEUE, value).commit();
}
private void skipEpisode() {
Intent skipIntent = new Intent(PlaybackService.ACTION_SKIP_CURRENT_EPISODE);
- getInstrumentation().getTargetContext().sendBroadcast(skipIntent);
+ context.sendBroadcast(skipIntent);
}
private void startLocalPlayback() {
- assertTrue(solo.waitForActivity(MainActivity.class));
openNavDrawer();
+
solo.clickOnText(solo.getString(R.string.all_episodes_label));
- solo.waitForView(android.R.id.list);
+ final List<FeedItem> episodes = DBReader.getRecentlyPublishedEpisodes(context, 10);
+ assertTrue(solo.waitForView(solo.getView(R.id.butSecondaryAction)));
+
solo.clickOnView(solo.getView(R.id.butSecondaryAction));
- assertTrue(solo.waitForActivity(AudioplayerActivity.class));
assertTrue(solo.waitForView(solo.getView(R.id.butPlay)));
+ solo.waitForCondition(new Condition() {
+ @Override
+ public boolean isSatisfied() {
+ return episodes.get(0).getMedia().isCurrentlyPlaying();
+ }
+ }, Timeout.getLargeTimeout());
}
private void startLocalPlaybackFromQueue() {
- assertTrue(solo.waitForActivity(MainActivity.class));
- openNavDrawer();
- solo.clickOnText(solo.getString(R.string.queue_label));
assertTrue(solo.waitForView(solo.getView(R.id.butSecondaryAction)));
+ final List<FeedItem> queue = DBReader.getQueue(context);
solo.clickOnImageButton(1);
- assertTrue(solo.waitForActivity(AudioplayerActivity.class));
assertTrue(solo.waitForView(solo.getView(R.id.butPlay)));
+ solo.waitForCondition(new Condition() {
+ @Override
+ public boolean isSatisfied() {
+ return queue.get(0).getMedia().isCurrentlyPlaying();
+ }
+ }, Timeout.getLargeTimeout());
}
public void testStartLocal() throws Exception {
uiTestUtils.addLocalFeedData(true);
- DBWriter.clearQueue(getInstrumentation().getTargetContext()).get();
+ DBWriter.clearQueue(context).get();
startLocalPlayback();
-
- solo.clickOnView(solo.getView(R.id.butPlay));
}
public void testContinousPlaybackOffSingleEpisode() throws Exception {
setContinuousPlaybackPreference(false);
uiTestUtils.addLocalFeedData(true);
- DBWriter.clearQueue(getInstrumentation().getTargetContext()).get();
+ DBWriter.clearQueue(context).get();
startLocalPlayback();
- assertTrue(solo.waitForActivity(MainActivity.class));
}
public void testContinousPlaybackOffMultipleEpisodes() throws Exception {
setContinuousPlaybackPreference(false);
uiTestUtils.addLocalFeedData(true);
- List<FeedItem> queue = DBReader.getQueue(getInstrumentation().getTargetContext());
- FeedItem second = queue.get(0);
+ List<FeedItem> queue = DBReader.getQueue(context);
+ final FeedItem first = queue.get(0);
+ final FeedItem second = queue.get(1);
startLocalPlaybackFromQueue();
- assertTrue(solo.waitForText(second.getTitle()));
+ solo.waitForCondition(new Condition() {
+ @Override
+ public boolean isSatisfied() {
+ return first.getMedia().isCurrentlyPlaying() == false;
+ }
+ }, 10000);
+ Thread.sleep(1000);
+ assertTrue(second.getMedia().isCurrentlyPlaying() == false);
}
public void testContinuousPlaybackOnMultipleEpisodes() throws Exception {
setContinuousPlaybackPreference(true);
uiTestUtils.addLocalFeedData(true);
- List<FeedItem> queue = DBReader.getQueue(getInstrumentation().getTargetContext());
- FeedItem second = queue.get(1);
+ List<FeedItem> queue = DBReader.getQueue(context);
+ final FeedItem first = queue.get(0);
+ final FeedItem second = queue.get(1);
startLocalPlaybackFromQueue();
- assertTrue(solo.waitForText(second.getTitle()));
+ solo.waitForCondition(new Condition() {
+ @Override
+ public boolean isSatisfied() {
+ return first.getMedia().isCurrentlyPlaying() == false;
+ }
+ }, 10000);
+ solo.waitForCondition(new Condition() {
+ @Override
+ public boolean isSatisfied() {
+ return second.getMedia().isCurrentlyPlaying() == true;
+ }
+ }, 10000);
}
/**
@@ -139,14 +174,24 @@ public class PlaybackTest extends ActivityInstrumentationTestCase2<MainActivity>
private void replayEpisodeCheck(boolean followQueue) throws Exception {
setContinuousPlaybackPreference(followQueue);
uiTestUtils.addLocalFeedData(true);
- DBWriter.clearQueue(getInstrumentation().getTargetContext()).get();
- String title = ((TextView) solo.getView(R.id.txtvTitle)).getText().toString();
+ DBWriter.clearQueue(context).get();
+ final List<FeedItem> episodes = DBReader.getRecentlyPublishedEpisodes(context, 10);
+
startLocalPlayback();
- assertTrue(solo.waitForText(title));
- assertTrue(solo.waitForActivity(MainActivity.class));
+ solo.waitForCondition(new Condition() {
+ @Override
+ public boolean isSatisfied() {
+ return false == episodes.get(0).getMedia().isCurrentlyPlaying();
+ }
+ }, Timeout.getLargeTimeout());
+
startLocalPlayback();
- assertTrue(solo.waitForText(title));
- assertTrue(solo.waitForActivity(MainActivity.class));
+ solo.waitForCondition(new Condition() {
+ @Override
+ public boolean isSatisfied() {
+ return false == episodes.get(0).getMedia().isCurrentlyPlaying();
+ }
+ }, Timeout.getLargeTimeout());
}
public void testReplayEpisodeContinuousPlaybackOn() throws Exception {
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();
+ }
+ }
+
+}
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 249cb0dd6..613826932 100644
--- a/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java
+++ b/app/src/androidTest/java/de/test/antennapod/ui/UITestUtils.java
@@ -25,7 +25,9 @@ import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedImage;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
+import de.danoeh.antennapod.core.feed.QueueEvent;
import de.danoeh.antennapod.core.storage.PodDBAdapter;
+import de.greenrobot.event.EventBus;
import de.test.antennapod.util.service.download.HTTPBin;
import de.test.antennapod.util.syndication.feedgenerator.RSS2Generator;
@@ -139,11 +141,12 @@ public class UITestUtils {
// create items
List<FeedItem> items = new ArrayList<FeedItem>();
for (int j = 0; j < NUM_ITEMS_PER_FEED; j++) {
- FeedItem item = new FeedItem(0, "item" + j, "item" + j, "http://example.com/feed" + i + "/item/" + j, new Date(), true, feed);
+ FeedItem item = new FeedItem(j, "Feed " + (i+1) + ": Item " + (j+1), "item" + j,
+ "http://example.com/feed" + i + "/item/" + j, new Date(), false, feed);
items.add(item);
File mediaFile = newMediaFile("feed-" + i + "-episode-" + j + ".mp3");
- item.setMedia(new FeedMedia(0, item, 0, 0, mediaFile.length(), "audio/mp3", null, hostFile(mediaFile), false, null, 0));
+ item.setMedia(new FeedMedia(j, item, 0, 0, mediaFile.length(), "audio/mp3", null, hostFile(mediaFile), false, null, 0));
}
feed.setItems(items);
@@ -167,7 +170,9 @@ public class UITestUtils {
* @param downloadEpisodes true if episodes should also be marked as downloaded.
*/
public void addLocalFeedData(boolean downloadEpisodes) throws Exception {
- if (localFeedDataAdded) throw new IllegalStateException("addLocalFeedData was called twice on the same instance");
+ if (localFeedDataAdded) {
+ throw new IllegalStateException("addLocalFeedData was called twice on the same instance");
+ }
if (!feedDataHosted) {
addHostedFeedData();
}
@@ -202,6 +207,6 @@ public class UITestUtils {
adapter.setQueue(queue);
adapter.close();
EventDistributor.getInstance().sendFeedUpdateBroadcast();
- EventDistributor.getInstance().sendQueueUpdateBroadcast();
+ EventBus.getDefault().post(new QueueEvent(QueueEvent.Action.ADDED_ITEMS, queue));
}
}
diff --git a/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java
index 69cc827ec..bd3df0f9d 100644
--- a/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java
+++ b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/AtomGenerator.java
@@ -1,15 +1,17 @@
package de.test.antennapod.util.syndication.feedgenerator;
import android.util.Xml;
-import de.danoeh.antennapod.core.feed.Feed;
-import de.danoeh.antennapod.core.feed.FeedItem;
-import de.danoeh.antennapod.core.feed.FeedMedia;
-import de.danoeh.antennapod.core.syndication.util.SyndDateUtils;
+
import org.xmlpull.v1.XmlSerializer;
import java.io.IOException;
import java.io.OutputStream;
+import de.danoeh.antennapod.core.feed.Feed;
+import de.danoeh.antennapod.core.feed.FeedItem;
+import de.danoeh.antennapod.core.feed.FeedMedia;
+import de.danoeh.antennapod.core.util.DateUtils;
+
/**
* Creates Atom feeds. See FeedGenerator for more information.
*/
@@ -83,9 +85,9 @@ public class AtomGenerator implements FeedGenerator{
if (item.getPubDate() != null) {
xml.startTag(null, "published");
if ((flags & FEATURE_USE_RFC3339LOCAL) != 0) {
- xml.text(SyndDateUtils.formatRFC3339Local(item.getPubDate()));
+ xml.text(DateUtils.formatRFC3339Local(item.getPubDate()));
} else {
- xml.text(SyndDateUtils.formatRFC3339UTC(item.getPubDate()));
+ xml.text(DateUtils.formatRFC3339UTC(item.getPubDate()));
}
xml.endTag(null, "published");
}
diff --git a/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/RSS2Generator.java b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/RSS2Generator.java
index d37434f06..27e89620d 100644
--- a/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/RSS2Generator.java
+++ b/app/src/androidTest/java/de/test/antennapod/util/syndication/feedgenerator/RSS2Generator.java
@@ -3,7 +3,7 @@ package de.test.antennapod.util.syndication.feedgenerator;
import android.util.Xml;
import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedItem;
-import de.danoeh.antennapod.core.syndication.util.SyndDateUtils;
+import de.danoeh.antennapod.core.util.DateUtils;
import org.xmlpull.v1.XmlSerializer;
import java.io.IOException;
@@ -79,7 +79,7 @@ public class RSS2Generator implements FeedGenerator{
}
if (item.getPubDate() != null) {
xml.startTag(null, "pubDate");
- xml.text(SyndDateUtils.formatRFC822Date(item.getPubDate()));
+ xml.text(DateUtils.formatRFC822Date(item.getPubDate()));
xml.endTag(null, "pubDate");
}
if ((flags & FEATURE_WRITE_GUID) != 0) {