Commit 6eb70600 by olly Committed by Oliver Woodman

Migrate to Robolectric PAUSED looper mode: AudioFocusManagerTest

PiperOrigin-RevId: 322154193
parent 576ef821
...@@ -20,8 +20,8 @@ import static com.google.android.exoplayer2.AudioFocusManager.PLAYER_COMMAND_PLA ...@@ -20,8 +20,8 @@ import static com.google.android.exoplayer2.AudioFocusManager.PLAYER_COMMAND_PLA
import static com.google.android.exoplayer2.AudioFocusManager.PLAYER_COMMAND_WAIT_FOR_CALLBACK; import static com.google.android.exoplayer2.AudioFocusManager.PLAYER_COMMAND_WAIT_FOR_CALLBACK;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
import static org.robolectric.Shadows.shadowOf;
import static org.robolectric.annotation.Config.TARGET_SDK; import static org.robolectric.annotation.Config.TARGET_SDK;
import static org.robolectric.annotation.LooperMode.Mode.LEGACY;
import android.content.Context; import android.content.Context;
import android.media.AudioFocusRequest; import android.media.AudioFocusRequest;
...@@ -37,11 +37,9 @@ import org.junit.Test; ...@@ -37,11 +37,9 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.robolectric.Shadows; import org.robolectric.Shadows;
import org.robolectric.annotation.Config; import org.robolectric.annotation.Config;
import org.robolectric.annotation.LooperMode;
import org.robolectric.shadows.ShadowAudioManager; import org.robolectric.shadows.ShadowAudioManager;
/** Unit tests for {@link AudioFocusManager}. */ /** Unit tests for {@link AudioFocusManager}. */
@LooperMode(LEGACY)
@RunWith(AndroidJUnit4.class) @RunWith(AndroidJUnit4.class)
public class AudioFocusManagerTest { public class AudioFocusManagerTest {
private static final int NO_COMMAND_RECEIVED = ~PLAYER_COMMAND_WAIT_FOR_CALLBACK; private static final int NO_COMMAND_RECEIVED = ~PLAYER_COMMAND_WAIT_FOR_CALLBACK;
...@@ -231,8 +229,9 @@ public class AudioFocusManagerTest { ...@@ -231,8 +229,9 @@ public class AudioFocusManagerTest {
audioFocusManager audioFocusManager
.getFocusListener() .getFocusListener()
.onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK); .onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK);
assertThat(testPlayerControl.lastVolumeMultiplier).isLessThan(1.0f); shadowOf(Looper.getMainLooper()).idle();
assertThat(testPlayerControl.lastVolumeMultiplier).isLessThan(1.0f);
// Focus should be re-requested, rather than staying in a state of transient ducking. This // Focus should be re-requested, rather than staying in a state of transient ducking. This
// should restore the volume to 1.0. See https://github.com/google/ExoPlayer/issues/7182 for // should restore the volume to 1.0. See https://github.com/google/ExoPlayer/issues/7182 for
// context. // context.
...@@ -254,6 +253,8 @@ public class AudioFocusManagerTest { ...@@ -254,6 +253,8 @@ public class AudioFocusManagerTest {
audioFocusManager audioFocusManager
.getFocusListener() .getFocusListener()
.onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK); .onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK);
shadowOf(Looper.getMainLooper()).idle();
assertThat(testPlayerControl.lastVolumeMultiplier).isLessThan(1.0f); assertThat(testPlayerControl.lastVolumeMultiplier).isLessThan(1.0f);
// Configure the manager to no longer handle focus. // Configure the manager to no longer handle focus.
...@@ -354,6 +355,8 @@ public class AudioFocusManagerTest { ...@@ -354,6 +355,8 @@ public class AudioFocusManagerTest {
audioFocusManager audioFocusManager
.getFocusListener() .getFocusListener()
.onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK); .onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK);
shadowOf(Looper.getMainLooper()).idle();
assertThat(testPlayerControl.lastVolumeMultiplier).isLessThan(1.0f); assertThat(testPlayerControl.lastVolumeMultiplier).isLessThan(1.0f);
audioFocusManager.release(); audioFocusManager.release();
...@@ -374,10 +377,14 @@ public class AudioFocusManagerTest { ...@@ -374,10 +377,14 @@ public class AudioFocusManagerTest {
audioFocusManager audioFocusManager
.getFocusListener() .getFocusListener()
.onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK); .onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK);
shadowOf(Looper.getMainLooper()).idle();
assertThat(testPlayerControl.lastVolumeMultiplier).isLessThan(1.0f); assertThat(testPlayerControl.lastVolumeMultiplier).isLessThan(1.0f);
assertThat(testPlayerControl.lastPlayerCommand).isEqualTo(NO_COMMAND_RECEIVED); assertThat(testPlayerControl.lastPlayerCommand).isEqualTo(NO_COMMAND_RECEIVED);
audioFocusManager.getFocusListener().onAudioFocusChange(AudioManager.AUDIOFOCUS_GAIN); audioFocusManager.getFocusListener().onAudioFocusChange(AudioManager.AUDIOFOCUS_GAIN);
shadowOf(Looper.getMainLooper()).idle();
assertThat(testPlayerControl.lastVolumeMultiplier).isEqualTo(1.0f); assertThat(testPlayerControl.lastVolumeMultiplier).isEqualTo(1.0f);
} }
...@@ -399,9 +406,14 @@ public class AudioFocusManagerTest { ...@@ -399,9 +406,14 @@ public class AudioFocusManagerTest {
audioFocusManager audioFocusManager
.getFocusListener() .getFocusListener()
.onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK); .onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT_CAN_DUCK);
shadowOf(Looper.getMainLooper()).idle();
assertThat(testPlayerControl.lastPlayerCommand).isEqualTo(PLAYER_COMMAND_WAIT_FOR_CALLBACK); assertThat(testPlayerControl.lastPlayerCommand).isEqualTo(PLAYER_COMMAND_WAIT_FOR_CALLBACK);
assertThat(testPlayerControl.lastVolumeMultiplier).isEqualTo(1.0f); assertThat(testPlayerControl.lastVolumeMultiplier).isEqualTo(1.0f);
audioFocusManager.getFocusListener().onAudioFocusChange(AudioManager.AUDIOFOCUS_GAIN); audioFocusManager.getFocusListener().onAudioFocusChange(AudioManager.AUDIOFOCUS_GAIN);
shadowOf(Looper.getMainLooper()).idle();
assertThat(testPlayerControl.lastPlayerCommand).isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); assertThat(testPlayerControl.lastPlayerCommand).isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
} }
...@@ -415,6 +427,8 @@ public class AudioFocusManagerTest { ...@@ -415,6 +427,8 @@ public class AudioFocusManagerTest {
.isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY); .isEqualTo(PLAYER_COMMAND_PLAY_WHEN_READY);
audioFocusManager.getFocusListener().onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT); audioFocusManager.getFocusListener().onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS_TRANSIENT);
shadowOf(Looper.getMainLooper()).idle();
assertThat(testPlayerControl.lastVolumeMultiplier).isEqualTo(1.0f); assertThat(testPlayerControl.lastVolumeMultiplier).isEqualTo(1.0f);
assertThat(testPlayerControl.lastPlayerCommand).isEqualTo(PLAYER_COMMAND_WAIT_FOR_CALLBACK); assertThat(testPlayerControl.lastPlayerCommand).isEqualTo(PLAYER_COMMAND_WAIT_FOR_CALLBACK);
} }
...@@ -433,6 +447,8 @@ public class AudioFocusManagerTest { ...@@ -433,6 +447,8 @@ public class AudioFocusManagerTest {
ShadowAudioManager.AudioFocusRequest request = ShadowAudioManager.AudioFocusRequest request =
Shadows.shadowOf(audioManager).getLastAudioFocusRequest(); Shadows.shadowOf(audioManager).getLastAudioFocusRequest();
request.listener.onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS); request.listener.onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS);
shadowOf(Looper.getMainLooper()).idle();
assertThat(testPlayerControl.lastPlayerCommand).isEqualTo(PLAYER_COMMAND_DO_NOT_PLAY); assertThat(testPlayerControl.lastPlayerCommand).isEqualTo(PLAYER_COMMAND_DO_NOT_PLAY);
assertThat(Shadows.shadowOf(audioManager).getLastAbandonedAudioFocusListener()) assertThat(Shadows.shadowOf(audioManager).getLastAbandonedAudioFocusListener())
.isEqualTo(request.listener); .isEqualTo(request.listener);
...@@ -450,6 +466,8 @@ public class AudioFocusManagerTest { ...@@ -450,6 +466,8 @@ public class AudioFocusManagerTest {
assertThat(Shadows.shadowOf(audioManager).getLastAbandonedAudioFocusRequest()).isNull(); assertThat(Shadows.shadowOf(audioManager).getLastAbandonedAudioFocusRequest()).isNull();
audioFocusManager.getFocusListener().onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS); audioFocusManager.getFocusListener().onAudioFocusChange(AudioManager.AUDIOFOCUS_LOSS);
shadowOf(Looper.getMainLooper()).idle();
assertThat(testPlayerControl.lastPlayerCommand).isEqualTo(PLAYER_COMMAND_DO_NOT_PLAY); assertThat(testPlayerControl.lastPlayerCommand).isEqualTo(PLAYER_COMMAND_DO_NOT_PLAY);
assertThat(Shadows.shadowOf(audioManager).getLastAbandonedAudioFocusRequest()) assertThat(Shadows.shadowOf(audioManager).getLastAbandonedAudioFocusRequest())
.isEqualTo(Shadows.shadowOf(audioManager).getLastAudioFocusRequest().audioFocusRequest); .isEqualTo(Shadows.shadowOf(audioManager).getLastAudioFocusRequest().audioFocusRequest);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment