summaryrefslogtreecommitdiff
path: root/src/instrumentationTest
diff options
context:
space:
mode:
Diffstat (limited to 'src/instrumentationTest')
-rw-r--r--src/instrumentationTest/de/test/antennapod/AntennaPodTestRunner.java6
-rw-r--r--src/instrumentationTest/de/test/antennapod/service/download/HttpDownloaderTest.java6
-rw-r--r--src/instrumentationTest/de/test/antennapod/storage/DBReaderTest.java278
-rw-r--r--src/instrumentationTest/de/test/antennapod/storage/DBTasksTest.java57
-rw-r--r--src/instrumentationTest/de/test/antennapod/storage/DBTestUtils.java56
-rw-r--r--src/instrumentationTest/de/test/antennapod/storage/DBWriterTest.java4
6 files changed, 403 insertions, 4 deletions
diff --git a/src/instrumentationTest/de/test/antennapod/AntennaPodTestRunner.java b/src/instrumentationTest/de/test/antennapod/AntennaPodTestRunner.java
index 7aaa14909..e1699139d 100644
--- a/src/instrumentationTest/de/test/antennapod/AntennaPodTestRunner.java
+++ b/src/instrumentationTest/de/test/antennapod/AntennaPodTestRunner.java
@@ -12,7 +12,9 @@ public class AntennaPodTestRunner extends InstrumentationTestRunner {
@Override
public TestSuite getAllTests() {
- return new TestSuiteBuilder(AntennaPodTestRunner.class).includeAllPackagesUnderHere().build();
- //return new TestSuiteBuilder(AntennaPodTestRunner.class).includeAllPackagesUnderHere().excludePackages("instrumentationTest.de.test.antennapod.syndication.handler").build();
+ return new TestSuiteBuilder(AntennaPodTestRunner.class).includeAllPackagesUnderHere()
+ // .excludePackages("instrumentationTest.de.test.antennapod.syndication.handler")
+ // .excludePackages("instrumentationTest.de.test.antennapod.gpodnet")
+ .build();
}
}
diff --git a/src/instrumentationTest/de/test/antennapod/service/download/HttpDownloaderTest.java b/src/instrumentationTest/de/test/antennapod/service/download/HttpDownloaderTest.java
index 8df35ce67..5506a3bc9 100644
--- a/src/instrumentationTest/de/test/antennapod/service/download/HttpDownloaderTest.java
+++ b/src/instrumentationTest/de/test/antennapod/service/download/HttpDownloaderTest.java
@@ -108,6 +108,12 @@ public class HttpDownloaderTest extends InstrumentationTestCase {
assertFalse(new File(feedFile.getFile_url()).exists());
}
+ /* TODO: replace with smaller test file
+ public void testUrlWithSpaces() {
+ download("http://acedl.noxsolutions.com/ace/Don't Call Salman Rushdie Sneezy in Finland.mp3", "testUrlWithSpaces", true);
+ }
+ */
+
private static class FeedFileImpl extends FeedFile {
public FeedFileImpl(String download_url) {
super(null, download_url, false);
diff --git a/src/instrumentationTest/de/test/antennapod/storage/DBReaderTest.java b/src/instrumentationTest/de/test/antennapod/storage/DBReaderTest.java
index 0fb733b67..91ac61867 100644
--- a/src/instrumentationTest/de/test/antennapod/storage/DBReaderTest.java
+++ b/src/instrumentationTest/de/test/antennapod/storage/DBReaderTest.java
@@ -1,11 +1,289 @@
package instrumentationTest.de.test.antennapod.storage;
+import android.content.Context;
import android.test.InstrumentationTestCase;
+import de.danoeh.antennapod.feed.Feed;
+import de.danoeh.antennapod.feed.FeedItem;
+import de.danoeh.antennapod.storage.DBReader;
+import de.danoeh.antennapod.storage.PodDBAdapter;
+import static instrumentationTest.de.test.antennapod.storage.DBTestUtils.*;
+
+import java.util.*;
/**
* Test class for DBReader
*/
public class DBReaderTest extends InstrumentationTestCase {
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ final Context context = getInstrumentation().getTargetContext();
+ assertTrue(PodDBAdapter.deleteDatabase(context));
+ }
+
+ @Override
+ protected void setUp() throws Exception {
+ super.setUp();
+ final Context context = getInstrumentation().getTargetContext();
+ context.deleteDatabase(PodDBAdapter.DATABASE_NAME);
+ // make sure database is created
+ PodDBAdapter adapter = new PodDBAdapter(context);
+ adapter.open();
+ adapter.close();
+ }
+
+ 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);
+ feed.setItems(new ArrayList<FeedItem>());
+ PodDBAdapter adapter = new PodDBAdapter(context);
+ adapter.open();
+ adapter.setCompleteFeed(feed);
+ adapter.close();
+
+ assertTrue(feed.getId() != 0);
+ List<Feed> expiredFeeds = DBReader.getExpiredFeedsList(context, expirationTime);
+ assertNotNull(expiredFeeds);
+ if (shouldReturn) {
+ assertTrue(expiredFeeds.size() == 1);
+ assertTrue(expiredFeeds.get(0).getId() == feed.getId());
+ } else {
+ assertTrue(expiredFeeds.isEmpty());
+ }
+ }
+
+ public void testGetExpiredFeedsListShouldReturnFeed() {
+ final long expirationTime = 1000 * 60 * 60; // 1 hour
+ expiredFeedListTestHelper(System.currentTimeMillis() - expirationTime - 1, expirationTime, true);
+ }
+
+ public void testGetExpiredFeedsListShouldNotReturnFeed() {
+ final long expirationTime = 1000 * 60 * 60; // 1 hour
+ expiredFeedListTestHelper(System.currentTimeMillis() - expirationTime / 2, expirationTime, false);
+ }
+
+
+
+ public void testGetFeedList() {
+ final Context context = getInstrumentation().getTargetContext();
+ List<Feed> feeds = saveFeedlist(context, 10, 0, false);
+ List<Feed> savedFeeds = DBReader.getFeedList(context);
+ assertNotNull(savedFeeds);
+ assertTrue(savedFeeds.size() == feeds.size());
+ for (int i = 0; i < feeds.size(); i++) {
+ assertTrue(savedFeeds.get(i).getId() == feeds.get(i).getId());
+ }
+ }
+
+ public void testFeedListDownloadUrls() {
+ final Context context = getInstrumentation().getTargetContext();
+ List<Feed> feeds = saveFeedlist(context, 10, 0, false);
+ List<String> urls = DBReader.getFeedListDownloadUrls(context);
+ assertNotNull(urls);
+ assertTrue(urls.size() == feeds.size());
+ for (int i = 0; i < urls.size(); i++) {
+ assertEquals(urls.get(i), feeds.get(i).getDownload_url());
+ }
+ }
+
+ public void testLoadFeedDataOfFeedItemlist() {
+ final Context context = getInstrumentation().getTargetContext();
+ final int numFeeds = 10;
+ final int numItems = 1;
+ List<Feed> feeds = saveFeedlist(context, numFeeds, numItems, false);
+ List<FeedItem> items = new ArrayList<FeedItem>();
+ for (Feed f : feeds) {
+ for (FeedItem item : f.getItems()) {
+ item.setFeed(null);
+ item.setFeedId(f.getId());
+ items.add(item);
+ }
+ }
+ DBReader.loadFeedDataOfFeedItemlist(context, items);
+ for (int i = 0; i < numFeeds; i++) {
+ for (int j = 0; j < numItems; j++) {
+ FeedItem item = feeds.get(i).getItems().get(j);
+ assertNotNull(item.getFeed());
+ assertTrue(item.getFeed().getId() == feeds.get(i).getId());
+ assertTrue(item.getFeedId() == item.getFeed().getId());
+ }
+ }
+ }
+
+ public void testGetFeedItemList() {
+ final Context context = getInstrumentation().getTargetContext();
+ final int numFeeds = 1;
+ final int numItems = 10;
+ Feed feed = saveFeedlist(context, numFeeds, numItems, false).get(0);
+ List<FeedItem> items = feed.getItems();
+ feed.setItems(null);
+ List<FeedItem> savedItems = DBReader.getFeedItemList(context, feed);
+ assertNotNull(savedItems);
+ assertTrue(savedItems.size() == items.size());
+ for (int i = 0; i < savedItems.size(); i++) {
+ assertTrue(items.get(i).getId() == savedItems.get(i).getId());
+ }
+ }
+
+ private List<FeedItem> saveQueue(int numItems) {
+ if (numItems <= 0) {
+ throw new IllegalArgumentException("numItems<=0");
+ }
+ final Context context = getInstrumentation().getTargetContext();
+ List<Feed> feeds = saveFeedlist(context, numItems, numItems, false);
+ List<FeedItem> allItems = new ArrayList<FeedItem>();
+ for (Feed f : feeds) {
+ allItems.addAll(f.getItems());
+ }
+ // take random items from every feed
+ Random random = new Random();
+ List<FeedItem> queue = new ArrayList<FeedItem>();
+ while (queue.size() < numItems) {
+ int index = random.nextInt(numItems);
+ if (!queue.contains(allItems.get(index))) {
+ queue.add(allItems.get(index));
+ }
+ }
+ PodDBAdapter adapter = new PodDBAdapter(context);
+ adapter.open();
+ adapter.setQueue(queue);
+ adapter.close();
+ return queue;
+ }
+
+ public void testGetQueueIDList() {
+ final Context context = getInstrumentation().getTargetContext();
+ final int numItems = 10;
+ List<FeedItem> queue = saveQueue(numItems);
+ List<Long> ids = DBReader.getQueueIDList(context);
+ assertNotNull(ids);
+ assertTrue(queue.size() == ids.size());
+ for (int i = 0; i < queue.size(); i++) {
+ assertTrue(ids.get(i) != 0);
+ assertTrue(queue.get(i).getId() == ids.get(i));
+ }
+ }
+
+ public void testGetQueue() {
+ final Context context = getInstrumentation().getTargetContext();
+ final int numItems = 10;
+ List<FeedItem> queue = saveQueue(numItems);
+ List<FeedItem> savedQueue = DBReader.getQueue(context);
+ assertNotNull(savedQueue);
+ assertTrue(queue.size() == savedQueue.size());
+ for (int i = 0; i < queue.size(); i++) {
+ assertTrue(savedQueue.get(i).getId() != 0);
+ assertTrue(queue.get(i).getId() == savedQueue.get(i).getId());
+ }
+ }
+
+ private List<FeedItem> saveDownloadedItems(int numItems) {
+ if (numItems <= 0) {
+ throw new IllegalArgumentException("numItems<=0");
+ }
+ final Context context = getInstrumentation().getTargetContext();
+ List<Feed> feeds = saveFeedlist(context, numItems, numItems, true);
+ List<FeedItem> items = new ArrayList<FeedItem>();
+ for (Feed f : feeds) {
+ items.addAll(f.getItems());
+ }
+ List<FeedItem> downloaded = new ArrayList<FeedItem>();
+ Random random = new Random();
+
+ while (downloaded.size() < numItems) {
+ int i = random.nextInt(numItems);
+ if (!downloaded.contains(items.get(i))) {
+ FeedItem item = items.get(i);
+ item.getMedia().setDownloaded(true);
+ item.getMedia().setFile_url("file" + i);
+ downloaded.add(item);
+ }
+ }
+ PodDBAdapter adapter = new PodDBAdapter(context);
+ adapter.open();
+ adapter.setFeedItemlist(downloaded);
+ adapter.close();
+ return downloaded;
+ }
+
+ public void testGetDownloadedItems() {
+ final Context context = getInstrumentation().getTargetContext();
+ final int numItems = 10;
+ List<FeedItem> downloaded = saveDownloadedItems(numItems);
+ List<FeedItem> downloaded_saved = DBReader.getDownloadedItems(context);
+ assertNotNull(downloaded_saved);
+ assertTrue(downloaded_saved.size() == downloaded.size());
+ for (FeedItem item : downloaded_saved) {
+ assertNotNull(item.getMedia());
+ assertTrue(item.getMedia().isDownloaded());
+ assertNotNull(item.getMedia().getDownload_url());
+ }
+ }
+
+ private List<FeedItem> saveUnreadItems(int numItems) {
+ if (numItems <= 0) {
+ throw new IllegalArgumentException("numItems<=0");
+ }
+ final Context context = getInstrumentation().getTargetContext();
+ List<Feed> feeds = saveFeedlist(context, numItems, numItems, true);
+ List<FeedItem> items = new ArrayList<FeedItem>();
+ for (Feed f : feeds) {
+ items.addAll(f.getItems());
+ }
+ List<FeedItem> unread = new ArrayList<FeedItem>();
+ Random random = new Random();
+
+ while (unread.size() < numItems) {
+ int i = random.nextInt(numItems);
+ if (!unread.contains(items.get(i))) {
+ FeedItem item = items.get(i);
+ item.setRead(false);
+ unread.add(item);
+ }
+ }
+ PodDBAdapter adapter = new PodDBAdapter(context);
+ adapter.open();
+ adapter.setFeedItemlist(unread);
+ adapter.close();
+ return unread;
+ }
+
+ public void testGetUnreadItemsList() {
+ final Context context = getInstrumentation().getTargetContext();
+ final int numItems = 10;
+
+ List<FeedItem> unread = saveUnreadItems(numItems);
+ List<FeedItem> unreadSaved = DBReader.getUnreadItemsList(context);
+ assertNotNull(unreadSaved);
+ assertTrue(unread.size() == unreadSaved.size());
+ for (FeedItem item : unreadSaved) {
+ assertFalse(item.isRead());
+ }
+ }
+
+ public void testGetUnreadItemIds() {
+ final Context context = getInstrumentation().getTargetContext();
+ final int numItems = 10;
+ List<FeedItem> unread = saveUnreadItems(numItems);
+ long[] unreadIds = new long[unread.size()];
+ for (int i = 0; i < unread.size(); i++) {
+ unreadIds[i] = unread.get(i).getId();
+ }
+ long[] unreadSaved = DBReader.getUnreadItemIds(context);
+ assertNotNull(unreadSaved);
+ assertTrue(unread.size() == unreadSaved.length);
+ for (long savedId : unreadSaved) {
+ boolean found = false;
+ for (long id : unreadIds) {
+ if (id == savedId) {
+ found = true;
+ break;
+ }
+ }
+ assertTrue(found);
+ }
+ }
}
diff --git a/src/instrumentationTest/de/test/antennapod/storage/DBTasksTest.java b/src/instrumentationTest/de/test/antennapod/storage/DBTasksTest.java
index 6d9ad707a..4f8302690 100644
--- a/src/instrumentationTest/de/test/antennapod/storage/DBTasksTest.java
+++ b/src/instrumentationTest/de/test/antennapod/storage/DBTasksTest.java
@@ -19,6 +19,8 @@ import java.util.Collections;
import java.util.Date;
import java.util.List;
+import static instrumentationTest.de.test.antennapod.storage.DBTestUtils.*;
+
/**
* Test class for DBTasks
*/
@@ -167,6 +169,29 @@ public class DBTasksTest extends InstrumentationTestCase {
}
}
+ /**
+ * Reproduces a bug where DBTasks.performAutoCleanup(android.content.Context) would use the ID of the FeedItem in the
+ * call to DBWriter.deleteFeedMediaOfItem instead of the ID of the FeedMedia. This would cause the wrong item to be deleted.
+ * @throws IOException
+ */
+ 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);
+ FeedMedia m = feeds.get(0).getItems().get(0).getMedia();
+ m.setDownloaded(true);
+ m.setFile_url("file");
+ PodDBAdapter adapter = new PodDBAdapter(context);
+ adapter.open();
+ adapter.setMedia(m);
+ adapter.close();
+
+ testPerformAutoCleanupShouldNotDeleteBecauseInQueue();
+ }
+
public void testUpdateFeedNewFeed() {
final Context context = getInstrumentation().getTargetContext();
final int NUM_ITEMS = 10;
@@ -249,4 +274,36 @@ public class DBTasksTest extends InstrumentationTestCase {
lastDate = item.getPubDate();
}
}
+
+ 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);
+ feed.setItems(new ArrayList<FeedItem>());
+ PodDBAdapter adapter = new PodDBAdapter(context);
+ adapter.open();
+ adapter.setCompleteFeed(feed);
+ adapter.close();
+
+ assertTrue(feed.getId() != 0);
+ List<Feed> expiredFeeds = DBTasks.getExpiredFeeds(context);
+ assertNotNull(expiredFeeds);
+ if (shouldReturn) {
+ assertTrue(expiredFeeds.size() == 1);
+ assertTrue(expiredFeeds.get(0).getId() == feed.getId());
+ } else {
+ assertTrue(expiredFeeds.isEmpty());
+ }
+ }
+
+ public void testGetExpiredFeedsTestShouldReturn() {
+ final long expirationTime = 1000 * 60 * 60;
+ expiredFeedListTestHelper(System.currentTimeMillis() - expirationTime - 1, expirationTime, true);
+ }
+
+ public void testGetExpiredFeedsTestShouldNotReturn() {
+ final long expirationTime = 1000 * 60 * 60;
+ expiredFeedListTestHelper(System.currentTimeMillis() - expirationTime / 2, expirationTime, false);
+ }
}
diff --git a/src/instrumentationTest/de/test/antennapod/storage/DBTestUtils.java b/src/instrumentationTest/de/test/antennapod/storage/DBTestUtils.java
new file mode 100644
index 000000000..fbb7b0386
--- /dev/null
+++ b/src/instrumentationTest/de/test/antennapod/storage/DBTestUtils.java
@@ -0,0 +1,56 @@
+package instrumentationTest.de.test.antennapod.storage;
+
+import android.content.Context;
+import de.danoeh.antennapod.feed.Feed;
+import de.danoeh.antennapod.feed.FeedItem;
+import de.danoeh.antennapod.feed.FeedMedia;
+import de.danoeh.antennapod.storage.PodDBAdapter;
+import de.danoeh.antennapod.util.comparator.FeedItemPubdateComparator;
+import junit.framework.Assert;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Date;
+import java.util.List;
+
+/**
+ * Utility methods for DB* tests.
+ */
+public class DBTestUtils {
+
+ public static List<Feed> saveFeedlist(Context context, int numFeeds, int numItems, boolean withMedia) {
+ if (numFeeds <= 0) {
+ throw new IllegalArgumentException("numFeeds<=0");
+ }
+ if (numItems < 0) {
+ throw new IllegalArgumentException("numItems<0");
+ }
+
+ List<Feed> feeds = new ArrayList<Feed>();
+ PodDBAdapter adapter = new PodDBAdapter(context);
+ 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);
+ 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(),
+ true, f);
+ if (withMedia) {
+ FeedMedia media = new FeedMedia(item, "url" + j, 1, "audio/mp3");
+ item.setMedia(media);
+ }
+ f.getItems().add(item);
+ }
+ Collections.sort(f.getItems(), new FeedItemPubdateComparator());
+ adapter.setCompleteFeed(f);
+ Assert.assertTrue(f.getId() != 0);
+ for (FeedItem item : f.getItems()) {
+ Assert.assertTrue(item.getId() != 0);
+ }
+ feeds.add(f);
+ }
+ adapter.close();
+ return feeds;
+ }
+}
diff --git a/src/instrumentationTest/de/test/antennapod/storage/DBWriterTest.java b/src/instrumentationTest/de/test/antennapod/storage/DBWriterTest.java
index 527e410d2..679ae1ad3 100644
--- a/src/instrumentationTest/de/test/antennapod/storage/DBWriterTest.java
+++ b/src/instrumentationTest/de/test/antennapod/storage/DBWriterTest.java
@@ -708,7 +708,7 @@ public class DBWriterTest extends InstrumentationTestCase {
}
}
- public void testMarkAllItemsReadSameFeed() {
+ public void testMarkAllItemsReadSameFeed() throws InterruptedException, ExecutionException, TimeoutException {
final Context context = getInstrumentation().getTargetContext();
final int NUM_ITEMS = 10;
Feed feed = new Feed("url", new Date(), "title");
@@ -728,7 +728,7 @@ public class DBWriterTest extends InstrumentationTestCase {
assertTrue(item.getId() != 0);
}
- DBWriter.markAllItemsRead(context);
+ DBWriter.markAllItemsRead(context).get(TIMEOUT, TimeUnit.SECONDS);
List<FeedItem> loadedItems = DBReader.getFeedItemList(context, feed);
for (FeedItem item : loadedItems) {
assertTrue(item.isRead());