summaryrefslogtreecommitdiff
path: root/parser/feed/src/test/java
diff options
context:
space:
mode:
authorByteHamster <info@bytehamster.com>2021-08-28 00:12:48 +0200
committerByteHamster <info@bytehamster.com>2021-08-28 09:57:41 +0200
commit24389d42e89037b205fff2bc681e4ad998895286 (patch)
tree1c3d979e043510431d54bd9ff0fab86ac7159737 /parser/feed/src/test/java
parent85c8a419acb385cdf249662866715965de219c93 (diff)
downloadAntennaPod-24389d42e89037b205fff2bc681e4ad998895286.zip
Moved feed parser to its own module
Diffstat (limited to 'parser/feed/src/test/java')
-rw-r--r--parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/element/AtomTextTest.java37
-rw-r--r--parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/namespace/AtomParserTest.java98
-rw-r--r--parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/namespace/FeedParserTestHelper.java36
-rw-r--r--parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/namespace/RssParserTest.java99
-rw-r--r--parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/util/DateUtilsTest.java175
-rw-r--r--parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/util/DurationParserTest.java44
6 files changed, 489 insertions, 0 deletions
diff --git a/parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/element/AtomTextTest.java b/parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/element/AtomTextTest.java
new file mode 100644
index 000000000..2ec91ab1d
--- /dev/null
+++ b/parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/element/AtomTextTest.java
@@ -0,0 +1,37 @@
+package de.danoeh.antennapod.parser.feed.element.element;
+
+import de.danoeh.antennapod.parser.feed.element.AtomText;
+import de.danoeh.antennapod.parser.feed.namespace.Atom;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.robolectric.RobolectricTestRunner;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Unit test for {@link AtomText}.
+ */
+@RunWith(RobolectricTestRunner.class)
+public class AtomTextTest {
+
+ private static final String[][] TEST_DATA = {
+ {"&gt;", ">"},
+ {">", ">"},
+ {"&lt;Fran&ccedil;ais&gt;", "<Français>"},
+ {"ßÄÖÜ", "ßÄÖÜ"},
+ {"&quot;", "\""},
+ {"&szlig;", "ß"},
+ {"&#8217;", "’"},
+ {"&#x2030;", "‰"},
+ {"&euro;", "€"}
+ };
+
+ @Test
+ public void testProcessingHtml() {
+ for (String[] pair : TEST_DATA) {
+ final AtomText atomText = new AtomText("", new Atom(), AtomText.TYPE_HTML);
+ atomText.setContent(pair[0]);
+ assertEquals(pair[1], atomText.getProcessedContent());
+ }
+ }
+}
diff --git a/parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/namespace/AtomParserTest.java b/parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/namespace/AtomParserTest.java
new file mode 100644
index 000000000..ba8aaf4f0
--- /dev/null
+++ b/parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/namespace/AtomParserTest.java
@@ -0,0 +1,98 @@
+package de.danoeh.antennapod.parser.feed.element.namespace;
+
+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.model.feed.Feed;
+import de.danoeh.antennapod.model.feed.FeedItem;
+import de.danoeh.antennapod.model.feed.FeedMedia;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
+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.getPaymentLinks().get(0).url);
+ 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());
+ 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 testEmptyRelLinks() throws Exception {
+ File feedFile = FeedParserTestHelper.getFeedFile("feed-atom-testEmptyRelLinks.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());
+ assertNull(feed.getPaymentLinks());
+ assertEquals("http://example.com/picture", feed.getImageUrl());
+ assertEquals(1, feed.getItems().size());
+
+ // feed entry
+ FeedItem item = feed.getItems().get(0);
+ assertEquals("http://example.com/item-0", item.getItemIdentifier());
+ assertEquals("item-0", item.getTitle());
+ assertNull(item.getDescription());
+ assertEquals("http://example.com/items/0", item.getLink());
+ assertEquals(new Date(0), item.getPubDate());
+ assertNull(item.getPaymentLink());
+ assertEquals("http://example.com/picture", item.getImageLocation());
+ // media
+ assertFalse(item.hasMedia());
+ // 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.getPaymentLinks().get(0).url);
+ assertEquals("https://example.com/image.png", feed.getImageUrl());
+ assertEquals(0, feed.getItems().size());
+ }
+}
diff --git a/parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/namespace/FeedParserTestHelper.java b/parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/namespace/FeedParserTestHelper.java
new file mode 100644
index 000000000..5cc52d8cb
--- /dev/null
+++ b/parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/namespace/FeedParserTestHelper.java
@@ -0,0 +1,36 @@
+package de.danoeh.antennapod.parser.feed.element.namespace;
+
+import androidx.annotation.NonNull;
+
+import java.io.File;
+
+import de.danoeh.antennapod.model.feed.Feed;
+import de.danoeh.antennapod.parser.feed.FeedHandler;
+
+/**
+ * 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/parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/namespace/RssParserTest.java b/parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/namespace/RssParserTest.java
new file mode 100644
index 000000000..8f8942d7b
--- /dev/null
+++ b/parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/namespace/RssParserTest.java
@@ -0,0 +1,99 @@
+package de.danoeh.antennapod.parser.feed.element.namespace;
+
+import android.text.TextUtils;
+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.model.feed.Feed;
+import de.danoeh.antennapod.model.feed.FeedItem;
+import de.danoeh.antennapod.model.feed.FeedMedia;
+import de.danoeh.antennapod.model.playback.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.getPaymentLinks().get(0).url);
+ 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());
+ 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.getPaymentLinks().get(0).url);
+ 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.getPaymentLinks().get(0).url);
+ 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());
+ }
+
+ @Test
+ public void testMultipleFundingTags() throws Exception {
+ File feedFile = FeedParserTestHelper.getFeedFile("feed-rss-testMultipleFundingTags.xml");
+ Feed feed = FeedParserTestHelper.runFeedParser(feedFile);
+ assertEquals(3, feed.getPaymentLinks().size());
+ assertEquals("Text 1", feed.getPaymentLinks().get(0).content);
+ assertEquals("https://example.com/funding1", feed.getPaymentLinks().get(0).url);
+ assertEquals("Text 2", feed.getPaymentLinks().get(1).content);
+ assertEquals("https://example.com/funding2", feed.getPaymentLinks().get(1).url);
+ assertTrue(TextUtils.isEmpty(feed.getPaymentLinks().get(2).content));
+ assertEquals("https://example.com/funding3", feed.getPaymentLinks().get(2).url);
+ }
+}
diff --git a/parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/util/DateUtilsTest.java b/parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/util/DateUtilsTest.java
new file mode 100644
index 000000000..1f039d703
--- /dev/null
+++ b/parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/util/DateUtilsTest.java
@@ -0,0 +1,175 @@
+package de.danoeh.antennapod.parser.feed.element.util;
+
+import de.danoeh.antennapod.parser.feed.util.DateUtils;
+import org.junit.Test;
+
+import java.util.Calendar;
+import java.util.Date;
+import java.util.GregorianCalendar;
+import java.util.TimeZone;
+
+import static org.junit.Assert.assertEquals;
+
+/**
+ * Unit test for {@link DateUtils}.
+ */
+public class DateUtilsTest {
+
+ @Test
+ public void testParseDateWithMicroseconds() {
+ GregorianCalendar exp = new GregorianCalendar(2015, 2, 28, 13, 31, 4);
+ exp.setTimeZone(TimeZone.getTimeZone("UTC"));
+ Date expected = new Date(exp.getTimeInMillis() + 963);
+ Date actual = DateUtils.parse("2015-03-28T13:31:04.963870");
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testParseDateWithCentiseconds() {
+ GregorianCalendar exp = new GregorianCalendar(2015, 2, 28, 13, 31, 4);
+ exp.setTimeZone(TimeZone.getTimeZone("UTC"));
+ Date expected = new Date(exp.getTimeInMillis() + 960);
+ Date actual = DateUtils.parse("2015-03-28T13:31:04.96");
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testParseDateWithDeciseconds() {
+ GregorianCalendar exp = new GregorianCalendar(2015, 2, 28, 13, 31, 4);
+ exp.setTimeZone(TimeZone.getTimeZone("UTC"));
+ Date expected = new Date(exp.getTimeInMillis() + 900);
+ Date actual = DateUtils.parse("2015-03-28T13:31:04.9");
+ assertEquals(expected.getTime() / 1000, actual.getTime() / 1000);
+ assertEquals(900, actual.getTime() % 1000);
+ }
+
+ @Test
+ public void testParseDateWithMicrosecondsAndTimezone() {
+ GregorianCalendar exp = new GregorianCalendar(2015, 2, 28, 6, 31, 4);
+ exp.setTimeZone(TimeZone.getTimeZone("UTC"));
+ Date expected = new Date(exp.getTimeInMillis() + 963);
+ Date actual = DateUtils.parse("2015-03-28T13:31:04.963870 +0700");
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testParseDateWithCentisecondsAndTimezone() {
+ GregorianCalendar exp = new GregorianCalendar(2015, 2, 28, 6, 31, 4);
+ exp.setTimeZone(TimeZone.getTimeZone("UTC"));
+ Date expected = new Date(exp.getTimeInMillis() + 960);
+ Date actual = DateUtils.parse("2015-03-28T13:31:04.96 +0700");
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testParseDateWithDecisecondsAndTimezone() {
+ GregorianCalendar exp = new GregorianCalendar(2015, 2, 28, 6, 31, 4);
+ exp.setTimeZone(TimeZone.getTimeZone("UTC"));
+ Date expected = new Date(exp.getTimeInMillis() + 900);
+ Date actual = DateUtils.parse("2015-03-28T13:31:04.9 +0700");
+ assertEquals(expected.getTime() / 1000, actual.getTime() / 1000);
+ assertEquals(900, actual.getTime() % 1000);
+ }
+
+ @Test
+ public void testParseDateWithTimezoneName() {
+ GregorianCalendar exp = new GregorianCalendar(2015, 2, 28, 6, 31, 4);
+ exp.setTimeZone(TimeZone.getTimeZone("UTC"));
+ Date expected = new Date(exp.getTimeInMillis());
+ Date actual = DateUtils.parse("Sat, 28 Mar 2015 01:31:04 EST");
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testParseDateWithTimezoneName2() {
+ GregorianCalendar exp = new GregorianCalendar(2015, 2, 28, 6, 31, 0);
+ exp.setTimeZone(TimeZone.getTimeZone("UTC"));
+ Date expected = new Date(exp.getTimeInMillis());
+ Date actual = DateUtils.parse("Sat, 28 Mar 2015 01:31 EST");
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testParseDateWithTimeZoneOffset() {
+ GregorianCalendar exp = new GregorianCalendar(2015, 2, 28, 12, 16, 12);
+ exp.setTimeZone(TimeZone.getTimeZone("UTC"));
+ Date expected = new Date(exp.getTimeInMillis());
+ Date actual = DateUtils.parse("Sat, 28 March 2015 08:16:12 -0400");
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testAsctime() {
+ GregorianCalendar exp = new GregorianCalendar(2011, 4, 25, 12, 33, 0);
+ exp.setTimeZone(TimeZone.getTimeZone("UTC"));
+ Date expected = new Date(exp.getTimeInMillis());
+ Date actual = DateUtils.parse("Wed, 25 May 2011 12:33:00");
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testMultipleConsecutiveSpaces() {
+ GregorianCalendar exp = new GregorianCalendar(2010, 2, 23, 6, 6, 26);
+ exp.setTimeZone(TimeZone.getTimeZone("UTC"));
+ Date expected = new Date(exp.getTimeInMillis());
+ Date actual = DateUtils.parse("Tue, 23 Mar 2010 01:06:26 -0500");
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testParseDateWithNoTimezonePadding() {
+ GregorianCalendar exp = new GregorianCalendar(2017, 1, 22, 22, 28, 0);
+ exp.setTimeZone(TimeZone.getTimeZone("UTC"));
+ Date expected = new Date(exp.getTimeInMillis() + 2);
+ Date actual = DateUtils.parse("2017-02-22T14:28:00.002-08:00");
+ assertEquals(expected, actual);
+ }
+
+ /**
+ * Requires Android platform. Root cause: {@link DateUtils} implementation makes
+ * use of ISO 8601 time zone, which does not work on standard JDK.
+ *
+ * @see #testParseDateWithNoTimezonePadding()
+ */
+ @Test
+ public void testParseDateWithForCest() {
+ GregorianCalendar exp1 = new GregorianCalendar(2017, 0, 28, 22, 0, 0);
+ exp1.setTimeZone(TimeZone.getTimeZone("UTC"));
+ Date expected1 = new Date(exp1.getTimeInMillis());
+ Date actual1 = DateUtils.parse("Sun, 29 Jan 2017 00:00:00 CEST");
+ assertEquals(expected1, actual1);
+
+ GregorianCalendar exp2 = new GregorianCalendar(2017, 0, 28, 23, 0, 0);
+ exp2.setTimeZone(TimeZone.getTimeZone("UTC"));
+ Date expected2 = new Date(exp2.getTimeInMillis());
+ Date actual2 = DateUtils.parse("Sun, 29 Jan 2017 00:00:00 CET");
+ assertEquals(expected2, actual2);
+ }
+
+ @Test
+ public void testParseDateWithIncorrectWeekday() {
+ GregorianCalendar exp1 = new GregorianCalendar(2014, 9, 8, 9, 0, 0);
+ exp1.setTimeZone(TimeZone.getTimeZone("GMT"));
+ Date expected = new Date(exp1.getTimeInMillis());
+ Date actual = DateUtils.parse("Thu, 8 Oct 2014 09:00:00 GMT"); // actually a Wednesday
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testParseDateWithBadAbbreviation() {
+ GregorianCalendar exp1 = new GregorianCalendar(2014, 8, 8, 0, 0, 0);
+ exp1.setTimeZone(TimeZone.getTimeZone("GMT"));
+ Date expected = new Date(exp1.getTimeInMillis());
+ Date actual = DateUtils.parse("Mon, 8 Sept 2014 00:00:00 GMT"); // should be Sep
+ assertEquals(expected, actual);
+ }
+
+ @Test
+ public void testParseDateWithTwoTimezones() {
+ final GregorianCalendar exp1 = new GregorianCalendar(2015, Calendar.MARCH, 1, 1, 0, 0);
+ exp1.setTimeZone(TimeZone.getTimeZone("GMT-4"));
+ final Date expected = new Date(exp1.getTimeInMillis());
+ final Date actual = DateUtils.parse("Sun 01 Mar 2015 01:00:00 GMT-0400 (EDT)");
+ assertEquals(expected, actual);
+ }
+}
diff --git a/parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/util/DurationParserTest.java b/parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/util/DurationParserTest.java
new file mode 100644
index 000000000..91d9ea5ed
--- /dev/null
+++ b/parser/feed/src/test/java/de/danoeh/antennapod/parser/feed/element/util/DurationParserTest.java
@@ -0,0 +1,44 @@
+package de.danoeh.antennapod.parser.feed.element.util;
+
+import de.danoeh.antennapod.parser.feed.util.DurationParser;
+import org.junit.Test;
+
+import static org.junit.Assert.assertEquals;
+
+public class DurationParserTest {
+ private int milliseconds = 1;
+ private int seconds = 1000 * milliseconds;
+ private int minutes = 60 * seconds;
+ private int hours = 60 * minutes;
+
+ @Test
+ public void testSecondDurationInMillis() {
+ long duration = DurationParser.inMillis("00:45");
+ assertEquals(45 * seconds, duration);
+ }
+
+ @Test
+ public void testSingleNumberDurationInMillis() {
+ int twoHoursInSeconds = 2 * 60 * 60;
+ long duration = DurationParser.inMillis(String.valueOf(twoHoursInSeconds));
+ assertEquals(2 * hours, duration);
+ }
+
+ @Test
+ public void testMinuteSecondDurationInMillis() {
+ long duration = DurationParser.inMillis("05:10");
+ assertEquals(5 * minutes + 10 * seconds, duration);
+ }
+
+ @Test
+ public void testHourMinuteSecondDurationInMillis() {
+ long duration = DurationParser.inMillis("02:15:45");
+ assertEquals(2 * hours + 15 * minutes + 45 * seconds, duration);
+ }
+
+ @Test
+ public void testSecondsWithMillisecondsInMillis() {
+ long duration = DurationParser.inMillis("00:00:00.123");
+ assertEquals(123, duration);
+ }
+}