mirror of
https://github.com/androidx/media.git
synced 2025-05-16 20:19:57 +08:00
Add DataSource contract test for transfer listeners when opening fails.
TransferListener has the contract to have exactly one onTransferEnd per onTransferStart, so the test can both assert that onTransferInitializing is called, but not onTransferEnd (even after calling close). PiperOrigin-RevId: 362262078
This commit is contained in:
parent
27477a1980
commit
d9aee0f6a4
@ -54,4 +54,9 @@ public class ByteArrayDataSourceContractTest extends DataSourceContractTest {
|
||||
@Test
|
||||
@Ignore
|
||||
public void resourceNotFound() {}
|
||||
|
||||
@Override
|
||||
@Test
|
||||
@Ignore
|
||||
public void resourceNotFound_transferListenerCallbacks() {}
|
||||
}
|
||||
|
@ -20,8 +20,13 @@ import static com.google.android.exoplayer2.util.Assertions.checkNotNull;
|
||||
import static com.google.android.exoplayer2.util.Util.castNonNull;
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.junit.Assert.assertThrows;
|
||||
import static org.mockito.ArgumentMatchers.any;
|
||||
import static org.mockito.ArgumentMatchers.anyBoolean;
|
||||
import static org.mockito.ArgumentMatchers.eq;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.verify;
|
||||
import static org.mockito.Mockito.verifyNoMoreInteractions;
|
||||
|
||||
import android.net.Uri;
|
||||
import androidx.annotation.Nullable;
|
||||
@ -381,11 +386,8 @@ public abstract class DataSourceContractTest {
|
||||
@Test
|
||||
public void resourceNotFound() throws Exception {
|
||||
DataSource dataSource = createDataSource();
|
||||
try {
|
||||
assertThrows(IOException.class, () -> dataSource.open(new DataSpec(getNotFoundUri())));
|
||||
} finally {
|
||||
dataSource.close();
|
||||
}
|
||||
assertThrows(IOException.class, () -> dataSource.open(new DataSpec(getNotFoundUri())));
|
||||
dataSource.close();
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -411,7 +413,7 @@ public abstract class DataSourceContractTest {
|
||||
try {
|
||||
dataSource.open(dataSpec);
|
||||
|
||||
// Verify onTransferInitializing() and onTransferStart() have been called exactly after
|
||||
// Verify onTransferInitializing() and onTransferStart() have been called exactly from
|
||||
// DataSource.open().
|
||||
ArgumentCaptor<DataSpec> dataSpecArgumentCaptor = ArgumentCaptor.forClass(DataSpec.class);
|
||||
ArgumentCaptor<Boolean> isNetworkArgumentCaptor = ArgumentCaptor.forClass(Boolean.class);
|
||||
@ -435,7 +437,7 @@ public abstract class DataSourceContractTest {
|
||||
}
|
||||
// Verify sufficient onBytesTransferred() callbacks have been triggered before closing the
|
||||
// DataSource.
|
||||
assertThat(listener.bytesTransferred).isEqualTo(resource.getExpectedBytes().length);
|
||||
assertThat(listener.bytesTransferred).isAtLeast(resource.getExpectedBytes().length);
|
||||
|
||||
} finally {
|
||||
dataSource.close();
|
||||
@ -448,6 +450,26 @@ public abstract class DataSourceContractTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void resourceNotFound_transferListenerCallbacks() throws Exception {
|
||||
DataSource dataSource = createDataSource();
|
||||
TransferListener listener = mock(TransferListener.class);
|
||||
dataSource.addTransferListener(listener);
|
||||
@Nullable DataSource callbackSource = getTransferListenerDataSource();
|
||||
if (callbackSource == null) {
|
||||
callbackSource = dataSource;
|
||||
}
|
||||
|
||||
assertThrows(IOException.class, () -> dataSource.open(new DataSpec(getNotFoundUri())));
|
||||
|
||||
// Verify onTransferInitializing() has been called exactly from DataSource.open().
|
||||
verify(listener).onTransferInitializing(eq(callbackSource), any(), anyBoolean());
|
||||
verifyNoMoreInteractions(listener);
|
||||
|
||||
dataSource.close();
|
||||
verifyNoMoreInteractions(listener);
|
||||
}
|
||||
|
||||
/** Build a label to make it clear which resource caused a given test failure. */
|
||||
private static String getFailureLabel(List<TestResource> resources, int i) {
|
||||
if (resources.size() == 1) {
|
||||
|
Loading…
x
Reference in New Issue
Block a user