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/pictureitem-0http://example.com/items/001 Jan 70 01:00:00 +0100http://example.com/item-0item-1http://example.com/items/101 Jan 70 01:01:00 +0100http://example.com/item-1item-2http://example.com/items/201 Jan 70 01:02:00 +0100http://example.com/item-2item-3http://example.com/items/301 Jan 70 01:03:00 +0100http://example.com/item-3item-4http://example.com/items/401 Jan 70 01:04:00 +0100http://example.com/item-4item-5http://example.com/items/501 Jan 70 01:05:00 +0100http://example.com/item-5item-6http://example.com/items/601 Jan 70 01:06:00 +0100http://example.com/item-6item-7http://example.com/items/701 Jan 70 01:07:00 +0100http://example.com/item-7item-8http://example.com/items/801 Jan 70 01:08:00 +0100http://example.com/item-8item-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