From ce48b186edf28ba03821e541c235497b99aba628 Mon Sep 17 00:00:00 2001
From: Herbert Reiter <46045854+damoasda@users.noreply.github.com>
Date: Sat, 23 Jan 2021 19:26:46 +0100
Subject: Run AtomParserTest and RssParserTest with Robolectric
---
.../core/syndication/handler/AtomParserTest.java | 70 ++++++++++++++++++
.../syndication/handler/FeedParserTestHelper.java | 35 +++++++++
.../core/syndication/handler/RssParserTest.java | 86 ++++++++++++++++++++++
.../src/test/resources/feed-atom-testAtomBasic.xml | 1 +
.../resources/feed-atom-testLogoWithWhitespace.xml | 2 +
.../resources/feed-rss-testImageWithWhitespace.xml | 2 +
.../resources/feed-rss-testMediaContentMime.xml | 1 +
core/src/test/resources/feed-rss-testRss2Basic.xml | 1 +
8 files changed, 198 insertions(+)
create mode 100644 core/src/test/java/de/danoeh/antennapod/core/syndication/handler/AtomParserTest.java
create mode 100644 core/src/test/java/de/danoeh/antennapod/core/syndication/handler/FeedParserTestHelper.java
create mode 100644 core/src/test/java/de/danoeh/antennapod/core/syndication/handler/RssParserTest.java
create mode 100644 core/src/test/resources/feed-atom-testAtomBasic.xml
create mode 100644 core/src/test/resources/feed-atom-testLogoWithWhitespace.xml
create mode 100644 core/src/test/resources/feed-rss-testImageWithWhitespace.xml
create mode 100644 core/src/test/resources/feed-rss-testMediaContentMime.xml
create mode 100644 core/src/test/resources/feed-rss-testRss2Basic.xml
(limited to 'core/src/test')
diff --git a/core/src/test/java/de/danoeh/antennapod/core/syndication/handler/AtomParserTest.java b/core/src/test/java/de/danoeh/antennapod/core/syndication/handler/AtomParserTest.java
new file mode 100644
index 000000000..82f7fcfca
--- /dev/null
+++ b/core/src/test/java/de/danoeh/antennapod/core/syndication/handler/AtomParserTest.java
@@ -0,0 +1,70 @@
+package de.danoeh.antennapod.core.syndication.handler;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+import java.io.File;
+import java.util.Date;
+
+import de.danoeh.antennapod.core.feed.Feed;
+import de.danoeh.antennapod.core.feed.FeedItem;
+import de.danoeh.antennapod.core.feed.FeedMedia;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Tests for Atom feeds in FeedHandler.
+ */
+@RunWith(RobolectricTestRunner.class)
+public class AtomParserTest {
+
+ @Test
+ public void testAtomBasic() throws Exception {
+ File feedFile = FeedParserTestHelper.getFeedFile("feed-atom-testAtomBasic.xml");
+ Feed feed = FeedParserTestHelper.runFeedParser(feedFile);
+ assertEquals(Feed.TYPE_ATOM1, feed.getType());
+ assertEquals("title", feed.getTitle());
+ assertEquals("http://example.com/feed", feed.getFeedIdentifier());
+ assertEquals("http://example.com", feed.getLink());
+ assertEquals("This is the description", feed.getDescription());
+ assertEquals("http://example.com/payment", feed.getPaymentLink());
+ assertEquals("http://example.com/picture", feed.getImageUrl());
+ assertEquals(10, feed.getItems().size());
+ for (int i = 0; i < feed.getItems().size(); i++) {
+ FeedItem item = feed.getItems().get(i);
+ assertEquals("http://example.com/item-" + i, item.getItemIdentifier());
+ assertEquals("item-" + i, item.getTitle());
+ assertNull(item.getDescription());
+ assertNull(item.getContentEncoded());
+ assertEquals("http://example.com/items/" + i, item.getLink());
+ assertEquals(new Date(i * 60000), item.getPubDate());
+ assertNull(item.getPaymentLink());
+ assertEquals("http://example.com/picture", item.getImageLocation());
+ // media
+ assertTrue(item.hasMedia());
+ FeedMedia media = item.getMedia();
+ //noinspection ConstantConditions
+ assertEquals("http://example.com/media-" + i, media.getDownload_url());
+ assertEquals(1024 * 1024, media.getSize());
+ assertEquals("audio/mp3", media.getMime_type());
+ // chapters
+ assertNull(item.getChapters());
+ }
+ }
+
+ @Test
+ public void testLogoWithWhitespace() throws Exception {
+ File feedFile = FeedParserTestHelper.getFeedFile("feed-atom-testLogoWithWhitespace.xml");
+ Feed feed = FeedParserTestHelper.runFeedParser(feedFile);
+ assertEquals("title", feed.getTitle());
+ assertEquals("http://example.com/feed", feed.getFeedIdentifier());
+ assertEquals("http://example.com", feed.getLink());
+ assertEquals("This is the description", feed.getDescription());
+ assertEquals("http://example.com/payment", feed.getPaymentLink());
+ assertEquals("https://example.com/image.png", feed.getImageUrl());
+ assertEquals(0, feed.getItems().size());
+ }
+}
diff --git a/core/src/test/java/de/danoeh/antennapod/core/syndication/handler/FeedParserTestHelper.java b/core/src/test/java/de/danoeh/antennapod/core/syndication/handler/FeedParserTestHelper.java
new file mode 100644
index 000000000..c02a7d209
--- /dev/null
+++ b/core/src/test/java/de/danoeh/antennapod/core/syndication/handler/FeedParserTestHelper.java
@@ -0,0 +1,35 @@
+package de.danoeh.antennapod.core.syndication.handler;
+
+import androidx.annotation.NonNull;
+
+import java.io.File;
+
+import de.danoeh.antennapod.core.feed.Feed;
+
+/**
+ * Tests for FeedHandler.
+ */
+public abstract class FeedParserTestHelper {
+
+ /**
+ * Returns the File object for a file in the resources folder.
+ */
+ @NonNull
+ static File getFeedFile(@NonNull String fileName) {
+ //noinspection ConstantConditions
+ return new File(FeedParserTestHelper.class.getClassLoader().getResource(fileName).getFile());
+ }
+
+ /**
+ * Runs the feed parser on the given file.
+ */
+ @NonNull
+ static Feed runFeedParser(@NonNull File feedFile) throws Exception {
+ FeedHandler handler = new FeedHandler();
+ Feed parsedFeed = new Feed("http://example.com/feed", null);
+ parsedFeed.setFile_url(feedFile.getAbsolutePath());
+ parsedFeed.setDownloaded(true);
+ handler.parseFeed(parsedFeed);
+ return parsedFeed;
+ }
+}
diff --git a/core/src/test/java/de/danoeh/antennapod/core/syndication/handler/RssParserTest.java b/core/src/test/java/de/danoeh/antennapod/core/syndication/handler/RssParserTest.java
new file mode 100644
index 000000000..1195520a6
--- /dev/null
+++ b/core/src/test/java/de/danoeh/antennapod/core/syndication/handler/RssParserTest.java
@@ -0,0 +1,86 @@
+package de.danoeh.antennapod.core.syndication.handler;
+
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+import java.io.File;
+import java.util.Date;
+
+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.MediaType;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
+
+/**
+ * Tests for RSS feeds in FeedHandler.
+ */
+@RunWith(RobolectricTestRunner.class)
+public class RssParserTest {
+
+ @Test
+ public void testRss2Basic() throws Exception {
+ File feedFile = FeedParserTestHelper.getFeedFile("feed-rss-testRss2Basic.xml");
+ Feed feed = FeedParserTestHelper.runFeedParser(feedFile);
+ assertEquals(Feed.TYPE_RSS2, feed.getType());
+ assertEquals("title", feed.getTitle());
+ assertEquals("en", feed.getLanguage());
+ assertEquals("http://example.com", feed.getLink());
+ assertEquals("This is the description", feed.getDescription());
+ assertEquals("http://example.com/payment", feed.getPaymentLink());
+ assertEquals("http://example.com/picture", feed.getImageUrl());
+ assertEquals(10, feed.getItems().size());
+ for (int i = 0; i < feed.getItems().size(); i++) {
+ FeedItem item = feed.getItems().get(i);
+ assertEquals("http://example.com/item-" + i, item.getItemIdentifier());
+ assertEquals("item-" + i, item.getTitle());
+ assertNull(item.getDescription());
+ assertNull(item.getContentEncoded());
+ assertEquals("http://example.com/items/" + i, item.getLink());
+ assertEquals(new Date(i * 60000), item.getPubDate());
+ assertNull(item.getPaymentLink());
+ assertEquals("http://example.com/picture", item.getImageLocation());
+ // media
+ assertTrue(item.hasMedia());
+ FeedMedia media = item.getMedia();
+ //noinspection ConstantConditions
+ assertEquals("http://example.com/media-" + i, media.getDownload_url());
+ assertEquals(1024 * 1024, media.getSize());
+ assertEquals("audio/mp3", media.getMime_type());
+ // chapters
+ assertNull(item.getChapters());
+ }
+ }
+
+ @Test
+ public void testImageWithWhitespace() throws Exception {
+ File feedFile = FeedParserTestHelper.getFeedFile("feed-rss-testImageWithWhitespace.xml");
+ Feed feed = FeedParserTestHelper.runFeedParser(feedFile);
+ assertEquals("title", feed.getTitle());
+ assertEquals("http://example.com", feed.getLink());
+ assertEquals("This is the description", feed.getDescription());
+ assertEquals("http://example.com/payment", feed.getPaymentLink());
+ assertEquals("https://example.com/image.png", feed.getImageUrl());
+ assertEquals(0, feed.getItems().size());
+ }
+
+ @Test
+ public void testMediaContentMime() throws Exception {
+ File feedFile = FeedParserTestHelper.getFeedFile("feed-rss-testMediaContentMime.xml");
+ Feed feed = FeedParserTestHelper.runFeedParser(feedFile);
+ assertEquals("title", feed.getTitle());
+ assertEquals("http://example.com", feed.getLink());
+ assertEquals("This is the description", feed.getDescription());
+ assertEquals("http://example.com/payment", feed.getPaymentLink());
+ assertNull(feed.getImageUrl());
+ assertEquals(1, feed.getItems().size());
+ FeedItem feedItem = feed.getItems().get(0);
+ //noinspection ConstantConditions
+ assertEquals(MediaType.VIDEO, feedItem.getMedia().getMediaType());
+ assertEquals("https://www.example.com/file.mp4", feedItem.getMedia().getDownload_url());
+ }
+}
diff --git a/core/src/test/resources/feed-atom-testAtomBasic.xml b/core/src/test/resources/feed-atom-testAtomBasic.xml
new file mode 100644
index 000000000..cefc4f979
--- /dev/null
+++ b/core/src/test/resources/feed-atom-testAtomBasic.xml
@@ -0,0 +1 @@
+http://example.com/feedtitleThis is the descriptionhttp://example.com/picturehttp://example.com/item-0item-01970-01-01T00:00:00Zhttp://example.com/item-1item-11970-01-01T00:01:00Zhttp://example.com/item-2item-21970-01-01T00:02:00Zhttp://example.com/item-3item-31970-01-01T00:03:00Zhttp://example.com/item-4item-41970-01-01T00:04:00Zhttp://example.com/item-5item-51970-01-01T00:05:00Zhttp://example.com/item-6item-61970-01-01T00:06:00Zhttp://example.com/item-7item-71970-01-01T00:07:00Zhttp://example.com/item-8item-81970-01-01T00:08:00Zhttp://example.com/item-9item-91970-01-01T00:09:00Z
\ No newline at end of file
diff --git a/core/src/test/resources/feed-atom-testLogoWithWhitespace.xml b/core/src/test/resources/feed-atom-testLogoWithWhitespace.xml
new file mode 100644
index 000000000..f4886d56a
--- /dev/null
+++ b/core/src/test/resources/feed-atom-testLogoWithWhitespace.xml
@@ -0,0 +1,2 @@
+http://example.com/feedtitleThis is the description https://example.com/image.png
+
\ No newline at end of file
diff --git a/core/src/test/resources/feed-rss-testImageWithWhitespace.xml b/core/src/test/resources/feed-rss-testImageWithWhitespace.xml
new file mode 100644
index 000000000..2be9401d2
--- /dev/null
+++ b/core/src/test/resources/feed-rss-testImageWithWhitespace.xml
@@ -0,0 +1,2 @@
+titleThis is the descriptionhttp://example.comen https://example.com/image.png
+
\ No newline at end of file
diff --git a/core/src/test/resources/feed-rss-testMediaContentMime.xml b/core/src/test/resources/feed-rss-testMediaContentMime.xml
new file mode 100644
index 000000000..a715abb37
--- /dev/null
+++ b/core/src/test/resources/feed-rss-testMediaContentMime.xml
@@ -0,0 +1 @@
+titleThis is the descriptionhttp://example.comen
\ No newline at end of file
diff --git a/core/src/test/resources/feed-rss-testRss2Basic.xml b/core/src/test/resources/feed-rss-testRss2Basic.xml
new file mode 100644
index 000000000..dd771b61a
--- /dev/null
+++ b/core/src/test/resources/feed-rss-testRss2Basic.xml
@@ -0,0 +1 @@
+titleThis is the descriptionhttp://example.comenhttp://example.com/picture- item-0http://example.com/items/001 Jan 70 01:00:00 +0100http://example.com/item-0
- item-1http://example.com/items/101 Jan 70 01:01:00 +0100http://example.com/item-1
- item-2http://example.com/items/201 Jan 70 01:02:00 +0100http://example.com/item-2
- item-3http://example.com/items/301 Jan 70 01:03:00 +0100http://example.com/item-3
- item-4http://example.com/items/401 Jan 70 01:04:00 +0100http://example.com/item-4
- item-5http://example.com/items/501 Jan 70 01:05:00 +0100http://example.com/item-5
- item-6http://example.com/items/601 Jan 70 01:06:00 +0100http://example.com/item-6
- item-7http://example.com/items/701 Jan 70 01:07:00 +0100http://example.com/item-7
- item-8http://example.com/items/801 Jan 70 01:08:00 +0100http://example.com/item-8
- item-9http://example.com/items/901 Jan 70 01:09:00 +0100http://example.com/item-9
\ No newline at end of file
--
cgit v1.2.3