diff --git a/library/core/src/test/java/com/google/android/exoplayer2/upstream/UdpDataSourceContractTest.java b/library/core/src/test/java/com/google/android/exoplayer2/upstream/UdpDataSourceContractTest.java index 0dd688fd36..97d611dbec 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/upstream/UdpDataSourceContractTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/upstream/UdpDataSourceContractTest.java @@ -75,6 +75,16 @@ public class UdpDataSourceContractTest extends DataSourceContractTest { @Override public void dataSpecWithPosition_readUntilEnd() {} + @Test + @Ignore("UdpDataSource doesn't support DataSpec's position or length [internal: b/175856954]") + @Override + public void dataSpecWithLength_readExpectedRange() {} + + @Test + @Ignore("UdpDataSource doesn't support DataSpec's position or length [internal: b/175856954]") + @Override + public void dataSpecWithPositionAndLength_readExpectedRange() {} + /** * Finds a free UDP port in the range of unreserved ports 50000-60000 that can be used from the * test or throws an {@link IllegalStateException} if no port is available. 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 5fb0472b91..5f5a237124 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 @@ -127,6 +127,59 @@ public abstract class DataSourceContractTest { } } + @Test + public void dataSpecWithLength_readExpectedRange() 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 { + long length = + dataSource.open(new DataSpec.Builder().setUri(resource.getUri()).setLength(4).build()); + byte[] data = readToEnd(dataSource, resource); + + assertThat(length).isEqualTo(4); + byte[] expectedData = Arrays.copyOf(resource.getExpectedBytes(), 4); + assertThat(data).isEqualTo(expectedData); + } finally { + dataSource.close(); + } + additionalFailureInfo.setInfo(null); + } + } + + @Test + public void dataSpecWithPositionAndLength_readExpectedRange() 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 { + long length = + dataSource.open( + new DataSpec.Builder() + .setUri(resource.getUri()) + .setPosition(2) + .setLength(2) + .build()); + byte[] data = readToEnd(dataSource, resource); + + assertThat(length).isEqualTo(2); + byte[] expectedData = Arrays.copyOfRange(resource.getExpectedBytes(), 2, 4); + assertThat(data).isEqualTo(expectedData); + } finally { + dataSource.close(); + } + additionalFailureInfo.setInfo(null); + } + } + @Test public void resourceNotFound() throws Exception { DataSource dataSource = createDataSource();