From 9469ebc6c3a8b0ed2cb268f4e7b153199d3d6dfb Mon Sep 17 00:00:00 2001 From: orionlee Date: Sun, 29 Sep 2019 12:46:21 -0700 Subject: bugfix: Ensure playback service use the updated feedItem after media download completes (rather than trying to stream) --- .../playback/PlaybackServiceTaskManagerTest.java | 50 ++++++++++++++++++++-- 1 file changed, 46 insertions(+), 4 deletions(-) (limited to 'app/src/androidTest/java/de/test/antennapod') diff --git a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java index 9c0e90929..91a796638 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java @@ -5,6 +5,11 @@ import android.support.test.InstrumentationRegistry; import android.support.test.annotation.UiThreadTest; import android.support.test.filters.LargeTest; +import org.greenrobot.eventbus.EventBus; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; + import java.util.ArrayList; import java.util.Date; import java.util.List; @@ -15,14 +20,15 @@ import de.danoeh.antennapod.core.event.QueueEvent; import de.danoeh.antennapod.core.feed.EventDistributor; 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.service.playback.PlaybackServiceTaskManager; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.PodDBAdapter; import de.danoeh.antennapod.core.util.playback.Playable; -import org.greenrobot.eventbus.EventBus; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -123,6 +129,42 @@ public class PlaybackServiceTaskManagerTest { pstm.shutdown(); } + @Test + public void testQueueUpdatedUponDownloadComplete() throws Exception { + final Context c = InstrumentationRegistry.getInstrumentation().getTargetContext(); + { // Setup test data + List queue = writeTestQueue("a"); + FeedItem item = DBReader.getFeedItem(queue.get(0).getId()); + FeedMedia media = new FeedMedia(item, "http://abc.test/acme.mp3", 12345, "audio/mp3"); + item.setMedia(media); + DBWriter.setFeedMedia(media).get(); + DBWriter.setFeedItem(item).get(); + } + + PlaybackServiceTaskManager pstm = new PlaybackServiceTaskManager(c, defaultPSTM); + final FeedItem testItem = pstm.getQueue().get(0); + assertThat("The item is not yet downloaded", + testItem.getMedia().isDownloaded(), is(false)); + + { // simulate download complete (in DownloadService.MediaHandlerThread) + FeedItem item = DBReader.getFeedItem(testItem.getId()); + item.getMedia().setDownloaded(true); + item.getMedia().setFile_url("file://123"); + item.setAutoDownload(false); + DBWriter.setFeedItem(item).get(); + DBWriter.setFeedMedia(item.getMedia()).get(); + } + + // an approximation to ensure the item update event has been posted and processed. + Thread.sleep(10); + + final FeedItem itemUpdated = pstm.getQueue().get(0); + assertThat("The queue in PlaybackService has been updated item after download is completed", + itemUpdated.getMedia().isDownloaded(), is(true)); + + pstm.shutdown(); + } + @Test public void testStartPositionSaver() throws InterruptedException { final Context c = InstrumentationRegistry.getInstrumentation().getTargetContext(); -- cgit v1.2.3 From 71de4607a35c0164f91687cabc81b62abd1df51c Mon Sep 17 00:00:00 2001 From: orionlee Date: Sun, 29 Sep 2019 12:55:02 -0700 Subject: bugfix: Ensure when media download completes and item update event is posted, the feed media has been updated, --- .../antennapod/service/playback/PlaybackServiceTaskManagerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/src/androidTest/java/de/test/antennapod') diff --git a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java index 91a796638..53a402e7b 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java @@ -151,8 +151,8 @@ public class PlaybackServiceTaskManagerTest { item.getMedia().setDownloaded(true); item.getMedia().setFile_url("file://123"); item.setAutoDownload(false); - DBWriter.setFeedItem(item).get(); DBWriter.setFeedMedia(item.getMedia()).get(); + DBWriter.setFeedItem(item).get(); } // an approximation to ensure the item update event has been posted and processed. -- cgit v1.2.3 From 38e9cafee3afb7010fb870e547dceb0f8ae9feec Mon Sep 17 00:00:00 2001 From: orionlee Date: Mon, 30 Sep 2019 11:59:55 -0700 Subject: test tweak - ensure playback queue updated after download - follow de-facto convention for test feeds --- .../antennapod/service/playback/PlaybackServiceTaskManagerTest.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'app/src/androidTest/java/de/test/antennapod') diff --git a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java index 53a402e7b..38b097d51 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java @@ -135,7 +135,7 @@ public class PlaybackServiceTaskManagerTest { { // Setup test data List queue = writeTestQueue("a"); FeedItem item = DBReader.getFeedItem(queue.get(0).getId()); - FeedMedia media = new FeedMedia(item, "http://abc.test/acme.mp3", 12345, "audio/mp3"); + FeedMedia media = new FeedMedia(item, "http://example.com/episode.mp3", 12345, "audio/mp3"); item.setMedia(media); DBWriter.setFeedMedia(media).get(); DBWriter.setFeedItem(item).get(); -- cgit v1.2.3 From cbf6103c00d4baad160ed5e6b6acba536d940c24 Mon Sep 17 00:00:00 2001 From: orionlee Date: Mon, 30 Sep 2019 12:07:53 -0700 Subject: test tweak - ensure playback queue updated after download - await for the event explicitly. --- .../playback/PlaybackServiceTaskManagerTest.java | 26 ++++++++++++++++++++-- 1 file changed, 24 insertions(+), 2 deletions(-) (limited to 'app/src/androidTest/java/de/test/antennapod') diff --git a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java index 38b097d51..1d2a72c92 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java @@ -5,7 +5,9 @@ import android.support.test.InstrumentationRegistry; import android.support.test.annotation.UiThreadTest; import android.support.test.filters.LargeTest; +import org.awaitility.Awaitility; import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -16,6 +18,7 @@ import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; +import de.danoeh.antennapod.core.event.FeedItemEvent; import de.danoeh.antennapod.core.event.QueueEvent; import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.Feed; @@ -146,6 +149,9 @@ public class PlaybackServiceTaskManagerTest { assertThat("The item is not yet downloaded", testItem.getMedia().isDownloaded(), is(false)); + FeedItemEventListener feedItemEventListener = new FeedItemEventListener(); + EventBus.getDefault().register(feedItemEventListener); + { // simulate download complete (in DownloadService.MediaHandlerThread) FeedItem item = DBReader.getFeedItem(testItem.getId()); item.getMedia().setDownloaded(true); @@ -155,16 +161,32 @@ public class PlaybackServiceTaskManagerTest { DBWriter.setFeedItem(item).get(); } - // an approximation to ensure the item update event has been posted and processed. - Thread.sleep(10); + Awaitility.await() + .atMost(1000, TimeUnit.MILLISECONDS) + .until(() -> feedItemEventListener.getEvents().size() > 0); final FeedItem itemUpdated = pstm.getQueue().get(0); assertThat("The queue in PlaybackService has been updated item after download is completed", itemUpdated.getMedia().isDownloaded(), is(true)); + EventBus.getDefault().unregister(feedItemEventListener); pstm.shutdown(); } + private static class FeedItemEventListener { + + private final List events = new ArrayList<>(); + + @Subscribe + public void onEvent(FeedItemEvent event) { + events.add(event); + } + + List getEvents() { + return events; + } + } + @Test public void testStartPositionSaver() throws InterruptedException { final Context c = InstrumentationRegistry.getInstrumentation().getTargetContext(); -- cgit v1.2.3 From 4a0a825c0895e3052075b285c33cc0fdecaa291a Mon Sep 17 00:00:00 2001 From: orionlee Date: Mon, 30 Sep 2019 12:18:41 -0700 Subject: test refactor - ensure playback queue updated after download - make test logic more readable by hiding EventBus setup in a helper. --- .../playback/PlaybackServiceTaskManagerTest.java | 37 +++++++++++++++------- 1 file changed, 25 insertions(+), 12 deletions(-) (limited to 'app/src/androidTest/java/de/test/antennapod') diff --git a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java index 1d2a72c92..2880e86eb 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java @@ -29,6 +29,7 @@ import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.PodDBAdapter; import de.danoeh.antennapod.core.util.playback.Playable; +import io.reactivex.functions.Consumer; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.MatcherAssert.assertThat; @@ -149,30 +150,42 @@ public class PlaybackServiceTaskManagerTest { assertThat("The item is not yet downloaded", testItem.getMedia().isDownloaded(), is(false)); - FeedItemEventListener feedItemEventListener = new FeedItemEventListener(); - EventBus.getDefault().register(feedItemEventListener); - - { // simulate download complete (in DownloadService.MediaHandlerThread) + withFeedItemEventListener( feedItemEventListener -> { + // simulate download complete (in DownloadService.MediaHandlerThread) FeedItem item = DBReader.getFeedItem(testItem.getId()); item.getMedia().setDownloaded(true); item.getMedia().setFile_url("file://123"); item.setAutoDownload(false); DBWriter.setFeedMedia(item.getMedia()).get(); DBWriter.setFeedItem(item).get(); - } - Awaitility.await() - .atMost(1000, TimeUnit.MILLISECONDS) - .until(() -> feedItemEventListener.getEvents().size() > 0); + Awaitility.await() + .atMost(1000, TimeUnit.MILLISECONDS) + .until(() -> feedItemEventListener.getEvents().size() > 0); - final FeedItem itemUpdated = pstm.getQueue().get(0); - assertThat("The queue in PlaybackService has been updated item after download is completed", - itemUpdated.getMedia().isDownloaded(), is(true)); + final FeedItem itemUpdated = pstm.getQueue().get(0); + assertThat("The queue in PlaybackService has been updated item after download is completed", + itemUpdated.getMedia().isDownloaded(), is(true)); + }); - EventBus.getDefault().unregister(feedItemEventListener); pstm.shutdown(); } + /** + * Provides an listener subscribing to {@link FeedItemEvent} that the callers can use + * + * Note: it uses RxJava's version of {@link Consumer} because it allows exceptions to be thrown. + */ + private static void withFeedItemEventListener(Consumer consumer) throws Exception { + FeedItemEventListener feedItemEventListener = new FeedItemEventListener(); + try { + EventBus.getDefault().register(feedItemEventListener); + consumer.accept(feedItemEventListener); + } finally { + EventBus.getDefault().unregister(feedItemEventListener); + } + } + private static class FeedItemEventListener { private final List events = new ArrayList<>(); -- cgit v1.2.3 From c0befc98542bc147a8aa341c48e6445d4cfbbfb7 Mon Sep 17 00:00:00 2001 From: orionlee Date: Mon, 30 Sep 2019 12:28:27 -0700 Subject: test tweak - ensure playback queue updated after download - use more concise assertTrue/False --- .../service/playback/PlaybackServiceTaskManagerTest.java | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) (limited to 'app/src/androidTest/java/de/test/antennapod') diff --git a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java index 2880e86eb..3a3a64d80 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java @@ -31,8 +31,6 @@ import de.danoeh.antennapod.core.storage.PodDBAdapter; import de.danoeh.antennapod.core.util.playback.Playable; import io.reactivex.functions.Consumer; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -147,8 +145,7 @@ public class PlaybackServiceTaskManagerTest { PlaybackServiceTaskManager pstm = new PlaybackServiceTaskManager(c, defaultPSTM); final FeedItem testItem = pstm.getQueue().get(0); - assertThat("The item is not yet downloaded", - testItem.getMedia().isDownloaded(), is(false)); + assertFalse("The item should not yet be downloaded", testItem.getMedia().isDownloaded()); withFeedItemEventListener( feedItemEventListener -> { // simulate download complete (in DownloadService.MediaHandlerThread) @@ -164,8 +161,8 @@ public class PlaybackServiceTaskManagerTest { .until(() -> feedItemEventListener.getEvents().size() > 0); final FeedItem itemUpdated = pstm.getQueue().get(0); - assertThat("The queue in PlaybackService has been updated item after download is completed", - itemUpdated.getMedia().isDownloaded(), is(true)); + assertTrue("media.isDownloaded() should be true - The queue in PlaybackService should be updated after download is completed", + itemUpdated.getMedia().isDownloaded()); }); pstm.shutdown(); -- cgit v1.2.3 From d84fc95f0d7b9bee3eb3970c853072f35bb24c55 Mon Sep 17 00:00:00 2001 From: orionlee Date: Mon, 30 Sep 2019 13:46:59 -0700 Subject: test for DownloadService, case media download successful. --- .../service/download/DownloadServiceTest.java | 158 +++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java (limited to 'app/src/androidTest/java/de/test/antennapod') diff --git a/app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java b/app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java new file mode 100644 index 000000000..3f309878e --- /dev/null +++ b/app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java @@ -0,0 +1,158 @@ +package de.test.antennapod.service.download; + +import android.support.annotation.NonNull; +import android.support.annotation.Nullable; +import android.support.test.InstrumentationRegistry; +import android.support.test.runner.AndroidJUnit4; + +import org.awaitility.Awaitility; +import org.awaitility.core.ConditionTimeoutException; +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import java.util.ArrayList; +import java.util.Date; +import java.util.List; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.TimeUnit; + +import de.danoeh.antennapod.core.event.FeedItemEvent; +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.service.download.DownloadRequest; +import de.danoeh.antennapod.core.service.download.DownloadService; +import de.danoeh.antennapod.core.service.download.DownloadStatus; +import de.danoeh.antennapod.core.service.download.Downloader; +import de.danoeh.antennapod.core.service.download.StubDownloader; +import de.danoeh.antennapod.core.storage.DBReader; +import de.danoeh.antennapod.core.storage.DBWriter; +import de.danoeh.antennapod.core.storage.DownloadRequester; +import de.danoeh.antennapod.core.util.Consumer; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +/** + * @see HttpDownloaderTest for the test of actual download (and saving the file) + */ +@RunWith(AndroidJUnit4.class) +public class DownloadServiceTest { + + private CountDownLatch latch = null; + private Feed testFeed = null; + private FeedMedia testMedia11 = null; + + private DownloadService.DownloaderFactory origFactory = null; + + @Before + public void setUp() throws Exception { + origFactory = DownloadService.getDownloaderFactory(); + testFeed = setUpTestFeeds(); + testMedia11 = testFeed.getItemAtIndex(0).getMedia(); + } + + private Feed setUpTestFeeds() throws Exception { + Feed feed = new Feed("url", null, "Test Feed title 1"); + List items = new ArrayList<>(); + feed.setItems(items); + FeedItem item1 = new FeedItem(0, "Item 1-1", "Item 1-1", "url", new Date(), FeedItem.NEW, feed); + items.add(item1); + FeedMedia media1 = new FeedMedia(0, item1, 123, 1, 1, "audio/mp3", null, "http://example.com/episode.mp3", false, null, 0, 0); + item1.setMedia(media1); + + DBWriter.setFeedItem(item1).get(); + return feed; + } + + + @After + public void tearDown() throws Exception { + DownloadService.setDownloaderFactory(origFactory); + } + + @Test + public void testEventsGeneratedCaseMediaDownloadSuccess() throws Exception { + // create a stub download that returns successful + // + // OPEN: Ideally, I'd like the download time long enough so that multiple in-progress DownloadEvents + // are generated (to simulate typical download), but it'll make download time quite long (1-2 seconds) + // to do so + DownloadService.setDownloaderFactory(new StubDownloaderFactory(50, downloadStatus -> { + downloadStatus.setSuccessful(); + })); + + withFeedItemEventListener(feedItemEventListener -> { + try { + assertEquals(0, feedItemEventListener.getEvents().size()); + assertFalse("The media in test should not yet been downloaded", + DBReader.getFeedMedia(testMedia11.getId()).isDownloaded()); + + DownloadRequester.getInstance().downloadMedia(InstrumentationRegistry.getTargetContext(), + testMedia11); + Awaitility.await() + .atMost(1000, TimeUnit.MILLISECONDS) + .until(() -> feedItemEventListener.getEvents().size() > 0); + assertTrue("After media download has completed, FeedMedia object in db should indicate so.", + DBReader.getFeedMedia(testMedia11.getId()).isDownloaded()); + } catch (ConditionTimeoutException cte) { + fail("The expected FeedItemEvent (for media download complete) has not been posted. " + + cte.getMessage()); + } + }); + } + + /** + * Provides an listener subscribing to {@link FeedItemEvent} that the callers can use + * + * Note: it uses RxJava's version of {@link io.reactivex.functions.Consumer} because it allows exceptions to be thrown. + */ + private static void withFeedItemEventListener(io.reactivex.functions.Consumer consumer) throws Exception { + FeedItemEventListener feedItemEventListener = new FeedItemEventListener(); + try { + EventBus.getDefault().register(feedItemEventListener); + consumer.accept(feedItemEventListener); + } finally { + EventBus.getDefault().unregister(feedItemEventListener); + } + } + + private static class FeedItemEventListener { + + private final List events = new ArrayList<>(); + + @Subscribe + public void onEvent(FeedItemEvent event) { + events.add(event); + } + + List getEvents() { + return events; + } + } + + private static class StubDownloaderFactory implements DownloadService.DownloaderFactory { + private final long downloadTime; + + @NonNull + private final Consumer onDownloadComplete; + + StubDownloaderFactory(long downloadTime, @NonNull Consumer onDownloadComplete) { + this.downloadTime = downloadTime; + this.onDownloadComplete = onDownloadComplete; + } + + @Nullable + @Override + public Downloader create(@NonNull DownloadRequest request) { + return new StubDownloader(request, downloadTime, onDownloadComplete); + } + } + +} -- cgit v1.2.3 From 9459460ed4bc202e6c7ad7f916e7a408593ef9f6 Mon Sep 17 00:00:00 2001 From: orionlee Date: Mon, 30 Sep 2019 13:55:50 -0700 Subject: test refactor - extract common FeedItemEventListener test helper. --- .../service/download/DownloadServiceTest.java | 33 +--------------- .../playback/PlaybackServiceTaskManagerTest.java | 33 +--------------- .../util/feed/FeedItemEventListener.java | 46 ++++++++++++++++++++++ 3 files changed, 48 insertions(+), 64 deletions(-) create mode 100644 app/src/androidTest/java/de/test/antennapod/util/feed/FeedItemEventListener.java (limited to 'app/src/androidTest/java/de/test/antennapod') diff --git a/app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java b/app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java index 3f309878e..d4f75cfe8 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java @@ -7,8 +7,6 @@ import android.support.test.runner.AndroidJUnit4; import org.awaitility.Awaitility; import org.awaitility.core.ConditionTimeoutException; -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -20,7 +18,6 @@ import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import de.danoeh.antennapod.core.event.FeedItemEvent; import de.danoeh.antennapod.core.feed.Feed; import de.danoeh.antennapod.core.feed.FeedItem; import de.danoeh.antennapod.core.feed.FeedMedia; @@ -34,6 +31,7 @@ import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.Consumer; +import static de.test.antennapod.util.feed.FeedItemEventListener.withFeedItemEventListener; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; @@ -108,35 +106,6 @@ public class DownloadServiceTest { }); } - /** - * Provides an listener subscribing to {@link FeedItemEvent} that the callers can use - * - * Note: it uses RxJava's version of {@link io.reactivex.functions.Consumer} because it allows exceptions to be thrown. - */ - private static void withFeedItemEventListener(io.reactivex.functions.Consumer consumer) throws Exception { - FeedItemEventListener feedItemEventListener = new FeedItemEventListener(); - try { - EventBus.getDefault().register(feedItemEventListener); - consumer.accept(feedItemEventListener); - } finally { - EventBus.getDefault().unregister(feedItemEventListener); - } - } - - private static class FeedItemEventListener { - - private final List events = new ArrayList<>(); - - @Subscribe - public void onEvent(FeedItemEvent event) { - events.add(event); - } - - List getEvents() { - return events; - } - } - private static class StubDownloaderFactory implements DownloadService.DownloaderFactory { private final long downloadTime; diff --git a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java index 3a3a64d80..b2aba30f8 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java @@ -7,7 +7,6 @@ import android.support.test.filters.LargeTest; import org.awaitility.Awaitility; import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -18,7 +17,6 @@ import java.util.List; import java.util.concurrent.CountDownLatch; import java.util.concurrent.TimeUnit; -import de.danoeh.antennapod.core.event.FeedItemEvent; import de.danoeh.antennapod.core.event.QueueEvent; import de.danoeh.antennapod.core.feed.EventDistributor; import de.danoeh.antennapod.core.feed.Feed; @@ -29,8 +27,8 @@ import de.danoeh.antennapod.core.storage.DBReader; import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.PodDBAdapter; import de.danoeh.antennapod.core.util.playback.Playable; -import io.reactivex.functions.Consumer; +import static de.test.antennapod.util.feed.FeedItemEventListener.withFeedItemEventListener; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; @@ -168,35 +166,6 @@ public class PlaybackServiceTaskManagerTest { pstm.shutdown(); } - /** - * Provides an listener subscribing to {@link FeedItemEvent} that the callers can use - * - * Note: it uses RxJava's version of {@link Consumer} because it allows exceptions to be thrown. - */ - private static void withFeedItemEventListener(Consumer consumer) throws Exception { - FeedItemEventListener feedItemEventListener = new FeedItemEventListener(); - try { - EventBus.getDefault().register(feedItemEventListener); - consumer.accept(feedItemEventListener); - } finally { - EventBus.getDefault().unregister(feedItemEventListener); - } - } - - private static class FeedItemEventListener { - - private final List events = new ArrayList<>(); - - @Subscribe - public void onEvent(FeedItemEvent event) { - events.add(event); - } - - List getEvents() { - return events; - } - } - @Test public void testStartPositionSaver() throws InterruptedException { final Context c = InstrumentationRegistry.getInstrumentation().getTargetContext(); diff --git a/app/src/androidTest/java/de/test/antennapod/util/feed/FeedItemEventListener.java b/app/src/androidTest/java/de/test/antennapod/util/feed/FeedItemEventListener.java new file mode 100644 index 000000000..ef371e39b --- /dev/null +++ b/app/src/androidTest/java/de/test/antennapod/util/feed/FeedItemEventListener.java @@ -0,0 +1,46 @@ +package de.test.antennapod.util.feed; + +import android.support.annotation.NonNull; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; + +import java.util.ArrayList; +import java.util.List; + +import de.danoeh.antennapod.core.event.FeedItemEvent; +import io.reactivex.functions.Consumer; + +/** + * Test helpers to listen {@link FeedItemEvent} and handle them accordingly + * + */ +public class FeedItemEventListener { + private final List events = new ArrayList<>(); + + /** + * Provides an listener subscribing to {@link FeedItemEvent} that the callers can use + * + * Note: it uses RxJava's version of {@link Consumer} because it allows exceptions to be thrown. + */ + public static void withFeedItemEventListener(@NonNull Consumer consumer) + throws Exception { + FeedItemEventListener feedItemEventListener = new FeedItemEventListener(); + try { + EventBus.getDefault().register(feedItemEventListener); + consumer.accept(feedItemEventListener); + } finally { + EventBus.getDefault().unregister(feedItemEventListener); + } + } + + @Subscribe + public void onEvent(FeedItemEvent event) { + events.add(event); + } + + @NonNull + public List getEvents() { + return events; + } +} -- cgit v1.2.3 From 8824b7568d73a7943ea716cf417ca95d4f70d3fc Mon Sep 17 00:00:00 2001 From: orionlee Date: Mon, 30 Sep 2019 20:34:12 -0700 Subject: test refactor - move the common FeedItemEventListener test helper to the proper event/ package. --- .../service/download/DownloadServiceTest.java | 2 +- .../playback/PlaybackServiceTaskManagerTest.java | 2 +- .../util/event/FeedItemEventListener.java | 46 ++++++++++++++++++++++ .../util/feed/FeedItemEventListener.java | 46 ---------------------- 4 files changed, 48 insertions(+), 48 deletions(-) create mode 100644 app/src/androidTest/java/de/test/antennapod/util/event/FeedItemEventListener.java delete mode 100644 app/src/androidTest/java/de/test/antennapod/util/feed/FeedItemEventListener.java (limited to 'app/src/androidTest/java/de/test/antennapod') diff --git a/app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java b/app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java index d4f75cfe8..81edb75ba 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/download/DownloadServiceTest.java @@ -31,7 +31,7 @@ import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.DownloadRequester; import de.danoeh.antennapod.core.util.Consumer; -import static de.test.antennapod.util.feed.FeedItemEventListener.withFeedItemEventListener; +import static de.test.antennapod.util.event.FeedItemEventListener.withFeedItemEventListener; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; diff --git a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java index b2aba30f8..35f178a44 100644 --- a/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java +++ b/app/src/androidTest/java/de/test/antennapod/service/playback/PlaybackServiceTaskManagerTest.java @@ -28,7 +28,7 @@ import de.danoeh.antennapod.core.storage.DBWriter; import de.danoeh.antennapod.core.storage.PodDBAdapter; import de.danoeh.antennapod.core.util.playback.Playable; -import static de.test.antennapod.util.feed.FeedItemEventListener.withFeedItemEventListener; +import static de.test.antennapod.util.event.FeedItemEventListener.withFeedItemEventListener; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertTrue; diff --git a/app/src/androidTest/java/de/test/antennapod/util/event/FeedItemEventListener.java b/app/src/androidTest/java/de/test/antennapod/util/event/FeedItemEventListener.java new file mode 100644 index 000000000..3088a3288 --- /dev/null +++ b/app/src/androidTest/java/de/test/antennapod/util/event/FeedItemEventListener.java @@ -0,0 +1,46 @@ +package de.test.antennapod.util.event; + +import android.support.annotation.NonNull; + +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; + +import java.util.ArrayList; +import java.util.List; + +import de.danoeh.antennapod.core.event.FeedItemEvent; +import io.reactivex.functions.Consumer; + +/** + * Test helpers to listen {@link FeedItemEvent} and handle them accordingly + * + */ +public class FeedItemEventListener { + private final List events = new ArrayList<>(); + + /** + * Provides an listener subscribing to {@link FeedItemEvent} that the callers can use + * + * Note: it uses RxJava's version of {@link Consumer} because it allows exceptions to be thrown. + */ + public static void withFeedItemEventListener(@NonNull Consumer consumer) + throws Exception { + FeedItemEventListener feedItemEventListener = new FeedItemEventListener(); + try { + EventBus.getDefault().register(feedItemEventListener); + consumer.accept(feedItemEventListener); + } finally { + EventBus.getDefault().unregister(feedItemEventListener); + } + } + + @Subscribe + public void onEvent(FeedItemEvent event) { + events.add(event); + } + + @NonNull + public List getEvents() { + return events; + } +} diff --git a/app/src/androidTest/java/de/test/antennapod/util/feed/FeedItemEventListener.java b/app/src/androidTest/java/de/test/antennapod/util/feed/FeedItemEventListener.java deleted file mode 100644 index ef371e39b..000000000 --- a/app/src/androidTest/java/de/test/antennapod/util/feed/FeedItemEventListener.java +++ /dev/null @@ -1,46 +0,0 @@ -package de.test.antennapod.util.feed; - -import android.support.annotation.NonNull; - -import org.greenrobot.eventbus.EventBus; -import org.greenrobot.eventbus.Subscribe; - -import java.util.ArrayList; -import java.util.List; - -import de.danoeh.antennapod.core.event.FeedItemEvent; -import io.reactivex.functions.Consumer; - -/** - * Test helpers to listen {@link FeedItemEvent} and handle them accordingly - * - */ -public class FeedItemEventListener { - private final List events = new ArrayList<>(); - - /** - * Provides an listener subscribing to {@link FeedItemEvent} that the callers can use - * - * Note: it uses RxJava's version of {@link Consumer} because it allows exceptions to be thrown. - */ - public static void withFeedItemEventListener(@NonNull Consumer consumer) - throws Exception { - FeedItemEventListener feedItemEventListener = new FeedItemEventListener(); - try { - EventBus.getDefault().register(feedItemEventListener); - consumer.accept(feedItemEventListener); - } finally { - EventBus.getDefault().unregister(feedItemEventListener); - } - } - - @Subscribe - public void onEvent(FeedItemEvent event) { - events.add(event); - } - - @NonNull - public List getEvents() { - return events; - } -} -- cgit v1.2.3