diff --git a/library/core/src/test/java/com/google/android/exoplayer2/upstream/ByteArrayDataSourceContractTest.java b/library/core/src/test/java/com/google/android/exoplayer2/upstream/ByteArrayDataSourceContractTest.java index f1ffc48d9a..911c9d5c71 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/upstream/ByteArrayDataSourceContractTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/upstream/ByteArrayDataSourceContractTest.java @@ -59,4 +59,14 @@ public class ByteArrayDataSourceContractTest extends DataSourceContractTest { @Test @Ignore public void resourceNotFound_transferListenerCallbacks() {} + + @Override + @Test + @Ignore + public void getUri_resourceNotFound_returnsNullIfNotOpened() throws Exception {} + + @Override + @Test + @Ignore + public void getResponseHeaders_resourceNotFound_isEmptyWhileNotOpen() throws Exception {} } diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/DataSourceContractTest.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/DataSourceContractTest.java index 6e086878ed..8edd7c2058 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/DataSourceContractTest.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/DataSourceContractTest.java @@ -470,6 +470,76 @@ public abstract class DataSourceContractTest { verifyNoMoreInteractions(listener); } + @Test + public void getUri_returnsNonNullValueOnlyWhileOpen() throws Exception { + ImmutableList resources = getTestResources(); + Assertions.checkArgument(!resources.isEmpty(), "Must provide at least one test resource."); + + for (int i = 0; i < resources.size(); i++) { + additionalFailureInfo.setInfo(getFailureLabel(resources, i)); + TestResource resource = resources.get(i); + DataSource dataSource = createDataSource(); + try { + assertThat(dataSource.getUri()).isNull(); + + dataSource.open(new DataSpec(resource.getUri())); + + assertThat(dataSource.getUri()).isNotNull(); + } finally { + dataSource.close(); + } + assertThat(dataSource.getUri()).isNull(); + + additionalFailureInfo.setInfo(null); + } + } + + @Test + public void getUri_resourceNotFound_returnsNullIfNotOpened() throws Exception { + DataSource dataSource = createDataSource(); + + assertThat(dataSource.getUri()).isNull(); + + assertThrows(IOException.class, () -> dataSource.open(new DataSpec(getNotFoundUri()))); + dataSource.close(); + + assertThat(dataSource.getUri()).isNull(); + } + + @Test + public void getResponseHeaders_isEmptyWhileNotOpen() throws Exception { + ImmutableList resources = getTestResources(); + Assertions.checkArgument(!resources.isEmpty(), "Must provide at least one test resource."); + + for (int i = 0; i < resources.size(); i++) { + additionalFailureInfo.setInfo(getFailureLabel(resources, i)); + TestResource resource = resources.get(i); + DataSource dataSource = createDataSource(); + try { + assertThat(dataSource.getResponseHeaders()).isEmpty(); + + dataSource.open(new DataSpec(resource.getUri())); + } finally { + dataSource.close(); + } + assertThat(dataSource.getResponseHeaders()).isEmpty(); + + additionalFailureInfo.setInfo(null); + } + } + + @Test + public void getResponseHeaders_resourceNotFound_isEmptyWhileNotOpen() throws Exception { + DataSource dataSource = createDataSource(); + + assertThat(dataSource.getResponseHeaders()).isEmpty(); + + assertThrows(IOException.class, () -> dataSource.open(new DataSpec(getNotFoundUri()))); + dataSource.close(); + + assertThat(dataSource.getResponseHeaders()).isEmpty(); + } + /** Build a label to make it clear which resource caused a given test failure. */ private static String getFailureLabel(List resources, int i) { if (resources.size() == 1) {