diff --git a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelectorTest.java b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelectorTest.java
index b64ba3fbcf..eacda8a0d0 100644
--- a/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelectorTest.java
+++ b/libraries/exoplayer/src/test/java/androidx/media3/exoplayer/trackselection/DefaultTrackSelectorTest.java
@@ -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:
+ *
+ *
+ * - A forced text track with unknown language if the selected audio language is also unknown.
+ *
- A forced text track matching the selected audio language.
+ *
- A default text track matching the selected audio language when a default text track in
+ * another language is present.
+ *
- 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).
+ *
*/
@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);
}
/**