summaryrefslogtreecommitdiff
path: root/app/src/androidTest/java/de
diff options
context:
space:
mode:
authordaniel oeh <daniel.oeh@gmail.com>2014-12-07 21:24:03 +0100
committerdaniel oeh <daniel.oeh@gmail.com>2014-12-07 21:24:03 +0100
commitf534481ed0f38159671081f646f0ab4f40415cbd (patch)
tree9e10f3de53befc2b8b441170f0062582e3573716 /app/src/androidTest/java/de
parent24538d7ebb50cd18c83f6669743faa2d7be195ec (diff)
downloadAntennaPod-f534481ed0f38159671081f646f0ab4f40415cbd.zip
Avoid loading Chapters of multiple FeedItems at the same time
This should significantly reduce the time needed to load FeedItem lists with chapters, because chapters are from now on only loaded when a single FeedItem is requested.
Diffstat (limited to 'app/src/androidTest/java/de')
-rw-r--r--app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java73
-rw-r--r--app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java37
-rw-r--r--app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java19
3 files changed, 111 insertions, 18 deletions
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 a96c9a6d3..1f6a907d4 100644
--- a/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/storage/DBReaderTest.java
@@ -2,6 +2,12 @@ package de.test.antennapod.storage;
import android.content.Context;
import android.test.InstrumentationTestCase;
+
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.List;
+import java.util.Random;
+
import de.danoeh.antennapod.core.feed.Feed;
import de.danoeh.antennapod.core.feed.FeedItem;
import de.danoeh.antennapod.core.feed.FeedMedia;
@@ -10,11 +16,6 @@ import de.danoeh.antennapod.core.storage.FeedItemStatistics;
import de.danoeh.antennapod.core.storage.PodDBAdapter;
import de.danoeh.antennapod.core.util.flattr.FlattrStatus;
-import java.util.ArrayList;
-import java.util.Date;
-import java.util.List;
-import java.util.Random;
-
import static de.test.antennapod.storage.DBTestUtils.saveFeedlist;
/**
@@ -325,7 +326,7 @@ public class DBReaderTest extends InstrumentationTestCase {
public void testGetPlaybackHistory() {
final Context context = getInstrumentation().getTargetContext();
- final int numItems = (DBReader.PLAYBACK_HISTORY_SIZE+1) * 2;
+ final int numItems = (DBReader.PLAYBACK_HISTORY_SIZE + 1) * 2;
final int playedItems = DBReader.PLAYBACK_HISTORY_SIZE + 1;
final int numReturnedItems = Math.min(playedItems, DBReader.PLAYBACK_HISTORY_SIZE);
final int numFeeds = 1;
@@ -405,4 +406,64 @@ public class DBReaderTest extends InstrumentationTestCase {
assertEquals(NUM_UNREAD, navDrawerData.numUnreadItems);
assertEquals(NUM_QUEUE, navDrawerData.queueSize);
}
+
+ public void testGetFeedItemlistCheckChaptersFalse() throws Exception {
+ Context context = getInstrumentation().getTargetContext();
+ List<Feed> feeds = DBTestUtils.saveFeedlist(context, 10, 10, false, false, 0);
+ for (Feed feed : feeds) {
+ for (FeedItem item : feed.getItems()) {
+ assertFalse(item.hasChapters());
+ }
+ }
+ }
+
+ public void testGetFeedItemlistCheckChaptersTrue() throws Exception {
+ Context context = getInstrumentation().getTargetContext();
+ List<Feed> feeds = saveFeedlist(context, 10, 10, false, true, 10);
+ for (Feed feed : feeds) {
+ for (FeedItem item : feed.getItems()) {
+ assertTrue(item.hasChapters());
+ }
+ }
+ }
+
+ public void testLoadChaptersOfFeedItemNoChapters() throws Exception {
+ Context context = getInstrumentation().getTargetContext();
+ List<Feed> feeds = saveFeedlist(context, 1, 3, false, false, 0);
+ saveFeedlist(context, 1, 3, false, true, 3);
+ for (Feed feed : feeds) {
+ for (FeedItem item : feed.getItems()) {
+ assertFalse(item.hasChapters());
+ DBReader.loadChaptersOfFeedItem(context, item);
+ assertFalse(item.hasChapters());
+ assertNull(item.getChapters());
+ }
+ }
+ }
+
+ public void testLoadChaptersOfFeedItemWithChapters() throws Exception {
+ Context context = getInstrumentation().getTargetContext();
+ final int NUM_CHAPTERS = 3;
+ DBTestUtils.saveFeedlist(context, 1, 3, false, false, 0);
+ List<Feed> feeds = saveFeedlist(context, 1, 3, false, true, NUM_CHAPTERS);
+ for (Feed feed : feeds) {
+ for (FeedItem item : feed.getItems()) {
+ assertTrue(item.hasChapters());
+ DBReader.loadChaptersOfFeedItem(context, item);
+ assertTrue(item.hasChapters());
+ assertNotNull(item.getChapters());
+ assertEquals(NUM_CHAPTERS, item.getChapters().size());
+ }
+ }
+ }
+
+ public void testGetItemWithChapters() throws Exception {
+ Context context = getInstrumentation().getTargetContext();
+ final int NUM_CHAPTERS = 3;
+ List<Feed> feeds = saveFeedlist(context, 1, 1, false, true, NUM_CHAPTERS);
+ FeedItem item1 = feeds.get(0).getItems().get(0);
+ FeedItem item2 = DBReader.getFeedItem(context, item1.getId());
+ assertTrue(item2.hasChapters());
+ assertEquals(item1.getChapters(), item2.getChapters());
+ }
}
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 9e5f6546d..17c926cc2 100644
--- a/app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java
+++ b/app/src/androidTest/java/de/test/antennapod/storage/DBTestUtils.java
@@ -1,12 +1,7 @@
package de.test.antennapod.storage;
import android.content.Context;
-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.storage.PodDBAdapter;
-import de.danoeh.antennapod.core.util.comparator.FeedItemPubdateComparator;
-import de.danoeh.antennapod.core.util.flattr.FlattrStatus;
+
import junit.framework.Assert;
import java.util.ArrayList;
@@ -14,12 +9,32 @@ import java.util.Collections;
import java.util.Date;
import java.util.List;
+import de.danoeh.antennapod.core.feed.Chapter;
+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.feed.SimpleChapter;
+import de.danoeh.antennapod.core.storage.PodDBAdapter;
+import de.danoeh.antennapod.core.util.comparator.FeedItemPubdateComparator;
+import de.danoeh.antennapod.core.util.flattr.FlattrStatus;
+
/**
* Utility methods for DB* tests.
*/
public class DBTestUtils {
+ /**
+ * Use this method when tests don't involve chapters.
+ */
public static List<Feed> saveFeedlist(Context context, int numFeeds, int numItems, boolean withMedia) {
+ return saveFeedlist(context, numFeeds, numItems, withMedia, false, 0);
+ }
+
+ /**
+ * Use this method when tests involve chapters.
+ */
+ public static List<Feed> saveFeedlist(Context context, int numFeeds, int numItems, boolean withMedia,
+ boolean withChapters, int numChapters) {
if (numFeeds <= 0) {
throw new IllegalArgumentException("numFeeds<=0");
}
@@ -36,11 +51,18 @@ public class DBTestUtils {
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);
+ true, f, withChapters);
if (withMedia) {
FeedMedia media = new FeedMedia(item, "url" + j, 1, "audio/mp3");
item.setMedia(media);
}
+ if (withChapters) {
+ List<Chapter> chapters = new ArrayList<>();
+ item.setChapters(chapters);
+ for (int k = 0; k < numChapters; k++) {
+ chapters.add(new SimpleChapter(k, "item " + j + " chapter " + k, item, "http://example.com"));
+ }
+ }
f.getItems().add(item);
}
Collections.sort(f.getItems(), new FeedItemPubdateComparator());
@@ -52,6 +74,7 @@ public class DBTestUtils {
feeds.add(f);
}
adapter.close();
+
return feeds;
}
}
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 4678a843b..ec8e19e22 100644
--- a/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java
+++ b/app/src/androidTest/java/de/test/antennapod/storage/DBWriterTest.java
@@ -4,10 +4,13 @@ import android.content.Context;
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;
@@ -101,7 +104,7 @@ public class DBWriterTest extends InstrumentationTestCase {
List<File> itemFiles = new ArrayList<File>();
// create items with downloaded media files
for (int i = 0; i < 10; i++) {
- FeedItem item = new FeedItem(0, "Item " + i, "Item" + i, "url", new Date(), true, feed);
+ FeedItem item = new FeedItem(0, "Item " + i, "Item" + i, "url", new Date(), true, feed, true);
feed.getItems().add(item);
File enc = new File(destFolder, "file " + i);
@@ -110,6 +113,9 @@ public class DBWriterTest extends InstrumentationTestCase {
FeedMedia media = new FeedMedia(0, item, 1, 1, 1, "mime_type", enc.getAbsolutePath(), "download_url", true, null, 0);
item.setMedia(media);
+
+ item.setChapters(new ArrayList<Chapter>());
+ item.getChapters().add(new SimpleChapter(0, "item " + i, item, "example.com"));
}
PodDBAdapter adapter = new PodDBAdapter(getInstrumentation().getContext());
@@ -122,6 +128,7 @@ public class DBWriterTest extends InstrumentationTestCase {
for (FeedItem item : feed.getItems()) {
assertTrue(item.getId() != 0);
assertTrue(item.getMedia().getId() != 0);
+ assertTrue(item.getChapters().get(0).getId() != 0);
}
DBWriter.deleteFeed(getInstrumentation().getTargetContext(), feed.getId()).get(TIMEOUT, TimeUnit.SECONDS);
@@ -135,18 +142,20 @@ public class DBWriterTest extends InstrumentationTestCase {
adapter = new PodDBAdapter(getInstrumentation().getContext());
adapter.open();
Cursor c = adapter.getFeedCursor(feed.getId());
- assertTrue(c.getCount() == 0);
+ assertEquals(0, c.getCount());
c.close();
c = adapter.getImageCursor(image.getId());
- assertTrue(c.getCount() == 0);
+ assertEquals(0, c.getCount());
c.close();
for (FeedItem item : feed.getItems()) {
c = adapter.getFeedItemCursor(String.valueOf(item.getId()));
- assertTrue(c.getCount() == 0);
+ assertEquals(0, c.getCount());
c.close();
c = adapter.getSingleFeedMediaCursor(item.getMedia().getId());
- assertTrue(c.getCount() == 0);
+ assertEquals(0, c.getCount());
c.close();
+ c = adapter.getSimpleChaptersOfFeedItemCursor(item);
+ assertEquals(0, c.getCount());
}
}