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 ee2c55a735..c31c477e7c 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 @@ -17,13 +17,13 @@ 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.android.exoplayer2.testutil.TestUtil.joinByteArrays; 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.common.primitives.Bytes; import org.junit.Test; import org.junit.runner.RunWith; @@ -34,7 +34,7 @@ public final class EventMessageDecoderTest { @Test public void decodeEventMessage() { byte[] rawEmsgBody = - joinByteArrays( + Bytes.concat( createByteArray(117, 114, 110, 58, 116, 101, 115, 116, 0), // scheme_id_uri = "urn:test" createByteArray(49, 50, 51, 0), // value = "123" createByteArray(0, 0, 11, 184), // event_duration_ms = 3000 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 fc73b0cdaf..6e18ac964c 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 @@ -17,12 +17,12 @@ 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.android.exoplayer2.testutil.TestUtil.joinByteArrays; 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.common.primitives.Bytes; import java.io.IOException; import org.junit.Test; import org.junit.runner.RunWith; @@ -35,7 +35,7 @@ public final class EventMessageEncoderTest { new EventMessage("urn:test", "123", 3000, 1000403, new byte[] {0, 1, 2, 3, 4}); private static final byte[] ENCODED_MESSAGE = - joinByteArrays( + Bytes.concat( createByteArray(117, 114, 110, 58, 116, 101, 115, 116, 0), // scheme_id_uri = "urn:test" createByteArray(49, 50, 51, 0), // value = "123" createByteArray(0, 0, 11, 184), // event_duration_ms = 3000 @@ -64,7 +64,7 @@ public final class EventMessageEncoderTest { EventMessage eventMessage1 = new EventMessage("urn:test", "123", 3000, 1000402, new byte[] {4, 3, 2, 1, 0}); byte[] expectedEmsgBody1 = - joinByteArrays( + Bytes.concat( createByteArray(117, 114, 110, 58, 116, 101, 115, 116, 0), // scheme_id_uri = "urn:test" createByteArray(49, 50, 51, 0), // value = "123" createByteArray(0, 0, 11, 184), // event_duration_ms = 3000 diff --git a/library/core/src/test/java/com/google/android/exoplayer2/mediacodec/BatchBufferTest.java b/library/core/src/test/java/com/google/android/exoplayer2/mediacodec/BatchBufferTest.java index 4b36f1718c..909608e90c 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/mediacodec/BatchBufferTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/mediacodec/BatchBufferTest.java @@ -23,6 +23,7 @@ import androidx.test.ext.junit.runners.AndroidJUnit4; import com.google.android.exoplayer2.C; import com.google.android.exoplayer2.decoder.DecoderInputBuffer; import com.google.android.exoplayer2.testutil.TestUtil; +import com.google.common.primitives.Bytes; import java.nio.ByteBuffer; import org.junit.Test; import org.junit.runner.RunWith; @@ -153,7 +154,7 @@ public final class BatchBufferTest { batchBuffer.commitNextAccessUnit(); batchBuffer.flip(); - byte[] expected = TestUtil.joinByteArrays(TEST_ACCESS_UNIT, TEST_ACCESS_UNIT); + byte[] expected = Bytes.concat(TEST_ACCESS_UNIT, TEST_ACCESS_UNIT); assertThat(batchBuffer.data).isEqualTo(ByteBuffer.wrap(expected)); } diff --git a/library/core/src/test/java/com/google/android/exoplayer2/metadata/MetadataRendererTest.java b/library/core/src/test/java/com/google/android/exoplayer2/metadata/MetadataRendererTest.java index cf57f15f2f..1d1cb20b34 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/metadata/MetadataRendererTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/metadata/MetadataRendererTest.java @@ -32,6 +32,7 @@ import com.google.android.exoplayer2.testutil.FakeSampleStream.FakeSampleStreamI import com.google.android.exoplayer2.testutil.TestUtil; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.MimeTypes; +import com.google.common.primitives.Bytes; import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -43,7 +44,7 @@ import org.junit.runner.RunWith; public class MetadataRendererTest { private static final byte[] SCTE35_TIME_SIGNAL_BYTES = - TestUtil.joinByteArrays( + Bytes.concat( TestUtil.createByteArray( 0, // table_id. 0x80, // section_syntax_indicator, private_indicator, reserved, section_length(4). @@ -170,7 +171,7 @@ public class MetadataRendererTest { */ private static byte[] encodeTxxxId3Frame(String description, String value) { byte[] id3FrameData = - TestUtil.joinByteArrays( + Bytes.concat( "TXXX".getBytes(ISO_8859_1), // ID for a 'user defined text information frame' TestUtil.createByteArray(0, 0, 0, 0), // Frame size (set later) TestUtil.createByteArray(0, 0), // Frame flags @@ -186,7 +187,7 @@ public class MetadataRendererTest { id3FrameData[frameSizeIndex] = (byte) frameSize; byte[] id3Bytes = - TestUtil.joinByteArrays( + Bytes.concat( "ID3".getBytes(ISO_8859_1), // identifier TestUtil.createByteArray(0x04, 0x00), // version TestUtil.createByteArray(0), // Tag flags diff --git a/library/core/src/test/java/com/google/android/exoplayer2/metadata/icy/IcyDecoderTest.java b/library/core/src/test/java/com/google/android/exoplayer2/metadata/icy/IcyDecoderTest.java index 49cca0367d..d16941b021 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/metadata/icy/IcyDecoderTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/metadata/icy/IcyDecoderTest.java @@ -26,7 +26,7 @@ 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.testutil.TestUtil; +import com.google.common.primitives.Bytes; import org.junit.Test; import org.junit.runner.RunWith; @@ -54,7 +54,7 @@ public final class IcyDecoderTest { public void decode_respectsLimit() { byte[] icyTitle = "StreamTitle='test title';".getBytes(UTF_8); byte[] icyUrl = "StreamURL='test_url';".getBytes(UTF_8); - byte[] paddedRawBytes = TestUtil.joinByteArrays(icyTitle, icyUrl); + byte[] paddedRawBytes = Bytes.concat(icyTitle, icyUrl); MetadataInputBuffer metadataBuffer = createMetadataInputBuffer(paddedRawBytes); // Stop before the stream URL. metadataBuffer.data.limit(icyTitle.length); diff --git a/library/core/src/test/java/com/google/android/exoplayer2/source/SampleQueueTest.java b/library/core/src/test/java/com/google/android/exoplayer2/source/SampleQueueTest.java index 41b953a0d2..480735a689 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/source/SampleQueueTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/source/SampleQueueTest.java @@ -43,6 +43,7 @@ import com.google.android.exoplayer2.upstream.DefaultAllocator; import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.MediaSourceEventDispatcher; import com.google.android.exoplayer2.util.ParsableByteArray; +import com.google.common.primitives.Bytes; import java.io.IOException; import java.util.Arrays; import java.util.concurrent.atomic.AtomicReference; @@ -483,7 +484,7 @@ public final class SampleQueueTest { byte[] sampleData = new byte[] {0, 1, 2}; byte[] initializationVector = new byte[] {7, 6, 5, 4, 3, 2, 1, 0}; byte[] encryptedSampleData = - TestUtil.joinByteArrays( + Bytes.concat( new byte[] { 0x08, // subsampleEncryption = false (1 bit), ivSize = 8 (7 bits). }, diff --git a/library/extractor/build.gradle b/library/extractor/build.gradle index e12eb009eb..d9a5128b13 100644 --- a/library/extractor/build.gradle +++ b/library/extractor/build.gradle @@ -41,6 +41,7 @@ android { dependencies { implementation 'androidx.annotation:annotation:' + androidxAnnotationVersion implementation project(modulePrefix + 'library-common') + implementation 'com.google.guava:guava:' + guavaVersion compileOnly 'org.checkerframework:checker-qual:' + checkerframeworkVersion compileOnly 'org.checkerframework:checker-compat-qual:' + checkerframeworkVersion compileOnly 'org.jetbrains.kotlin:kotlin-annotations-jvm:' + kotlinAnnotationsVersion diff --git a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ogg/DefaultOggSeekerTest.java b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ogg/DefaultOggSeekerTest.java index 83aa8c6d9b..be471ac40c 100644 --- a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ogg/DefaultOggSeekerTest.java +++ b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ogg/DefaultOggSeekerTest.java @@ -26,6 +26,7 @@ import com.google.android.exoplayer2.extractor.ExtractorInput; import com.google.android.exoplayer2.testutil.FakeExtractorInput; import com.google.android.exoplayer2.testutil.TestUtil; import com.google.android.exoplayer2.util.ParsableByteArray; +import com.google.common.primitives.Bytes; import java.io.EOFException; import java.io.IOException; import java.util.Random; @@ -125,7 +126,7 @@ public final class DefaultOggSeekerTest { public void skipToNextPage_success() throws Exception { FakeExtractorInput extractorInput = createInput( - TestUtil.joinByteArrays( + Bytes.concat( TestUtil.buildTestData(4000, random), new byte[] {'O', 'g', 'g', 'S'}, TestUtil.buildTestData(4000, random)), @@ -138,7 +139,7 @@ public final class DefaultOggSeekerTest { public void skipToNextPage_withOverlappingInput_success() throws Exception { FakeExtractorInput extractorInput = createInput( - TestUtil.joinByteArrays( + Bytes.concat( TestUtil.buildTestData(2046, random), new byte[] {'O', 'g', 'g', 'S'}, TestUtil.buildTestData(4000, random)), @@ -151,8 +152,7 @@ public final class DefaultOggSeekerTest { public void skipToNextPage_withInputShorterThanPeekLength_success() throws Exception { FakeExtractorInput extractorInput = createInput( - TestUtil.joinByteArrays(new byte[] {'x', 'O', 'g', 'g', 'S'}), - /* simulateUnknownLength= */ false); + Bytes.concat(new byte[] {'x', 'O', 'g', 'g', 'S'}), /* simulateUnknownLength= */ false); skipToNextPage(extractorInput); assertThat(extractorInput.getPosition()).isEqualTo(1); } diff --git a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ts/AdtsReaderTest.java b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ts/AdtsReaderTest.java index c04c7224f9..a30fb3983b 100644 --- a/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ts/AdtsReaderTest.java +++ b/library/extractor/src/test/java/com/google/android/exoplayer2/extractor/ts/AdtsReaderTest.java @@ -25,6 +25,7 @@ import com.google.android.exoplayer2.testutil.FakeExtractorOutput; import com.google.android.exoplayer2.testutil.FakeTrackOutput; import com.google.android.exoplayer2.testutil.TestUtil; import com.google.android.exoplayer2.util.ParsableByteArray; +import com.google.common.primitives.Bytes; import java.util.Arrays; import org.junit.Before; import org.junit.Test; @@ -57,7 +58,7 @@ public class AdtsReaderTest { TestUtil.createByteArray(0x20, 0x00, 0x20, 0x00, 0x00, 0x80, 0x0e); private static final byte[] TEST_DATA = - TestUtil.joinByteArrays(ID3_DATA_1, ID3_DATA_2, ADTS_HEADER, ADTS_CONTENT); + Bytes.concat(ID3_DATA_1, ID3_DATA_2, ADTS_HEADER, ADTS_CONTENT); private static final long ADTS_SAMPLE_DURATION = 23219L; @@ -94,7 +95,7 @@ public class AdtsReaderTest { public void skipToNextSampleResetsState() throws Exception { data = new ParsableByteArray( - TestUtil.joinByteArrays( + Bytes.concat( ADTS_HEADER, ADTS_CONTENT, ADTS_HEADER, diff --git a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeTrackOutput.java b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeTrackOutput.java index 2bdf19fec2..236eef0b60 100644 --- a/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeTrackOutput.java +++ b/testutils/src/main/java/com/google/android/exoplayer2/testutil/FakeTrackOutput.java @@ -27,6 +27,7 @@ import com.google.android.exoplayer2.util.Assertions; import com.google.android.exoplayer2.util.Function; import com.google.android.exoplayer2.util.ParsableByteArray; import com.google.android.exoplayer2.util.Util; +import com.google.common.primitives.Bytes; import java.io.EOFException; import java.io.IOException; import java.util.ArrayList; @@ -105,7 +106,7 @@ public final class FakeTrackOutput implements TrackOutput, Dumper.Dumpable { throw new EOFException(); } newData = Arrays.copyOf(newData, bytesAppended); - sampleData = TestUtil.joinByteArrays(sampleData, newData); + sampleData = Bytes.concat(sampleData, newData); return bytesAppended; } @@ -113,7 +114,7 @@ public final class FakeTrackOutput implements TrackOutput, Dumper.Dumpable { public void sampleData(ParsableByteArray data, int length, @SampleDataPart int sampleDataPart) { byte[] newData = new byte[length]; data.readBytes(newData, 0, length); - sampleData = TestUtil.joinByteArrays(sampleData, newData); + sampleData = Bytes.concat(sampleData, newData); } @Override 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 4e7b71aa41..0aac047e44 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 @@ -168,26 +168,6 @@ public class TestUtil { return byteArray; } - /** - * Concatenates the provided byte arrays. - * - * @param byteArrays The byte arrays to concatenate. - * @return The concatenated result. - */ - public static byte[] joinByteArrays(byte[]... byteArrays) { - int length = 0; - for (byte[] byteArray : byteArrays) { - length += byteArray.length; - } - byte[] joined = new byte[length]; - length = 0; - for (byte[] byteArray : byteArrays) { - System.arraycopy(byteArray, 0, joined, length, byteArray.length); - length += byteArray.length; - } - return joined; - } - /** Writes one byte long dummy test data to the file and returns it. */ public static File createTestFile(File directory, String name) throws IOException { return createTestFile(directory, name, /* length= */ 1);