Add tests for DefaultTrackSelector handling of forced & default tracks

Issue: google/ExoPlayer#9797
PiperOrigin-RevId: 420707176
This commit is contained in:
ibaker 2022-01-10 10:22:24 +00:00 committed by bachinger
parent e854be69e4
commit 055df87c8b

View File

@ -1169,16 +1169,30 @@ public final class DefaultTrackSelectorTest {
}
/**
* Tests that the default track selector will select a forced text track matching the selected
* audio language when no text language preferences match.
* Tests that the default track selector will select:
*
* <ul>
* <li>A forced text track with unknown language if the selected audio language is also unknown.
* <li>A forced text track matching the selected audio language.
* <li>A default text track matching the selected audio language when a default text track in
* another language is present.
* <li>A default text track that doesn't match the selected audio language when a default text
* track in the selected audio language is not present (but other text tracks in this
* language are present).
* </ul>
*/
@Test
public void selectingForcedTextTrackMatchesAudioLanguage() throws ExoPlaybackException {
Format.Builder formatBuilder =
public void forcedAndDefaultTextTracksInteractWithSelectedAudioLanguageAsExpected()
throws ExoPlaybackException {
Format.Builder forcedTextBuilder =
TEXT_FORMAT.buildUpon().setSelectionFlags(C.SELECTION_FLAG_FORCED);
Format forcedEnglish = formatBuilder.setLanguage("eng").build();
Format forcedGerman = formatBuilder.setLanguage("deu").build();
Format forcedNoLanguage = formatBuilder.setLanguage(C.LANGUAGE_UNDETERMINED).build();
Format.Builder defaultTextBuilder =
TEXT_FORMAT.buildUpon().setSelectionFlags(C.SELECTION_FLAG_DEFAULT);
Format forcedEnglish = forcedTextBuilder.setLanguage("eng").build();
Format defaultEnglish = defaultTextBuilder.setLanguage("eng").build();
Format forcedGerman = forcedTextBuilder.setLanguage("deu").build();
Format defaultGerman = defaultTextBuilder.setLanguage("deu").build();
Format forcedNoLanguage = forcedTextBuilder.setLanguage(C.LANGUAGE_UNDETERMINED).build();
Format noLanguageAudio = AUDIO_FORMAT.buildUpon().setLanguage(null).build();
Format germanAudio = AUDIO_FORMAT.buildUpon().setLanguage("deu").build();
@ -1211,6 +1225,19 @@ public final class DefaultTrackSelectorTest {
trackGroups = wrapFormats(germanAudio, forcedEnglish, forcedGerman);
result = trackSelector.selectTracks(rendererCapabilities, trackGroups, periodId, TIMELINE);
assertFixedSelection(result.selections[1], trackGroups, forcedGerman);
// The audio declares german. The default german track should be selected (in favour of the
// default english track and forced german track).
trackGroups =
wrapFormats(germanAudio, forcedGerman, defaultGerman, forcedEnglish, defaultEnglish);
result = trackSelector.selectTracks(rendererCapabilities, trackGroups, periodId, TIMELINE);
assertFixedSelection(result.selections[1], trackGroups, defaultGerman);
// The audio declares german. The default english track should be selected because there's no
// default german track.
trackGroups = wrapFormats(germanAudio, forcedGerman, forcedEnglish, defaultEnglish);
result = trackSelector.selectTracks(rendererCapabilities, trackGroups, periodId, TIMELINE);
assertFixedSelection(result.selections[1], trackGroups, defaultEnglish);
}
/**