mirror of
https://github.com/samsonjs/media.git
synced 2026-03-25 09:25:53 +00:00
Use MediaSourceTestRunner in additional source tests
------------- Created by MOE: https://github.com/google/moe MOE_MIGRATED_REVID=176366471
This commit is contained in:
parent
2a685da4eb
commit
3656230cb1
6 changed files with 52 additions and 62 deletions
|
|
@ -24,7 +24,7 @@ import com.google.android.exoplayer2.Timeline.Window;
|
|||
import com.google.android.exoplayer2.testutil.FakeMediaSource;
|
||||
import com.google.android.exoplayer2.testutil.FakeTimeline;
|
||||
import com.google.android.exoplayer2.testutil.FakeTimeline.TimelineWindowDefinition;
|
||||
import com.google.android.exoplayer2.testutil.TestUtil;
|
||||
import com.google.android.exoplayer2.testutil.MediaSourceTestRunner;
|
||||
import com.google.android.exoplayer2.testutil.TimelineAsserts;
|
||||
|
||||
/**
|
||||
|
|
@ -123,9 +123,14 @@ public final class ClippingMediaSourceTest extends InstrumentationTestCase {
|
|||
* Wraps the specified timeline in a {@link ClippingMediaSource} and returns the clipped timeline.
|
||||
*/
|
||||
private static Timeline getClippedTimeline(Timeline timeline, long startMs, long endMs) {
|
||||
MediaSource mediaSource = new FakeMediaSource(timeline, null);
|
||||
return TestUtil.extractTimelineFromMediaSource(
|
||||
new ClippingMediaSource(mediaSource, startMs, endMs));
|
||||
FakeMediaSource fakeMediaSource = new FakeMediaSource(timeline, null);
|
||||
ClippingMediaSource mediaSource = new ClippingMediaSource(fakeMediaSource, startMs, endMs);
|
||||
MediaSourceTestRunner testRunner = new MediaSourceTestRunner(mediaSource, null);
|
||||
try {
|
||||
return testRunner.prepareSource();
|
||||
} finally {
|
||||
testRunner.release();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,7 +24,6 @@ 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.MediaSourceTestRunner;
|
||||
import com.google.android.exoplayer2.testutil.TestUtil;
|
||||
import com.google.android.exoplayer2.testutil.TimelineAsserts;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
|
|
@ -33,8 +32,6 @@ import junit.framework.TestCase;
|
|||
*/
|
||||
public final class ConcatenatingMediaSourceTest extends TestCase {
|
||||
|
||||
private static final int TIMEOUT_MS = 10000;
|
||||
|
||||
public void testEmptyConcatenation() {
|
||||
for (boolean atomic : new boolean[] {false, true}) {
|
||||
Timeline timeline = getConcatenatedTimeline(atomic);
|
||||
|
|
@ -211,7 +208,7 @@ public final class ConcatenatingMediaSourceTest extends TestCase {
|
|||
ConcatenatingMediaSource mediaSource = new ConcatenatingMediaSource(mediaSourceContentOnly,
|
||||
mediaSourceWithAds);
|
||||
|
||||
MediaSourceTestRunner testRunner = new MediaSourceTestRunner(mediaSource, null, TIMEOUT_MS);
|
||||
MediaSourceTestRunner testRunner = new MediaSourceTestRunner(mediaSource, null);
|
||||
try {
|
||||
Timeline timeline = testRunner.prepareSource();
|
||||
TimelineAsserts.assertAdGroupCounts(timeline, 0, 0, 1, 1);
|
||||
|
|
@ -241,7 +238,12 @@ public final class ConcatenatingMediaSourceTest extends TestCase {
|
|||
}
|
||||
ConcatenatingMediaSource mediaSource = new ConcatenatingMediaSource(isRepeatOneAtomic,
|
||||
new FakeShuffleOrder(mediaSources.length), mediaSources);
|
||||
return TestUtil.extractTimelineFromMediaSource(mediaSource);
|
||||
MediaSourceTestRunner testRunner = new MediaSourceTestRunner(mediaSource, null);
|
||||
try {
|
||||
return testRunner.prepareSource();
|
||||
} finally {
|
||||
testRunner.release();
|
||||
}
|
||||
}
|
||||
|
||||
private static FakeTimeline createFakeTimeline(int periodCount, int windowId) {
|
||||
|
|
|
|||
|
|
@ -39,19 +39,19 @@ import org.mockito.Mockito;
|
|||
*/
|
||||
public final class DynamicConcatenatingMediaSourceTest extends TestCase {
|
||||
|
||||
private static final int TIMEOUT_MS = 10000;
|
||||
|
||||
private DynamicConcatenatingMediaSource mediaSource;
|
||||
private MediaSourceTestRunner testRunner;
|
||||
|
||||
@Override
|
||||
public void setUp() {
|
||||
public void setUp() throws Exception {
|
||||
super.setUp();
|
||||
mediaSource = new DynamicConcatenatingMediaSource(new FakeShuffleOrder(0));
|
||||
testRunner = new MediaSourceTestRunner(mediaSource, null, TIMEOUT_MS);
|
||||
testRunner = new MediaSourceTestRunner(mediaSource, null);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void tearDown() {
|
||||
public void tearDown() throws Exception {
|
||||
super.tearDown();
|
||||
testRunner.release();
|
||||
}
|
||||
|
||||
|
|
@ -623,7 +623,7 @@ public final class DynamicConcatenatingMediaSourceTest extends TestCase {
|
|||
finishedCondition.open();
|
||||
}
|
||||
});
|
||||
assertTrue(finishedCondition.block(TIMEOUT_MS));
|
||||
assertTrue(finishedCondition.block(MediaSourceTestRunner.TIMEOUT_MS));
|
||||
}
|
||||
|
||||
public void release() {
|
||||
|
|
@ -656,7 +656,7 @@ public final class DynamicConcatenatingMediaSourceTest extends TestCase {
|
|||
}
|
||||
|
||||
public Timeline assertTimelineChangeBlocking() {
|
||||
assertTrue(finishedCondition.block(TIMEOUT_MS));
|
||||
assertTrue(finishedCondition.block(MediaSourceTestRunner.TIMEOUT_MS));
|
||||
if (error != null) {
|
||||
throw error;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -21,7 +21,7 @@ import com.google.android.exoplayer2.Timeline;
|
|||
import com.google.android.exoplayer2.testutil.FakeMediaSource;
|
||||
import com.google.android.exoplayer2.testutil.FakeTimeline;
|
||||
import com.google.android.exoplayer2.testutil.FakeTimeline.TimelineWindowDefinition;
|
||||
import com.google.android.exoplayer2.testutil.TestUtil;
|
||||
import com.google.android.exoplayer2.testutil.MediaSourceTestRunner;
|
||||
import com.google.android.exoplayer2.testutil.TimelineAsserts;
|
||||
import junit.framework.TestCase;
|
||||
|
||||
|
|
@ -110,10 +110,14 @@ public class LoopingMediaSourceTest extends TestCase {
|
|||
* the looping timeline.
|
||||
*/
|
||||
private static Timeline getLoopingTimeline(Timeline timeline, int loopCount) {
|
||||
MediaSource mediaSource = new FakeMediaSource(timeline, null);
|
||||
return TestUtil.extractTimelineFromMediaSource(
|
||||
new LoopingMediaSource(mediaSource, loopCount));
|
||||
FakeMediaSource fakeMediaSource = new FakeMediaSource(timeline, null);
|
||||
LoopingMediaSource mediaSource = new LoopingMediaSource(fakeMediaSource, loopCount);
|
||||
MediaSourceTestRunner testRunner = new MediaSourceTestRunner(mediaSource, null);
|
||||
try {
|
||||
return testRunner.prepareSource();
|
||||
} finally {
|
||||
testRunner.release();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -31,6 +31,8 @@ import com.google.android.exoplayer2.source.MediaSource;
|
|||
import com.google.android.exoplayer2.source.MediaSource.MediaPeriodId;
|
||||
import com.google.android.exoplayer2.upstream.Allocator;
|
||||
import com.google.android.exoplayer2.util.Assertions;
|
||||
import com.google.android.exoplayer2.util.Util;
|
||||
|
||||
import java.util.concurrent.LinkedBlockingDeque;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
|
|
@ -39,7 +41,8 @@ import java.util.concurrent.TimeUnit;
|
|||
*/
|
||||
public class MediaSourceTestRunner {
|
||||
|
||||
private final long timeoutMs;
|
||||
public static final int TIMEOUT_MS = 10000;
|
||||
|
||||
private final StubExoPlayer player;
|
||||
private final MediaSource mediaSource;
|
||||
private final MediaSourceListener mediaSourceListener;
|
||||
|
|
@ -53,12 +56,10 @@ public class MediaSourceTestRunner {
|
|||
/**
|
||||
* @param mediaSource The source under test.
|
||||
* @param allocator The allocator to use during the test run.
|
||||
* @param timeoutMs The timeout for operations in milliseconds.
|
||||
*/
|
||||
public MediaSourceTestRunner(MediaSource mediaSource, Allocator allocator, long timeoutMs) {
|
||||
public MediaSourceTestRunner(MediaSource mediaSource, Allocator allocator) {
|
||||
this.mediaSource = mediaSource;
|
||||
this.allocator = allocator;
|
||||
this.timeoutMs = timeoutMs;
|
||||
playbackThread = new HandlerThread("PlaybackThread");
|
||||
playbackThread.start();
|
||||
Looper playbackLooper = playbackThread.getLooper();
|
||||
|
|
@ -74,15 +75,24 @@ public class MediaSourceTestRunner {
|
|||
* @param runnable The {@link Runnable} to run.
|
||||
*/
|
||||
public void runOnPlaybackThread(final Runnable runnable) {
|
||||
final Throwable[] throwable = new Throwable[1];
|
||||
final ConditionVariable finishedCondition = new ConditionVariable();
|
||||
playbackHandler.post(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
runnable.run();
|
||||
finishedCondition.open();
|
||||
try {
|
||||
runnable.run();
|
||||
} catch (Throwable e) {
|
||||
throwable[0] = e;
|
||||
} finally {
|
||||
finishedCondition.open();
|
||||
}
|
||||
}
|
||||
});
|
||||
assertTrue(finishedCondition.block(timeoutMs));
|
||||
assertTrue(finishedCondition.block(TIMEOUT_MS));
|
||||
if (throwable[0] != null) {
|
||||
Util.sneakyThrow(throwable[0]);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
@ -200,7 +210,7 @@ public class MediaSourceTestRunner {
|
|||
*/
|
||||
public Timeline assertTimelineChangeBlocking() {
|
||||
try {
|
||||
timeline = timelines.poll(timeoutMs, TimeUnit.MILLISECONDS);
|
||||
timeline = timelines.poll(TIMEOUT_MS, TimeUnit.MILLISECONDS);
|
||||
assertNotNull(timeline); // Null indicates the poll timed out.
|
||||
assertNoTimelineChange();
|
||||
return timeline;
|
||||
|
|
@ -231,12 +241,12 @@ public class MediaSourceTestRunner {
|
|||
private void assertPrepareAndReleasePeriod(MediaPeriodId mediaPeriodId) {
|
||||
MediaPeriod mediaPeriod = createPeriod(mediaPeriodId);
|
||||
ConditionVariable preparedCondition = preparePeriod(mediaPeriod, 0);
|
||||
assertTrue(preparedCondition.block(timeoutMs));
|
||||
assertTrue(preparedCondition.block(TIMEOUT_MS));
|
||||
// MediaSource is supposed to support multiple calls to createPeriod with the same id without an
|
||||
// intervening call to releasePeriod.
|
||||
MediaPeriod secondMediaPeriod = createPeriod(mediaPeriodId);
|
||||
ConditionVariable secondPreparedCondition = preparePeriod(secondMediaPeriod, 0);
|
||||
assertTrue(secondPreparedCondition.block(timeoutMs));
|
||||
assertTrue(secondPreparedCondition.block(TIMEOUT_MS));
|
||||
// Release the periods.
|
||||
releasePeriod(mediaPeriod);
|
||||
releasePeriod(secondMediaPeriod);
|
||||
|
|
|
|||
|
|
@ -19,10 +19,7 @@ import android.app.Instrumentation;
|
|||
import android.content.Context;
|
||||
import android.test.MoreAsserts;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.Timeline;
|
||||
import com.google.android.exoplayer2.extractor.Extractor;
|
||||
import com.google.android.exoplayer2.source.MediaSource;
|
||||
import com.google.android.exoplayer2.source.MediaSource.Listener;
|
||||
import com.google.android.exoplayer2.testutil.FakeExtractorInput.SimulatedIOException;
|
||||
import com.google.android.exoplayer2.upstream.DataSource;
|
||||
import com.google.android.exoplayer2.upstream.DataSpec;
|
||||
|
|
@ -143,34 +140,6 @@ public class TestUtil {
|
|||
return new String(getByteArray(instrumentation, fileName));
|
||||
}
|
||||
|
||||
/**
|
||||
* Extracts the timeline from a media source.
|
||||
*/
|
||||
// TODO: Remove this method and transition callers over to MediaSourceTestRunner.
|
||||
public static Timeline extractTimelineFromMediaSource(MediaSource mediaSource) {
|
||||
class TimelineListener implements Listener {
|
||||
private Timeline timeline;
|
||||
@Override
|
||||
public synchronized void onSourceInfoRefreshed(MediaSource source, Timeline timeline,
|
||||
Object manifest) {
|
||||
this.timeline = timeline;
|
||||
this.notify();
|
||||
}
|
||||
}
|
||||
TimelineListener listener = new TimelineListener();
|
||||
mediaSource.prepareSource(null, true, listener);
|
||||
synchronized (listener) {
|
||||
while (listener.timeline == null) {
|
||||
try {
|
||||
listener.wait();
|
||||
} catch (InterruptedException e) {
|
||||
Assert.fail(e.getMessage());
|
||||
}
|
||||
}
|
||||
}
|
||||
return listener.timeline;
|
||||
}
|
||||
|
||||
/**
|
||||
* Asserts that data read from a {@link DataSource} matches {@code expected}.
|
||||
*
|
||||
|
|
|
|||
Loading…
Reference in a new issue