Read current media from preferences instead of activity->fragment->controller
This commit is contained in:
parent
51442cb047
commit
376600d5b4
@ -16,6 +16,7 @@ import androidx.test.espresso.util.TreeIterables;
|
||||
import android.view.View;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.activity.MainActivity;
|
||||
import de.danoeh.antennapod.core.service.download.DownloadService;
|
||||
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
||||
import de.danoeh.antennapod.core.storage.PodDBAdapter;
|
||||
import de.danoeh.antennapod.dialog.RatingDialog;
|
||||
@ -176,4 +177,19 @@ public class EspressoTestUtils {
|
||||
}
|
||||
androidx.test.platform.app.InstrumentationRegistry.getInstrumentation().waitForIdleSync();
|
||||
}
|
||||
|
||||
public static void tryKillDownloadService() {
|
||||
Context context = InstrumentationRegistry.getTargetContext();
|
||||
context.stopService(new Intent(context, DownloadService.class));
|
||||
try {
|
||||
// Android has no reliable way to stop a service instantly.
|
||||
// Calling stopSelf marks allows the system to destroy the service but the actual call
|
||||
// to onDestroy takes until the next GC of the system, which we can not influence.
|
||||
// Try to wait for the service at least a bit.
|
||||
Awaitility.await().atMost(10, TimeUnit.SECONDS).until(() -> !DownloadService.isRunning);
|
||||
} catch (ConditionTimeoutException e) {
|
||||
e.printStackTrace();
|
||||
}
|
||||
androidx.test.platform.app.InstrumentationRegistry.getInstrumentation().waitForIdleSync();
|
||||
}
|
||||
}
|
||||
|
@ -12,8 +12,8 @@ import androidx.test.rule.ActivityTestRule;
|
||||
import de.danoeh.antennapod.R;
|
||||
import de.danoeh.antennapod.activity.MainActivity;
|
||||
import de.danoeh.antennapod.core.feed.FeedItem;
|
||||
import de.danoeh.antennapod.core.feed.FeedMedia;
|
||||
import de.danoeh.antennapod.core.preferences.UserPreferences;
|
||||
import de.danoeh.antennapod.core.receiver.MediaButtonReceiver;
|
||||
import de.danoeh.antennapod.core.service.playback.PlaybackService;
|
||||
import de.danoeh.antennapod.core.service.playback.PlayerStatus;
|
||||
import de.danoeh.antennapod.core.storage.DBReader;
|
||||
@ -117,22 +117,10 @@ public class PlaybackTest {
|
||||
final FeedItem second = queue.get(1);
|
||||
|
||||
playFromQueue(0);
|
||||
Awaitility.await().atMost(2, TimeUnit.SECONDS).until(() -> {
|
||||
if (uiTestUtils.getCurrentMedia(getActivity()) != null) {
|
||||
return uiTestUtils.getCurrentMedia(getActivity()).getId()
|
||||
== first.getMedia().getId();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
Awaitility.await().atMost(5, TimeUnit.SECONDS).until(() -> {
|
||||
if (uiTestUtils.getCurrentMedia(getActivity()) != null) {
|
||||
return uiTestUtils.getCurrentMedia(getActivity()).getId()
|
||||
== second.getMedia().getId();
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
Awaitility.await().atMost(2, TimeUnit.SECONDS).until(
|
||||
() -> first.getMedia().equals(uiTestUtils.getCurrentMedia()));
|
||||
Awaitility.await().atMost(6, TimeUnit.SECONDS).until(
|
||||
() -> second.getMedia().equals(uiTestUtils.getCurrentMedia()));
|
||||
}
|
||||
|
||||
|
||||
@ -240,14 +228,9 @@ public class PlaybackTest {
|
||||
onView(isRoot()).perform(waitForView(allEpisodesMatcher, 1000));
|
||||
onView(allEpisodesMatcher).perform(actionOnItemAtPosition(0, clickChildViewWithId(R.id.butSecondaryAction)));
|
||||
|
||||
long mediaId = episodes.get(0).getMedia().getId();
|
||||
Awaitility.await().atMost(1, TimeUnit.SECONDS).until(() -> {
|
||||
if (uiTestUtils.getCurrentMedia(getActivity()) != null) {
|
||||
return uiTestUtils.getCurrentMedia(getActivity()).getId() == mediaId;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
FeedMedia media = episodes.get(0).getMedia();
|
||||
Awaitility.await().atMost(1, TimeUnit.SECONDS).until(
|
||||
() -> media.equals(uiTestUtils.getCurrentMedia()));
|
||||
}
|
||||
|
||||
/**
|
||||
@ -261,15 +244,10 @@ public class PlaybackTest {
|
||||
onView(isRoot()).perform(waitForView(queueMatcher, 1000));
|
||||
onView(queueMatcher).perform(actionOnItemAtPosition(itemIdx, clickChildViewWithId(R.id.butSecondaryAction)));
|
||||
|
||||
onView(isRoot()).perform(waitForView(withId(R.id.butPlay), 1000));
|
||||
long mediaId = queue.get(itemIdx).getMedia().getId();
|
||||
Awaitility.await().atMost(1, TimeUnit.SECONDS).until(() -> {
|
||||
if (uiTestUtils.getCurrentMedia(getActivity()) != null) {
|
||||
return uiTestUtils.getCurrentMedia(getActivity()).getId() == mediaId;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
FeedMedia media = queue.get(itemIdx).getMedia();
|
||||
Awaitility.await().atMost(1, TimeUnit.SECONDS).until(
|
||||
() -> media.equals(uiTestUtils.getCurrentMedia()));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
@ -283,27 +261,17 @@ public class PlaybackTest {
|
||||
final List<FeedItem> episodes = DBReader.getRecentlyPublishedEpisodes(0, 10);
|
||||
|
||||
startLocalPlayback();
|
||||
long mediaId = episodes.get(0).getMedia().getId();
|
||||
Awaitility.await().atMost(1, TimeUnit.SECONDS).until(() -> {
|
||||
if (uiTestUtils.getCurrentMedia(getActivity()) != null) {
|
||||
return uiTestUtils.getCurrentMedia(getActivity()).getId() == mediaId;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
FeedMedia media = episodes.get(0).getMedia();
|
||||
Awaitility.await().atMost(1, TimeUnit.SECONDS).until(
|
||||
() -> media.equals(uiTestUtils.getCurrentMedia()));
|
||||
|
||||
Awaitility.await().atMost(5, TimeUnit.SECONDS).until(() ->
|
||||
uiTestUtils.getCurrentMedia(getActivity()) == null
|
||||
|| uiTestUtils.getCurrentMedia(getActivity()).getId() != mediaId);
|
||||
Awaitility.await().atMost(5, TimeUnit.SECONDS).until(
|
||||
() -> !media.equals(uiTestUtils.getCurrentMedia()));
|
||||
|
||||
startLocalPlayback();
|
||||
Awaitility.await().atMost(1, TimeUnit.SECONDS).until(() -> {
|
||||
if (uiTestUtils.getCurrentMedia(getActivity()) != null) {
|
||||
return uiTestUtils.getCurrentMedia(getActivity()).getId() == mediaId;
|
||||
} else {
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
Awaitility.await().atMost(1, TimeUnit.SECONDS).until(
|
||||
() -> media.equals(uiTestUtils.getCurrentMedia()));
|
||||
}
|
||||
|
||||
protected void doTestSmartMarkAsPlayed_Skip_ForEpisode(int itemIdxNegAllowed) throws Exception {
|
||||
|
@ -1,5 +1,7 @@
|
||||
package de.test.antennapod.service.download;
|
||||
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import androidx.annotation.NonNull;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.test.InstrumentationRegistry;
|
||||
@ -80,6 +82,10 @@ public class DownloadServiceTest {
|
||||
@After
|
||||
public void tearDown() throws Exception {
|
||||
DownloadService.setDownloaderFactory(origFactory);
|
||||
Context context = InstrumentationRegistry.getTargetContext();
|
||||
DownloadRequester.getInstance().cancelAllDownloads(context);
|
||||
context.stopService(new Intent(context, DownloadService.class));
|
||||
EspressoTestUtils.tryKillDownloadService();
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -139,8 +145,9 @@ public class DownloadServiceTest {
|
||||
}
|
||||
|
||||
private void doTestCancelDownload_UndoEnqueue(boolean itemAlreadyInQueue) throws Exception {
|
||||
Context context = InstrumentationRegistry.getTargetContext();
|
||||
// let download takes longer to ensure the test can cancel the download in time
|
||||
DownloadService.setDownloaderFactory(new StubDownloaderFactory(150, downloadStatus -> {
|
||||
DownloadService.setDownloaderFactory(new StubDownloaderFactory(10000, downloadStatus -> {
|
||||
downloadStatus.setSuccessful();
|
||||
}));
|
||||
UserPreferences.setEnqueueDownloadedEpisodes(true);
|
||||
@ -149,45 +156,38 @@ public class DownloadServiceTest {
|
||||
final long item1Id = testMedia11.getItem().getId();
|
||||
if (itemAlreadyInQueue) {
|
||||
// simulate item already in queue condition
|
||||
DBWriter.addQueueItem(InstrumentationRegistry.getTargetContext(), false, item1Id).get();
|
||||
DBWriter.addQueueItem(context, false, item1Id).get();
|
||||
assertTrue(DBReader.getQueueIDList().contains(item1Id));
|
||||
} else {
|
||||
assertFalse(DBReader.getQueueIDList().contains(item1Id));
|
||||
}
|
||||
|
||||
withFeedItemEventListener(feedItemEventListener -> {
|
||||
try {
|
||||
DownloadRequester.getInstance().downloadMedia(false, InstrumentationRegistry.getTargetContext(),
|
||||
testMedia11.getItem());
|
||||
if (itemAlreadyInQueue) {
|
||||
Awaitility.await("download service receives the request - "
|
||||
+ "no event is expected before cancel is issued")
|
||||
.atLeast(100, TimeUnit.MILLISECONDS)
|
||||
.until(() -> true);
|
||||
} else {
|
||||
Awaitility.await("item enqueue event")
|
||||
.atMost(1000, TimeUnit.MILLISECONDS)
|
||||
.until(() -> feedItemEventListener.getEvents().size() >= 1);
|
||||
}
|
||||
DownloadRequester.getInstance().cancelDownload(InstrumentationRegistry.getTargetContext(),
|
||||
testMedia11);
|
||||
final int totalNumEventsExpected = itemAlreadyInQueue ? 1 : 3;
|
||||
Awaitility.await("item dequeue event + download termination event")
|
||||
.atMost(1000, TimeUnit.MILLISECONDS)
|
||||
.until(() -> feedItemEventListener.getEvents().size() >= totalNumEventsExpected);
|
||||
assertFalse("The download should have been canceled",
|
||||
DBReader.getFeedMedia(testMedia11.getId()).isDownloaded());
|
||||
if (itemAlreadyInQueue) {
|
||||
assertTrue("The FeedItem should still be in the queue after the download is cancelled."
|
||||
+ " It's there before download.",
|
||||
DBReader.getQueueIDList().contains(item1Id));
|
||||
} else {
|
||||
assertFalse("The FeedItem should not be in the queue after the download is cancelled.",
|
||||
DBReader.getQueueIDList().contains(item1Id));
|
||||
}
|
||||
} catch (ConditionTimeoutException cte) {
|
||||
fail("The expected FeedItemEvent (for media download complete) has not been posted. "
|
||||
+ cte.getMessage());
|
||||
DownloadRequester.getInstance().downloadMedia(false, context, testMedia11.getItem());
|
||||
if (itemAlreadyInQueue) {
|
||||
Awaitility.await("download service receives the request - "
|
||||
+ "no event is expected before cancel is issued")
|
||||
.atLeast(100, TimeUnit.MILLISECONDS)
|
||||
.until(() -> true);
|
||||
} else {
|
||||
Awaitility.await("item enqueue event")
|
||||
.atMost(2000, TimeUnit.MILLISECONDS)
|
||||
.until(() -> feedItemEventListener.getEvents().size() >= 1);
|
||||
}
|
||||
DownloadRequester.getInstance().cancelDownload(context, testMedia11);
|
||||
final int totalNumEventsExpected = itemAlreadyInQueue ? 1 : 3;
|
||||
Awaitility.await("item dequeue event + download termination event")
|
||||
.atMost(1000, TimeUnit.MILLISECONDS)
|
||||
.until(() -> feedItemEventListener.getEvents().size() >= totalNumEventsExpected);
|
||||
assertFalse("The download should have been canceled",
|
||||
DBReader.getFeedMedia(testMedia11.getId()).isDownloaded());
|
||||
if (itemAlreadyInQueue) {
|
||||
assertTrue("The FeedItem should still be in the queue after the download is cancelled."
|
||||
+ " It's there before download.",
|
||||
DBReader.getQueueIDList().contains(item1Id));
|
||||
} else {
|
||||
assertFalse("The FeedItem should not be in the queue after the download is cancelled.",
|
||||
DBReader.getQueueIDList().contains(item1Id));
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -29,10 +29,12 @@ import static androidx.test.espresso.contrib.ActivityResultMatchers.hasResultCod
|
||||
import static androidx.test.espresso.intent.Intents.intended;
|
||||
import static androidx.test.espresso.intent.Intents.times;
|
||||
import static androidx.test.espresso.intent.matcher.IntentMatchers.hasComponent;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.isRoot;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withId;
|
||||
import static androidx.test.espresso.matcher.ViewMatchers.withText;
|
||||
import static de.test.antennapod.EspressoTestUtils.clickPreference;
|
||||
import static de.test.antennapod.EspressoTestUtils.openNavDrawer;
|
||||
import static de.test.antennapod.EspressoTestUtils.waitForView;
|
||||
import static junit.framework.TestCase.assertTrue;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertThat;
|
||||
@ -79,7 +81,7 @@ public class MainActivityTest {
|
||||
onView(withText(R.string.confirm_label)).perform(scrollTo(), click());
|
||||
Espresso.closeSoftKeyboard();
|
||||
onView(withText(R.string.subscribe_label)).perform(click());
|
||||
intended(hasComponent(MainActivity.class.getName()), times(2));
|
||||
onView(isRoot()).perform(waitForView(withId(R.id.butShowSettings), 5000));
|
||||
}
|
||||
|
||||
private String getActionbarTitle() {
|
||||
|
@ -86,7 +86,7 @@ public class SpeedChangeTest {
|
||||
public void testChangeSpeedPlaying() {
|
||||
onView(isRoot()).perform(waitForView(withId(R.id.butPlay), 1000));
|
||||
onView(withId(R.id.butPlay)).perform(click());
|
||||
Awaitility.await().atMost(2, TimeUnit.SECONDS).until(()
|
||||
Awaitility.await().atMost(5, TimeUnit.SECONDS).until(()
|
||||
-> activityRule.getActivity().getPlaybackController().getStatus() == PlayerStatus.PLAYING);
|
||||
clickThroughSpeeds();
|
||||
}
|
||||
@ -95,10 +95,10 @@ public class SpeedChangeTest {
|
||||
public void testChangeSpeedPaused() {
|
||||
onView(isRoot()).perform(waitForView(withId(R.id.butPlay), 1000));
|
||||
onView(withId(R.id.butPlay)).perform(click());
|
||||
Awaitility.await().atMost(2, TimeUnit.SECONDS).until(()
|
||||
Awaitility.await().atMost(5, TimeUnit.SECONDS).until(()
|
||||
-> activityRule.getActivity().getPlaybackController().getStatus() == PlayerStatus.PLAYING);
|
||||
onView(withId(R.id.butPlay)).perform(click());
|
||||
Awaitility.await().atMost(2, TimeUnit.SECONDS).until(()
|
||||
Awaitility.await().atMost(5, TimeUnit.SECONDS).until(()
|
||||
-> activityRule.getActivity().getPlaybackController().getStatus() == PlayerStatus.PAUSED);
|
||||
clickThroughSpeeds();
|
||||
}
|
||||
|
@ -5,6 +5,7 @@ import android.graphics.Bitmap;
|
||||
import android.util.Log;
|
||||
|
||||
import de.danoeh.antennapod.core.event.FeedListUpdateEvent;
|
||||
import de.danoeh.antennapod.core.util.playback.Playable;
|
||||
import org.apache.commons.io.FileUtils;
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
@ -204,12 +205,14 @@ public class UITestUtils {
|
||||
}
|
||||
|
||||
public PlaybackController getPlaybackController(MainActivity mainActivity) {
|
||||
ExternalPlayerFragment fragment = (ExternalPlayerFragment)mainActivity.getSupportFragmentManager().findFragmentByTag(ExternalPlayerFragment.TAG);
|
||||
ExternalPlayerFragment fragment = (ExternalPlayerFragment) mainActivity.getSupportFragmentManager()
|
||||
.findFragmentByTag(ExternalPlayerFragment.TAG);
|
||||
return fragment.getPlaybackControllerTestingOnly();
|
||||
}
|
||||
|
||||
public FeedMedia getCurrentMedia(MainActivity mainActivity) {
|
||||
return (FeedMedia)getPlaybackController(mainActivity).getMedia();
|
||||
public FeedMedia getCurrentMedia() {
|
||||
Playable playable = Playable.PlayableUtils.createInstanceFromPreferences(context);
|
||||
return (FeedMedia) playable;
|
||||
}
|
||||
|
||||
public void setMediaFileName(String filename) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user