Some test cleanup

The purpose of this change isn't to fix anything. It's just to
simplify things a little bit. There will be following CLs that
make some changes to get things onto correct threads.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=175800354
This commit is contained in:
olly 2017-11-15 02:19:48 -08:00 committed by Oliver Woodman
parent 5aa053d91d
commit 5301d38136
4 changed files with 270 additions and 289 deletions

View File

@ -15,19 +15,14 @@
*/
package com.google.android.exoplayer2.source;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.os.ConditionVariable;
import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Message;
import com.google.android.exoplayer2.C;
import com.google.android.exoplayer2.ExoPlaybackException;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.source.MediaPeriod.Callback;
@ -37,8 +32,8 @@ import com.google.android.exoplayer2.testutil.FakeMediaSource;
import com.google.android.exoplayer2.testutil.FakeShuffleOrder;
import com.google.android.exoplayer2.testutil.FakeTimeline;
import com.google.android.exoplayer2.testutil.FakeTimeline.TimelineWindowDefinition;
import com.google.android.exoplayer2.testutil.StubExoPlayer;
import com.google.android.exoplayer2.testutil.TimelineAsserts;
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
import java.util.Arrays;
import junit.framework.TestCase;
import org.mockito.Mockito;
@ -456,7 +451,7 @@ public final class DynamicConcatenatingMediaSourceTest extends TestCase {
setUpDynamicMediaSourceOnHandlerThread();
final Runnable runnable = createCustomRunnable();
sourceHandlerPair.handler.post(new Runnable() {
sourceHandlerPair.mainHandler.post(new Runnable() {
@Override
public void run() {
sourceHandlerPair.mediaSource.addMediaSource(createFakeMediaSource(), runnable);
@ -470,7 +465,7 @@ public final class DynamicConcatenatingMediaSourceTest extends TestCase {
setUpDynamicMediaSourceOnHandlerThread();
final Runnable runnable = createCustomRunnable();
sourceHandlerPair.handler.post(new Runnable() {
sourceHandlerPair.mainHandler.post(new Runnable() {
@Override
public void run() {
sourceHandlerPair.mediaSource.addMediaSources(Arrays.asList(
@ -485,7 +480,7 @@ public final class DynamicConcatenatingMediaSourceTest extends TestCase {
setUpDynamicMediaSourceOnHandlerThread();
final Runnable runnable = createCustomRunnable();
sourceHandlerPair.handler.post(new Runnable() {
sourceHandlerPair.mainHandler.post(new Runnable() {
@Override
public void run() {
sourceHandlerPair.mediaSource.addMediaSource(/* index */ 0, createFakeMediaSource(),
@ -500,7 +495,7 @@ public final class DynamicConcatenatingMediaSourceTest extends TestCase {
setUpDynamicMediaSourceOnHandlerThread();
final Runnable runnable = createCustomRunnable();
sourceHandlerPair.handler.post(new Runnable() {
sourceHandlerPair.mainHandler.post(new Runnable() {
@Override
public void run() {
sourceHandlerPair.mediaSource.addMediaSources(/* index */ 0, Arrays.asList(
@ -514,7 +509,7 @@ public final class DynamicConcatenatingMediaSourceTest extends TestCase {
final DynamicConcatenatingMediaSourceAndHandler sourceHandlerPair =
setUpDynamicMediaSourceOnHandlerThread();
final Runnable runnable = createCustomRunnable();
sourceHandlerPair.handler.post(new Runnable() {
sourceHandlerPair.mainHandler.post(new Runnable() {
@Override
public void run() {
sourceHandlerPair.mediaSource.addMediaSource(createFakeMediaSource());
@ -522,7 +517,7 @@ public final class DynamicConcatenatingMediaSourceTest extends TestCase {
});
waitForTimelineUpdate();
sourceHandlerPair.handler.post(new Runnable() {
sourceHandlerPair.mainHandler.post(new Runnable() {
@Override
public void run() {
sourceHandlerPair.mediaSource.removeMediaSource(/* index */ 0, runnable);
@ -535,7 +530,7 @@ public final class DynamicConcatenatingMediaSourceTest extends TestCase {
final DynamicConcatenatingMediaSourceAndHandler sourceHandlerPair =
setUpDynamicMediaSourceOnHandlerThread();
final Runnable runnable = createCustomRunnable();
sourceHandlerPair.handler.post(new Runnable() {
sourceHandlerPair.mainHandler.post(new Runnable() {
@Override
public void run() {
sourceHandlerPair.mediaSource.addMediaSources(Arrays.asList(
@ -544,7 +539,7 @@ public final class DynamicConcatenatingMediaSourceTest extends TestCase {
});
waitForTimelineUpdate();
sourceHandlerPair.handler.post(new Runnable() {
sourceHandlerPair.mainHandler.post(new Runnable() {
@Override
public void run() {
sourceHandlerPair.mediaSource.moveMediaSource(/* fromIndex */ 1, /* toIndex */ 0,
@ -585,24 +580,17 @@ public final class DynamicConcatenatingMediaSourceTest extends TestCase {
private DynamicConcatenatingMediaSourceAndHandler setUpDynamicMediaSourceOnHandlerThread()
throws InterruptedException {
final DynamicConcatenatingMediaSource mediaSource = new DynamicConcatenatingMediaSource();
prepareAndListenToTimelineUpdates(mediaSource);
waitForTimelineUpdate();
HandlerThread handlerThread = new HandlerThread("TestCustomCallbackExecutionThread");
handlerThread.start();
Handler.Callback handlerCallback = Mockito.mock(Handler.Callback.class);
when(handlerCallback.handleMessage(any(Message.class))).thenReturn(false);
Handler handler = new Handler(handlerThread.getLooper(), handlerCallback);
final DynamicConcatenatingMediaSource mediaSource = new DynamicConcatenatingMediaSource();
handler.post(new Runnable() {
@Override
public void run() {
prepareAndListenToTimelineUpdates(mediaSource);
}
});
waitForTimelineUpdate();
Handler handler = new Handler(handlerThread.getLooper());
return new DynamicConcatenatingMediaSourceAndHandler(mediaSource, handler);
}
private void prepareAndListenToTimelineUpdates(MediaSource mediaSource) {
mediaSource.prepareSource(new StubExoPlayer(), true, new Listener() {
mediaSource.prepareSource(new MessageHandlingExoPlayer(), true, new Listener() {
@Override
public void onSourceInfoRefreshed(MediaSource source, Timeline newTimeline, Object manifest) {
timeline = newTimeline;
@ -669,244 +657,34 @@ public final class DynamicConcatenatingMediaSourceTest extends TestCase {
private static class DynamicConcatenatingMediaSourceAndHandler {
public final DynamicConcatenatingMediaSource mediaSource;
public final Handler handler;
public final Handler mainHandler;
public DynamicConcatenatingMediaSourceAndHandler(DynamicConcatenatingMediaSource mediaSource,
Handler handler) {
Handler mainHandler) {
this.mediaSource = mediaSource;
this.handler = handler;
this.mainHandler = mainHandler;
}
}
/**
* Stub ExoPlayer which only accepts custom messages and runs them on a separate handler thread.
* ExoPlayer that only accepts custom messages and runs them on a separate handler thread.
*/
private static class StubExoPlayer implements ExoPlayer, Handler.Callback {
private static class MessageHandlingExoPlayer extends StubExoPlayer implements Handler.Callback {
private final Handler handler;
public StubExoPlayer() {
public MessageHandlingExoPlayer() {
HandlerThread handlerThread = new HandlerThread("StubExoPlayerThread");
handlerThread.start();
handler = new Handler(handlerThread.getLooper(), this);
}
@Override
public Looper getPlaybackLooper() {
throw new UnsupportedOperationException();
}
@Override
public void addListener(Player.EventListener listener) {
throw new UnsupportedOperationException();
}
@Override
public void removeListener(Player.EventListener listener) {
throw new UnsupportedOperationException();
}
@Override
public int getPlaybackState() {
throw new UnsupportedOperationException();
}
@Override
public void prepare(MediaSource mediaSource) {
throw new UnsupportedOperationException();
}
@Override
public void prepare(MediaSource mediaSource, boolean resetPosition, boolean resetState) {
throw new UnsupportedOperationException();
}
@Override
public void setPlayWhenReady(boolean playWhenReady) {
throw new UnsupportedOperationException();
}
@Override
public boolean getPlayWhenReady() {
throw new UnsupportedOperationException();
}
@Override
public void setRepeatMode(@RepeatMode int repeatMode) {
throw new UnsupportedOperationException();
}
@Override
public int getRepeatMode() {
throw new UnsupportedOperationException();
}
@Override
public void setShuffleModeEnabled(boolean shuffleModeEnabled) {
throw new UnsupportedOperationException();
}
@Override
public boolean getShuffleModeEnabled() {
throw new UnsupportedOperationException();
}
@Override
public boolean isLoading() {
throw new UnsupportedOperationException();
}
@Override
public void seekToDefaultPosition() {
throw new UnsupportedOperationException();
}
@Override
public void seekToDefaultPosition(int windowIndex) {
throw new UnsupportedOperationException();
}
@Override
public void seekTo(long positionMs) {
throw new UnsupportedOperationException();
}
@Override
public void seekTo(int windowIndex, long positionMs) {
throw new UnsupportedOperationException();
}
@Override
public void setPlaybackParameters(PlaybackParameters playbackParameters) {
throw new UnsupportedOperationException();
}
@Override
public PlaybackParameters getPlaybackParameters() {
throw new UnsupportedOperationException();
}
@Override
public void stop() {
throw new UnsupportedOperationException();
}
@Override
public void release() {
throw new UnsupportedOperationException();
}
@Override
public void sendMessages(ExoPlayerMessage... messages) {
handler.obtainMessage(0, messages).sendToTarget();
}
@Override
public void blockingSendMessages(ExoPlayerMessage... messages) {
throw new UnsupportedOperationException();
}
@Override
public int getRendererCount() {
throw new UnsupportedOperationException();
}
@Override
public int getRendererType(int index) {
throw new UnsupportedOperationException();
}
@Override
public TrackGroupArray getCurrentTrackGroups() {
throw new UnsupportedOperationException();
}
@Override
public TrackSelectionArray getCurrentTrackSelections() {
throw new UnsupportedOperationException();
}
@Override
public Object getCurrentManifest() {
throw new UnsupportedOperationException();
}
@Override
public Timeline getCurrentTimeline() {
throw new UnsupportedOperationException();
}
@Override
public int getCurrentPeriodIndex() {
throw new UnsupportedOperationException();
}
@Override
public int getCurrentWindowIndex() {
throw new UnsupportedOperationException();
}
@Override
public int getNextWindowIndex() {
throw new UnsupportedOperationException();
}
@Override
public int getPreviousWindowIndex() {
throw new UnsupportedOperationException();
}
@Override
public long getDuration() {
throw new UnsupportedOperationException();
}
@Override
public long getCurrentPosition() {
throw new UnsupportedOperationException();
}
@Override
public long getBufferedPosition() {
throw new UnsupportedOperationException();
}
@Override
public int getBufferedPercentage() {
throw new UnsupportedOperationException();
}
@Override
public boolean isCurrentWindowDynamic() {
throw new UnsupportedOperationException();
}
@Override
public boolean isCurrentWindowSeekable() {
throw new UnsupportedOperationException();
}
@Override
public boolean isPlayingAd() {
throw new UnsupportedOperationException();
}
@Override
public int getCurrentAdGroupIndex() {
throw new UnsupportedOperationException();
}
@Override
public int getCurrentAdIndexInAdGroup() {
throw new UnsupportedOperationException();
}
@Override
public long getContentPosition() {
throw new UnsupportedOperationException();
}
@Override
public boolean handleMessage(Message msg) {
ExoPlayerMessage[] messages = (ExoPlayerMessage[]) msg.obj;
@ -919,6 +697,7 @@ public final class DynamicConcatenatingMediaSourceTest extends TestCase {
}
return true;
}
}
}

View File

@ -69,7 +69,7 @@ public class FakeSimpleExoPlayer extends SimpleExoPlayer {
return player;
}
private static class FakeExoPlayer implements ExoPlayer, MediaSource.Listener,
private static class FakeExoPlayer extends StubExoPlayer implements MediaSource.Listener,
MediaPeriod.Callback, Runnable {
private final Renderer[] renderers;
@ -144,21 +144,11 @@ public class FakeSimpleExoPlayer extends SimpleExoPlayer {
return true;
}
@Override
public void setRepeatMode(@RepeatMode int repeatMode) {
throw new UnsupportedOperationException();
}
@Override
public int getRepeatMode() {
return Player.REPEAT_MODE_OFF;
}
@Override
public void setShuffleModeEnabled(boolean shuffleModeEnabled) {
throw new UnsupportedOperationException();
}
@Override
public boolean getShuffleModeEnabled() {
return false;
@ -169,31 +159,6 @@ public class FakeSimpleExoPlayer extends SimpleExoPlayer {
return isLoading;
}
@Override
public void seekToDefaultPosition() {
throw new UnsupportedOperationException();
}
@Override
public void seekToDefaultPosition(int windowIndex) {
throw new UnsupportedOperationException();
}
@Override
public void seekTo(long positionMs) {
throw new UnsupportedOperationException();
}
@Override
public void seekTo(int windowIndex, long positionMs) {
throw new UnsupportedOperationException();
}
@Override
public void setPlaybackParameters(@Nullable PlaybackParameters playbackParameters) {
throw new UnsupportedOperationException();
}
@Override
public PlaybackParameters getPlaybackParameters() {
return PlaybackParameters.DEFAULT;
@ -351,16 +316,6 @@ public class FakeSimpleExoPlayer extends SimpleExoPlayer {
});
}
@Override
public void sendMessages(ExoPlayerMessage... messages) {
throw new UnsupportedOperationException();
}
@Override
public void blockingSendMessages(ExoPlayerMessage... messages) {
throw new UnsupportedOperationException();
}
// MediaSource.Listener
@Override

View File

@ -15,7 +15,6 @@
*/
package com.google.android.exoplayer2.testutil;
/**
* Provides ogg/vorbis test data in bytes for unit tests.
*/

View File

@ -0,0 +1,248 @@
/*
* Copyright (C) 2017 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.google.android.exoplayer2.testutil;
import android.os.Looper;
import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.PlaybackParameters;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.Timeline;
import com.google.android.exoplayer2.source.MediaSource;
import com.google.android.exoplayer2.source.TrackGroupArray;
import com.google.android.exoplayer2.trackselection.TrackSelectionArray;
/**
* An abstract {@link ExoPlayer} implementation that throws {@link UnsupportedOperationException}
* from every method.
*/
public abstract class StubExoPlayer implements ExoPlayer {
@Override
public Looper getPlaybackLooper() {
throw new UnsupportedOperationException();
}
@Override
public void addListener(Player.EventListener listener) {
throw new UnsupportedOperationException();
}
@Override
public void removeListener(Player.EventListener listener) {
throw new UnsupportedOperationException();
}
@Override
public int getPlaybackState() {
throw new UnsupportedOperationException();
}
@Override
public void prepare(MediaSource mediaSource) {
throw new UnsupportedOperationException();
}
@Override
public void prepare(MediaSource mediaSource, boolean resetPosition, boolean resetState) {
throw new UnsupportedOperationException();
}
@Override
public void setPlayWhenReady(boolean playWhenReady) {
throw new UnsupportedOperationException();
}
@Override
public boolean getPlayWhenReady() {
throw new UnsupportedOperationException();
}
@Override
public void setRepeatMode(@RepeatMode int repeatMode) {
throw new UnsupportedOperationException();
}
@Override
public int getRepeatMode() {
throw new UnsupportedOperationException();
}
@Override
public void setShuffleModeEnabled(boolean shuffleModeEnabled) {
throw new UnsupportedOperationException();
}
@Override
public boolean getShuffleModeEnabled() {
throw new UnsupportedOperationException();
}
@Override
public boolean isLoading() {
throw new UnsupportedOperationException();
}
@Override
public void seekToDefaultPosition() {
throw new UnsupportedOperationException();
}
@Override
public void seekToDefaultPosition(int windowIndex) {
throw new UnsupportedOperationException();
}
@Override
public void seekTo(long positionMs) {
throw new UnsupportedOperationException();
}
@Override
public void seekTo(int windowIndex, long positionMs) {
throw new UnsupportedOperationException();
}
@Override
public void setPlaybackParameters(PlaybackParameters playbackParameters) {
throw new UnsupportedOperationException();
}
@Override
public PlaybackParameters getPlaybackParameters() {
throw new UnsupportedOperationException();
}
@Override
public void stop() {
throw new UnsupportedOperationException();
}
@Override
public void release() {
throw new UnsupportedOperationException();
}
@Override
public void sendMessages(ExoPlayerMessage... messages) {
throw new UnsupportedOperationException();
}
@Override
public void blockingSendMessages(ExoPlayerMessage... messages) {
throw new UnsupportedOperationException();
}
@Override
public int getRendererCount() {
throw new UnsupportedOperationException();
}
@Override
public int getRendererType(int index) {
throw new UnsupportedOperationException();
}
@Override
public TrackGroupArray getCurrentTrackGroups() {
throw new UnsupportedOperationException();
}
@Override
public TrackSelectionArray getCurrentTrackSelections() {
throw new UnsupportedOperationException();
}
@Override
public Object getCurrentManifest() {
throw new UnsupportedOperationException();
}
@Override
public Timeline getCurrentTimeline() {
throw new UnsupportedOperationException();
}
@Override
public int getCurrentPeriodIndex() {
throw new UnsupportedOperationException();
}
@Override
public int getCurrentWindowIndex() {
throw new UnsupportedOperationException();
}
@Override
public int getNextWindowIndex() {
throw new UnsupportedOperationException();
}
@Override
public int getPreviousWindowIndex() {
throw new UnsupportedOperationException();
}
@Override
public long getDuration() {
throw new UnsupportedOperationException();
}
@Override
public long getCurrentPosition() {
throw new UnsupportedOperationException();
}
@Override
public long getBufferedPosition() {
throw new UnsupportedOperationException();
}
@Override
public int getBufferedPercentage() {
throw new UnsupportedOperationException();
}
@Override
public boolean isCurrentWindowDynamic() {
throw new UnsupportedOperationException();
}
@Override
public boolean isCurrentWindowSeekable() {
throw new UnsupportedOperationException();
}
@Override
public boolean isPlayingAd() {
throw new UnsupportedOperationException();
}
@Override
public int getCurrentAdGroupIndex() {
throw new UnsupportedOperationException();
}
@Override
public int getCurrentAdIndexInAdGroup() {
throw new UnsupportedOperationException();
}
@Override
public long getContentPosition() {
throw new UnsupportedOperationException();
}
}