Use @Rule and other util to simplify ParameterizedAudioExportTest.

PiperOrigin-RevId: 558168355
This commit is contained in:
samrobinson 2023-08-18 17:32:37 +01:00 committed by Julia Bibik
parent 99ac6feeee
commit 54797d4cc5

View File

@ -25,22 +25,20 @@ import static androidx.media3.transformer.TestUtil.createPitchChangingAudioProce
import static androidx.media3.transformer.TestUtil.createTransformerBuilder;
import static androidx.media3.transformer.TestUtil.removeEncodersAndDecoders;
import static com.google.common.truth.Truth.assertThat;
import static java.util.stream.Collectors.toList;
import android.content.Context;
import androidx.media3.common.MediaItem;
import androidx.media3.common.MimeTypes;
import androidx.media3.common.util.Util;
import androidx.test.core.app.ApplicationProvider;
import com.google.common.collect.Collections2;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.ImmutableSet;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
import com.google.common.collect.Sets;
import java.util.List;
import org.checkerframework.dataflow.qual.Pure;
import org.junit.After;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TemporaryFolder;
import org.junit.runner.RunWith;
import org.robolectric.ParameterizedRobolectricTestRunner;
import org.robolectric.ParameterizedRobolectricTestRunner.Parameter;
@ -51,8 +49,8 @@ import org.robolectric.ParameterizedRobolectricTestRunner.Parameters;
public final class ParameterizedAudioExportTest {
public static final String AUDIO_44100_MONO = ASSET_URI_PREFIX + FILE_AUDIO_RAW;
public static final String AUDIO_48000_STEREO = ASSET_URI_PREFIX + FILE_AUDIO_RAW_VIDEO;
public static final ImmutableList<ItemConfig> EDITED_MEDIA_ITEMS =
ImmutableList.of(
public static final ImmutableSet<ItemConfig> EDITED_MEDIA_ITEMS =
ImmutableSet.of(
new ItemConfig(AUDIO_44100_MONO, /* withEffects= */ false),
new ItemConfig(AUDIO_44100_MONO, /* withEffects= */ true),
new ItemConfig(AUDIO_48000_STEREO, /* withEffects= */ false),
@ -60,35 +58,26 @@ public final class ParameterizedAudioExportTest {
@Parameters(name = "{0}")
public static List<SequenceConfig> params() {
ImmutableList<ImmutableList<ItemConfig>> itemsList =
generateAllPermutationsOfAllCombinations(EDITED_MEDIA_ITEMS);
ArrayList<SequenceConfig> sequences = new ArrayList<>();
for (List<ItemConfig> itemConfigs : itemsList) {
sequences.add(new SequenceConfig(itemConfigs));
}
return sequences;
// All permutations of all combinations.
return Sets.powerSet(EDITED_MEDIA_ITEMS).stream()
.filter(s -> !s.isEmpty())
.flatMap(s -> Collections2.permutations(s).stream())
.map(SequenceConfig::new)
.collect(toList());
}
private final Context context = ApplicationProvider.getApplicationContext();
@Rule public final TemporaryFolder outputDir = new TemporaryFolder();
@Parameter public SequenceConfig sequence;
private String outputPath;
private CapturingMuxer.Factory muxerFactory;
private final CapturingMuxer.Factory muxerFactory = new CapturingMuxer.Factory();
@Before
public void setUp() throws Exception {
outputPath = Util.createTempFile(context, "TransformerTest").getPath();
muxerFactory = new CapturingMuxer.Factory();
public void setUp() {
addAudioDecoders(MimeTypes.AUDIO_RAW);
addAudioEncoders(MimeTypes.AUDIO_AAC);
}
@After
public void tearDown() throws Exception {
Files.delete(Paths.get(outputPath));
public void tearDown() {
removeEncodersAndDecoders();
}
@ -96,34 +85,13 @@ public final class ParameterizedAudioExportTest {
public void export() throws Exception {
Transformer transformer =
createTransformerBuilder(muxerFactory, /* enableFallback= */ false).build();
transformer.start(sequence.asComposition(), outputPath);
transformer.start(sequence.asComposition(), outputDir.newFile().getPath());
ExportResult result = TransformerTestRunner.runLooper(transformer);
assertThat(result.processedInputs).hasSize(sequence.getSize());
}
@Pure
private static <T> ImmutableList<ImmutableList<T>> generateAllPermutationsOfAllCombinations(
List<T> items) {
if (items.size() == 1) {
return ImmutableList.of(ImmutableList.of(items.get(0)));
}
ImmutableList.Builder<ImmutableList<T>> permutations = new ImmutableList.Builder<>();
for (T mainItem : items) {
ArrayList<T> otherItems = new ArrayList<>(items);
otherItems.remove(mainItem);
ImmutableList<ImmutableList<T>> subLists =
generateAllPermutationsOfAllCombinations(otherItems);
for (ImmutableList<T> sublist : subLists) {
permutations.add(sublist);
permutations.add(new ImmutableList.Builder<T>().add(mainItem).addAll(sublist).build());
}
}
return ImmutableSet.copyOf(permutations.build()).asList();
}
private static class SequenceConfig {
private final List<ItemConfig> itemConfigs;