From 3191afe82e8f8777d62c390c18aa42432b051b3c Mon Sep 17 00:00:00 2001 From: christosts Date: Tue, 21 Jul 2020 16:38:20 +0100 Subject: [PATCH] Common tests do not depend on testutils This commit duplicates some code from the testutils module in common test in order to break the dependency from testutils. PiperOrigin-RevId: 322366013 --- library/common/build.gradle | 9 ++- .../google/android/exoplayer2/FormatTest.java | 16 +++-- .../exoplayer2/drm/DrmInitDataTest.java | 29 +++++---- .../emsg/EventMessageDecoderTest.java | 27 ++++++++- .../emsg/EventMessageEncoderTest.java | 26 +++++++- .../metadata/id3/Id3DecoderTest.java | 26 +++++++- .../exoplayer2/util/NalUnitUtilTest.java | 11 +++- .../exoplayer2/util/ParsableBitArrayTest.java | 52 +++++++++------- .../util/ParsableNalUnitBitArrayTest.java | 11 +++- .../android/exoplayer2/util/UtilTest.java | 60 ++++++++++++++++--- 10 files changed, 211 insertions(+), 56 deletions(-) diff --git a/library/common/build.gradle b/library/common/build.gradle index a4b878dc77..f4390459fa 100644 --- a/library/common/build.gradle +++ b/library/common/build.gradle @@ -18,12 +18,15 @@ android.buildTypes.debug.testCoverageEnabled true dependencies { implementation 'androidx.annotation:annotation:' + androidxAnnotationVersion implementation 'com.google.guava:guava:' + guavaVersion + implementation 'org.checkerframework:checker-qual:' + checkerframeworkVersion compileOnly 'com.google.code.findbugs:jsr305:' + jsr305Version - compileOnly 'org.checkerframework:checker-qual:' + checkerframeworkVersion compileOnly 'org.checkerframework:checker-compat-qual:' + checkerframeworkCompatVersion compileOnly 'org.jetbrains.kotlin:kotlin-annotations-jvm:' + kotlinAnnotationsVersion - testImplementation project(modulePrefix + 'library-core') - testImplementation project(modulePrefix + 'testutils') + testImplementation 'org.mockito:mockito-core:' + mockitoVersion + testImplementation 'androidx.test:core:' + androidxTestCoreVersion + testImplementation 'androidx.test.ext:junit:' + androidxTestJUnitVersion + testImplementation 'junit:junit:' + junitVersion + testImplementation 'com.google.truth:truth:' + truthVersion testImplementation 'org.robolectric:robolectric:' + robolectricVersion } diff --git a/library/common/src/test/java/com/google/android/exoplayer2/FormatTest.java b/library/common/src/test/java/com/google/android/exoplayer2/FormatTest.java index 16a45e5ab2..ce61475f53 100644 --- a/library/common/src/test/java/com/google/android/exoplayer2/FormatTest.java +++ b/library/common/src/test/java/com/google/android/exoplayer2/FormatTest.java @@ -27,11 +27,11 @@ import com.google.android.exoplayer2.drm.ExoMediaCrypto; import com.google.android.exoplayer2.drm.UnsupportedMediaCrypto; import com.google.android.exoplayer2.metadata.Metadata; import com.google.android.exoplayer2.metadata.id3.TextInformationFrame; -import com.google.android.exoplayer2.testutil.TestUtil; import com.google.android.exoplayer2.util.MimeTypes; import com.google.android.exoplayer2.video.ColorInfo; import java.util.ArrayList; import java.util.List; +import java.util.Random; import org.junit.Test; import org.junit.runner.RunWith; @@ -71,11 +71,9 @@ public final class FormatTest { initializationData.add(initData2); DrmInitData.SchemeData drmData1 = - new DrmInitData.SchemeData( - WIDEVINE_UUID, VIDEO_MP4, TestUtil.buildTestData(128, 1 /* data seed */)); + new DrmInitData.SchemeData(WIDEVINE_UUID, VIDEO_MP4, buildTestData(128, 1 /* data seed */)); DrmInitData.SchemeData drmData2 = - new DrmInitData.SchemeData( - C.UUID_NIL, VIDEO_WEBM, TestUtil.buildTestData(128, 1 /* data seed */)); + new DrmInitData.SchemeData(C.UUID_NIL, VIDEO_WEBM, buildTestData(128, 1 /* data seed */)); DrmInitData drmInitData = new DrmInitData(drmData1, drmData2); byte[] projectionData = new byte[] {1, 2, 3}; @@ -124,4 +122,12 @@ public final class FormatTest { /* accessibilityChannel= */ 2, /* exoMediaCryptoType= */ ExoMediaCrypto.class); } + + /** Generates an array of random bytes with the specified length. */ + // TODO(internal b/161776534): Use TestUtils when it's available in a dependency we can use here. + private static byte[] buildTestData(int length, int seed) { + byte[] source = new byte[length]; + new Random(seed).nextBytes(source); + return source; + } } diff --git a/library/common/src/test/java/com/google/android/exoplayer2/drm/DrmInitDataTest.java b/library/common/src/test/java/com/google/android/exoplayer2/drm/DrmInitDataTest.java index e7b46e5c99..c45a406390 100644 --- a/library/common/src/test/java/com/google/android/exoplayer2/drm/DrmInitDataTest.java +++ b/library/common/src/test/java/com/google/android/exoplayer2/drm/DrmInitDataTest.java @@ -25,9 +25,9 @@ import android.os.Parcel; import androidx.test.ext.junit.runners.AndroidJUnit4; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.drm.DrmInitData.SchemeData; -import com.google.android.exoplayer2.testutil.TestUtil; import java.util.ArrayList; import java.util.List; +import java.util.Random; import org.junit.Test; import org.junit.runner.RunWith; @@ -35,16 +35,16 @@ import org.junit.runner.RunWith; @RunWith(AndroidJUnit4.class) public class DrmInitDataTest { - private static final SchemeData DATA_1 = new SchemeData(WIDEVINE_UUID, VIDEO_MP4, - TestUtil.buildTestData(128, 1 /* data seed */)); - private static final SchemeData DATA_2 = new SchemeData(PLAYREADY_UUID, VIDEO_MP4, - TestUtil.buildTestData(128, 2 /* data seed */)); - private static final SchemeData DATA_1B = new SchemeData(WIDEVINE_UUID, VIDEO_MP4, - TestUtil.buildTestData(128, 1 /* data seed */)); - private static final SchemeData DATA_2B = new SchemeData(PLAYREADY_UUID, VIDEO_MP4, - TestUtil.buildTestData(128, 2 /* data seed */)); - private static final SchemeData DATA_UNIVERSAL = new SchemeData(C.UUID_NIL, VIDEO_MP4, - TestUtil.buildTestData(128, 3 /* data seed */)); + private static final SchemeData DATA_1 = + new SchemeData(WIDEVINE_UUID, VIDEO_MP4, buildTestData(128, 1 /* data seed */)); + private static final SchemeData DATA_2 = + new SchemeData(PLAYREADY_UUID, VIDEO_MP4, buildTestData(128, 2 /* data seed */)); + private static final SchemeData DATA_1B = + new SchemeData(WIDEVINE_UUID, VIDEO_MP4, buildTestData(128, 1 /* data seed */)); + private static final SchemeData DATA_2B = + new SchemeData(PLAYREADY_UUID, VIDEO_MP4, buildTestData(128, 2 /* data seed */)); + private static final SchemeData DATA_UNIVERSAL = + new SchemeData(C.UUID_NIL, VIDEO_MP4, buildTestData(128, 3 /* data seed */)); @Test public void parcelable() { @@ -162,4 +162,11 @@ public class DrmInitDataTest { return schemeDatas; } + /** Generates an array of random bytes with the specified length. */ + // TODO(internal b/161776534): Use TestUtils when it's available in a dependency we can use here. + private static byte[] buildTestData(int length, int seed) { + byte[] source = new byte[length]; + new Random(seed).nextBytes(source); + return source; + } } diff --git a/library/common/src/test/java/com/google/android/exoplayer2/metadata/emsg/EventMessageDecoderTest.java b/library/common/src/test/java/com/google/android/exoplayer2/metadata/emsg/EventMessageDecoderTest.java index c31c477e7c..7712bd46bf 100644 --- a/library/common/src/test/java/com/google/android/exoplayer2/metadata/emsg/EventMessageDecoderTest.java +++ b/library/common/src/test/java/com/google/android/exoplayer2/metadata/emsg/EventMessageDecoderTest.java @@ -15,15 +15,15 @@ */ package com.google.android.exoplayer2.metadata.emsg; -import static com.google.android.exoplayer2.testutil.TestUtil.createByteArray; -import static com.google.android.exoplayer2.testutil.TestUtil.createMetadataInputBuffer; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertThrows; import androidx.test.ext.junit.runners.AndroidJUnit4; import com.google.android.exoplayer2.metadata.Metadata; import com.google.android.exoplayer2.metadata.MetadataInputBuffer; +import com.google.android.exoplayer2.util.Assertions; import com.google.common.primitives.Bytes; +import java.nio.ByteBuffer; import org.junit.Test; import org.junit.runner.RunWith; @@ -80,4 +80,27 @@ public final class EventMessageDecoderTest { assertThrows(IllegalArgumentException.class, () -> decoder.decode(buffer)); } + + /** Converts an array of integers in the range [0, 255] into an equivalent byte array. */ + // TODO(internal b/161776534): Use TestUtils when it's available in a dependency we can use here. + private static byte[] createByteArray(int... bytes) { + byte[] byteArray = new byte[bytes.length]; + for (int i = 0; i < byteArray.length; i++) { + Assertions.checkState(0x00 <= bytes[i] && bytes[i] <= 0xFF); + byteArray[i] = (byte) bytes[i]; + } + return byteArray; + } + + /** + * Create a new {@link MetadataInputBuffer} and copy {@code data} into the backing {@link + * ByteBuffer}. + */ + // TODO(internal b/161776534): Use TestUtils when it's available in a dependency we can use here. + private static MetadataInputBuffer createMetadataInputBuffer(byte[] data) { + MetadataInputBuffer buffer = new MetadataInputBuffer(); + buffer.data = ByteBuffer.allocate(data.length).put(data); + buffer.data.flip(); + return buffer; + } } diff --git a/library/common/src/test/java/com/google/android/exoplayer2/metadata/emsg/EventMessageEncoderTest.java b/library/common/src/test/java/com/google/android/exoplayer2/metadata/emsg/EventMessageEncoderTest.java index 6e18ac964c..78b0b0885b 100644 --- a/library/common/src/test/java/com/google/android/exoplayer2/metadata/emsg/EventMessageEncoderTest.java +++ b/library/common/src/test/java/com/google/android/exoplayer2/metadata/emsg/EventMessageEncoderTest.java @@ -15,15 +15,15 @@ */ package com.google.android.exoplayer2.metadata.emsg; -import static com.google.android.exoplayer2.testutil.TestUtil.createByteArray; -import static com.google.android.exoplayer2.testutil.TestUtil.createMetadataInputBuffer; import static com.google.common.truth.Truth.assertThat; import androidx.test.ext.junit.runners.AndroidJUnit4; import com.google.android.exoplayer2.metadata.Metadata; import com.google.android.exoplayer2.metadata.MetadataInputBuffer; +import com.google.android.exoplayer2.util.Assertions; import com.google.common.primitives.Bytes; import java.io.IOException; +import java.nio.ByteBuffer; import org.junit.Test; import org.junit.runner.RunWith; @@ -78,4 +78,26 @@ public final class EventMessageEncoderTest { assertThat(encodedByteArray1).isEqualTo(expectedEmsgBody1); } + /** Converts an array of integers in the range [0, 255] into an equivalent byte array. */ + // TODO(internal b/161776534): Move to a single file. + private static byte[] createByteArray(int... bytes) { + byte[] byteArray = new byte[bytes.length]; + for (int i = 0; i < byteArray.length; i++) { + Assertions.checkState(0x00 <= bytes[i] && bytes[i] <= 0xFF); + byteArray[i] = (byte) bytes[i]; + } + return byteArray; + } + + /** + * Create a new {@link MetadataInputBuffer} and copy {@code data} into the backing {@link + * ByteBuffer}. + */ + // TODO(internal b/161776534): Use TestUtils when it's available in a dependency we can use here. + private static MetadataInputBuffer createMetadataInputBuffer(byte[] data) { + MetadataInputBuffer buffer = new MetadataInputBuffer(); + buffer.data = ByteBuffer.allocate(data.length).put(data); + buffer.data.flip(); + return buffer; + } } diff --git a/library/common/src/test/java/com/google/android/exoplayer2/metadata/id3/Id3DecoderTest.java b/library/common/src/test/java/com/google/android/exoplayer2/metadata/id3/Id3DecoderTest.java index 52bf0135fe..acc5a5536b 100644 --- a/library/common/src/test/java/com/google/android/exoplayer2/metadata/id3/Id3DecoderTest.java +++ b/library/common/src/test/java/com/google/android/exoplayer2/metadata/id3/Id3DecoderTest.java @@ -15,8 +15,6 @@ */ package com.google.android.exoplayer2.metadata.id3; -import static com.google.android.exoplayer2.testutil.TestUtil.createByteArray; -import static com.google.android.exoplayer2.testutil.TestUtil.createMetadataInputBuffer; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertThrows; @@ -25,6 +23,7 @@ import com.google.android.exoplayer2.metadata.Metadata; import com.google.android.exoplayer2.metadata.MetadataInputBuffer; import com.google.android.exoplayer2.util.Assertions; import com.google.common.base.Charsets; +import java.nio.ByteBuffer; import java.util.Arrays; import org.junit.Test; import org.junit.runner.RunWith; @@ -317,4 +316,27 @@ public final class Id3DecoderTest { this.frameData = frameData; } } + + /** Converts an array of integers in the range [0, 255] into an equivalent byte array. */ + // TODO(internal b/161776534): Move to a single file. + private static byte[] createByteArray(int... bytes) { + byte[] byteArray = new byte[bytes.length]; + for (int i = 0; i < byteArray.length; i++) { + Assertions.checkState(0x00 <= bytes[i] && bytes[i] <= 0xFF); + byteArray[i] = (byte) bytes[i]; + } + return byteArray; + } + + /** + * Create a new {@link MetadataInputBuffer} and copy {@code data} into the backing {@link + * ByteBuffer}. + */ + // TODO(internal b/161776534): Use TestUtils when it's available in a dependency we can use here. + private static MetadataInputBuffer createMetadataInputBuffer(byte[] data) { + MetadataInputBuffer buffer = new MetadataInputBuffer(); + buffer.data = ByteBuffer.allocate(data.length).put(data); + buffer.data.flip(); + return buffer; + } } diff --git a/library/common/src/test/java/com/google/android/exoplayer2/util/NalUnitUtilTest.java b/library/common/src/test/java/com/google/android/exoplayer2/util/NalUnitUtilTest.java index 5226a42c76..2e2728b0b6 100644 --- a/library/common/src/test/java/com/google/android/exoplayer2/util/NalUnitUtilTest.java +++ b/library/common/src/test/java/com/google/android/exoplayer2/util/NalUnitUtilTest.java @@ -15,7 +15,6 @@ */ package com.google.android.exoplayer2.util; -import static com.google.android.exoplayer2.testutil.TestUtil.createByteArray; import static com.google.common.truth.Truth.assertThat; import androidx.test.ext.junit.runners.AndroidJUnit4; @@ -210,4 +209,14 @@ public final class NalUnitUtilTest { assertThat(Arrays.copyOf(buffer.array(), buffer.position())).isEqualTo(expectedOutputBitstream); } + /** Converts an array of integers in the range [0, 255] into an equivalent byte array. */ + // TODO(internal b/161776534): Use TestUtils when it's available in a dependency we can use here. + private static byte[] createByteArray(int... bytes) { + byte[] byteArray = new byte[bytes.length]; + for (int i = 0; i < byteArray.length; i++) { + Assertions.checkState(0x00 <= bytes[i] && bytes[i] <= 0xFF); + byteArray[i] = (byte) bytes[i]; + } + return byteArray; + } } diff --git a/library/common/src/test/java/com/google/android/exoplayer2/util/ParsableBitArrayTest.java b/library/common/src/test/java/com/google/android/exoplayer2/util/ParsableBitArrayTest.java index 5d75ae9f09..83a2afed7e 100644 --- a/library/common/src/test/java/com/google/android/exoplayer2/util/ParsableBitArrayTest.java +++ b/library/common/src/test/java/com/google/android/exoplayer2/util/ParsableBitArrayTest.java @@ -19,7 +19,6 @@ import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.assertThrows; import androidx.test.ext.junit.runners.AndroidJUnit4; -import com.google.android.exoplayer2.testutil.TestUtil; import com.google.common.base.Charsets; import org.junit.Test; import org.junit.runner.RunWith; @@ -30,7 +29,7 @@ public final class ParsableBitArrayTest { @Test public void readAllBytes() { - byte[] testData = TestUtil.createByteArray(0x3C, 0xD2, 0x5F); + byte[] testData = createByteArray(0x3C, 0xD2, 0x5F); ParsableBitArray testArray = new ParsableBitArray(testData); byte[] bytesRead = new byte[testData.length]; @@ -43,7 +42,7 @@ public final class ParsableBitArrayTest { @Test public void readBitInSameByte() { - byte[] testData = TestUtil.createByteArray(0, 0b00110000); + byte[] testData = createByteArray(0, 0b00110000); ParsableBitArray testArray = new ParsableBitArray(testData); testArray.setPosition(10); @@ -55,7 +54,7 @@ public final class ParsableBitArrayTest { @Test public void readBitInMultipleBytes() { - byte[] testData = TestUtil.createByteArray(1, 1 << 7); + byte[] testData = createByteArray(1, 1 << 7); ParsableBitArray testArray = new ParsableBitArray(testData); testArray.setPosition(6); @@ -67,7 +66,7 @@ public final class ParsableBitArrayTest { @Test public void readBits0Bits() { - byte[] testData = TestUtil.createByteArray(0x3C); + byte[] testData = createByteArray(0x3C); ParsableBitArray testArray = new ParsableBitArray(testData); int result = testArray.readBits(0); @@ -77,7 +76,7 @@ public final class ParsableBitArrayTest { @Test public void readBitsByteAligned() { - byte[] testData = TestUtil.createByteArray(0x3C, 0xD2, 0x5F, 0x01); + byte[] testData = createByteArray(0x3C, 0xD2, 0x5F, 0x01); ParsableBitArray testArray = new ParsableBitArray(testData); testArray.readBits(8); @@ -89,7 +88,7 @@ public final class ParsableBitArrayTest { @Test public void readBitsNonByteAligned() { - byte[] testData = TestUtil.createByteArray(0x3C, 0xD2, 0x5F); + byte[] testData = createByteArray(0x3C, 0xD2, 0x5F); ParsableBitArray testArray = new ParsableBitArray(testData); testArray.readBits(3); @@ -101,7 +100,7 @@ public final class ParsableBitArrayTest { @Test public void readBitsNegativeValue() { - byte[] testData = TestUtil.createByteArray(0xF0, 0, 0, 0); + byte[] testData = createByteArray(0xF0, 0, 0, 0); ParsableBitArray testArray = new ParsableBitArray(testData); int result = testArray.readBits(32); @@ -111,7 +110,7 @@ public final class ParsableBitArrayTest { @Test public void readBitsToLong0Bits() { - byte[] testData = TestUtil.createByteArray(0x3C); + byte[] testData = createByteArray(0x3C); ParsableBitArray testArray = new ParsableBitArray(testData); long result = testArray.readBitsToLong(0); @@ -121,7 +120,7 @@ public final class ParsableBitArrayTest { @Test public void readBitsToLongByteAligned() { - byte[] testData = TestUtil.createByteArray(0x3C, 0xD2, 0x5F, 0x01, 0xFF, 0x14, 0x60); + byte[] testData = createByteArray(0x3C, 0xD2, 0x5F, 0x01, 0xFF, 0x14, 0x60); ParsableBitArray testArray = new ParsableBitArray(testData); testArray.readBits(8); @@ -133,7 +132,7 @@ public final class ParsableBitArrayTest { @Test public void readBitsToLongNonByteAligned() { - byte[] testData = TestUtil.createByteArray(0x3C, 0xD2, 0x5F, 0x01, 0xFF, 0x14, 0x60); + byte[] testData = createByteArray(0x3C, 0xD2, 0x5F, 0x01, 0xFF, 0x14, 0x60); ParsableBitArray testArray = new ParsableBitArray(testData); testArray.readBits(3); @@ -145,7 +144,7 @@ public final class ParsableBitArrayTest { @Test public void readBitsToLongNegativeValue() { - byte[] testData = TestUtil.createByteArray(0xF0, 0, 0, 0, 0, 0, 0, 0); + byte[] testData = createByteArray(0xF0, 0, 0, 0, 0, 0, 0, 0); ParsableBitArray testArray = new ParsableBitArray(testData); long result = testArray.readBitsToLong(64); @@ -155,7 +154,7 @@ public final class ParsableBitArrayTest { @Test public void readBitsToByteArray() { - byte[] testData = TestUtil.createByteArray(0x3C, 0xD2, 0x5F, 0x01, 0xFF, 0x14, 0x60, 0x99); + byte[] testData = createByteArray(0x3C, 0xD2, 0x5F, 0x01, 0xFF, 0x14, 0x60, 0x99); ParsableBitArray testArray = new ParsableBitArray(testData); int numBytes = testData.length; @@ -204,7 +203,7 @@ public final class ParsableBitArrayTest { @Test public void skipBytes() { - byte[] testData = TestUtil.createByteArray(0x3C, 0xD2, 0x5F, 0x01); + byte[] testData = createByteArray(0x3C, 0xD2, 0x5F, 0x01); ParsableBitArray testArray = new ParsableBitArray(testData); testArray.skipBytes(2); @@ -214,7 +213,7 @@ public final class ParsableBitArrayTest { @Test public void skipBitsByteAligned() { - byte[] testData = TestUtil.createByteArray(0x3C, 0xD2, 0x5F, 0x01); + byte[] testData = createByteArray(0x3C, 0xD2, 0x5F, 0x01); ParsableBitArray testArray = new ParsableBitArray(testData); testArray.skipBits(16); @@ -224,7 +223,7 @@ public final class ParsableBitArrayTest { @Test public void skipBitsNonByteAligned() { - byte[] testData = TestUtil.createByteArray(0x3C, 0xD2, 0x5F, 0x01); + byte[] testData = createByteArray(0x3C, 0xD2, 0x5F, 0x01); ParsableBitArray testArray = new ParsableBitArray(testData); testArray.skipBits(5); @@ -234,7 +233,7 @@ public final class ParsableBitArrayTest { @Test public void setPositionByteAligned() { - byte[] testData = TestUtil.createByteArray(0x3C, 0xD2, 0x5F, 0x01); + byte[] testData = createByteArray(0x3C, 0xD2, 0x5F, 0x01); ParsableBitArray testArray = new ParsableBitArray(testData); testArray.setPosition(16); @@ -244,7 +243,7 @@ public final class ParsableBitArrayTest { @Test public void setPositionNonByteAligned() { - byte[] testData = TestUtil.createByteArray(0x3C, 0xD2, 0x5F, 0x01); + byte[] testData = createByteArray(0x3C, 0xD2, 0x5F, 0x01); ParsableBitArray testArray = new ParsableBitArray(testData); testArray.setPosition(5); @@ -254,7 +253,7 @@ public final class ParsableBitArrayTest { @Test public void byteAlignFromNonByteAligned() { - byte[] testData = TestUtil.createByteArray(0x3C, 0xD2, 0x5F, 0x01); + byte[] testData = createByteArray(0x3C, 0xD2, 0x5F, 0x01); ParsableBitArray testArray = new ParsableBitArray(testData); testArray.setPosition(11); @@ -267,7 +266,7 @@ public final class ParsableBitArrayTest { @Test public void byteAlignFromByteAligned() { - byte[] testData = TestUtil.createByteArray(0x3C, 0xD2, 0x5F, 0x01); + byte[] testData = createByteArray(0x3C, 0xD2, 0x5F, 0x01); ParsableBitArray testArray = new ParsableBitArray(testData); testArray.setPosition(16); @@ -363,8 +362,7 @@ public final class ParsableBitArrayTest { @Test public void noOverwriting() { - ParsableBitArray output = - new ParsableBitArray(TestUtil.createByteArray(0xFF, 0xFF, 0xFF, 0xFF, 0xFF)); + ParsableBitArray output = new ParsableBitArray(createByteArray(0xFF, 0xFF, 0xFF, 0xFF, 0xFF)); output.setPosition(1); output.putInt(0, 30); @@ -373,4 +371,14 @@ public final class ParsableBitArrayTest { assertThat(output.readBits(32)).isEqualTo(0x80000001); } + /** Converts an array of integers in the range [0, 255] into an equivalent byte array. */ + // TODO(internal b/161776534): Use TestUtils when it's available in a dependency we can use here. + private static byte[] createByteArray(int... bytes) { + byte[] byteArray = new byte[bytes.length]; + for (int i = 0; i < byteArray.length; i++) { + Assertions.checkState(0x00 <= bytes[i] && bytes[i] <= 0xFF); + byteArray[i] = (byte) bytes[i]; + } + return byteArray; + } } diff --git a/library/common/src/test/java/com/google/android/exoplayer2/util/ParsableNalUnitBitArrayTest.java b/library/common/src/test/java/com/google/android/exoplayer2/util/ParsableNalUnitBitArrayTest.java index 8fffb9a5d4..72c1d9424f 100644 --- a/library/common/src/test/java/com/google/android/exoplayer2/util/ParsableNalUnitBitArrayTest.java +++ b/library/common/src/test/java/com/google/android/exoplayer2/util/ParsableNalUnitBitArrayTest.java @@ -15,7 +15,6 @@ */ package com.google.android.exoplayer2.util; -import static com.google.android.exoplayer2.testutil.TestUtil.createByteArray; import static com.google.common.truth.Truth.assertThat; import static org.junit.Assert.fail; @@ -121,4 +120,14 @@ public final class ParsableNalUnitBitArrayTest { assertThat(array.canReadBits(25)).isFalse(); } + /** Converts an array of integers in the range [0, 255] into an equivalent byte array. */ + // TODO(internal b/161776534): Use TestUtils when it's available in a dependency we can use here. + private static byte[] createByteArray(int... bytes) { + byte[] byteArray = new byte[bytes.length]; + for (int i = 0; i < byteArray.length; i++) { + Assertions.checkState(0x00 <= bytes[i] && bytes[i] <= 0xFF); + byteArray[i] = (byte) bytes[i]; + } + return byteArray; + } } diff --git a/library/common/src/test/java/com/google/android/exoplayer2/util/UtilTest.java b/library/common/src/test/java/com/google/android/exoplayer2/util/UtilTest.java index 7684f10d94..d484cf81dd 100644 --- a/library/common/src/test/java/com/google/android/exoplayer2/util/UtilTest.java +++ b/library/common/src/test/java/com/google/android/exoplayer2/util/UtilTest.java @@ -15,7 +15,6 @@ */ package com.google.android.exoplayer2.util; -import static com.google.android.exoplayer2.testutil.TestUtil.getInMemoryDatabaseProvider; import static com.google.android.exoplayer2.util.Util.binarySearchCeil; import static com.google.android.exoplayer2.util.Util.binarySearchFloor; import static com.google.android.exoplayer2.util.Util.escapeFileName; @@ -26,13 +25,13 @@ import static com.google.android.exoplayer2.util.Util.unescapeFileName; import static com.google.common.truth.Truth.assertThat; import android.database.sqlite.SQLiteDatabase; +import android.database.sqlite.SQLiteOpenHelper; import android.text.SpannableString; import android.text.Spanned; import android.text.style.StrikethroughSpan; import android.text.style.UnderlineSpan; import androidx.test.ext.junit.runners.AndroidJUnit4; import com.google.android.exoplayer2.C; -import com.google.android.exoplayer2.testutil.TestUtil; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.ArrayList; @@ -760,7 +759,7 @@ public class UtilTest { @Test public void toHexString_returnsHexString() { - byte[] bytes = TestUtil.createByteArray(0x12, 0xFC, 0x06); + byte[] bytes = createByteArray(0x12, 0xFC, 0x06); assertThat(Util.toHexString(bytes)).isEqualTo("12fc06"); } @@ -807,7 +806,7 @@ public class UtilTest { Random random = new Random(0); for (int i = 0; i < 1000; i++) { - String string = TestUtil.buildTestString(1000, random); + String string = buildTestString(1000, random); assertEscapeUnescapeFileName(string); } } @@ -862,7 +861,7 @@ public class UtilTest { @Test public void inflate_withDeflatedData_success() { - byte[] testData = TestUtil.buildTestData(/*arbitrary test data size*/ 256 * 1024); + byte[] testData = buildTestData(/*arbitrary test data size*/ 256 * 1024); byte[] compressedData = new byte[testData.length * 2]; Deflater compresser = new Deflater(9); compresser.setInput(testData); @@ -1007,7 +1006,7 @@ public class UtilTest { @Test public void tableExists_withExistingTable() { - SQLiteDatabase database = getInMemoryDatabaseProvider().getWritableDatabase(); + SQLiteDatabase database = getInMemorySQLiteOpenHelper().getWritableDatabase(); database.execSQL("CREATE TABLE TestTable (ID INTEGER NOT NULL)"); assertThat(Util.tableExists(database, "TestTable")).isTrue(); @@ -1015,7 +1014,7 @@ public class UtilTest { @Test public void tableExists_withNonExistingTable() { - SQLiteDatabase database = getInMemoryDatabaseProvider().getReadableDatabase(); + SQLiteDatabase database = getInMemorySQLiteOpenHelper().getReadableDatabase(); assertThat(Util.tableExists(database, "table")).isFalse(); } @@ -1037,4 +1036,51 @@ public class UtilTest { } return longArray; } + + /** Returns a {@link SQLiteOpenHelper} that provides an in-memory database. */ + private static SQLiteOpenHelper getInMemorySQLiteOpenHelper() { + return new SQLiteOpenHelper( + /* context= */ null, /* name= */ null, /* factory= */ null, /* version= */ 1) { + @Override + public void onCreate(SQLiteDatabase db) {} + + @Override + public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {} + }; + } + + /** Generates an array of random bytes with the specified length. */ + private static byte[] buildTestData(int length, int seed) { + byte[] source = new byte[length]; + new Random(seed).nextBytes(source); + return source; + } + + /** Equivalent to {@code buildTestData(length, length)}. */ + // TODO(internal b/161776534): Use TestUtils when it's available in a dependency we can use here. + private static byte[] buildTestData(int length) { + return buildTestData(length, length); + } + + /** Generates a random string with the specified maximum length. */ + // TODO(internal b/161776534): Use TestUtils when it's available in a dependency we can use here. + private static String buildTestString(int maximumLength, Random random) { + int length = random.nextInt(maximumLength); + StringBuilder builder = new StringBuilder(length); + for (int i = 0; i < length; i++) { + builder.append((char) random.nextInt()); + } + return builder.toString(); + } + + /** Converts an array of integers in the range [0, 255] into an equivalent byte array. */ + // TODO(internal b/161776534): Use TestUtils when it's available in a dependency we can use here. + private static byte[] createByteArray(int... bytes) { + byte[] byteArray = new byte[bytes.length]; + for (int i = 0; i < byteArray.length; i++) { + Assertions.checkState(0x00 <= bytes[i] && bytes[i] <= 0xFF); + byteArray[i] = (byte) bytes[i]; + } + return byteArray; + } }