From 4665ac5490c71a19813047f2d755dfa5a1902f2c Mon Sep 17 00:00:00 2001 From: tonihei Date: Thu, 11 Mar 2021 18:51:41 +0000 Subject: [PATCH] Add tests to DataSourceContractTest asserting uri/response headers. These values must be null/empty while the source isn't opened. And the Uri must be non-null if the source is open. PiperOrigin-RevId: 362329032 --- .../ByteArrayDataSourceContractTest.java | 10 +++ .../testutil/DataSourceContractTest.java | 70 +++++++++++++++++++ 2 files changed, 80 insertions(+) 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) {