From 21f3fa9f7c1d069b42680c0515147f93d08ebd2c Mon Sep 17 00:00:00 2001 From: christosts Date: Tue, 19 Jan 2021 14:51:40 +0000 Subject: [PATCH] Add contract test for DataSchemeDataSource PiperOrigin-RevId: 352558063 --- .../DataSchemeDataSourceContractTest.java | 61 +++++++++++++++++++ .../android/exoplayer2/testutil/TestUtil.java | 13 ++-- 2 files changed, 67 insertions(+), 7 deletions(-) create mode 100644 library/core/src/test/java/com/google/android/exoplayer2/upstream/DataSchemeDataSourceContractTest.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 new file mode 100644 index 0000000000..97bd701865 --- /dev/null +++ b/library/core/src/test/java/com/google/android/exoplayer2/upstream/DataSchemeDataSourceContractTest.java @@ -0,0 +1,61 @@ +/* + * Copyright (C) 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 static java.nio.charset.StandardCharsets.UTF_8; + +import android.net.Uri; +import android.util.Base64; +import androidx.test.ext.junit.runners.AndroidJUnit4; +import com.google.android.exoplayer2.testutil.DataSourceContractTest; +import com.google.android.exoplayer2.testutil.TestUtil; +import com.google.common.collect.ImmutableList; +import java.util.Random; +import org.junit.runner.RunWith; + +/** {@link DataSource} contract tests for {@link ByteArrayDataSource}. */ +@RunWith(AndroidJUnit4.class) +public class DataSchemeDataSourceContractTest extends DataSourceContractTest { + + private static final String DATA = TestUtil.buildTestString(20, new Random(0)); + private static final String BASE64_ENCODED_DATA = + Base64.encodeToString(TestUtil.buildTestData(20), Base64.DEFAULT); + + @Override + protected ImmutableList getTestResources() { + return ImmutableList.of( + new TestResource.Builder() + .setName("plain text") + .setUri(Uri.parse("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)) + .setExpectedBytes(Base64.decode(BASE64_ENCODED_DATA, Base64.DEFAULT)) + .build()); + } + + @Override + protected Uri getNotFoundUri() { + return Uri.parse("data:"); + } + + @Override + protected DataSource createDataSource() { + return new DataSchemeDataSource(); + } +} diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/TestUtil.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/TestUtil.java index f52f4380cf..11687cd2d2 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/TestUtil.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/TestUtil.java @@ -89,19 +89,18 @@ public class TestUtil { } /** - * Generates a random string with the specified maximum length. + * Generates a random string with the specified length. * - * @param maximumLength The maximum length of the string. + * @param length The length of the string. * @param random A source of randomness. * @return The generated string. */ - public static String buildTestString(int maximumLength, Random random) { - int length = random.nextInt(maximumLength); - StringBuilder builder = new StringBuilder(length); + public static String buildTestString(int length, Random random) { + char[] chars = new char[length]; for (int i = 0; i < length; i++) { - builder.append((char) random.nextInt()); + chars[i] = (char) random.nextInt(); } - return builder.toString(); + return new String(chars); } /**