diff options
author | orionlee <orionlee@yahoo.com> | 2018-05-23 14:22:13 -0700 |
---|---|---|
committer | orionlee <orionlee@yahoo.com> | 2019-11-05 10:54:21 -0800 |
commit | 0973efa9436455288acdae870d43ee7bd177f56b (patch) | |
tree | de2cecd368b58cb5354f51abb0b29e08560044d7 | |
parent | 17e61335db73dd36473693dfe941587039302180 (diff) | |
download | AntennaPod-0973efa9436455288acdae870d43ee7bd177f56b.zip |
refactor test - break ItemEnqueuePositionCalculatorTest to be more modular
to prepare for testing more complex enqueue options.
-rw-r--r-- | core/src/test/java/de/danoeh/antennapod/core/storage/DBWriterTest.java | 148 |
1 files changed, 86 insertions, 62 deletions
diff --git a/core/src/test/java/de/danoeh/antennapod/core/storage/DBWriterTest.java b/core/src/test/java/de/danoeh/antennapod/core/storage/DBWriterTest.java index c1983ec4f..6d4dc98fd 100644 --- a/core/src/test/java/de/danoeh/antennapod/core/storage/DBWriterTest.java +++ b/core/src/test/java/de/danoeh/antennapod/core/storage/DBWriterTest.java @@ -7,6 +7,7 @@ import org.junit.runners.Parameterized.Parameter; import org.junit.runners.Parameterized.Parameters; import java.util.Arrays; +import java.util.Collections; import java.util.Date; import java.util.List; @@ -20,86 +21,108 @@ import static org.junit.Assert.assertEquals; public class DBWriterTest { - @RunWith(Parameterized.class) public static class ItemEnqueuePositionCalculatorTest { - @Parameters(name = "{index}: case<{0}>, expected:{1}") - public static Iterable<Object[]> data() { - Options optDefault = new Options(); - Options optEnqAtFront = new Options().setEnqueueAtFront(true); - Options optKeepInProgressAtFront = - new Options().setEnqueueAtFront(true).setKeepInProgressAtFront(true); - // edge case: keep in progress without enabling enqueue at front is meaningless - Options optKeepInProgressAtFrontWithNoEnqueueAtFront = - new Options().setKeepInProgressAtFront(true); - - - return Arrays.asList(new Object[][] { - {"case default, i.e., add to the end", - QUEUE_DEFAULT.size(), optDefault , 0, QUEUE_DEFAULT}, - {"case default (2nd item)", - QUEUE_DEFAULT.size(), optDefault , 1, QUEUE_DEFAULT}, - {"case option enqueue at front", - 0, optEnqAtFront , 0, QUEUE_DEFAULT}, - {"case option enqueue at front (2nd item)", - 1, optEnqAtFront , 1, QUEUE_DEFAULT}, - {"case option keep in progress at front", - 1, optKeepInProgressAtFront , 0, QUEUE_FRONT_IN_PROGRESS}, - {"case option keep in progress at front (2nd item)", - 2, optKeepInProgressAtFront , 1, QUEUE_FRONT_IN_PROGRESS}, - {"case option keep in progress at front, front item not in progress", - 0, optKeepInProgressAtFront , 0, QUEUE_DEFAULT}, - {"case option keep in progress at front, front item no media at all", - 0, optKeepInProgressAtFront , 0, QUEUE_FRONT_NO_MEDIA}, // No media should not cause any exception - {"case option keep in progress at front, but enqueue at front is disabled", - QUEUE_FRONT_IN_PROGRESS.size(), optKeepInProgressAtFrontWithNoEnqueueAtFront , 0, QUEUE_FRONT_IN_PROGRESS}, - {"case empty queue, option default", - 0, optDefault, 0, QUEUE_EMPTY}, - {"case empty queue, option enqueue at front", - 0, optEnqAtFront, 0, QUEUE_EMPTY}, - {"case empty queue, option keep in progress at front", - 0, optKeepInProgressAtFront, 0, QUEUE_EMPTY}, - - }); - } + @RunWith(Parameterized.class) + public static class IEPCBasicTest { + @Parameters(name = "{index}: case<{0}>, expected:{1}") + public static Iterable<Object[]> data() { + Options optDefault = new Options(); + Options optEnqAtFront = new Options().setEnqueueAtFront(true); + + return Arrays.asList(new Object[][] { + {"case default, i.e., add to the end", + QUEUE_DEFAULT.size(), optDefault , 0, QUEUE_DEFAULT}, + {"case default (2nd item)", + QUEUE_DEFAULT.size(), optDefault , 1, QUEUE_DEFAULT}, + {"case option enqueue at front", + 0, optEnqAtFront , 0, QUEUE_DEFAULT}, + {"case option enqueue at front (2nd item)", + 1, optEnqAtFront , 1, QUEUE_DEFAULT}, + {"case empty queue, option default", + 0, optDefault, 0, QUEUE_EMPTY}, + {"case empty queue, option enqueue at front", + 0, optEnqAtFront, 0, QUEUE_EMPTY}, + }); + } + + @Parameter + public String message; - private static final List<FeedItem> QUEUE_EMPTY = Arrays.asList(); + @Parameter(1) + public int posExpected; - private static final List<FeedItem> QUEUE_DEFAULT = Arrays.asList(tFI(11), tFI(12), tFI(13), tFI(14)); + @Parameter(2) + public Options options; - private static final List<FeedItem> QUEUE_FRONT_IN_PROGRESS = Arrays.asList(tFI(11, 60000), tFI(12), tFI(13)); + @Parameter(3) + public int posAmongAdded; // the position of feed item to be inserted among the list to be inserted. - private static final List<FeedItem> QUEUE_FRONT_NO_MEDIA = Arrays.asList(tFINoMedia(11), tFI(12), tFI(13)); + @Parameter(4) + public List<FeedItem> curQueue; - @Parameter - public String message; - @Parameter(1) - public int posExpected; + public static final int TFI_TO_ADD_ID = 101; - @Parameter(2) - public Options options; + /** + * Add a FeedItem with ID {@link #TFI_TO_ADD_ID} with the setup + */ + @Test + public void test() { + ItemEnqueuePositionCalculator calculator = new ItemEnqueuePositionCalculator(options); - @Parameter(3) - public int posAmongAdded; // the position of feed item to be inserted among the list to be inserted. + int posActual = calculator.calcPosition(posAmongAdded, tFI(TFI_TO_ADD_ID), curQueue); + assertEquals(message, posExpected , posActual); + } + + } - @Parameter(4) - public List<FeedItem> curQueue; + @RunWith(Parameterized.class) + public static class IEPCKeepInProgressAtFrontTest extends IEPCBasicTest { + @Parameters(name = "{index}: case<{0}>, expected:{1}") + public static Iterable<Object[]> data() { + Options optKeepInProgressAtFront = + new Options().setEnqueueAtFront(true).setKeepInProgressAtFront(true); + // edge case: keep in progress without enabling enqueue at front is meaningless + Options optKeepInProgressAtFrontWithNoEnqueueAtFront = + new Options().setKeepInProgressAtFront(true); + + return Arrays.asList(new Object[][]{ + {"case option keep in progress at front", + 1, optKeepInProgressAtFront, 0, QUEUE_FRONT_IN_PROGRESS}, + {"case option keep in progress at front (2nd item)", + 2, optKeepInProgressAtFront, 1, QUEUE_FRONT_IN_PROGRESS}, + {"case option keep in progress at front, front item not in progress", + 0, optKeepInProgressAtFront, 0, QUEUE_DEFAULT}, + {"case option keep in progress at front, front item no media at all", + 0, optKeepInProgressAtFront, 0, QUEUE_FRONT_NO_MEDIA}, // No media should not cause any exception + {"case option keep in progress at front, but enqueue at front is disabled", + QUEUE_FRONT_IN_PROGRESS.size(), optKeepInProgressAtFrontWithNoEnqueueAtFront, 0, QUEUE_FRONT_IN_PROGRESS}, + {"case empty queue, option keep in progress at front", + 0, optKeepInProgressAtFront, 0, QUEUE_EMPTY}, + }); + } + private static final List<FeedItem> QUEUE_FRONT_IN_PROGRESS = Arrays.asList(tFI(11, 60000), tFI(12), tFI(13)); - @Test - public void test() { - ItemEnqueuePositionCalculator calculator = new ItemEnqueuePositionCalculator(options); + private static final List<FeedItem> QUEUE_FRONT_NO_MEDIA = Arrays.asList(tFINoMedia(11), tFI(12), tFI(13)); - int posActual = calculator.calcPosition(posAmongAdded, tFI(101), curQueue); - assertEquals(message, posExpected , posActual); } - private static FeedItem tFI(int id) { + // Common helpers: + // - common queue (of items) for tests + // - construct FeedItems for tests + + static final List<FeedItem> QUEUE_EMPTY = Collections.unmodifiableList(Arrays.asList()); + + static final List<FeedItem> QUEUE_DEFAULT = Collections.unmodifiableList(Arrays.asList(tFI(11), tFI(12), tFI(13), tFI(14))); + + + static FeedItem tFI(int id) { return tFI(id, -1); } - private static FeedItem tFI(int id, int position) { + static FeedItem tFI(int id, int position) { FeedItem item = tFINoMedia(id); FeedMedia media = new FeedMedia(item, "download_url", 1234567, "audio/mpeg"); item.setMedia(media); @@ -111,11 +134,12 @@ public class DBWriterTest { return item; } - private static FeedItem tFINoMedia(int id) { + static FeedItem tFINoMedia(int id) { FeedItem item = new FeedItem(0, "Item" + id, "ItemId" + id, "url", new Date(), FeedItem.PLAYED, FeedMother.anyFeed()); return item; } + } } |