diff options
author | daniel oeh <daniel.oeh@gmail.com> | 2014-03-31 19:45:03 +0200 |
---|---|---|
committer | daniel oeh <daniel.oeh@gmail.com> | 2014-03-31 19:45:03 +0200 |
commit | 5a6c7ef43a89ae03c6de94f070314ec5bc5c3c9d (patch) | |
tree | 3cbd1b8368555ba5867ae68c5246c2a4490c5fc9 /src/instrumentationTest/de/test/antennapod/syndication/handler/FeedHandlerTest.java | |
parent | b2de7512f4c871e882760bfe8bffa27d10c1c68a (diff) | |
download | AntennaPod-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.java | 308 |
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; + } } |