mirror of
https://github.com/androidx/media.git
synced 2025-04-29 22:36:54 +08:00
Rename TestPlayerRunHelper.run(...)
to advance(...)
This avoids a clash with the `run` keyword in Kotlin. PiperOrigin-RevId: 726461032
This commit is contained in:
parent
9e22f03718
commit
12072f7248
@ -58,10 +58,10 @@ import static androidx.media3.test.utils.FakeTimeline.TimelineWindowDefinition.D
|
||||
import static androidx.media3.test.utils.TestUtil.assertTimelinesSame;
|
||||
import static androidx.media3.test.utils.TestUtil.timelinesAreSame;
|
||||
import static androidx.media3.test.utils.robolectric.RobolectricUtil.runMainLooperUntil;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.advance;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.play;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.playUntilPosition;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.playUntilStartOfMediaItem;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.run;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.runUntilError;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.runUntilPendingCommandsAreFullyHandled;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.runUntilPlayWhenReady;
|
||||
@ -4465,7 +4465,7 @@ public class ExoPlayerTest {
|
||||
.getLastAudioFocusRequest()
|
||||
.listener
|
||||
.onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
boolean playWhenReady = player.getPlayWhenReady();
|
||||
@Player.PlaybackSuppressionReason int suppressionReason = player.getPlaybackSuppressionReason();
|
||||
player.release();
|
||||
@ -4501,14 +4501,14 @@ public class ExoPlayerTest {
|
||||
.getLastAudioFocusRequest()
|
||||
.listener
|
||||
.onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
boolean playWhenReady = player.getPlayWhenReady();
|
||||
@Player.PlaybackSuppressionReason int suppressionReason = player.getPlaybackSuppressionReason();
|
||||
shadowOf(audioManager)
|
||||
.getLastAudioFocusRequest()
|
||||
.listener
|
||||
.onAudioFocusChange(AudioManager.AUDIOFOCUS_GAIN);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
boolean playWhenReadyAfterGain = player.getPlayWhenReady();
|
||||
@Player.PlaybackSuppressionReason
|
||||
int suppressionReasonAfterGain = player.getPlaybackSuppressionReason();
|
||||
@ -4553,7 +4553,7 @@ public class ExoPlayerTest {
|
||||
.getLastAudioFocusRequest()
|
||||
.listener
|
||||
.onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
player.pause();
|
||||
boolean playWhenReady = player.getPlayWhenReady();
|
||||
@Player.PlaybackSuppressionReason int suppressionReason = player.getPlaybackSuppressionReason();
|
||||
@ -4610,7 +4610,7 @@ public class ExoPlayerTest {
|
||||
.getLastAudioFocusRequest()
|
||||
.listener
|
||||
.onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
boolean playWhenReady = player.getPlayWhenReady();
|
||||
@Player.PlaybackSuppressionReason int suppressionReason = player.getPlaybackSuppressionReason();
|
||||
player.release();
|
||||
@ -4644,7 +4644,7 @@ public class ExoPlayerTest {
|
||||
.getLastAudioFocusRequest()
|
||||
.listener
|
||||
.onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
boolean playWhenReady = player.getPlayWhenReady();
|
||||
@Player.PlaybackSuppressionReason int suppressionReason = player.getPlaybackSuppressionReason();
|
||||
player.release();
|
||||
@ -4684,14 +4684,14 @@ public class ExoPlayerTest {
|
||||
.getLastAudioFocusRequest()
|
||||
.listener
|
||||
.onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
boolean playWhenReady = player.getPlayWhenReady();
|
||||
@Player.PlaybackSuppressionReason int suppressionReason = player.getPlaybackSuppressionReason();
|
||||
shadowOf(audioManager)
|
||||
.getLastAudioFocusRequest()
|
||||
.listener
|
||||
.onAudioFocusChange(AudioManager.AUDIOFOCUS_GAIN);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
boolean playWhenReadyAfterGain = player.getPlayWhenReady();
|
||||
@Player.PlaybackSuppressionReason
|
||||
int suppressionReasonAfterGain = player.getPlaybackSuppressionReason();
|
||||
@ -4740,7 +4740,7 @@ public class ExoPlayerTest {
|
||||
.getLastAudioFocusRequest()
|
||||
.listener
|
||||
.onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
player.play();
|
||||
boolean playWhenReady = player.getPlayWhenReady();
|
||||
@Player.PlaybackSuppressionReason int suppressionReason = player.getPlaybackSuppressionReason();
|
||||
@ -4803,7 +4803,7 @@ public class ExoPlayerTest {
|
||||
.getLastAudioFocusRequest()
|
||||
.listener
|
||||
.onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
boolean playWhenReady = player.getPlayWhenReady();
|
||||
@Player.PlaybackSuppressionReason int suppressionReason = player.getPlaybackSuppressionReason();
|
||||
player.release();
|
||||
@ -7278,7 +7278,7 @@ public class ExoPlayerTest {
|
||||
player.setMediaSource(mediaSource);
|
||||
|
||||
player.prepare();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
|
||||
assertThat(createdMediaPeriodIds).hasSize(2);
|
||||
player.setRepeatMode(Player.REPEAT_MODE_OFF);
|
||||
@ -7384,7 +7384,7 @@ public class ExoPlayerTest {
|
||||
player.setMediaSources(ImmutableList.of(mediaSource1, mediaSource2));
|
||||
|
||||
player.prepare();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
|
||||
// Assert both media periods are created, prepared and loaded when paused after preparation.
|
||||
assertThat(createdMediaPeriodIds)
|
||||
@ -7492,7 +7492,7 @@ public class ExoPlayerTest {
|
||||
player.setMediaSources(ImmutableList.of(mediaSource1, mediaSource2));
|
||||
|
||||
player.prepare();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
|
||||
// Assert the media period of the second source isn't created yet.
|
||||
assertThat(createdMediaPeriodIds).containsExactly(firstMediaPeriodId);
|
||||
@ -11305,9 +11305,9 @@ public class ExoPlayerTest {
|
||||
player.play();
|
||||
runUntilPlaybackState(player, Player.STATE_READY);
|
||||
|
||||
run(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 500);
|
||||
advance(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 500);
|
||||
renderCounter.set(0);
|
||||
run(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 800);
|
||||
advance(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 800);
|
||||
|
||||
assertThat(renderCounter.get()).isEqualTo(2);
|
||||
|
||||
@ -11329,9 +11329,9 @@ public class ExoPlayerTest {
|
||||
player.play();
|
||||
runUntilPlaybackState(player, Player.STATE_READY);
|
||||
|
||||
run(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 500);
|
||||
advance(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 500);
|
||||
renderCounter.set(0);
|
||||
run(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 800);
|
||||
advance(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 800);
|
||||
|
||||
assertThat(renderCounter.get()).isEqualTo(30);
|
||||
|
||||
@ -11365,9 +11365,9 @@ public class ExoPlayerTest {
|
||||
player.play();
|
||||
runUntilPlaybackState(player, Player.STATE_READY);
|
||||
|
||||
run(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 500);
|
||||
advance(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 500);
|
||||
renderCounter.set(0);
|
||||
run(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 800);
|
||||
advance(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 800);
|
||||
|
||||
assertThat(renderCounter.get()).isEqualTo(10);
|
||||
|
||||
@ -11392,9 +11392,9 @@ public class ExoPlayerTest {
|
||||
new FakeMediaSource(new FakeTimeline(), ExoPlayerTestRunner.AUDIO_FORMAT));
|
||||
player.prepare();
|
||||
|
||||
run(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 1000);
|
||||
advance(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 1000);
|
||||
renderCounter.set(0);
|
||||
run(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 3000);
|
||||
advance(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 3000);
|
||||
|
||||
assertThat(renderCounter.get()).isEqualTo(2);
|
||||
|
||||
@ -11432,9 +11432,9 @@ public class ExoPlayerTest {
|
||||
player.play();
|
||||
runUntilPlaybackState(player, Player.STATE_BUFFERING);
|
||||
|
||||
run(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 200);
|
||||
advance(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 200);
|
||||
renderCounter.set(0);
|
||||
run(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 500);
|
||||
advance(player).untilBackgroundThreadCondition(() -> clock.currentTimeMillis() >= 500);
|
||||
|
||||
assertThat(renderCounter.get()).isEqualTo(30);
|
||||
|
||||
@ -14188,7 +14188,7 @@ public class ExoPlayerTest {
|
||||
.setDeviceVolumeControlEnabled(true))
|
||||
.build();
|
||||
Player.Listener listener = mock(Player.Listener.class);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
|
||||
int deviceVolume = player.getDeviceVolume();
|
||||
int noVolumeFlags = 0;
|
||||
@ -14537,8 +14537,8 @@ public class ExoPlayerTest {
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int audioState1 = audioRenderer.getState();
|
||||
// Play until we reached the start of the second item.
|
||||
run(player).untilBackgroundThreadCondition(() -> player.getCurrentMediaItemIndex() == 1);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilBackgroundThreadCondition(() -> player.getCurrentMediaItemIndex() == 1);
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@Renderer.State int audioState2 = audioRenderer.getState();
|
||||
player.release();
|
||||
@ -14569,17 +14569,17 @@ public class ExoPlayerTest {
|
||||
play(player).untilBackgroundThreadCondition(() -> player.getCurrentPosition() >= 5000);
|
||||
// Pause in this "Read Ahead" state.
|
||||
player.pause();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int audioState1 = audioRenderer.getState();
|
||||
// Play in this "Read Ahead" state.
|
||||
player.play();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@Renderer.State int audioState2 = audioRenderer.getState();
|
||||
// Play until the start of the second item.
|
||||
run(player).untilBackgroundThreadCondition(() -> player.getCurrentMediaItemIndex() == 1);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilBackgroundThreadCondition(() -> player.getCurrentMediaItemIndex() == 1);
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState3 = videoRenderer.getState();
|
||||
@Renderer.State int audioState3 = audioRenderer.getState();
|
||||
player.release();
|
||||
@ -16015,7 +16015,7 @@ public class ExoPlayerTest {
|
||||
(format, mediaPeriodId) -> ImmutableList.of(),
|
||||
ExoPlayerTestRunner.VIDEO_FORMAT));
|
||||
player.prepare();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
priorityTaskManager.add(C.PRIORITY_PLAYBACK + 1); // Higher priority than playback.
|
||||
|
||||
boolean canProcessOtherTask = priorityTaskManager.proceedNonBlocking(C.PRIORITY_PLAYBACK + 1);
|
||||
@ -16045,7 +16045,7 @@ public class ExoPlayerTest {
|
||||
(format, mediaPeriodId) -> ImmutableList.of(),
|
||||
ExoPlayerTestRunner.VIDEO_FORMAT));
|
||||
player.prepare();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
priorityTaskManager.add(C.PRIORITY_PLAYBACK - 1); // Lower priority than playback.
|
||||
|
||||
boolean canProcessOtherTask = priorityTaskManager.proceedNonBlocking(C.PRIORITY_PLAYBACK + 1);
|
||||
@ -16078,7 +16078,7 @@ public class ExoPlayerTest {
|
||||
.build();
|
||||
|
||||
player.setPriority(C.PRIORITY_DOWNLOAD);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
player.release();
|
||||
|
||||
// Assert default setting and updated setting arrived in the renderer.
|
||||
@ -16099,10 +16099,10 @@ public class ExoPlayerTest {
|
||||
FakeMediaSource fakeMediaSource = new FakeMediaSource(timeline1);
|
||||
player.setMediaSources(ImmutableList.of(fakeMediaSource, new FakeMediaSource()));
|
||||
player.prepare();
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
|
||||
fakeMediaSource.setNewSourceInfo(timeline2);
|
||||
run(player).untilTimelineChanges();
|
||||
advance(player).untilTimelineChanges();
|
||||
int windowIndexAfterUpdate = player.getCurrentMediaItemIndex();
|
||||
player.release();
|
||||
|
||||
@ -16136,10 +16136,10 @@ public class ExoPlayerTest {
|
||||
FakeMediaSource liveSource = new FakeMediaSource(liveTimeline1);
|
||||
player.setMediaSources(ImmutableList.of(liveSource, new FakeMediaSource()));
|
||||
player.prepare();
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
|
||||
liveSource.setNewSourceInfo(liveTimeline2);
|
||||
run(player).untilTimelineChanges();
|
||||
advance(player).untilTimelineChanges();
|
||||
int windowIndexAfterUpdate = player.getCurrentMediaItemIndex();
|
||||
player.release();
|
||||
|
||||
@ -16175,20 +16175,20 @@ public class ExoPlayerTest {
|
||||
player.setMediaSources(ImmutableList.of(liveSource, new FakeMediaSource()));
|
||||
player.prepare();
|
||||
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
player
|
||||
.createMessage(
|
||||
(message, payload) -> {
|
||||
throw new IllegalStateException();
|
||||
})
|
||||
.send();
|
||||
run(player).untilPlayerError();
|
||||
advance(player).untilPlayerError();
|
||||
liveSource.setNewSourceInfo(liveTimeline2);
|
||||
liveSource.setAllowPreparation(false); // Lazily update timeline to simulate new manifest load
|
||||
player.prepare();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
liveSource.setAllowPreparation(true);
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
int mediaItemIndexAfterReprepare = player.getCurrentMediaItemIndex();
|
||||
player.release();
|
||||
|
||||
@ -16257,10 +16257,10 @@ public class ExoPlayerTest {
|
||||
|
||||
player.setPlayWhenReady(true);
|
||||
player.prepare();
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
player.setPlayWhenReady(false);
|
||||
player.setPlayWhenReady(true);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
player.release();
|
||||
|
||||
assertThat(reportedPlayWhenReadyChanges).containsExactly(true, false, true).inOrder();
|
||||
@ -16293,10 +16293,10 @@ public class ExoPlayerTest {
|
||||
|
||||
player.setPlaybackSpeed(2f);
|
||||
player.prepare();
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
player.setPlaybackSpeed(1.5f);
|
||||
player.setPlaybackSpeed(1f);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
player.release();
|
||||
|
||||
assertThat(reportedSpeedChanges).containsExactly(2f, 1.5f, 1f).inOrder();
|
||||
|
@ -18,7 +18,7 @@ package androidx.media3.exoplayer;
|
||||
import static androidx.media3.common.Player.REPEAT_MODE_ONE;
|
||||
import static androidx.media3.test.utils.FakeSampleStream.FakeSampleStreamItem.END_OF_STREAM_ITEM;
|
||||
import static androidx.media3.test.utils.FakeSampleStream.FakeSampleStreamItem.oneByteSample;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.run;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.advance;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.runUntilError;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
@ -114,13 +114,13 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
|
||||
// Play a bit until the second renderer is being pre-warmed.
|
||||
player.play();
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
// Play until second item is started.
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_STARTED);
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@ -162,18 +162,18 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
|
||||
// Play a bit until the secondary renderer is being pre-warmed.
|
||||
player.play();
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
// Play until until the primary renderer is being pre-warmed.
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(() -> videoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState2 = secondaryVideoRenderer.getState();
|
||||
// Play until past transition back to primary renderer for third media item.
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(() -> videoRenderer.getState() == Renderer.STATE_STARTED);
|
||||
@Renderer.State int videoState3 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState3 = secondaryVideoRenderer.getState();
|
||||
@ -210,7 +210,7 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
player.prepare();
|
||||
|
||||
// Advance media periods until secondary renderer is being pre-warmed.
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
@Renderer.State int secondaryVideoState = secondaryVideoRenderer.getState();
|
||||
@ -251,19 +251,19 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
|
||||
// Play a bit until the primary renderer has been enabled, but not yet started.
|
||||
player.play();
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_STARTED);
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(() -> videoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
player.pause();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState2 = secondaryVideoRenderer.getState();
|
||||
player.play();
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_STARTED);
|
||||
@Renderer.State int videoState3 = videoRenderer.getState();
|
||||
@ -302,16 +302,16 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
player.prepare();
|
||||
|
||||
// Play a bit until the primary renderer has been enabled, but not yet started.
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
player.play();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
player.pause();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
player.play();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState3 = videoRenderer.getState();
|
||||
player.release();
|
||||
|
||||
@ -349,10 +349,10 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
|
||||
// Play a bit until the primary renderer is being prewarmed, but not yet started.
|
||||
player.play();
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_STARTED);
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(() -> videoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
@ -363,8 +363,8 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
.buildUpon()
|
||||
.setTrackTypeDisabled(C.TRACK_TYPE_AUDIO, true)
|
||||
.build());
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
run(player)
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(() -> videoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState2 = secondaryVideoRenderer.getState();
|
||||
@ -409,9 +409,9 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
player.prepare();
|
||||
|
||||
// Play a bit until the primary renderer is being pre-warmed, but not yet started.
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
player.play();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
SampleStream sampleStream1 = videoRenderer.getStream();
|
||||
@ -422,11 +422,11 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
.buildUpon()
|
||||
.setMaxVideoBitrate(videoFormat1.averageBitrate)
|
||||
.build());
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
run(player)
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState2 = secondaryVideoRenderer.getState();
|
||||
SampleStream sampleStream2 = videoRenderer.getStream();
|
||||
@ -466,9 +466,9 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
player.prepare();
|
||||
|
||||
// Play until the second renderer has been enabled and reading period has not advanced.
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
player.play();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
SampleStream videoStream1 = videoRenderer.getStream();
|
||||
@ -480,10 +480,10 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
.buildUpon()
|
||||
.setMaxVideoBitrate(videoFormat2.averageBitrate)
|
||||
.build());
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
SampleStream videoStream2 = videoRenderer.getStream();
|
||||
SampleStream secondaryVideoStream2 = secondaryVideoRenderer.getStream();
|
||||
player.release();
|
||||
@ -521,9 +521,9 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
player.prepare();
|
||||
|
||||
// Play until the second renderer has been enabled and reading period has not advanced.
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
player.play();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
SampleStream videoStream1 = videoRenderer.getStream();
|
||||
@ -534,7 +534,7 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
.buildUpon()
|
||||
.setMaxVideoBitrate(videoFormat2.averageBitrate)
|
||||
.build());
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
SampleStream videoStream2 = videoRenderer.getStream();
|
||||
player.release();
|
||||
|
||||
@ -598,14 +598,14 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
|
||||
// Play a bit until the final media source has been prepared and gone through track selection.
|
||||
player.play();
|
||||
run(player).untilBackgroundThreadCondition(() -> selectedAudioTrack.get() != null);
|
||||
advance(player).untilBackgroundThreadCondition(() -> selectedAudioTrack.get() != null);
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
SampleStream secondaryVideoStream1 = secondaryVideoRenderer.getStream();
|
||||
// Disable the Audio track to trigger track reselection.
|
||||
player.setTrackSelectionParameters(
|
||||
player.getTrackSelectionParameters().buildUpon().setMaxAudioBitrate(60_000).build());
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(() -> audioRenderer.getState() == Renderer.STATE_DISABLED);
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState2 = secondaryVideoRenderer.getState();
|
||||
@ -647,7 +647,7 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
|
||||
// Play a bit until the second renderer is pre-warming.
|
||||
player.play();
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@ -655,8 +655,8 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
SampleStream secondaryVideoStream1 = secondaryVideoRenderer.getStream();
|
||||
// Seek to position in current period.
|
||||
player.seekTo(/* mediaItemIndex= */ 0, /* positionMs= */ 3000);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
run(player)
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@ -697,15 +697,15 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
player.prepare();
|
||||
|
||||
// Play a bit until the second renderer is started.
|
||||
run(player).untilStartOfMediaItem(/* mediaItemIndex= */ 1);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilStartOfMediaItem(/* mediaItemIndex= */ 1);
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
SampleStream videoStream1 = videoRenderer.getStream();
|
||||
// Seek to position in current period.
|
||||
player.seekTo(/* mediaItemIndex= */ 1, /* positionMs= */ 3000);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
run(player)
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(() -> videoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
SampleStream videoStream2 = videoRenderer.getStream();
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@ -744,18 +744,18 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
|
||||
// Play a bit until the second renderer is started.
|
||||
player.play();
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_STARTED);
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(() -> videoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
// Seek to position in current period.
|
||||
player.seekTo(/* mediaItemIndex= */ 1, /* positionMs= */ 500);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
// Play until secondary renderer is being pre-warmed on third media item.
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@ -793,13 +793,13 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
player.prepare();
|
||||
|
||||
// Play a bit until the second renderer is started.
|
||||
run(player).untilStartOfMediaItem(/* mediaItemIndex= */ 1);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilStartOfMediaItem(/* mediaItemIndex= */ 1);
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
// Seek to position in following period.
|
||||
player.seekTo(/* mediaItemIndex= */ 2, /* positionMs= */ 3000);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState2 = secondaryVideoRenderer.getState();
|
||||
player.release();
|
||||
@ -841,16 +841,16 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
|
||||
// Play a bit until the second renderer is started and primary is pre-warming.
|
||||
player.play();
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_STARTED);
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(() -> videoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
// Remove the reading period.
|
||||
player.removeMediaItem(1);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState2 = secondaryVideoRenderer.getState();
|
||||
player.release();
|
||||
@ -894,15 +894,15 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
|
||||
// Play a bit until the second renderer is started and primary is pre-warming.
|
||||
player.play();
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_STARTED);
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(() -> videoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
player.removeMediaItem(1);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState2 = secondaryVideoRenderer.getState();
|
||||
player.release();
|
||||
@ -946,17 +946,17 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
|
||||
// Play a bit until the second renderer is started and primary is pre-warming.
|
||||
player.play();
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_STARTED);
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(() -> videoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
// Remove pre-warming media item.
|
||||
player.removeMediaItem(2);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
run(player)
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@ -999,15 +999,15 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
player.prepare();
|
||||
|
||||
// Play a bit until the second renderer is started.
|
||||
run(player).untilStartOfMediaItem(/* mediaItemIndex= */ 1);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilStartOfMediaItem(/* mediaItemIndex= */ 1);
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
// Replace media item past pre-warming period.
|
||||
player.replaceMediaItem(
|
||||
3,
|
||||
new FakeMediaSource(new FakeTimeline(), ExoPlayerTestRunner.VIDEO_FORMAT).getMediaItem());
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState2 = secondaryVideoRenderer.getState();
|
||||
player.release();
|
||||
@ -1044,15 +1044,15 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
player.prepare();
|
||||
|
||||
// Play a bit until the primary renderer is pre-warming.
|
||||
run(player).untilStartOfMediaItem(/* mediaItemIndex= */ 1);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilStartOfMediaItem(/* mediaItemIndex= */ 1);
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
// Replace pre-warming media item.
|
||||
player.replaceMediaItem(
|
||||
2,
|
||||
new FakeMediaSource(new FakeTimeline(), ExoPlayerTestRunner.VIDEO_FORMAT).getMediaItem());
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState2 = secondaryVideoRenderer.getState();
|
||||
player.release();
|
||||
@ -1094,15 +1094,15 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
|
||||
// Play a bit until the second renderer is started and primary is pre-warming.
|
||||
player.play();
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_STARTED);
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(() -> videoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
player.setRepeatMode(REPEAT_MODE_ONE);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState2 = secondaryVideoRenderer.getState();
|
||||
player.release();
|
||||
@ -1140,9 +1140,9 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
player.prepare();
|
||||
|
||||
// Play a bit until the second renderer is enabled and throws errors.
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
player.play();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState = secondaryVideoRenderer.getState();
|
||||
player.release();
|
||||
@ -1179,17 +1179,17 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
player.prepare();
|
||||
|
||||
// Play a bit until the second renderer is enabled and throws error.
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
player.play();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
assertThat(attemptedRenderWithSecondaryRenderer.get()).isTrue();
|
||||
|
||||
attemptedRenderWithSecondaryRenderer.set(false);
|
||||
// Play a bit so that primary renderer is enabled on second media item.
|
||||
run(player).untilStartOfMediaItem(/* mediaItemIndex= */ 1);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilStartOfMediaItem(/* mediaItemIndex= */ 1);
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState2 = secondaryVideoRenderer.getState();
|
||||
player.release();
|
||||
@ -1229,16 +1229,16 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
player.prepare();
|
||||
|
||||
// Play a bit until the second renderer is enabled and throws error.
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
player.play();
|
||||
run(player).untilBackgroundThreadCondition(attemptedRenderWithSecondaryRenderer::get);
|
||||
advance(player).untilBackgroundThreadCondition(attemptedRenderWithSecondaryRenderer::get);
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
assertThat(attemptedRenderWithSecondaryRenderer.get()).isTrue();
|
||||
|
||||
shouldSecondaryRendererThrow.set(false);
|
||||
run(player).untilStartOfMediaItem(/* mediaItemIndex= */ 1);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilStartOfMediaItem(/* mediaItemIndex= */ 1);
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState2 = secondaryVideoRenderer.getState();
|
||||
player.release();
|
||||
@ -1278,19 +1278,19 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
player.prepare();
|
||||
|
||||
// Play a bit until the second renderer is started.
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
player.play();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
assertThat(attemptedRenderWithSecondaryRenderer.get()).isTrue();
|
||||
run(player).untilPosition(/* mediaItemIndex= */ 0, /* positionMs= */ 500);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPosition(/* mediaItemIndex= */ 0, /* positionMs= */ 500);
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState2 = secondaryVideoRenderer.getState();
|
||||
shouldSecondaryRendererThrow.set(false);
|
||||
run(player).untilPosition(/* mediaItemIndex= */ 1, /* positionMs= */ 500);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPosition(/* mediaItemIndex= */ 1, /* positionMs= */ 500);
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState3 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState3 = secondaryVideoRenderer.getState();
|
||||
player.release();
|
||||
@ -1361,17 +1361,17 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
|
||||
// Play a bit until the second renderer is pre-warming.
|
||||
player.play();
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(() -> videoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState2 = secondaryVideoRenderer.getState();
|
||||
shouldPrimaryRendererThrow.set(true);
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(() -> videoRenderer.getState() == Renderer.STATE_DISABLED);
|
||||
@Renderer.State int videoState3 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState3 = secondaryVideoRenderer.getState();
|
||||
@ -1442,22 +1442,22 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
player.prepare();
|
||||
|
||||
// Play a bit until the second renderer is enabled.
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
player.play();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
// Force primary renderer to error, killing playback.
|
||||
shouldPrimaryRendererThrow.set(true);
|
||||
run(player).untilPlayerError();
|
||||
advance(player).untilPlayerError();
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState2 = secondaryVideoRenderer.getState();
|
||||
// Restart playback with primary renderer functioning properly.
|
||||
shouldPrimaryRendererThrow.set(false);
|
||||
player.prepare();
|
||||
player.play();
|
||||
run(player).untilPosition(/* mediaItemIndex= */ 0, /* positionMs= */ 500);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPosition(/* mediaItemIndex= */ 0, /* positionMs= */ 500);
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState3 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState3 = secondaryVideoRenderer.getState();
|
||||
player.release();
|
||||
@ -1499,8 +1499,8 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
player.prepare();
|
||||
|
||||
// Play a bit until on second media item and the primary renderer is pre-warming.
|
||||
run(player).untilStartOfMediaItem(/* mediaItemIndex= */ 1);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilStartOfMediaItem(/* mediaItemIndex= */ 1);
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
@Renderer.State int videoState1 = videoRenderer.getState();
|
||||
@Renderer.State int secondaryVideoState1 = secondaryVideoRenderer.getState();
|
||||
// Force secondary renderer to error, killing playback.
|
||||
@ -1510,7 +1510,7 @@ public class ExoPlayerWithPrewarmingRenderersTest {
|
||||
shouldSecondaryRendererThrow.set(false);
|
||||
player.prepare();
|
||||
// Play until secondary renderer is pre-warming.
|
||||
run(player)
|
||||
advance(player)
|
||||
.untilBackgroundThreadCondition(
|
||||
() -> secondaryVideoRenderer.getState() == Renderer.STATE_ENABLED);
|
||||
@Renderer.State int videoState2 = videoRenderer.getState();
|
||||
|
@ -51,9 +51,9 @@ import static androidx.media3.exoplayer.analytics.AnalyticsListener.EVENT_VIDEO_
|
||||
import static androidx.media3.test.utils.FakeSampleStream.FakeSampleStreamItem.END_OF_STREAM_ITEM;
|
||||
import static androidx.media3.test.utils.FakeSampleStream.FakeSampleStreamItem.oneByteSample;
|
||||
import static androidx.media3.test.utils.TestUtil.assertSubclassOverridesAllMethods;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.advance;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.play;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.playUntilPosition;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.run;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.runUntilError;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.runUntilIsLoading;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.runUntilPlaybackState;
|
||||
@ -472,10 +472,10 @@ public final class DefaultAnalyticsCollectorTest {
|
||||
player.setMediaSources(ImmutableList.of(mediaSource1, mediaSource2));
|
||||
player.prepare();
|
||||
// Wait until second period has fully loaded to assert loading events.
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
player.seekTo(/* mediaItemIndex= */ 1, /* positionMs= */ 0);
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
|
||||
populateEventIds(listener.lastReportedTimeline);
|
||||
assertThat(listener.getEvents(EVENT_PLAYER_STATE_CHANGED))
|
||||
@ -969,15 +969,15 @@ public final class DefaultAnalyticsCollectorTest {
|
||||
|
||||
player.setMediaSource(fakeMediaSource);
|
||||
player.prepare();
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
player.addMediaSource(fakeMediaSource);
|
||||
// Wait until second period has fully loaded to assert loading events.
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
player.removeMediaItem(/* index= */ 0);
|
||||
run(player).untilState(Player.STATE_BUFFERING);
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilState(Player.STATE_BUFFERING);
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
|
||||
// Populate event ids with second to last timeline that still contained both periods.
|
||||
populateEventIds(listener.reportedTimelines.get(listener.reportedTimelines.size() - 2));
|
||||
@ -1133,17 +1133,17 @@ public final class DefaultAnalyticsCollectorTest {
|
||||
player.setMediaSource(fakeMediaSource);
|
||||
player.prepare();
|
||||
// Ensure everything is preloaded.
|
||||
run(player).untilFullyBuffered();
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilFullyBuffered();
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
// Wait in each content part to ensure previously triggered events get a chance to be delivered.
|
||||
play(player).untilPosition(/* mediaItemIndex= */ 0, /* positionMs= */ 3_000);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
play(player).untilPosition(/* mediaItemIndex= */ 0, /* positionMs= */ 8_000);
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
// Wait for final timeline change that marks post-roll played.
|
||||
run(player).untilTimelineChanges();
|
||||
advance(player).untilTimelineChanges();
|
||||
|
||||
Object periodUid = listener.lastReportedTimeline.getUidOfPeriod(/* periodIndex= */ 0);
|
||||
EventWindowAndPeriodId prerollAd =
|
||||
@ -1343,13 +1343,13 @@ public final class DefaultAnalyticsCollectorTest {
|
||||
player.setMediaSource(fakeMediaSource);
|
||||
player.prepare();
|
||||
// Ensure everything is preloaded.
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
// Seek behind the midroll.
|
||||
player.seekTo(/* positionMs= */ 6_000);
|
||||
// Wait until loading started again to assert loading events.
|
||||
run(player).untilLoadingIs(true);
|
||||
advance(player).untilLoadingIs(true);
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
|
||||
Object periodUid = listener.lastReportedTimeline.getUidOfPeriod(/* periodIndex= */ 0);
|
||||
EventWindowAndPeriodId midrollAd =
|
||||
@ -1515,9 +1515,9 @@ public final class DefaultAnalyticsCollectorTest {
|
||||
// Wait for the media to be fully buffered before unblocking the DRM key request. This
|
||||
// ensures both periods report the same load event (because period1's DRM session is
|
||||
// already preacquired by the time the key load completes).
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
mediaDrmCallback.keyCondition.open();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
|
||||
populateEventIds(listener.lastReportedTimeline);
|
||||
assertThat(listener.getEvents(EVENT_DRM_SESSION_MANAGER_ERROR)).isEmpty();
|
||||
@ -1587,9 +1587,9 @@ public final class DefaultAnalyticsCollectorTest {
|
||||
player.play();
|
||||
player.setMediaSource(mediaSource);
|
||||
player.prepare();
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
mediaDrmCallback.keyCondition.open();
|
||||
run(player).untilPlayerError();
|
||||
advance(player).untilPlayerError();
|
||||
|
||||
populateEventIds(listener.lastReportedTimeline);
|
||||
assertThat(listener.getEvents(EVENT_DRM_SESSION_MANAGER_ERROR)).containsExactly(period0);
|
||||
|
@ -19,7 +19,7 @@ import static android.media.AudioFormat.CHANNEL_OUT_5POINT1;
|
||||
import static android.media.AudioFormat.CHANNEL_OUT_STEREO;
|
||||
import static android.media.AudioFormat.ENCODING_AC3;
|
||||
import static androidx.media3.common.util.Assertions.checkNotNull;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.run;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.advance;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.times;
|
||||
@ -143,7 +143,7 @@ public class AudioCapabilitiesEndToEndTest {
|
||||
player.addListener(listener);
|
||||
|
||||
player.play();
|
||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
advance(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
|
||||
ArgumentCaptor<Tracks> tracks = ArgumentCaptor.forClass(Tracks.class);
|
||||
@ -207,7 +207,7 @@ public class AudioCapabilitiesEndToEndTest {
|
||||
player.addAnalyticsListener(createAnalyticsListener());
|
||||
|
||||
player.play();
|
||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
advance(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
|
||||
// We expect to start playing audio via passthrough and mid-playback switch to a local decoder.
|
||||
|
@ -15,7 +15,7 @@
|
||||
*/
|
||||
package androidx.media3.exoplayer.e2etest;
|
||||
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.run;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.advance;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.never;
|
||||
import static org.mockito.Mockito.reset;
|
||||
@ -108,7 +108,7 @@ public final class MergingPlaylistPlaybackTest {
|
||||
player.prepare();
|
||||
// Load all content prior to play to reduce flaky-ness resulting from the playback advancement
|
||||
// speed and handling of discontinuities.
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
// Reset the listener to avoid verifying the onIsLoadingChanged events from prepare().
|
||||
reset(listener);
|
||||
player.play();
|
||||
@ -154,7 +154,7 @@ public final class MergingPlaylistPlaybackTest {
|
||||
player.prepare();
|
||||
// Load all content prior to play to reduce flaky-ness resulting from the playback advancement
|
||||
// speed and handling of discontinuities.
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
// Reset the listener to avoid verifying the onIsLoadingChanged events from prepare().
|
||||
reset(listener);
|
||||
player.play();
|
||||
|
@ -15,7 +15,7 @@
|
||||
*/
|
||||
package androidx.media3.exoplayer.e2etest;
|
||||
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.run;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.advance;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.robolectric.annotation.GraphicsMode.Mode.NATIVE;
|
||||
|
||||
@ -89,9 +89,9 @@ public final class PlaylistPlaybackTest {
|
||||
|
||||
player.addMediaItem(MediaItem.fromUri("asset:///media/mka/bear-opus.mka"));
|
||||
player.prepare();
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
player.addMediaItem(MediaItem.fromUri("asset:///media/wav/sample.wav"));
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
// Wait until second period has fully loaded to start the playback.
|
||||
player.play();
|
||||
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
|
||||
@ -116,7 +116,7 @@ public final class PlaylistPlaybackTest {
|
||||
|
||||
player.addMediaItem(MediaItem.fromUri("asset:///media/mp4/preroll-5s.mp4"));
|
||||
player.prepare();
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
MediaItem mediaItemWithSubtitle =
|
||||
new MediaItem.Builder()
|
||||
.setUri("asset:///media/mp4/preroll-5s.mp4")
|
||||
@ -130,7 +130,7 @@ public final class PlaylistPlaybackTest {
|
||||
.build()))
|
||||
.build();
|
||||
player.addMediaItem(mediaItemWithSubtitle);
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
// Wait until second period has fully loaded to start the playback.
|
||||
player.play();
|
||||
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_ENDED);
|
||||
|
@ -15,7 +15,7 @@
|
||||
*/
|
||||
package androidx.media3.exoplayer.e2etest;
|
||||
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.run;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.advance;
|
||||
|
||||
import android.content.Context;
|
||||
import android.graphics.SurfaceTexture;
|
||||
@ -165,7 +165,7 @@ public class PrewarmingRendererPlaybackTest {
|
||||
player.prepare();
|
||||
player.play();
|
||||
|
||||
run(player).untilStartOfMediaItem(1);
|
||||
advance(player).untilStartOfMediaItem(1);
|
||||
|
||||
// Stop and reset player to simulate stop, reset, and transition back to using primary.
|
||||
player.stop();
|
||||
|
@ -15,7 +15,7 @@
|
||||
*/
|
||||
package androidx.media3.exoplayer.e2etest;
|
||||
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.run;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.advance;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.content.Context;
|
||||
@ -103,10 +103,10 @@ public class SubtitlePlaybackTest {
|
||||
|
||||
player.setMediaItem(mediaItem);
|
||||
player.prepare();
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
run(player).untilLoadingIs(false);
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilLoadingIs(false);
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
|
||||
assertThat(loadStartedUris).containsNoneOf(typicalVttUri, simpleTtmlUri);
|
||||
@ -137,10 +137,10 @@ public class SubtitlePlaybackTest {
|
||||
|
||||
player.setMediaItem(MediaItem.fromUri("asset:///media/mp4/fragmented_captions.mp4"));
|
||||
player.prepare();
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -178,10 +178,10 @@ public class SubtitlePlaybackTest {
|
||||
|
||||
player.setMediaItems(ImmutableList.of(mediaItemClipped, mediaItemFull));
|
||||
player.prepare();
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -230,10 +230,10 @@ public class SubtitlePlaybackTest {
|
||||
|
||||
player.setMediaItem(mediaItem);
|
||||
player.prepare();
|
||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_READY);
|
||||
run(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
advance(player).ignoringNonFatalErrors().untilState(Player.STATE_READY);
|
||||
advance(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
advance(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -291,10 +291,10 @@ public class SubtitlePlaybackTest {
|
||||
|
||||
player.setMediaItem(mediaItem);
|
||||
player.prepare();
|
||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_READY);
|
||||
run(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
advance(player).ignoringNonFatalErrors().untilState(Player.STATE_READY);
|
||||
advance(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
advance(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -330,10 +330,10 @@ public class SubtitlePlaybackTest {
|
||||
|
||||
player.setMediaItem(mediaItem);
|
||||
player.prepare();
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
|
@ -15,8 +15,8 @@
|
||||
*/
|
||||
package androidx.media3.exoplayer.e2etest;
|
||||
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.advance;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.play;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.run;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.content.Context;
|
||||
@ -97,10 +97,10 @@ public class WebvttPlaybackTest {
|
||||
|
||||
player.setMediaItem(mediaItem);
|
||||
player.prepare();
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -140,15 +140,15 @@ public class WebvttPlaybackTest {
|
||||
// Play media fully (with back buffer) to ensure we have all the segment data available.
|
||||
player.setMediaItem(mediaItem);
|
||||
player.prepare();
|
||||
run(player).untilState(Player.STATE_READY);
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilState(Player.STATE_READY);
|
||||
advance(player).untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
|
||||
// Seek back to within first subtitle.
|
||||
player.seekTo(1000);
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -365,7 +365,7 @@ public class WebvttPlaybackTest {
|
||||
}
|
||||
player.pause();
|
||||
player.play();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
}
|
||||
if (player.getPlayerError() != null) {
|
||||
throw player.getPlayerError();
|
||||
|
@ -21,8 +21,8 @@ import static androidx.media3.exoplayer.source.ads.ServerSideAdInsertionUtil.add
|
||||
import static androidx.media3.test.utils.FakeSampleStream.FakeSampleStreamItem.END_OF_STREAM_ITEM;
|
||||
import static androidx.media3.test.utils.FakeSampleStream.FakeSampleStreamItem.oneByteSample;
|
||||
import static androidx.media3.test.utils.robolectric.RobolectricUtil.runMainLooperUntil;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.advance;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.playUntilPosition;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.run;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.runUntilPendingCommandsAreFullyHandled;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.runUntilPlaybackState;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
@ -524,7 +524,7 @@ public final class ServerSideAdInsertionMediaSourceTest {
|
||||
|
||||
// Add ad at the current playback position during playback.
|
||||
runUntilPlaybackState(player, Player.STATE_READY);
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
AdPlaybackState secondAdPlaybackState =
|
||||
addAdGroupToAdPlaybackState(
|
||||
firstAdPlaybackState,
|
||||
|
@ -16,7 +16,7 @@
|
||||
package androidx.media3.exoplayer.dash.e2etest;
|
||||
|
||||
import static androidx.media3.common.util.Assertions.checkNotNull;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.run;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.advance;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
@ -97,9 +97,9 @@ public final class DashPlaybackTest {
|
||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/standalone-webvtt/sample.mpd"));
|
||||
player.prepare();
|
||||
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -137,9 +137,9 @@ public final class DashPlaybackTest {
|
||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/standalone-webvtt/sample.mpd"));
|
||||
player.prepare();
|
||||
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||
run(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
advance(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
advance(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -176,9 +176,9 @@ public final class DashPlaybackTest {
|
||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/standalone-webvtt/sample.mpd"));
|
||||
player.prepare();
|
||||
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||
run(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
advance(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
advance(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -213,9 +213,9 @@ public final class DashPlaybackTest {
|
||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/standalone-ttml/sample.mpd"));
|
||||
player.prepare();
|
||||
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -244,9 +244,9 @@ public final class DashPlaybackTest {
|
||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/webvtt-in-mp4/sample.mpd"));
|
||||
player.prepare();
|
||||
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -274,9 +274,9 @@ public final class DashPlaybackTest {
|
||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/ttml-in-mp4/sample.mpd"));
|
||||
player.prepare();
|
||||
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -314,9 +314,9 @@ public final class DashPlaybackTest {
|
||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/ttml-in-mp4/sample.mpd"));
|
||||
player.prepare();
|
||||
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||
run(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
advance(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
advance(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -353,9 +353,9 @@ public final class DashPlaybackTest {
|
||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/ttml-in-mp4/sample.mpd"));
|
||||
player.prepare();
|
||||
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||
run(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
advance(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
advance(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -397,9 +397,9 @@ public final class DashPlaybackTest {
|
||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/cea608/manifest.mpd"));
|
||||
player.prepare();
|
||||
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -437,9 +437,9 @@ public final class DashPlaybackTest {
|
||||
player.setMediaItem(MediaItem.fromUri("asset:///media/dash/cea608/manifest.mpd"));
|
||||
player.prepare();
|
||||
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -713,9 +713,9 @@ public final class DashPlaybackTest {
|
||||
MediaItem.fromUri("asset:///media/dash/multi-period-with-offset/sample.mpd"));
|
||||
player.prepare();
|
||||
// Ensure media is fully buffered to avoid flakiness from loading second period too late.
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
|
@ -16,7 +16,7 @@
|
||||
|
||||
package androidx.media3.exoplayer.hls.e2etest;
|
||||
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.run;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.advance;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
@ -87,9 +87,9 @@ public final class HlsPlaybackTest {
|
||||
MediaItem.fromUri("asset:///media/hls/standalone-webvtt/multivariant_playlist.m3u8"));
|
||||
player.prepare();
|
||||
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -125,9 +125,9 @@ public final class HlsPlaybackTest {
|
||||
MediaItem.fromUri("asset:///media/hls/standalone-webvtt/multivariant_playlist.m3u8"));
|
||||
player.prepare();
|
||||
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||
run(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
advance(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
advance(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -162,9 +162,9 @@ public final class HlsPlaybackTest {
|
||||
MediaItem.fromUri("asset:///media/hls/standalone-webvtt/multivariant_playlist.m3u8"));
|
||||
player.prepare();
|
||||
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||
run(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
advance(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
advance(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -193,9 +193,9 @@ public final class HlsPlaybackTest {
|
||||
MediaItem.fromUri("asset:///media/hls/ttml-in-mp4/multivariant_playlist.m3u8"));
|
||||
player.prepare();
|
||||
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -230,9 +230,9 @@ public final class HlsPlaybackTest {
|
||||
MediaItem.fromUri("asset:///media/hls/ttml-in-mp4/multivariant_playlist.m3u8"));
|
||||
player.prepare();
|
||||
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||
run(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
advance(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
advance(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -266,9 +266,9 @@ public final class HlsPlaybackTest {
|
||||
MediaItem.fromUri("asset:///media/hls/ttml-in-mp4/multivariant_playlist.m3u8"));
|
||||
player.prepare();
|
||||
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||
run(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
advance(player).ignoringNonFatalErrors().untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
advance(player).ignoringNonFatalErrors().untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -306,9 +306,9 @@ public final class HlsPlaybackTest {
|
||||
player.setMediaItem(MediaItem.fromUri("asset:///media/hls/cea608/manifest.m3u8"));
|
||||
player.prepare();
|
||||
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
@ -342,9 +342,9 @@ public final class HlsPlaybackTest {
|
||||
player.setMediaItem(MediaItem.fromUri("asset:///media/hls/cea608/manifest.m3u8"));
|
||||
player.prepare();
|
||||
// Ensure media is fully buffered so that the first subtitle is ready at the start of playback.
|
||||
run(player).untilFullyBuffered();
|
||||
advance(player).untilFullyBuffered();
|
||||
player.play();
|
||||
run(player).untilState(Player.STATE_ENDED);
|
||||
advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
surface.release();
|
||||
|
||||
|
@ -15,7 +15,7 @@
|
||||
*/
|
||||
package androidx.media3.exoplayer.ima;
|
||||
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.run;
|
||||
import static androidx.media3.test.utils.robolectric.TestPlayerRunHelper.advance;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import android.content.Context;
|
||||
@ -96,13 +96,13 @@ public class ImaServerSideAdInsertionMediaSourceTest {
|
||||
MediaItem.fromUri("ssai://dai.google.com/?assetKey=ABC&format=0&adsId=2"));
|
||||
player.setMediaSource(mediaSource);
|
||||
player.prepare();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
|
||||
// Clearing the playlist will cause internal state of the ads source to be invalid and
|
||||
// potentially accessing empty timelines. See b/354026260. The test simply ensures that clearing
|
||||
// the playlist will not throw any exceptions.
|
||||
player.clearMediaItems();
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
player.release();
|
||||
}
|
||||
}
|
||||
|
@ -38,6 +38,7 @@ import androidx.media3.exoplayer.source.LoadEventInfo;
|
||||
import androidx.media3.exoplayer.source.MediaLoadData;
|
||||
import androidx.media3.test.utils.ThreadTestUtil;
|
||||
import com.google.common.base.Supplier;
|
||||
import com.google.errorprone.annotations.InlineMe;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
@ -544,7 +545,7 @@ public final class TestPlayerRunHelper {
|
||||
* <p>Callers can use the returned {@link PlayerRunResult} to run the main {@link Looper} until
|
||||
* certain conditions are met.
|
||||
*/
|
||||
public static PlayerRunResult run(Player player) {
|
||||
public static PlayerRunResult advance(Player player) {
|
||||
return new PlayerRunResult(
|
||||
player, /* playBeforeWaiting= */ false, /* throwNonFatalErrors= */ true);
|
||||
}
|
||||
@ -555,19 +556,41 @@ public final class TestPlayerRunHelper {
|
||||
* <p>Callers can use the returned {@link ExoPlayerRunResult} to run the main {@link Looper} until
|
||||
* certain conditions are met.
|
||||
*/
|
||||
public static ExoPlayerRunResult run(ExoPlayer player) {
|
||||
public static ExoPlayerRunResult advance(ExoPlayer player) {
|
||||
return new ExoPlayerRunResult(
|
||||
player, /* playBeforeWaiting= */ false, /* throwNonFatalErrors= */ true);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link #advance(Player)} instead.
|
||||
*/
|
||||
@InlineMe(
|
||||
replacement = "TestPlayerRunHelper.advance(player)",
|
||||
imports = "androidx.media3.test.utils.robolectric.TestPlayerRunHelper")
|
||||
@Deprecated
|
||||
public static PlayerRunResult run(Player player) {
|
||||
return advance(player);
|
||||
}
|
||||
|
||||
/**
|
||||
* @deprecated Use {@link #advance(ExoPlayer)} instead.
|
||||
*/
|
||||
@InlineMe(
|
||||
replacement = "TestPlayerRunHelper.advance(player)",
|
||||
imports = "androidx.media3.test.utils.robolectric.TestPlayerRunHelper")
|
||||
@Deprecated
|
||||
public static ExoPlayerRunResult run(ExoPlayer player) {
|
||||
return advance(player);
|
||||
}
|
||||
|
||||
/**
|
||||
* Entry point for a fluent "start playback and wait for condition X" assertion.
|
||||
*
|
||||
* <p>Callers can use the returned {@link PlayerRunResult} to run the main {@link Looper} until
|
||||
* certain conditions are met.
|
||||
*
|
||||
* <p>This is the same as {@link #run(Player)} but ensures {@link Player#play()} is called before
|
||||
* waiting in subsequent {@code untilXXX(...)} methods.
|
||||
* <p>This is the same as {@link #advance(Player)} but ensures {@link Player#play()} is called
|
||||
* before waiting in subsequent {@code untilXXX(...)} methods.
|
||||
*/
|
||||
public static PlayerRunResult play(Player player) {
|
||||
return new PlayerRunResult(
|
||||
@ -580,8 +603,8 @@ public final class TestPlayerRunHelper {
|
||||
* <p>Callers can use the returned {@link ExoPlayerRunResult} to run the main {@link Looper} until
|
||||
* certain conditions are met.
|
||||
*
|
||||
* <p>This is the same as {@link #run(ExoPlayer)} but ensures {@link ExoPlayer#play()} is called
|
||||
* before waiting in subsequent {@code untilXXX(...)} methods.
|
||||
* <p>This is the same as {@link #advance(ExoPlayer)} but ensures {@link ExoPlayer#play()} is
|
||||
* called before waiting in subsequent {@code untilXXX(...)} methods.
|
||||
*/
|
||||
public static ExoPlayerRunResult play(ExoPlayer player) {
|
||||
return new ExoPlayerRunResult(
|
||||
@ -595,7 +618,8 @@ public final class TestPlayerRunHelper {
|
||||
* <p>If a fatal {@link PlaybackException} occurs it will be thrown wrapped in an {@link
|
||||
* IllegalStateException}.
|
||||
*
|
||||
* <p>New usages should prefer {@link #run(Player)} and {@link PlayerRunResult#untilState(int)}.
|
||||
* <p>New usages should prefer {@link #advance(Player)} and {@link
|
||||
* PlayerRunResult#untilState(int)}.
|
||||
*
|
||||
* @param player The {@link Player}.
|
||||
* @param expectedState The expected {@link Player.State}.
|
||||
@ -605,7 +629,7 @@ public final class TestPlayerRunHelper {
|
||||
public static void runUntilPlaybackState(Player player, @Player.State int expectedState)
|
||||
throws TimeoutException {
|
||||
try {
|
||||
run(player).untilState(expectedState);
|
||||
advance(player).untilState(expectedState);
|
||||
} catch (PlaybackException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
@ -618,7 +642,7 @@ public final class TestPlayerRunHelper {
|
||||
* <p>If a fatal {@link PlaybackException} occurs it will be thrown wrapped in an {@link
|
||||
* IllegalStateException}.
|
||||
*
|
||||
* <p>New usages should prefer {@link #run(Player)} and {@link
|
||||
* <p>New usages should prefer {@link #advance(Player)} and {@link
|
||||
* PlayerRunResult#untilPlayWhenReadyIs(boolean)}.
|
||||
*
|
||||
* @param player The {@link Player}.
|
||||
@ -629,7 +653,7 @@ public final class TestPlayerRunHelper {
|
||||
public static void runUntilPlayWhenReady(Player player, boolean expectedPlayWhenReady)
|
||||
throws TimeoutException {
|
||||
try {
|
||||
run(player).untilPlayWhenReadyIs(expectedPlayWhenReady);
|
||||
advance(player).untilPlayWhenReadyIs(expectedPlayWhenReady);
|
||||
} catch (PlaybackException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
@ -642,7 +666,7 @@ public final class TestPlayerRunHelper {
|
||||
* <p>If a fatal {@link PlaybackException} occurs it will be thrown wrapped in an {@link
|
||||
* IllegalStateException}.
|
||||
*
|
||||
* <p>New usages should prefer {@link #run(Player)} and {@link
|
||||
* <p>New usages should prefer {@link #advance(Player)} and {@link
|
||||
* PlayerRunResult#untilLoadingIs(boolean)}.
|
||||
*
|
||||
* @param player The {@link Player}.
|
||||
@ -653,7 +677,7 @@ public final class TestPlayerRunHelper {
|
||||
public static void runUntilIsLoading(Player player, boolean expectedIsLoading)
|
||||
throws TimeoutException {
|
||||
try {
|
||||
run(player).untilLoadingIs(expectedIsLoading);
|
||||
advance(player).untilLoadingIs(expectedIsLoading);
|
||||
} catch (PlaybackException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
@ -666,7 +690,7 @@ public final class TestPlayerRunHelper {
|
||||
* <p>If a fatal {@link PlaybackException} occurs it will be thrown wrapped in an {@link
|
||||
* IllegalStateException}.
|
||||
*
|
||||
* <p>New usages should prefer {@link #run(Player)} and {@link
|
||||
* <p>New usages should prefer {@link #advance(Player)} and {@link
|
||||
* PlayerRunResult#untilTimelineChangesTo(Timeline)}.
|
||||
*
|
||||
* @param player The {@link Player}.
|
||||
@ -677,7 +701,7 @@ public final class TestPlayerRunHelper {
|
||||
public static void runUntilTimelineChanged(Player player, Timeline expectedTimeline)
|
||||
throws TimeoutException {
|
||||
try {
|
||||
run(player).untilTimelineChangesTo(expectedTimeline);
|
||||
advance(player).untilTimelineChangesTo(expectedTimeline);
|
||||
} catch (PlaybackException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
@ -689,7 +713,7 @@ public final class TestPlayerRunHelper {
|
||||
* <p>If a fatal {@link PlaybackException} occurs it will be thrown wrapped in an {@link
|
||||
* IllegalStateException}.
|
||||
*
|
||||
* <p>New usages should prefer {@link #run(Player)} and {@link
|
||||
* <p>New usages should prefer {@link #advance(Player)} and {@link
|
||||
* PlayerRunResult#untilTimelineChanges()}.
|
||||
*
|
||||
* @param player The {@link Player}.
|
||||
@ -699,7 +723,7 @@ public final class TestPlayerRunHelper {
|
||||
*/
|
||||
public static Timeline runUntilTimelineChanged(Player player) throws TimeoutException {
|
||||
try {
|
||||
return run(player).untilTimelineChanges();
|
||||
return advance(player).untilTimelineChanges();
|
||||
} catch (PlaybackException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
@ -713,7 +737,7 @@ public final class TestPlayerRunHelper {
|
||||
* <p>If a fatal {@link PlaybackException} occurs it will be thrown wrapped in an {@link
|
||||
* IllegalStateException}.
|
||||
*
|
||||
* <p>New usages should prefer {@link #run(Player)} and {@link
|
||||
* <p>New usages should prefer {@link #advance(Player)} and {@link
|
||||
* PlayerRunResult#untilPositionDiscontinuityWithReason(int)}.
|
||||
*
|
||||
* @param player The {@link Player}.
|
||||
@ -724,7 +748,7 @@ public final class TestPlayerRunHelper {
|
||||
public static void runUntilPositionDiscontinuity(
|
||||
Player player, @Player.DiscontinuityReason int expectedReason) throws TimeoutException {
|
||||
try {
|
||||
run(player).untilPositionDiscontinuityWithReason(expectedReason);
|
||||
advance(player).untilPositionDiscontinuityWithReason(expectedReason);
|
||||
} catch (PlaybackException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
@ -735,7 +759,7 @@ public final class TestPlayerRunHelper {
|
||||
*
|
||||
* <p>Non-fatal errors are ignored.
|
||||
*
|
||||
* <p>New usages should prefer {@link #run(ExoPlayer)} and {@link
|
||||
* <p>New usages should prefer {@link #advance(ExoPlayer)} and {@link
|
||||
* ExoPlayerRunResult#untilPlayerError()}.
|
||||
*
|
||||
* @param player The {@link Player}.
|
||||
@ -744,7 +768,7 @@ public final class TestPlayerRunHelper {
|
||||
* exceeded.
|
||||
*/
|
||||
public static ExoPlaybackException runUntilError(ExoPlayer player) throws TimeoutException {
|
||||
return run(player).untilPlayerError();
|
||||
return advance(player).untilPlayerError();
|
||||
}
|
||||
|
||||
/**
|
||||
@ -754,7 +778,7 @@ public final class TestPlayerRunHelper {
|
||||
* <p>If a fatal {@link PlaybackException} occurs it will be thrown wrapped in an {@link
|
||||
* IllegalStateException}.
|
||||
*
|
||||
* <p>New usages should prefer {@link #run(ExoPlayer)} and {@link
|
||||
* <p>New usages should prefer {@link #advance(ExoPlayer)} and {@link
|
||||
* ExoPlayerRunResult#untilSleepingForOffloadBecomes(boolean)}.
|
||||
*
|
||||
* @param player The {@link Player}.
|
||||
@ -765,7 +789,7 @@ public final class TestPlayerRunHelper {
|
||||
public static void runUntilSleepingForOffload(ExoPlayer player, boolean expectedSleepForOffload)
|
||||
throws TimeoutException {
|
||||
try {
|
||||
run(player).untilSleepingForOffloadBecomes(expectedSleepForOffload);
|
||||
advance(player).untilSleepingForOffloadBecomes(expectedSleepForOffload);
|
||||
} catch (PlaybackException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
@ -778,7 +802,7 @@ public final class TestPlayerRunHelper {
|
||||
* <p>If a fatal {@link PlaybackException} occurs it will be thrown wrapped in an {@link
|
||||
* IllegalStateException}.
|
||||
*
|
||||
* <p>New usages should prefer {@link #run(Player)} and {@link
|
||||
* <p>New usages should prefer {@link #advance(Player)} and {@link
|
||||
* PlayerRunResult#untilFirstFrameIsRendered()}.
|
||||
*
|
||||
* @param player The {@link Player}.
|
||||
@ -787,7 +811,7 @@ public final class TestPlayerRunHelper {
|
||||
*/
|
||||
public static void runUntilRenderedFirstFrame(ExoPlayer player) throws TimeoutException {
|
||||
try {
|
||||
run(player).untilFirstFrameIsRendered();
|
||||
advance(player).untilFirstFrameIsRendered();
|
||||
} catch (PlaybackException e) {
|
||||
throw new IllegalStateException(e);
|
||||
}
|
||||
@ -805,7 +829,7 @@ public final class TestPlayerRunHelper {
|
||||
* <p>If a fatal {@link PlaybackException} occurs it will be thrown wrapped in an {@link
|
||||
* IllegalStateException}.
|
||||
*
|
||||
* <p>New usages should prefer {@link #run(ExoPlayer)} and {@link
|
||||
* <p>New usages should prefer {@link #advance(ExoPlayer)} and {@link
|
||||
* ExoPlayerRunResult#untilPosition(int, long)}.
|
||||
*
|
||||
* @param player The {@link Player}.
|
||||
@ -835,7 +859,7 @@ public final class TestPlayerRunHelper {
|
||||
* <p>If a fatal {@link PlaybackException} occurs it will be thrown wrapped in an {@link
|
||||
* IllegalStateException}.
|
||||
*
|
||||
* <p>New usages should prefer {@link #run(ExoPlayer)} and {@link
|
||||
* <p>New usages should prefer {@link #advance(ExoPlayer)} and {@link
|
||||
* ExoPlayerRunResult#untilStartOfMediaItem(int)}.
|
||||
*
|
||||
* @param player The {@link Player}.
|
||||
@ -864,7 +888,7 @@ public final class TestPlayerRunHelper {
|
||||
*/
|
||||
public static void runUntilPendingCommandsAreFullyHandled(ExoPlayer player)
|
||||
throws TimeoutException {
|
||||
run(player).untilPendingCommandsAreFullyHandled();
|
||||
advance(player).untilPendingCommandsAreFullyHandled();
|
||||
}
|
||||
|
||||
private static void verifyMainTestThread(Player player) {
|
||||
|
@ -75,7 +75,7 @@ public final class CompositionPlayerAudioPlaybackTest {
|
||||
player.setComposition(composition);
|
||||
player.prepare();
|
||||
player.play();
|
||||
TestPlayerRunHelper.run(player).untilState(Player.STATE_ENDED);
|
||||
TestPlayerRunHelper.advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
|
||||
DumpFileAsserts.assertOutput(
|
||||
@ -105,7 +105,7 @@ public final class CompositionPlayerAudioPlaybackTest {
|
||||
player.setComposition(composition);
|
||||
player.prepare();
|
||||
player.play();
|
||||
TestPlayerRunHelper.run(player).untilState(Player.STATE_ENDED);
|
||||
TestPlayerRunHelper.advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
|
||||
DumpFileAsserts.assertOutput(
|
||||
@ -132,7 +132,7 @@ public final class CompositionPlayerAudioPlaybackTest {
|
||||
player.setComposition(composition);
|
||||
player.prepare();
|
||||
player.play();
|
||||
TestPlayerRunHelper.run(player).untilState(Player.STATE_ENDED);
|
||||
TestPlayerRunHelper.advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
|
||||
DumpFileAsserts.assertOutput(
|
||||
@ -157,7 +157,7 @@ public final class CompositionPlayerAudioPlaybackTest {
|
||||
player.setComposition(composition);
|
||||
player.prepare();
|
||||
player.play();
|
||||
TestPlayerRunHelper.run(player).untilState(Player.STATE_ENDED);
|
||||
TestPlayerRunHelper.advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
|
||||
DumpFileAsserts.assertOutput(
|
||||
@ -199,7 +199,7 @@ public final class CompositionPlayerAudioPlaybackTest {
|
||||
player.setComposition(composition);
|
||||
player.prepare();
|
||||
player.play();
|
||||
TestPlayerRunHelper.run(player).untilState(Player.STATE_ENDED);
|
||||
TestPlayerRunHelper.advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
|
||||
DumpFileAsserts.assertOutput(
|
||||
@ -496,7 +496,7 @@ public final class CompositionPlayerAudioPlaybackTest {
|
||||
player.seekTo(/* positionMs= */ 500);
|
||||
player.prepare();
|
||||
player.play();
|
||||
TestPlayerRunHelper.run(player).untilState(Player.STATE_ENDED);
|
||||
TestPlayerRunHelper.advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
|
||||
DumpFileAsserts.assertOutput(
|
||||
@ -525,7 +525,7 @@ public final class CompositionPlayerAudioPlaybackTest {
|
||||
player.seekTo(/* positionMs= */ 1200);
|
||||
player.prepare();
|
||||
player.play();
|
||||
TestPlayerRunHelper.run(player).untilState(Player.STATE_ENDED);
|
||||
TestPlayerRunHelper.advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
|
||||
DumpFileAsserts.assertOutput(
|
||||
@ -557,7 +557,7 @@ public final class CompositionPlayerAudioPlaybackTest {
|
||||
player.seekTo(/* positionMs= */ 500);
|
||||
player.prepare();
|
||||
player.play();
|
||||
TestPlayerRunHelper.run(player).untilState(Player.STATE_ENDED);
|
||||
TestPlayerRunHelper.advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
|
||||
DumpFileAsserts.assertOutput(
|
||||
@ -599,7 +599,7 @@ public final class CompositionPlayerAudioPlaybackTest {
|
||||
player.seekTo(/* positionMs= */ 800);
|
||||
player.prepare();
|
||||
player.play();
|
||||
TestPlayerRunHelper.run(player).untilState(Player.STATE_ENDED);
|
||||
TestPlayerRunHelper.advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
|
||||
DumpFileAsserts.assertOutput(
|
||||
|
@ -211,7 +211,7 @@ public class CompositionPlayerTest {
|
||||
|
||||
player.setComposition(buildComposition());
|
||||
player.prepare();
|
||||
TestPlayerRunHelper.run(player).untilState(Player.STATE_READY);
|
||||
TestPlayerRunHelper.advance(player).untilState(Player.STATE_READY);
|
||||
|
||||
player.release();
|
||||
|
||||
@ -838,7 +838,7 @@ public class CompositionPlayerTest {
|
||||
player.play();
|
||||
|
||||
player.seekTo(/* positionMs= */ 1100);
|
||||
TestPlayerRunHelper.run(player).untilState(Player.STATE_ENDED);
|
||||
TestPlayerRunHelper.advance(player).untilState(Player.STATE_ENDED);
|
||||
player.release();
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user