From 560ed115dfc1ac75feb755d08c88eb075f46e555 Mon Sep 17 00:00:00 2001 From: olly Date: Fri, 26 Feb 2021 18:10:14 +0000 Subject: [PATCH] Add ResolvingDataSourceContractTest PiperOrigin-RevId: 359783527 --- .../DataSchemeDataSourceContractTest.java | 4 +- .../ResolvingDataSourceContractTest.java | 83 +++++++++++++++++++ .../upstream/UdpDataSourceContractTest.java | 2 +- .../testutil/DataSourceContractTest.java | 5 ++ 4 files changed, 91 insertions(+), 3 deletions(-) create mode 100644 library/core/src/test/java/com/google/android/exoplayer2/upstream/ResolvingDataSourceContractTest.java diff --git a/library/core/src/test/java/com/google/android/exoplayer2/upstream/DataSchemeDataSourceContractTest.java b/library/core/src/test/java/com/google/android/exoplayer2/upstream/DataSchemeDataSourceContractTest.java index 97bd701865..861fe358f6 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/upstream/DataSchemeDataSourceContractTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/upstream/DataSchemeDataSourceContractTest.java @@ -39,12 +39,12 @@ public class DataSchemeDataSourceContractTest extends DataSourceContractTest { return ImmutableList.of( new TestResource.Builder() .setName("plain text") - .setUri(Uri.parse("data:text/plain," + DATA)) + .setUri("data:text/plain," + DATA) .setExpectedBytes(DATA.getBytes(UTF_8)) .build(), new TestResource.Builder() .setName("base64 encoded text") - .setUri(Uri.parse("data:text/plain;base64," + BASE64_ENCODED_DATA)) + .setUri("data:text/plain;base64," + BASE64_ENCODED_DATA) .setExpectedBytes(Base64.decode(BASE64_ENCODED_DATA, Base64.DEFAULT)) .build()); } diff --git a/library/core/src/test/java/com/google/android/exoplayer2/upstream/ResolvingDataSourceContractTest.java b/library/core/src/test/java/com/google/android/exoplayer2/upstream/ResolvingDataSourceContractTest.java new file mode 100644 index 0000000000..1c550497c4 --- /dev/null +++ b/library/core/src/test/java/com/google/android/exoplayer2/upstream/ResolvingDataSourceContractTest.java @@ -0,0 +1,83 @@ +/* + * Copyright 2021 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.google.android.exoplayer2.upstream; + +import android.net.Uri; +import androidx.annotation.Nullable; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import com.google.android.exoplayer2.testutil.DataSourceContractTest; +import com.google.android.exoplayer2.testutil.FakeDataSet; +import com.google.android.exoplayer2.testutil.FakeDataSource; +import com.google.android.exoplayer2.testutil.TestUtil; +import com.google.android.exoplayer2.upstream.ResolvingDataSource.Resolver; +import com.google.common.collect.ImmutableList; +import java.io.IOException; +import org.junit.Before; +import org.junit.runner.RunWith; + +/** {@link DataSource} contract tests for {@link ResolvingDataSourceContractTest}. */ +@RunWith(AndroidJUnit4.class) +public class ResolvingDataSourceContractTest extends DataSourceContractTest { + + private static final String URI = "test://simple.test"; + private static final String RESOLVED_URI = "resolved://simple.resolved"; + + private byte[] simpleData; + private FakeDataSet fakeDataSet; + private FakeDataSource fakeDataSource; + + @Before + public void setUp() { + simpleData = TestUtil.buildTestData(/* length= */ 20); + fakeDataSet = new FakeDataSet().newData(RESOLVED_URI).appendReadData(simpleData).endData(); + } + + @Override + protected ImmutableList getTestResources() { + return ImmutableList.of( + new TestResource.Builder() + .setName("simple") + .setUri(URI) + .setExpectedBytes(simpleData) + .build()); + } + + @Override + protected Uri getNotFoundUri() { + return Uri.parse("test://not-found.test"); + } + + @Override + protected DataSource createDataSource() { + fakeDataSource = new FakeDataSource(fakeDataSet); + return new ResolvingDataSource( + fakeDataSource, + new Resolver() { + @Override + public DataSpec resolveDataSpec(DataSpec dataSpec) throws IOException { + return URI.equals(dataSpec.uri.toString()) + ? dataSpec.buildUpon().setUri(RESOLVED_URI).build() + : dataSpec; + } + }); + } + + @Override + @Nullable + protected DataSource getTransferListenerDataSource() { + return fakeDataSource; + } +} 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 af9159088f..4b2115da50 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 @@ -63,7 +63,7 @@ public class UdpDataSourceContractTest extends DataSourceContractTest { return ImmutableList.of( new TestResource.Builder() .setName("local-udp-unicast-socket") - .setUri(Uri.parse("udp://localhost:" + findFreeUdpPort())) + .setUri("udp://localhost:" + findFreeUdpPort()) .setExpectedBytes(data) .build()); } 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 a41d49945b..144c2aa344 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 @@ -502,6 +502,11 @@ public abstract class DataSourceContractTest { return this; } + /** Sets the URI where this resource is located. */ + public Builder setUri(String uri) { + return setUri(Uri.parse(uri)); + } + /** Sets the URI where this resource is located. */ public Builder setUri(Uri uri) { this.uri = uri;