mirror of
https://github.com/samsonjs/media.git
synced 2026-03-29 10:05:48 +00:00
Remove assertCues() helper methods from WebvttDecoderTest
These make the interesting bits of each assertion harder to follow imo. Also remove all the assertWithMessage() calls at the same time, Olly convinced me these are rarely useful since you can click from the stack trace to the failing line in the IDE. PiperOrigin-RevId: 288470704
This commit is contained in:
parent
692c8ee0ac
commit
181606137d
2 changed files with 180 additions and 334 deletions
|
|
@ -8,12 +8,12 @@ This is the first subtitle.
|
|||
NOTE Wrong position provided. It should be provided as
|
||||
a percentage value
|
||||
|
||||
00:02.345 --> 00:03.456 position:10 align:end size:35%
|
||||
00:02.345 --> 00:03.456 position:10 align:end
|
||||
This is the second subtitle.
|
||||
|
||||
NOTE Line as percentage and line alignment
|
||||
|
||||
00:04.000 --> 00:05.000 line:45%,end align:middle size:35%
|
||||
00:04.000 --> 00:05.000 line:45%,end align:middle
|
||||
This is the third subtitle.
|
||||
|
||||
NOTE Line as absolute negative number and without line alignment.
|
||||
|
|
@ -23,10 +23,10 @@ This is the fourth subtitle.
|
|||
|
||||
NOTE The position and positioning alignment should be inherited from align.
|
||||
|
||||
00:07.000 --> 00:08.000 align:right
|
||||
00:08.000 --> 00:09.000 align:right
|
||||
This is the fifth subtitle.
|
||||
|
||||
NOTE In newer drafts, align:middle has been replaced by align:center
|
||||
|
||||
00:10.000 --> 00:11.000 line:45%,end align:center size:35%
|
||||
00:10.000 --> 00:11.000 align:center
|
||||
This is the sixth subtitle.
|
||||
|
|
|
|||
|
|
@ -25,16 +25,15 @@ import android.text.Spanned;
|
|||
import android.text.style.ForegroundColorSpan;
|
||||
import android.text.style.StyleSpan;
|
||||
import android.text.style.TypefaceSpan;
|
||||
import androidx.annotation.Nullable;
|
||||
import androidx.test.core.app.ApplicationProvider;
|
||||
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||
import com.google.android.exoplayer2.testutil.TestUtil;
|
||||
import com.google.android.exoplayer2.text.Cue;
|
||||
import com.google.android.exoplayer2.text.SubtitleDecoderException;
|
||||
import com.google.android.exoplayer2.util.ColorParser;
|
||||
import com.google.common.collect.Iterables;
|
||||
import com.google.common.truth.Expect;
|
||||
import java.io.IOException;
|
||||
import java.util.List;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
|
|
@ -76,350 +75,254 @@ public class WebvttDecoderTest {
|
|||
public void testDecodeTypical() throws Exception {
|
||||
WebvttSubtitle subtitle = getSubtitleForTestAsset(TYPICAL_FILE);
|
||||
|
||||
// Test event count.
|
||||
assertThat(subtitle.getEventTimeCount()).isEqualTo(4);
|
||||
|
||||
// Test cues.
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 0,
|
||||
/* startTimeUs= */ 0,
|
||||
/* endTimeUs= */ 1234000,
|
||||
"This is the first subtitle.");
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 2,
|
||||
/* startTimeUs= */ 2345000,
|
||||
/* endTimeUs= */ 3456000,
|
||||
"This is the second subtitle.");
|
||||
assertThat(subtitle.getEventTime(0)).isEqualTo(0L);
|
||||
assertThat(subtitle.getEventTime(1)).isEqualTo(1_234_000L);
|
||||
Cue firstCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(0)));
|
||||
assertThat(firstCue.text.toString()).isEqualTo("This is the first subtitle.");
|
||||
|
||||
assertThat(subtitle.getEventTime(2)).isEqualTo(2_345_000L);
|
||||
assertThat(subtitle.getEventTime(3)).isEqualTo(3_456_000L);
|
||||
Cue secondCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(2)));
|
||||
assertThat(secondCue.text.toString()).isEqualTo("This is the second subtitle.");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecodeWithBom() throws Exception {
|
||||
WebvttSubtitle subtitle = getSubtitleForTestAsset(WITH_BOM);
|
||||
|
||||
// Test event count.
|
||||
assertThat(subtitle.getEventTimeCount()).isEqualTo(4);
|
||||
|
||||
// Test cues.
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 0,
|
||||
/* startTimeUs= */ 0,
|
||||
/* endTimeUs= */ 1234000,
|
||||
"This is the first subtitle.");
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 2,
|
||||
/* startTimeUs= */ 2345000,
|
||||
/* endTimeUs= */ 3456000,
|
||||
"This is the second subtitle.");
|
||||
assertThat(subtitle.getEventTime(0)).isEqualTo(0L);
|
||||
assertThat(subtitle.getEventTime(1)).isEqualTo(1_234_000L);
|
||||
Cue firstCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(0)));
|
||||
assertThat(firstCue.text.toString()).isEqualTo("This is the first subtitle.");
|
||||
|
||||
assertThat(subtitle.getEventTime(2)).isEqualTo(2_345_000L);
|
||||
assertThat(subtitle.getEventTime(3)).isEqualTo(3_456_000L);
|
||||
Cue secondCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(2)));
|
||||
assertThat(secondCue.text.toString()).isEqualTo("This is the second subtitle.");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecodeTypicalWithBadTimestamps() throws Exception {
|
||||
WebvttSubtitle subtitle = getSubtitleForTestAsset(TYPICAL_WITH_BAD_TIMESTAMPS);
|
||||
|
||||
// Test event count.
|
||||
assertThat(subtitle.getEventTimeCount()).isEqualTo(4);
|
||||
|
||||
// Test cues.
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 0,
|
||||
/* startTimeUs= */ 0,
|
||||
/* endTimeUs= */ 1234000,
|
||||
"This is the first subtitle.");
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 2,
|
||||
/* startTimeUs= */ 2345000,
|
||||
/* endTimeUs= */ 3456000,
|
||||
"This is the second subtitle.");
|
||||
assertThat(subtitle.getEventTime(0)).isEqualTo(0L);
|
||||
assertThat(subtitle.getEventTime(1)).isEqualTo(1_234_000L);
|
||||
Cue firstCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(0)));
|
||||
assertThat(firstCue.text.toString()).isEqualTo("This is the first subtitle.");
|
||||
|
||||
assertThat(subtitle.getEventTime(2)).isEqualTo(2_345_000L);
|
||||
assertThat(subtitle.getEventTime(3)).isEqualTo(3_456_000L);
|
||||
Cue secondCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(2)));
|
||||
assertThat(secondCue.text.toString()).isEqualTo("This is the second subtitle.");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecodeTypicalWithIds() throws Exception {
|
||||
WebvttSubtitle subtitle = getSubtitleForTestAsset(TYPICAL_WITH_IDS_FILE);
|
||||
|
||||
// Test event count.
|
||||
assertThat(subtitle.getEventTimeCount()).isEqualTo(4);
|
||||
|
||||
// Test cues.
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 0,
|
||||
/* startTimeUs= */ 0,
|
||||
/* endTimeUs= */ 1234000,
|
||||
"This is the first subtitle.");
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 2,
|
||||
/* startTimeUs= */ 2345000,
|
||||
/* endTimeUs= */ 3456000,
|
||||
"This is the second subtitle.");
|
||||
assertThat(subtitle.getEventTime(0)).isEqualTo(0L);
|
||||
assertThat(subtitle.getEventTime(1)).isEqualTo(1_234_000L);
|
||||
Cue firstCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(0)));
|
||||
assertThat(firstCue.text.toString()).isEqualTo("This is the first subtitle.");
|
||||
|
||||
assertThat(subtitle.getEventTime(2)).isEqualTo(2_345_000L);
|
||||
assertThat(subtitle.getEventTime(3)).isEqualTo(3_456_000L);
|
||||
Cue secondCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(2)));
|
||||
assertThat(secondCue.text.toString()).isEqualTo("This is the second subtitle.");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecodeTypicalWithComments() throws Exception {
|
||||
WebvttSubtitle subtitle = getSubtitleForTestAsset(TYPICAL_WITH_COMMENTS_FILE);
|
||||
|
||||
// test event count
|
||||
assertThat(subtitle.getEventTimeCount()).isEqualTo(4);
|
||||
|
||||
// test cues
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 0,
|
||||
/* startTimeUs= */ 0,
|
||||
/* endTimeUs= */ 1234000,
|
||||
"This is the first subtitle.");
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 2,
|
||||
/* startTimeUs= */ 2345000,
|
||||
/* endTimeUs= */ 3456000,
|
||||
"This is the second subtitle.");
|
||||
assertThat(subtitle.getEventTime(0)).isEqualTo(0L);
|
||||
assertThat(subtitle.getEventTime(0 + 1)).isEqualTo(1_234_000L);
|
||||
Cue firstCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(0)));
|
||||
assertThat(firstCue.text.toString()).isEqualTo("This is the first subtitle.");
|
||||
|
||||
assertThat(subtitle.getEventTime(2)).isEqualTo(2_345_000L);
|
||||
assertThat(subtitle.getEventTime(2 + 1)).isEqualTo(3_456_000L);
|
||||
Cue secondCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(2)));
|
||||
assertThat(secondCue.text.toString()).isEqualTo("This is the second subtitle.");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecodeWithTags() throws Exception {
|
||||
WebvttSubtitle subtitle = getSubtitleForTestAsset(WITH_TAGS_FILE);
|
||||
|
||||
// Test event count.
|
||||
assertThat(subtitle.getEventTimeCount()).isEqualTo(8);
|
||||
|
||||
// Test cues.
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 0,
|
||||
/* startTimeUs= */ 0,
|
||||
/* endTimeUs= */ 1234000,
|
||||
"This is the first subtitle.");
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 2,
|
||||
/* startTimeUs= */ 2345000,
|
||||
/* endTimeUs= */ 3456000,
|
||||
"This is the second subtitle.");
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 4,
|
||||
/* startTimeUs= */ 4000000,
|
||||
/* endTimeUs= */ 5000000,
|
||||
"This is the third subtitle.");
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 6,
|
||||
/* startTimeUs= */ 6000000,
|
||||
/* endTimeUs= */ 7000000,
|
||||
"This is the <fourth> &subtitle.");
|
||||
assertThat(subtitle.getEventTime(0)).isEqualTo(0L);
|
||||
assertThat(subtitle.getEventTime(1)).isEqualTo(1_234_000L);
|
||||
Cue firstCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(0)));
|
||||
assertThat(firstCue.text.toString()).isEqualTo("This is the first subtitle.");
|
||||
|
||||
assertThat(subtitle.getEventTime(2)).isEqualTo(2_345_000L);
|
||||
assertThat(subtitle.getEventTime(3)).isEqualTo(3_456_000L);
|
||||
Cue secondCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(2)));
|
||||
assertThat(secondCue.text.toString()).isEqualTo("This is the second subtitle.");
|
||||
|
||||
assertThat(subtitle.getEventTime(4)).isEqualTo(4_000_000L);
|
||||
assertThat(subtitle.getEventTime(5)).isEqualTo(5_000_000L);
|
||||
Cue thirdCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(4)));
|
||||
assertThat(thirdCue.text.toString()).isEqualTo("This is the third subtitle.");
|
||||
|
||||
assertThat(subtitle.getEventTime(6)).isEqualTo(6_000_000L);
|
||||
assertThat(subtitle.getEventTime(7)).isEqualTo(7_000_000L);
|
||||
Cue fourthCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(6)));
|
||||
assertThat(fourthCue.text.toString()).isEqualTo("This is the <fourth> &subtitle.");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecodeWithPositioning() throws Exception {
|
||||
WebvttSubtitle subtitle = getSubtitleForTestAsset(WITH_POSITIONING_FILE);
|
||||
// Test event count.
|
||||
|
||||
assertThat(subtitle.getEventTimeCount()).isEqualTo(12);
|
||||
// Test cues.
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 0,
|
||||
/* startTimeUs= */ 0,
|
||||
/* endTimeUs= */ 1234000,
|
||||
"This is the first subtitle.",
|
||||
Alignment.ALIGN_NORMAL,
|
||||
/* line= */ Cue.DIMEN_UNSET,
|
||||
/* lineType= */ Cue.LINE_TYPE_NUMBER,
|
||||
/* lineAnchor= */ Cue.ANCHOR_TYPE_START,
|
||||
/* position= */ 0.1f,
|
||||
/* positionAnchor= */ Cue.ANCHOR_TYPE_START,
|
||||
/* size= */ 0.35f,
|
||||
/* verticalType= */ Cue.TYPE_UNSET);
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 2,
|
||||
/* startTimeUs= */ 2345000,
|
||||
/* endTimeUs= */ 3456000,
|
||||
"This is the second subtitle.",
|
||||
Alignment.ALIGN_OPPOSITE,
|
||||
/* line= */ Cue.DIMEN_UNSET,
|
||||
/* lineType= */ Cue.LINE_TYPE_NUMBER,
|
||||
/* lineAnchor= */ Cue.ANCHOR_TYPE_START,
|
||||
/* position= */ 0.5f,
|
||||
/* positionAnchor= */ Cue.ANCHOR_TYPE_END,
|
||||
/* size= */ 0.35f,
|
||||
/* verticalType= */ Cue.TYPE_UNSET);
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 4,
|
||||
/* startTimeUs= */ 4000000,
|
||||
/* endTimeUs= */ 5000000,
|
||||
"This is the third subtitle.",
|
||||
Alignment.ALIGN_CENTER,
|
||||
/* line= */ 0.45f,
|
||||
/* lineType= */ Cue.LINE_TYPE_FRACTION,
|
||||
/* lineAnchor= */ Cue.ANCHOR_TYPE_END,
|
||||
/* position= */ 0.5f,
|
||||
/* positionAnchor= */ Cue.ANCHOR_TYPE_MIDDLE,
|
||||
/* size= */ 0.35f,
|
||||
/* verticalType= */ Cue.TYPE_UNSET);
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 6,
|
||||
/* startTimeUs= */ 6000000,
|
||||
/* endTimeUs= */ 7000000,
|
||||
"This is the fourth subtitle.",
|
||||
Alignment.ALIGN_CENTER,
|
||||
/* line= */ -11.0f,
|
||||
/* lineType= */ Cue.LINE_TYPE_NUMBER,
|
||||
/* lineAnchor= */ Cue.ANCHOR_TYPE_START,
|
||||
/* position= */ 0.5f,
|
||||
/* positionAnchor= */ Cue.ANCHOR_TYPE_MIDDLE,
|
||||
/* size= */ 1.0f,
|
||||
/* verticalType= */ Cue.TYPE_UNSET);
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 8,
|
||||
/* startTimeUs= */ 7000000,
|
||||
/* endTimeUs= */ 8000000,
|
||||
"This is the fifth subtitle.",
|
||||
Alignment.ALIGN_OPPOSITE,
|
||||
/* line= */ Cue.DIMEN_UNSET,
|
||||
/* lineType= */ Cue.LINE_TYPE_NUMBER,
|
||||
/* lineAnchor= */ Cue.ANCHOR_TYPE_START,
|
||||
/* position= */ 1.0f,
|
||||
/* positionAnchor= */ Cue.ANCHOR_TYPE_END,
|
||||
/* size= */ 1.0f,
|
||||
/* verticalType= */ Cue.TYPE_UNSET);
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 10,
|
||||
/* startTimeUs= */ 10000000,
|
||||
/* endTimeUs= */ 11000000,
|
||||
"This is the sixth subtitle.",
|
||||
Alignment.ALIGN_CENTER,
|
||||
/* line= */ 0.45f,
|
||||
/* lineType= */ Cue.LINE_TYPE_FRACTION,
|
||||
/* lineAnchor= */ Cue.ANCHOR_TYPE_END,
|
||||
/* position= */ 0.5f,
|
||||
/* positionAnchor= */ Cue.ANCHOR_TYPE_MIDDLE,
|
||||
/* size= */ 0.35f,
|
||||
/* verticalType= */ Cue.TYPE_UNSET);
|
||||
|
||||
assertThat(subtitle.getEventTime(0)).isEqualTo(0L);
|
||||
assertThat(subtitle.getEventTime(1)).isEqualTo(1_234_000L);
|
||||
Cue firstCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(0)));
|
||||
assertThat(firstCue.text.toString()).isEqualTo("This is the first subtitle.");
|
||||
assertThat(firstCue.position).isEqualTo(0.1f);
|
||||
assertThat(firstCue.positionAnchor).isEqualTo(Cue.ANCHOR_TYPE_START);
|
||||
assertThat(firstCue.textAlignment).isEqualTo(Alignment.ALIGN_NORMAL);
|
||||
assertThat(firstCue.size).isEqualTo(0.35f);
|
||||
// Unspecified values should use WebVTT defaults
|
||||
assertThat(firstCue.line).isEqualTo(Cue.DIMEN_UNSET);
|
||||
assertThat(firstCue.lineType).isEqualTo(Cue.LINE_TYPE_NUMBER);
|
||||
assertThat(firstCue.verticalType).isEqualTo(Cue.TYPE_UNSET);
|
||||
|
||||
assertThat(subtitle.getEventTime(2)).isEqualTo(2_345_000L);
|
||||
assertThat(subtitle.getEventTime(3)).isEqualTo(3_456_000L);
|
||||
Cue secondCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(2)));
|
||||
assertThat(secondCue.text.toString()).isEqualTo("This is the second subtitle.");
|
||||
// Position is invalid so defaults to 0.5
|
||||
assertThat(secondCue.position).isEqualTo(0.5f);
|
||||
assertThat(secondCue.textAlignment).isEqualTo(Alignment.ALIGN_OPPOSITE);
|
||||
|
||||
assertThat(subtitle.getEventTime(4)).isEqualTo(4_000_000L);
|
||||
assertThat(subtitle.getEventTime(5)).isEqualTo(5_000_000L);
|
||||
Cue thirdCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(4)));
|
||||
assertThat(thirdCue.text.toString()).isEqualTo("This is the third subtitle.");
|
||||
assertThat(thirdCue.line).isEqualTo(0.45f);
|
||||
assertThat(thirdCue.lineType).isEqualTo(Cue.LINE_TYPE_FRACTION);
|
||||
assertThat(thirdCue.lineAnchor).isEqualTo(Cue.ANCHOR_TYPE_END);
|
||||
assertThat(thirdCue.textAlignment).isEqualTo(Alignment.ALIGN_CENTER);
|
||||
// Derived from `align:middle`:
|
||||
assertThat(thirdCue.positionAnchor).isEqualTo(Cue.ANCHOR_TYPE_MIDDLE);
|
||||
|
||||
assertThat(subtitle.getEventTime(6)).isEqualTo(6_000_000L);
|
||||
assertThat(subtitle.getEventTime(7)).isEqualTo(7_000_000L);
|
||||
Cue fourthCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(6)));
|
||||
assertThat(fourthCue.text.toString()).isEqualTo("This is the fourth subtitle.");
|
||||
assertThat(fourthCue.line).isEqualTo(-11f);
|
||||
assertThat(fourthCue.lineAnchor).isEqualTo(Cue.ANCHOR_TYPE_START);
|
||||
assertThat(fourthCue.textAlignment).isEqualTo(Alignment.ALIGN_CENTER);
|
||||
// Derived from `align:middle`:
|
||||
assertThat(fourthCue.position).isEqualTo(0.5f);
|
||||
assertThat(fourthCue.positionAnchor).isEqualTo(Cue.ANCHOR_TYPE_MIDDLE);
|
||||
|
||||
assertThat(subtitle.getEventTime(8)).isEqualTo(8_000_000L);
|
||||
assertThat(subtitle.getEventTime(9)).isEqualTo(9_000_000L);
|
||||
Cue fifthCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(8)));
|
||||
assertThat(fifthCue.text.toString()).isEqualTo("This is the fifth subtitle.");
|
||||
assertThat(fifthCue.textAlignment).isEqualTo(Alignment.ALIGN_OPPOSITE);
|
||||
// Derived from `align:right`:
|
||||
assertThat(fifthCue.position).isEqualTo(1.0f);
|
||||
assertThat(fifthCue.positionAnchor).isEqualTo(Cue.ANCHOR_TYPE_END);
|
||||
|
||||
assertThat(subtitle.getEventTime(10)).isEqualTo(10_000_000L);
|
||||
assertThat(subtitle.getEventTime(11)).isEqualTo(11_000_000L);
|
||||
Cue sixthCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(10)));
|
||||
assertThat(sixthCue.text.toString()).isEqualTo("This is the sixth subtitle.");
|
||||
assertThat(sixthCue.textAlignment).isEqualTo(Alignment.ALIGN_CENTER);
|
||||
// Derived from `align:center`:
|
||||
assertThat(sixthCue.position).isEqualTo(0.5f);
|
||||
assertThat(sixthCue.positionAnchor).isEqualTo(Cue.ANCHOR_TYPE_MIDDLE);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecodeWithVertical() throws Exception {
|
||||
WebvttSubtitle subtitle = getSubtitleForTestAsset(WITH_VERTICAL_FILE);
|
||||
// Test event count.
|
||||
|
||||
assertThat(subtitle.getEventTimeCount()).isEqualTo(6);
|
||||
// Test cues.
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 0,
|
||||
/* startTimeUs= */ 0,
|
||||
/* endTimeUs= */ 1234000,
|
||||
"Vertical right-to-left (e.g. Japanese)",
|
||||
Alignment.ALIGN_CENTER,
|
||||
/* line= */ Cue.DIMEN_UNSET,
|
||||
/* lineType= */ Cue.LINE_TYPE_NUMBER,
|
||||
/* lineAnchor= */ Cue.ANCHOR_TYPE_START,
|
||||
/* position= */ 0.5f,
|
||||
/* positionAnchor= */ Cue.ANCHOR_TYPE_MIDDLE,
|
||||
/* size= */ 1.0f,
|
||||
Cue.VERTICAL_TYPE_RL);
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 2,
|
||||
/* startTimeUs= */ 2345000,
|
||||
/* endTimeUs= */ 3456000,
|
||||
"Vertical left-to-right (e.g. Mongolian)",
|
||||
Alignment.ALIGN_CENTER,
|
||||
/* line= */ Cue.DIMEN_UNSET,
|
||||
/* lineType= */ Cue.LINE_TYPE_NUMBER,
|
||||
/* lineAnchor= */ Cue.ANCHOR_TYPE_START,
|
||||
/* position= */ 0.5f,
|
||||
/* positionAnchor= */ Cue.ANCHOR_TYPE_MIDDLE,
|
||||
/* size= */ 1.0f,
|
||||
Cue.VERTICAL_TYPE_LR);
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 4,
|
||||
/* startTimeUs= */ 4000000,
|
||||
/* endTimeUs= */ 5000000,
|
||||
"No vertical setting (i.e. horizontal)",
|
||||
Alignment.ALIGN_CENTER,
|
||||
/* line= */ Cue.DIMEN_UNSET,
|
||||
/* lineType= */ Cue.LINE_TYPE_NUMBER,
|
||||
/* lineAnchor= */ Cue.ANCHOR_TYPE_START,
|
||||
/* position= */ 0.5f,
|
||||
/* positionAnchor= */ Cue.ANCHOR_TYPE_MIDDLE,
|
||||
/* size= */ 1.0f,
|
||||
/* verticalType= */ Cue.TYPE_UNSET);
|
||||
|
||||
assertThat(subtitle.getEventTime(0)).isEqualTo(0L);
|
||||
assertThat(subtitle.getEventTime(1)).isEqualTo(1_234_000L);
|
||||
Cue firstCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(0)));
|
||||
assertThat(firstCue.text.toString()).isEqualTo("Vertical right-to-left (e.g. Japanese)");
|
||||
assertThat(firstCue.verticalType).isEqualTo(Cue.VERTICAL_TYPE_RL);
|
||||
|
||||
assertThat(subtitle.getEventTime(2)).isEqualTo(2_345_000L);
|
||||
assertThat(subtitle.getEventTime(3)).isEqualTo(3_456_000L);
|
||||
Cue secondCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(2)));
|
||||
assertThat(secondCue.text.toString()).isEqualTo("Vertical left-to-right (e.g. Mongolian)");
|
||||
assertThat(secondCue.verticalType).isEqualTo(Cue.VERTICAL_TYPE_LR);
|
||||
|
||||
assertThat(subtitle.getEventTime(4)).isEqualTo(4_000_000L);
|
||||
assertThat(subtitle.getEventTime(5)).isEqualTo(5_000_000L);
|
||||
Cue thirdCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(4)));
|
||||
assertThat(thirdCue.text.toString()).isEqualTo("No vertical setting (i.e. horizontal)");
|
||||
assertThat(thirdCue.verticalType).isEqualTo(Cue.TYPE_UNSET);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testDecodeWithBadCueHeader() throws Exception {
|
||||
WebvttSubtitle subtitle = getSubtitleForTestAsset(WITH_BAD_CUE_HEADER_FILE);
|
||||
|
||||
// Test event count.
|
||||
assertThat(subtitle.getEventTimeCount()).isEqualTo(4);
|
||||
|
||||
// Test cues.
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 0,
|
||||
/* startTimeUs= */ 0,
|
||||
/* endTimeUs= */ 1234000,
|
||||
"This is the first subtitle.");
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 2,
|
||||
/* startTimeUs= */ 4000000,
|
||||
/* endTimeUs= */ 5000000,
|
||||
"This is the third subtitle.");
|
||||
assertThat(subtitle.getEventTime(0)).isEqualTo(0L);
|
||||
assertThat(subtitle.getEventTime(1)).isEqualTo(1_234_000L);
|
||||
Cue firstCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(0)));
|
||||
assertThat(firstCue.text.toString()).isEqualTo("This is the first subtitle.");
|
||||
|
||||
assertThat(subtitle.getEventTime(2)).isEqualTo(4_000_000L);
|
||||
assertThat(subtitle.getEventTime(3)).isEqualTo(5_000_000L);
|
||||
Cue secondCue = Iterables.getOnlyElement(subtitle.getCues(subtitle.getEventTime(2)));
|
||||
assertThat(secondCue.text.toString()).isEqualTo("This is the third subtitle.");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testWebvttWithCssStyle() throws Exception {
|
||||
WebvttSubtitle subtitle = getSubtitleForTestAsset(WITH_CSS_STYLES);
|
||||
|
||||
// Test event count.
|
||||
assertThat(subtitle.getEventTimeCount()).isEqualTo(8);
|
||||
|
||||
// Test cues.
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 0,
|
||||
/* startTimeUs= */ 0,
|
||||
/* endTimeUs= */ 1234000,
|
||||
"This is the first subtitle.");
|
||||
assertCue(
|
||||
subtitle,
|
||||
/* eventTimeIndex= */ 2,
|
||||
/* startTimeUs= */ 2345000,
|
||||
/* endTimeUs= */ 3456000,
|
||||
"This is the second subtitle.");
|
||||
|
||||
Spanned s1 = getUniqueSpanTextAt(subtitle, /* timeUs= */ 0);
|
||||
Spanned s2 = getUniqueSpanTextAt(subtitle, /* timeUs= */ 2345000);
|
||||
Spanned s3 = getUniqueSpanTextAt(subtitle, /* timeUs= */ 20000000);
|
||||
Spanned s4 = getUniqueSpanTextAt(subtitle, /* timeUs= */ 25000000);
|
||||
assertThat(s1)
|
||||
.hasForegroundColorSpanBetween(0, s1.length())
|
||||
Spanned firstCueText = getUniqueSpanTextAt(subtitle, 0);
|
||||
assertThat(firstCueText.toString()).isEqualTo("This is the first subtitle.");
|
||||
assertThat(firstCueText)
|
||||
.hasForegroundColorSpanBetween(0, firstCueText.length())
|
||||
.withColor(ColorParser.parseCssColor("papayawhip"));
|
||||
assertThat(s1)
|
||||
.hasBackgroundColorSpanBetween(0, s1.length())
|
||||
assertThat(firstCueText)
|
||||
.hasBackgroundColorSpanBetween(0, firstCueText.length())
|
||||
.withColor(ColorParser.parseCssColor("green"));
|
||||
assertThat(s2)
|
||||
.hasForegroundColorSpanBetween(0, s2.length())
|
||||
|
||||
Spanned secondCueText = getUniqueSpanTextAt(subtitle, 2_345_000);
|
||||
assertThat(secondCueText.toString()).isEqualTo("This is the second subtitle.");
|
||||
assertThat(secondCueText)
|
||||
.hasForegroundColorSpanBetween(0, secondCueText.length())
|
||||
.withColor(ColorParser.parseCssColor("peachpuff"));
|
||||
|
||||
assertThat(s3).hasUnderlineSpanBetween(10, s3.length());
|
||||
assertThat(s4)
|
||||
.hasBackgroundColorSpanBetween(0, 16)
|
||||
Spanned thirdCueText = getUniqueSpanTextAt(subtitle, 20_000_000);
|
||||
assertThat(thirdCueText.toString()).isEqualTo("This is a reference by element");
|
||||
assertThat(thirdCueText).hasUnderlineSpanBetween("This is a ".length(), thirdCueText.length());
|
||||
|
||||
Spanned fourthCueText = getUniqueSpanTextAt(subtitle, 25_000_000);
|
||||
assertThat(fourthCueText.toString()).isEqualTo("You are an idiot\nYou don't have the guts");
|
||||
assertThat(fourthCueText)
|
||||
.hasBackgroundColorSpanBetween(0, "You are an idiot".length())
|
||||
.withColor(ColorParser.parseCssColor("lime"));
|
||||
assertThat(s4).hasBoldSpanBetween(/* startIndex= */ 17, /* endIndex= */ s4.length());
|
||||
assertThat(fourthCueText)
|
||||
.hasBoldSpanBetween("You are an idiot\n".length(), fourthCueText.length());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
@ -486,61 +389,4 @@ public class WebvttDecoderTest {
|
|||
private Spanned getUniqueSpanTextAt(WebvttSubtitle sub, long timeUs) {
|
||||
return (Spanned) sub.getCues(timeUs).get(0).text;
|
||||
}
|
||||
|
||||
private void assertCue(
|
||||
WebvttSubtitle subtitle, int eventTimeIndex, long startTimeUs, long endTimeUs, String text) {
|
||||
assertCue(
|
||||
subtitle,
|
||||
eventTimeIndex,
|
||||
startTimeUs,
|
||||
endTimeUs,
|
||||
text,
|
||||
/* textAlignment= */ Alignment.ALIGN_CENTER,
|
||||
/* line= */ Cue.DIMEN_UNSET,
|
||||
/* lineType= */ Cue.LINE_TYPE_NUMBER,
|
||||
/* lineAnchor= */ Cue.ANCHOR_TYPE_START,
|
||||
/* position= */ 0.5f,
|
||||
/* positionAnchor= */ Cue.ANCHOR_TYPE_MIDDLE,
|
||||
/* size= */ 1.0f,
|
||||
/* verticalType= */ Cue.TYPE_UNSET);
|
||||
}
|
||||
|
||||
private void assertCue(
|
||||
WebvttSubtitle subtitle,
|
||||
int eventTimeIndex,
|
||||
long startTimeUs,
|
||||
long endTimeUs,
|
||||
String text,
|
||||
@Nullable Alignment textAlignment,
|
||||
float line,
|
||||
@Cue.LineType int lineType,
|
||||
@Cue.AnchorType int lineAnchor,
|
||||
float position,
|
||||
@Cue.AnchorType int positionAnchor,
|
||||
float size,
|
||||
@Cue.VerticalType int verticalType) {
|
||||
expect
|
||||
.withMessage("startTimeUs")
|
||||
.that(subtitle.getEventTime(eventTimeIndex))
|
||||
.isEqualTo(startTimeUs);
|
||||
expect
|
||||
.withMessage("endTimeUs")
|
||||
.that(subtitle.getEventTime(eventTimeIndex + 1))
|
||||
.isEqualTo(endTimeUs);
|
||||
List<Cue> cues = subtitle.getCues(subtitle.getEventTime(eventTimeIndex));
|
||||
assertThat(cues).hasSize(1);
|
||||
// Assert cue properties.
|
||||
Cue cue = cues.get(0);
|
||||
expect.withMessage("cue.text").that(cue.text.toString()).isEqualTo(text);
|
||||
expect.withMessage("cue.textAlignment").that(cue.textAlignment).isEqualTo(textAlignment);
|
||||
expect.withMessage("cue.line").that(cue.line).isEqualTo(line);
|
||||
expect.withMessage("cue.lineType").that(cue.lineType).isEqualTo(lineType);
|
||||
expect.withMessage("cue.lineAnchor").that(cue.lineAnchor).isEqualTo(lineAnchor);
|
||||
expect.withMessage("cue.position").that(cue.position).isEqualTo(position);
|
||||
expect.withMessage("cue.positionAnchor").that(cue.positionAnchor).isEqualTo(positionAnchor);
|
||||
expect.withMessage("cue.size").that(cue.size).isEqualTo(size);
|
||||
expect.withMessage("cue.verticalType").that(cue.verticalType).isEqualTo(verticalType);
|
||||
|
||||
assertThat(expect.hasFailures()).isFalse();
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue