Release ExoPlayer instances in ExoPlayerTest

This was recommended in https://github.com/robolectric/robolectric/issues/8187#issuecomment-1552060094

PiperOrigin-RevId: 539691757
This commit is contained in:
ibaker 2023-06-12 18:19:56 +01:00 committed by Ian Baker
parent 4bceb64dee
commit 959e974138

View file

@ -271,6 +271,8 @@ public final class ExoPlayerTest {
assertThat(renderer.getFormatsRead()).isEmpty();
assertThat(renderer.sampleBufferReadCount).isEqualTo(0);
assertThat(renderer.isEnded).isFalse();
player.release();
}
/** Tests playback of a source that exposes a single period. */
@ -313,6 +315,8 @@ public final class ExoPlayerTest {
assertThat(renderer.getFormatsRead()).containsExactly(ExoPlayerTestRunner.VIDEO_FORMAT);
assertThat(renderer.sampleBufferReadCount).isEqualTo(1);
assertThat(renderer.isEnded).isTrue();
player.release();
}
/** Tests playback of a source that exposes three periods. */
@ -349,6 +353,8 @@ public final class ExoPlayerTest {
ExoPlayerTestRunner.VIDEO_FORMAT);
assertThat(renderer.sampleBufferReadCount).isEqualTo(3);
assertThat(renderer.isEnded).isTrue();
player.release();
}
/** Tests playback of periods with very short duration. */
@ -383,6 +389,8 @@ public final class ExoPlayerTest {
assertThat(renderer.getFormatsRead()).hasSize(100);
assertThat(renderer.sampleBufferReadCount).isEqualTo(100);
assertThat(renderer.isEnded).isTrue();
player.release();
}
@Test
@ -607,6 +615,8 @@ public final class ExoPlayerTest {
assertThat(audioRenderer.positionResetCount).isEqualTo(1);
assertThat(videoRenderer.isEnded).isTrue();
assertThat(audioRenderer.isEnded).isTrue();
player.release();
}
@Test
@ -688,6 +698,8 @@ public final class ExoPlayerTest {
new int[] {C.FORMAT_HANDLED},
/* trackSelected= */ new boolean[] {true})))));
assertThat(renderer.isEnded).isTrue();
player.release();
}
@Test
@ -730,6 +742,8 @@ public final class ExoPlayerTest {
.containsExactly(0, 1, 1, 2, 2, 0, 0, 0, 1, 2)
.inOrder();
assertThat(renderer.isEnded).isTrue();
player.release();
}
@Test
@ -2979,6 +2993,8 @@ public final class ExoPlayerTest {
assertThat(player.getPlayerError()).isNull();
verify(secondMediaItemTarget, times(2)).handleMessage(anyInt(), any());
player.release();
}
@Test
@ -3174,6 +3190,8 @@ public final class ExoPlayerTest {
// When the ad finishes, the player position should be at or after the requested seek position.
runUntilPositionDiscontinuity(player, Player.DISCONTINUITY_REASON_AUTO_TRANSITION);
assertThat(player.getCurrentPosition()).isAtLeast(seekPositionMs);
player.release();
}
@Test
@ -3317,6 +3335,8 @@ public final class ExoPlayerTest {
// We expect the change to null to be notified, but not onPlayerError.
verify(mockListener).onPlayerErrorChanged(ArgumentMatchers.isNull());
verify(mockListener, never()).onPlayerError(any());
player.release();
}
@Test
@ -5099,6 +5119,8 @@ public final class ExoPlayerTest {
// This times out if playback info updates after the seek are blocked.
runUntilPlaybackState(player, Player.STATE_ENDED);
player.release();
}
@Test
@ -5850,6 +5872,8 @@ public final class ExoPlayerTest {
runUntilPendingCommandsAreFullyHandled(player);
assertThat(player.getPlayerError()).isNull();
player.release();
}
@Test
@ -5936,6 +5960,8 @@ public final class ExoPlayerTest {
// The player is not stuck in the buffering state.
TestPlayerRunHelper.runUntilPlaybackState(player, Player.STATE_READY);
player.release();
}
@Test
@ -9345,6 +9371,8 @@ public final class ExoPlayerTest {
assertThat(player.isCommandAvailable(COMMAND_SET_TRACK_SELECTION_PARAMETERS)).isTrue();
assertThat(player.isCommandAvailable(COMMAND_GET_TRACKS)).isTrue();
assertThat(player.isCommandAvailable(COMMAND_RELEASE)).isTrue();
player.release();
}
@SuppressWarnings("deprecation") // Checking old volume commands
@ -9358,6 +9386,8 @@ public final class ExoPlayerTest {
assertThat(player.isCommandAvailable(COMMAND_ADJUST_DEVICE_VOLUME)).isTrue();
assertThat(player.isCommandAvailable(COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS)).isTrue();
assertThat(player.isCommandAvailable(COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS)).isTrue();
player.release();
}
@SuppressWarnings("deprecation") // Checking old volume commands
@ -9372,6 +9402,8 @@ public final class ExoPlayerTest {
assertThat(player.isCommandAvailable(COMMAND_ADJUST_DEVICE_VOLUME)).isFalse();
assertThat(player.isCommandAvailable(COMMAND_SET_DEVICE_VOLUME_WITH_FLAGS)).isFalse();
assertThat(player.isCommandAvailable(COMMAND_ADJUST_DEVICE_VOLUME_WITH_FLAGS)).isFalse();
player.release();
}
@Test
@ -9410,6 +9442,8 @@ public final class ExoPlayerTest {
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_MEDIA_ITEM)).isFalse();
assertThat(player.isCommandAvailable(COMMAND_SEEK_BACK)).isFalse();
assertThat(player.isCommandAvailable(COMMAND_SEEK_FORWARD)).isFalse();
player.release();
}
@Test
@ -9430,6 +9464,8 @@ public final class ExoPlayerTest {
assertThat(player.isCommandAvailable(COMMAND_SEEK_IN_CURRENT_MEDIA_ITEM)).isFalse();
assertThat(player.isCommandAvailable(COMMAND_SEEK_BACK)).isFalse();
assertThat(player.isCommandAvailable(COMMAND_SEEK_FORWARD)).isFalse();
player.release();
}
@Test
@ -9455,6 +9491,8 @@ public final class ExoPlayerTest {
runUntilPlaybackState(player, Player.STATE_READY);
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS)).isFalse();
player.release();
}
@Test
@ -9483,6 +9521,8 @@ public final class ExoPlayerTest {
runUntilPlaybackState(player, Player.STATE_READY);
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_PREVIOUS)).isTrue();
player.release();
}
@Test
@ -9507,6 +9547,8 @@ public final class ExoPlayerTest {
runUntilPlaybackState(player, Player.STATE_READY);
assertThat(player.isCommandAvailable(COMMAND_SEEK_TO_NEXT)).isTrue();
player.release();
}
@Test
@ -9544,6 +9586,8 @@ public final class ExoPlayerTest {
player.seekTo(/* mediaItemIndex= */ 3, /* positionMs= */ 0);
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPreviousWindow);
verify(mockListener, times(3)).onAvailableCommandsChanged(any());
player.release();
}
@Test
@ -9582,6 +9626,8 @@ public final class ExoPlayerTest {
player.seekTo(/* mediaItemIndex= */ 0, /* positionMs= */ 0);
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToNextWindow);
verify(mockListener, times(3)).onAvailableCommandsChanged(any());
player.release();
}
@Test
@ -9598,6 +9644,8 @@ public final class ExoPlayerTest {
player.seekTo(/* mediaItemIndex= */ 0, /* positionMs= */ 100);
// Check that there were no other calls to onAvailableCommandsChanged.
verify(mockListener).onAvailableCommandsChanged(any());
player.release();
}
@Test
@ -9657,6 +9705,8 @@ public final class ExoPlayerTest {
runUntilPlaybackState(player, Player.STATE_ENDED);
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekInCurrentAndToPreviousWindow);
verify(mockListener, times(4)).onAvailableCommandsChanged(any());
player.release();
}
@Test
@ -9679,6 +9729,8 @@ public final class ExoPlayerTest {
player.addMediaSource(new FakeMediaSource());
verify(mockListener, times(2)).onAvailableCommandsChanged(any());
player.release();
}
@Test
@ -9701,6 +9753,8 @@ public final class ExoPlayerTest {
player.addMediaSource(/* index= */ 0, new FakeMediaSource());
verify(mockListener, times(2)).onAvailableCommandsChanged(any());
player.release();
}
@Test
@ -9731,6 +9785,8 @@ public final class ExoPlayerTest {
player.removeMediaItem(/* index= */ 0);
verify(mockListener).onAvailableCommandsChanged(emptyTimelineCommands);
verify(mockListener, times(3)).onAvailableCommandsChanged(any());
player.release();
}
@Test
@ -9762,6 +9818,8 @@ public final class ExoPlayerTest {
player.removeMediaItem(/* index= */ 0);
verify(mockListener).onAvailableCommandsChanged(emptyTimelineCommands);
verify(mockListener, times(3)).onAvailableCommandsChanged(any());
player.release();
}
@Test
@ -9781,6 +9839,8 @@ public final class ExoPlayerTest {
player.removeMediaItem(/* index= */ 0);
verify(mockListener).onAvailableCommandsChanged(defaultCommands);
verify(mockListener, times(2)).onAvailableCommandsChanged(any());
player.release();
}
@Test
@ -9803,6 +9863,8 @@ public final class ExoPlayerTest {
player.setRepeatMode(Player.REPEAT_MODE_ALL);
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPreviousAndNextWindow);
verify(mockListener, times(2)).onAvailableCommandsChanged(any());
player.release();
}
@Test
@ -9817,6 +9879,8 @@ public final class ExoPlayerTest {
player.setRepeatMode(Player.REPEAT_MODE_ONE);
verify(mockListener).onAvailableCommandsChanged(any());
player.release();
}
@Test
@ -9843,6 +9907,8 @@ public final class ExoPlayerTest {
player.setShuffleModeEnabled(true);
verify(mockListener).onAvailableCommandsChanged(commandsWithSeekToPreviousWindow);
verify(mockListener, times(2)).onAvailableCommandsChanged(any());
player.release();
}
@Test
@ -9870,6 +9936,8 @@ public final class ExoPlayerTest {
.uid;
assertThat(error.mediaPeriodId.periodUid).isEqualTo(period1Uid);
assertThat(player.getCurrentMediaItemIndex()).isEqualTo(1);
player.release();
}
@Test
@ -9916,6 +9984,8 @@ public final class ExoPlayerTest {
.uid;
assertThat(error.mediaPeriodId.periodUid).isEqualTo(period1Uid);
assertThat(player.getCurrentMediaItemIndex()).isEqualTo(1);
player.release();
}
@Test
@ -9979,6 +10049,8 @@ public final class ExoPlayerTest {
.uid;
assertThat(error.mediaPeriodId.periodUid).isEqualTo(period1Uid);
assertThat(player.getCurrentMediaItemIndex()).isEqualTo(1);
player.release();
}
@Test
@ -10030,6 +10102,8 @@ public final class ExoPlayerTest {
inOrderEvents
.verify(mockListener)
.onMediaItemTransition(any(), any(), eq(Player.MEDIA_ITEM_TRANSITION_REASON_AUTO));
player.release();
}
@Test
@ -10059,6 +10133,8 @@ public final class ExoPlayerTest {
runUntilSleepingForOffload(player, /* expectedSleepForOffload= */ true);
assertThat(player.experimentalIsSleepingForOffload()).isTrue();
player.release();
}
@Test
@ -10079,6 +10155,8 @@ public final class ExoPlayerTest {
runUntilSleepingForOffload(player, /* expectedSleepForOffload= */ false);
assertThat(player.experimentalIsSleepingForOffload()).isFalse();
runUntilPlaybackState(player, Player.STATE_ENDED);
player.release();
}
@Test
@ -10097,6 +10175,8 @@ public final class ExoPlayerTest {
runUntilSleepingForOffload(player, /* expectedSleepForOffload= */ false);
assertThat(player.experimentalIsSleepingForOffload()).isFalse();
runUntilPlaybackState(player, Player.STATE_ENDED);
player.release();
}
@Test
@ -10121,6 +10201,8 @@ public final class ExoPlayerTest {
assertThat(newPosition - currentPosition).isNotEqualTo(0);
assertThat(newPosition).isEqualTo(800);
player.release();
}
@Test
@ -10146,6 +10228,8 @@ public final class ExoPlayerTest {
long currentPosition = player.getCurrentPosition();
assertThat(currentPosition).isEqualTo(800);
player.release();
}
@Test
@ -10173,6 +10257,8 @@ public final class ExoPlayerTest {
long currentPosition = player.getCurrentPosition();
assertThat(currentPosition).isEqualTo(1800);
player.release();
}
@Test
@ -10400,6 +10486,8 @@ public final class ExoPlayerTest {
verify(mockListener)
.onPlaybackParametersChanged(new PlaybackParameters(/* speed= */ 2, /* pitch= */ 2));
player.release();
}
@Test
@ -12361,6 +12449,8 @@ public final class ExoPlayerTest {
.build());
assertThat(player.getMediaMetadata()).isEqualTo(mediaMetadata);
player.release();
}
@Test
@ -12386,12 +12476,15 @@ public final class ExoPlayerTest {
shadowOf(Looper.getMainLooper()).idle();
assertThat(player.getMediaMetadata()).isEqualTo(mediaMetadata);
player.release();
}
@Test
@Config(sdk = Config.ALL_SDKS)
public void builder_inBackgroundThreadWithAllowedAnyThreadMethods_doesNotThrow()
throws Exception {
AtomicReference<Player> playerReference = new AtomicReference<>();
Thread builderThread =
new Thread(
() -> {
@ -12403,6 +12496,7 @@ public final class ExoPlayerTest {
player.getClock();
player.getApplicationLooper();
player.getPlaybackLooper();
playerReference.set(player);
});
AtomicReference<Throwable> builderThrow = new AtomicReference<>();
builderThread.setUncaughtExceptionHandler((thread, throwable) -> builderThrow.set(throwable));
@ -12411,6 +12505,7 @@ public final class ExoPlayerTest {
builderThread.join();
assertThat(builderThrow.get()).isNull();
playerReference.get().release();
}
@Test
@ -12427,6 +12522,8 @@ public final class ExoPlayerTest {
verify(playerListener).onPlaylistMetadataChanged(mediaMetadata);
verify(analyticsListener).onPlaylistMetadataChanged(any(), eq(mediaMetadata));
player.release();
}
@Test
@ -12633,6 +12730,8 @@ public final class ExoPlayerTest {
assertThat(minVolume).isEqualTo(0);
assertThat(maxVolume).isEqualTo(0);
player.release();
}
@Test
@ -12653,6 +12752,8 @@ public final class ExoPlayerTest {
runUntilPlaybackState(player, Player.STATE_ENDED);
// Assert that playing works without getting stuck due to the memory used by the back buffer.
player.release();
}
@Test