Move DefaultOggSeeker tests into a single class
PiperOrigin-RevId: 261320318
This commit is contained in:
parent
5e98d76e8b
commit
173eadc70e
@ -20,8 +20,12 @@ import static org.junit.Assert.fail;
|
||||
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import com.google.android.exoplayer2.C;
|
||||
import com.google.android.exoplayer2.extractor.ExtractorInput;
|
||||
import com.google.android.exoplayer2.testutil.FakeExtractorInput;
|
||||
import com.google.android.exoplayer2.testutil.OggTestData;
|
||||
import com.google.android.exoplayer2.testutil.TestUtil;
|
||||
import com.google.android.exoplayer2.util.ParsableByteArray;
|
||||
import java.io.EOFException;
|
||||
import java.io.IOException;
|
||||
import java.util.Random;
|
||||
import org.junit.Test;
|
||||
@ -31,6 +35,8 @@ import org.junit.runner.RunWith;
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public final class DefaultOggSeekerTest {
|
||||
|
||||
private final Random random = new Random(0);
|
||||
|
||||
@Test
|
||||
public void testSetupWithUnsetEndPositionFails() {
|
||||
try {
|
||||
@ -55,6 +61,95 @@ public final class DefaultOggSeekerTest {
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSkipToNextPage() throws Exception {
|
||||
FakeExtractorInput extractorInput =
|
||||
OggTestData.createInput(
|
||||
TestUtil.joinByteArrays(
|
||||
TestUtil.buildTestData(4000, random),
|
||||
new byte[] {'O', 'g', 'g', 'S'},
|
||||
TestUtil.buildTestData(4000, random)),
|
||||
false);
|
||||
skipToNextPage(extractorInput);
|
||||
assertThat(extractorInput.getPosition()).isEqualTo(4000);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSkipToNextPageOverlap() throws Exception {
|
||||
FakeExtractorInput extractorInput =
|
||||
OggTestData.createInput(
|
||||
TestUtil.joinByteArrays(
|
||||
TestUtil.buildTestData(2046, random),
|
||||
new byte[] {'O', 'g', 'g', 'S'},
|
||||
TestUtil.buildTestData(4000, random)),
|
||||
false);
|
||||
skipToNextPage(extractorInput);
|
||||
assertThat(extractorInput.getPosition()).isEqualTo(2046);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSkipToNextPageInputShorterThanPeekLength() throws Exception {
|
||||
FakeExtractorInput extractorInput =
|
||||
OggTestData.createInput(
|
||||
TestUtil.joinByteArrays(new byte[] {'x', 'O', 'g', 'g', 'S'}), false);
|
||||
skipToNextPage(extractorInput);
|
||||
assertThat(extractorInput.getPosition()).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSkipToNextPageNoMatch() throws Exception {
|
||||
FakeExtractorInput extractorInput =
|
||||
OggTestData.createInput(new byte[] {'g', 'g', 'S', 'O', 'g', 'g'}, false);
|
||||
try {
|
||||
skipToNextPage(extractorInput);
|
||||
fail();
|
||||
} catch (EOFException e) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReadGranuleOfLastPage() throws IOException, InterruptedException {
|
||||
FakeExtractorInput input =
|
||||
OggTestData.createInput(
|
||||
TestUtil.joinByteArrays(
|
||||
TestUtil.buildTestData(100, random),
|
||||
OggTestData.buildOggHeader(0x00, 20000, 66, 3),
|
||||
TestUtil.createByteArray(254, 254, 254), // laces
|
||||
TestUtil.buildTestData(3 * 254, random),
|
||||
OggTestData.buildOggHeader(0x00, 40000, 67, 3),
|
||||
TestUtil.createByteArray(254, 254, 254), // laces
|
||||
TestUtil.buildTestData(3 * 254, random),
|
||||
OggTestData.buildOggHeader(0x05, 60000, 68, 3),
|
||||
TestUtil.createByteArray(254, 254, 254), // laces
|
||||
TestUtil.buildTestData(3 * 254, random)),
|
||||
false);
|
||||
assertReadGranuleOfLastPage(input, 60000);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReadGranuleOfLastPageAfterLastHeader() throws IOException, InterruptedException {
|
||||
FakeExtractorInput input = OggTestData.createInput(TestUtil.buildTestData(100, random), false);
|
||||
try {
|
||||
assertReadGranuleOfLastPage(input, 60000);
|
||||
fail();
|
||||
} catch (EOFException e) {
|
||||
// Ignored.
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReadGranuleOfLastPageWithUnboundedLength()
|
||||
throws IOException, InterruptedException {
|
||||
FakeExtractorInput input = OggTestData.createInput(new byte[0], true);
|
||||
try {
|
||||
assertReadGranuleOfLastPage(input, 60000);
|
||||
fail();
|
||||
} catch (IllegalArgumentException e) {
|
||||
// Ignored.
|
||||
}
|
||||
}
|
||||
|
||||
private void testSeeking(Random random) throws IOException, InterruptedException {
|
||||
OggTestFile testFile = OggTestFile.generate(random, 1000);
|
||||
FakeExtractorInput input = new FakeExtractorInput.Builder().setData(testFile.data).build();
|
||||
@ -130,7 +225,47 @@ public final class DefaultOggSeekerTest {
|
||||
}
|
||||
}
|
||||
|
||||
private long seekTo(
|
||||
private static void skipToNextPage(ExtractorInput extractorInput)
|
||||
throws IOException, InterruptedException {
|
||||
DefaultOggSeeker oggSeeker =
|
||||
new DefaultOggSeeker(
|
||||
/* streamReader= */ new FlacReader(),
|
||||
/* payloadStartPosition= */ 0,
|
||||
/* payloadEndPosition= */ extractorInput.getLength(),
|
||||
/* firstPayloadPageSize= */ 1,
|
||||
/* firstPayloadPageGranulePosition= */ 2,
|
||||
/* firstPayloadPageIsLastPage= */ false);
|
||||
while (true) {
|
||||
try {
|
||||
oggSeeker.skipToNextPage(extractorInput);
|
||||
break;
|
||||
} catch (FakeExtractorInput.SimulatedIOException e) {
|
||||
/* ignored */
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static void assertReadGranuleOfLastPage(FakeExtractorInput input, int expected)
|
||||
throws IOException, InterruptedException {
|
||||
DefaultOggSeeker oggSeeker =
|
||||
new DefaultOggSeeker(
|
||||
/* streamReader= */ new FlacReader(),
|
||||
/* payloadStartPosition= */ 0,
|
||||
/* payloadEndPosition= */ input.getLength(),
|
||||
/* firstPayloadPageSize= */ 1,
|
||||
/* firstPayloadPageGranulePosition= */ 2,
|
||||
/* firstPayloadPageIsLastPage= */ false);
|
||||
while (true) {
|
||||
try {
|
||||
assertThat(oggSeeker.readGranuleOfLastPage(input)).isEqualTo(expected);
|
||||
break;
|
||||
} catch (FakeExtractorInput.SimulatedIOException e) {
|
||||
// Ignored.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static long seekTo(
|
||||
FakeExtractorInput input, DefaultOggSeeker oggSeeker, long targetGranule, int initialPosition)
|
||||
throws IOException, InterruptedException {
|
||||
long nextSeekPosition = initialPosition;
|
||||
|
@ -1,162 +0,0 @@
|
||||
/*
|
||||
* Copyright (C) 2016 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.extractor.ogg;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import com.google.android.exoplayer2.extractor.ExtractorInput;
|
||||
import com.google.android.exoplayer2.testutil.FakeExtractorInput;
|
||||
import com.google.android.exoplayer2.testutil.OggTestData;
|
||||
import com.google.android.exoplayer2.testutil.TestUtil;
|
||||
import java.io.EOFException;
|
||||
import java.io.IOException;
|
||||
import java.util.Random;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
||||
/** Unit test for {@link DefaultOggSeeker} utility methods. */
|
||||
@RunWith(AndroidJUnit4.class)
|
||||
public final class DefaultOggSeekerUtilMethodsTest {
|
||||
|
||||
private final Random random = new Random(0);
|
||||
|
||||
@Test
|
||||
public void testSkipToNextPage() throws Exception {
|
||||
FakeExtractorInput extractorInput = OggTestData.createInput(
|
||||
TestUtil.joinByteArrays(
|
||||
TestUtil.buildTestData(4000, random),
|
||||
new byte[] {'O', 'g', 'g', 'S'},
|
||||
TestUtil.buildTestData(4000, random)
|
||||
), false);
|
||||
skipToNextPage(extractorInput);
|
||||
assertThat(extractorInput.getPosition()).isEqualTo(4000);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSkipToNextPageOverlap() throws Exception {
|
||||
FakeExtractorInput extractorInput = OggTestData.createInput(
|
||||
TestUtil.joinByteArrays(
|
||||
TestUtil.buildTestData(2046, random),
|
||||
new byte[] {'O', 'g', 'g', 'S'},
|
||||
TestUtil.buildTestData(4000, random)
|
||||
), false);
|
||||
skipToNextPage(extractorInput);
|
||||
assertThat(extractorInput.getPosition()).isEqualTo(2046);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSkipToNextPageInputShorterThanPeekLength() throws Exception {
|
||||
FakeExtractorInput extractorInput = OggTestData.createInput(
|
||||
TestUtil.joinByteArrays(
|
||||
new byte[] {'x', 'O', 'g', 'g', 'S'}
|
||||
), false);
|
||||
skipToNextPage(extractorInput);
|
||||
assertThat(extractorInput.getPosition()).isEqualTo(1);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testSkipToNextPageNoMatch() throws Exception {
|
||||
FakeExtractorInput extractorInput = OggTestData.createInput(
|
||||
new byte[] {'g', 'g', 'S', 'O', 'g', 'g'}, false);
|
||||
try {
|
||||
skipToNextPage(extractorInput);
|
||||
fail();
|
||||
} catch (EOFException e) {
|
||||
// expected
|
||||
}
|
||||
}
|
||||
|
||||
private static void skipToNextPage(ExtractorInput extractorInput)
|
||||
throws IOException, InterruptedException {
|
||||
DefaultOggSeeker oggSeeker =
|
||||
new DefaultOggSeeker(
|
||||
/* streamReader= */ new FlacReader(),
|
||||
/* payloadStartPosition= */ 0,
|
||||
/* payloadEndPosition= */ extractorInput.getLength(),
|
||||
/* firstPayloadPageSize= */ 1,
|
||||
/* firstPayloadPageGranulePosition= */ 2,
|
||||
/* firstPayloadPageIsLastPage= */ false);
|
||||
while (true) {
|
||||
try {
|
||||
oggSeeker.skipToNextPage(extractorInput);
|
||||
break;
|
||||
} catch (FakeExtractorInput.SimulatedIOException e) { /* ignored */ }
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReadGranuleOfLastPage() throws IOException, InterruptedException {
|
||||
FakeExtractorInput input = OggTestData.createInput(TestUtil.joinByteArrays(
|
||||
TestUtil.buildTestData(100, random),
|
||||
OggTestData.buildOggHeader(0x00, 20000, 66, 3),
|
||||
TestUtil.createByteArray(254, 254, 254), // laces
|
||||
TestUtil.buildTestData(3 * 254, random),
|
||||
OggTestData.buildOggHeader(0x00, 40000, 67, 3),
|
||||
TestUtil.createByteArray(254, 254, 254), // laces
|
||||
TestUtil.buildTestData(3 * 254, random),
|
||||
OggTestData.buildOggHeader(0x05, 60000, 68, 3),
|
||||
TestUtil.createByteArray(254, 254, 254), // laces
|
||||
TestUtil.buildTestData(3 * 254, random)
|
||||
), false);
|
||||
assertReadGranuleOfLastPage(input, 60000);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReadGranuleOfLastPageAfterLastHeader() throws IOException, InterruptedException {
|
||||
FakeExtractorInput input = OggTestData.createInput(TestUtil.buildTestData(100, random), false);
|
||||
try {
|
||||
assertReadGranuleOfLastPage(input, 60000);
|
||||
fail();
|
||||
} catch (EOFException e) {
|
||||
// Ignored.
|
||||
}
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testReadGranuleOfLastPageWithUnboundedLength()
|
||||
throws IOException, InterruptedException {
|
||||
FakeExtractorInput input = OggTestData.createInput(new byte[0], true);
|
||||
try {
|
||||
assertReadGranuleOfLastPage(input, 60000);
|
||||
fail();
|
||||
} catch (IllegalArgumentException e) {
|
||||
// Ignored.
|
||||
}
|
||||
}
|
||||
|
||||
private void assertReadGranuleOfLastPage(FakeExtractorInput input, int expected)
|
||||
throws IOException, InterruptedException {
|
||||
DefaultOggSeeker oggSeeker =
|
||||
new DefaultOggSeeker(
|
||||
/* streamReader= */ new FlacReader(),
|
||||
/* payloadStartPosition= */ 0,
|
||||
/* payloadEndPosition= */ input.getLength(),
|
||||
/* firstPayloadPageSize= */ 1,
|
||||
/* firstPayloadPageGranulePosition= */ 2,
|
||||
/* firstPayloadPageIsLastPage= */ false);
|
||||
while (true) {
|
||||
try {
|
||||
assertThat(oggSeeker.readGranuleOfLastPage(input)).isEqualTo(expected);
|
||||
break;
|
||||
} catch (FakeExtractorInput.SimulatedIOException e) {
|
||||
// Ignored.
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user