summaryrefslogtreecommitdiff
path: root/src/instrumentationTest/de/test/antennapod/syndication/handler/FeedHandlerTest.java
diff options
context:
space:
mode:
authordaniel oeh <daniel.oeh@gmail.com>2014-03-31 19:45:03 +0200
committerdaniel oeh <daniel.oeh@gmail.com>2014-03-31 19:45:03 +0200
commit5a6c7ef43a89ae03c6de94f070314ec5bc5c3c9d (patch)
tree3cbd1b8368555ba5867ae68c5246c2a4490c5fc9 /src/instrumentationTest/de/test/antennapod/syndication/handler/FeedHandlerTest.java
parentb2de7512f4c871e882760bfe8bffa27d10c1c68a (diff)
downloadAntennaPod-5a6c7ef43a89ae03c6de94f070314ec5bc5c3c9d.zip
Added feed generators, basic rss tests
Diffstat (limited to 'src/instrumentationTest/de/test/antennapod/syndication/handler/FeedHandlerTest.java')
-rw-r--r--src/instrumentationTest/de/test/antennapod/syndication/handler/FeedHandlerTest.java308
1 files changed, 153 insertions, 155 deletions
diff --git a/src/instrumentationTest/de/test/antennapod/syndication/handler/FeedHandlerTest.java b/src/instrumentationTest/de/test/antennapod/syndication/handler/FeedHandlerTest.java
index 95c3a3dba..5489002bc 100644
--- a/src/instrumentationTest/de/test/antennapod/syndication/handler/FeedHandlerTest.java
+++ b/src/instrumentationTest/de/test/antennapod/syndication/handler/FeedHandlerTest.java
@@ -1,170 +1,168 @@
package instrumentationTest.de.test.antennapod.syndication.handler;
-import java.io.BufferedOutputStream;
+import android.content.Context;
+import android.test.InstrumentationTestCase;
+import de.danoeh.antennapod.feed.*;
+import de.danoeh.antennapod.syndication.handler.FeedHandler;
+import de.danoeh.antennapod.syndication.handler.UnsupportedFeedtypeException;
+import instrumentationTest.de.test.antennapod.util.syndication.feedgenerator.FeedGenerator;
+import instrumentationTest.de.test.antennapod.util.syndication.feedgenerator.RSS2Generator;
+import org.xml.sax.SAXException;
+
+import javax.xml.parsers.ParserConfigurationException;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
-import java.io.InputStream;
import java.io.OutputStream;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
import java.util.ArrayList;
import java.util.Date;
+import java.util.List;
-import android.test.AndroidTestCase;
-import android.util.Log;
-import de.danoeh.antennapod.feed.Feed;
-import de.danoeh.antennapod.feed.FeedItem;
-import de.danoeh.antennapod.syndication.handler.FeedHandler;
+/**
+ * Tests for FeedHandler
+ */
+public class FeedHandlerTest extends InstrumentationTestCase {
+ private static final String FEEDS_DIR = "testfeeds";
+
+ File file = null;
+ OutputStream outputStream = null;
+
+ protected void setUp() throws Exception {
+ super.setUp();
+ Context context = getInstrumentation().getContext();
+ File destDir = context.getExternalFilesDir(FEEDS_DIR);
+ assertNotNull(destDir);
+
+ file = new File(destDir, "feed.xml");
+ file.delete();
+
+ assertNotNull(file);
+ assertFalse(file.exists());
+
+ outputStream = new FileOutputStream(file);
+ }
+
+
+ @Override
+ protected void tearDown() throws Exception {
+ super.tearDown();
+ file.delete();
+ file = null;
+
+ outputStream.close();
+ outputStream = null;
+ }
+
+ private Feed runFeedTest(Feed feed, FeedGenerator g, String encoding, long flags) throws IOException, UnsupportedFeedtypeException, SAXException, ParserConfigurationException {
+ g.writeFeed(feed, outputStream, encoding, flags);
+ FeedHandler handler = new FeedHandler();
+ Feed parsedFeed = new Feed(feed.getDownload_url(), feed.getLastUpdate());
+ parsedFeed.setFile_url(file.getAbsolutePath());
+ parsedFeed.setDownloaded(true);
+ handler.parseFeed(parsedFeed);
+ return parsedFeed;
+ }
+
+ private void feedValid(Feed feed, Feed parsedFeed, String feedType) {
+ assertEquals(feed.getTitle(), parsedFeed.getTitle());
+ if (feedType.equals(Feed.TYPE_ATOM1)) {
+ assertEquals(feed.getFeedIdentifier(), parsedFeed.getFeedIdentifier());
+ assertEquals(feed.getAuthor(), parsedFeed.getAuthor());
+ }
+ assertEquals(feed.getLink(), parsedFeed.getLink());
+ assertEquals(feed.getDescription(), parsedFeed.getDescription());
+ assertEquals(feed.getLanguage(), parsedFeed.getLanguage());
+ assertEquals(feed.getPaymentLink(), parsedFeed.getPaymentLink());
+
+ if (feed.getImage() != null) {
+ FeedImage image = feed.getImage();
+ FeedImage parsedImage = parsedFeed.getImage();
+ assertNotNull(parsedImage);
+
+ assertEquals(image.getTitle(), parsedImage.getTitle());
+ assertEquals(image.getDownload_url(), parsedImage.getDownload_url());
+ }
-/** Enqueues a list of Feeds and tests if they are parsed correctly */
-public class FeedHandlerTest extends AndroidTestCase {
- private static final String TAG = "FeedHandlerTest";
- private static final String FEEDS_DIR = "testfeeds";
-
- private ArrayList<Feed> feeds;
-
- protected void setUp() throws Exception {
- super.setUp();
- feeds = new ArrayList<Feed>();
- for (int i = 0; i < TestFeeds.urls.length; i++) {
- Feed f = new Feed(TestFeeds.urls[i], new Date());
- f.setFile_url(new File(getContext().getExternalFilesDir(FEEDS_DIR)
- .getAbsolutePath(), "R" + i).getAbsolutePath());
- feeds.add(f);
- }
- }
-
- private InputStream getInputStream(String url)
- throws MalformedURLException, IOException {
- HttpURLConnection connection = (HttpURLConnection) (new URL(url))
- .openConnection();
- int rc = connection.getResponseCode();
- if (rc == HttpURLConnection.HTTP_OK) {
- return connection.getInputStream();
- } else {
- return null;
- }
- }
-
- private boolean downloadFeed(Feed feed) throws IOException {
- int num_retries = 20;
- boolean successful = false;
-
- for (int i = 0; i < num_retries; i++) {
- InputStream in = null;
- BufferedOutputStream out = null;
- try {
- in = getInputStream(feed.getDownload_url());
- if (in == null) {
- return false;
+ if (feed.getItems() != null) {
+ assertNotNull(parsedFeed.getItems());
+ assertEquals(feed.getItems().size(), parsedFeed.getItems().size());
+
+ for (int i = 0; i < feed.getItems().size(); i++) {
+ FeedItem item = feed.getItems().get(i);
+ FeedItem parsedItem = parsedFeed.getItems().get(i);
+
+ if (item.getItemIdentifier() != null)
+ assertEquals(item.getItemIdentifier(), parsedItem.getItemIdentifier());
+ assertEquals(item.getTitle(), parsedItem.getTitle());
+ assertEquals(item.getDescription(), parsedItem.getDescription());
+ assertEquals(item.getContentEncoded(), parsedItem.getContentEncoded());
+ assertEquals(item.getLink(), parsedItem.getLink());
+ assertEquals(item.getPubDate().getTime(), parsedItem.getPubDate().getTime());
+ assertEquals(item.getPaymentLink(), parsedItem.getPaymentLink());
+
+ if (item.hasMedia()) {
+ assertTrue(parsedItem.hasMedia());
+ FeedMedia media = item.getMedia();
+ FeedMedia parsedMedia = parsedItem.getMedia();
+
+ assertEquals(media.getDownload_url(), parsedMedia.getDownload_url());
+ assertEquals(media.getSize(), parsedMedia.getSize());
+ assertEquals(media.getMime_type(), parsedMedia.getMime_type());
}
- out = new BufferedOutputStream(new FileOutputStream(
- feed.getFile_url()));
- byte[] buffer = new byte[8 * 1024];
- int count = 0;
- while ((count = in.read(buffer)) != -1) {
- out.write(buffer, 0, count);
- }
- out.flush();
- successful = true;
- return true;
- } catch (IOException e) {
- e.printStackTrace();
- } finally {
- if (in != null) {
- in.close();
- }
- if (out != null) {
- out.close();
- }
- if (successful) {
- break;
- }
- }
- }
- if (!successful) {
- Log.e(TAG, "Download failed after " + num_retries + " retries");
- throw new IOException();
- } else {
- return true;
+
+ if (item.hasItemImage()) {
+ assertTrue(parsedItem.hasItemImage());
+ FeedImage image = item.getImage();
+ FeedImage parsedImage = parsedItem.getImage();
+
+ assertEquals(image.getTitle(), parsedImage.getTitle());
+ assertEquals(image.getDownload_url(), parsedImage.getDownload_url());
+ }
+
+ if (item.getChapters() != null) {
+ assertNotNull(parsedItem.getChapters());
+ assertEquals(item.getChapters().size(), parsedItem.getChapters().size());
+ List<Chapter> chapters = item.getChapters();
+ List<Chapter> parsedChapters = parsedItem.getChapters();
+ for (int j = 0; j < chapters.size(); j++) {
+ Chapter chapter = chapters.get(j);
+ Chapter parsedChapter = parsedChapters.get(j);
+
+ assertEquals(chapter.getTitle(), parsedChapter.getTitle());
+ assertEquals(chapter.getLink(), parsedChapter.getLink());
+ }
+ }
+ }
+ }
+ }
+
+ public void testRSS2Basic() throws IOException, UnsupportedFeedtypeException, SAXException, ParserConfigurationException {
+ Feed f1 = createTestFeed(10, false, true, true);
+ Feed f2 = runFeedTest(f1, new RSS2Generator(), "UTF-8", RSS2Generator.FEATURE_WRITE_GUID);
+ feedValid(f1, f2, Feed.TYPE_RSS2);
+ }
+
+ private Feed createTestFeed(int numItems, boolean withImage, boolean withFeedMedia, boolean withChapters) {
+ FeedImage image = null;
+ if (withImage) {
+ image = new FeedImage(0, "image", null, "http://example.com/picture", false);
}
- }
-
- private boolean isFeedValid(Feed feed) {
- Log.i(TAG, "Checking if " + feed.getDownload_url() + " is valid");
- boolean result = false;
- if (feed.getTitle() == null) {
- Log.e(TAG, "Feed has no title");
- return false;
- }
- if (!hasValidFeedItems(feed)) {
- Log.e(TAG, "Feed has invalid items");
- return false;
- }
- if (feed.getLink() == null) {
- Log.e(TAG, "Feed has no link");
- return false;
- }
- if (feed.getLink() != null && feed.getLink().length() == 0) {
- Log.e(TAG, "Feed has empty link");
- return false;
- }
- if (feed.getIdentifyingValue() == null) {
- Log.e(TAG, "Feed has no identifying value");
- return false;
- }
- if (feed.getIdentifyingValue() != null
- && feed.getIdentifyingValue().length() == 0) {
- Log.e(TAG, "Feed has empty identifying value");
- return false;
- }
- return true;
- }
-
- private boolean hasValidFeedItems(Feed feed) {
- for (FeedItem item : feed.getItems()) {
- if (item.getTitle() == null) {
- Log.e(TAG, "Item has no title");
- return false;
- }
- }
- return true;
- }
-
- public void testParseFeeds() {
- Log.i(TAG, "Testing RSS feeds");
- while (!feeds.isEmpty()) {
- Feed feed = feeds.get(0);
- parseFeed(feed);
- feeds.remove(0);
- }
-
- Log.i(TAG, "RSS Test completed");
- }
-
- private void parseFeed(Feed feed) {
- try {
- Log.i(TAG, "Testing feed with url " + feed.getDownload_url());
- FeedHandler handler = new FeedHandler();
- if (downloadFeed(feed)) {
- handler.parseFeed(feed);
- assertTrue(isFeedValid(feed));
+ Feed feed = new Feed(0, new Date(), "title", "http://example.com", "This is the description",
+ "http://example.com/payment", "Daniel", "en", null, "http://example.com/feed", image, file.getAbsolutePath(),
+ "http://example.com/feed", true);
+ feed.setItems(new ArrayList<FeedItem>());
+
+ for (int i = 0; i < numItems; i++) {
+ FeedItem item = new FeedItem(0, "item-" + i, "http://example.com/item-" + i,
+ "http://example.com/items/" + i, new Date(i), false, feed);
+ feed.getItems().add(item);
+ if (withFeedMedia) {
+ item.setMedia(new FeedMedia(0, item, 4711, 0, 100, "audio/mp3", null, "http://example.com/media-" + i,
+ false, null, 0));
}
- } catch (Exception e) {
- Log.e(TAG, "Error when trying to test " + feed.getDownload_url());
- e.printStackTrace();
- }
- }
-
- @Override
- protected void tearDown() throws Exception {
- super.tearDown();
- for (Feed feed : feeds) {
- File f = new File(feed.getFile_url());
- f.delete();
- }
- }
+ }
+
+ return feed;
+ }
}