Switch (Mp4)WebvttDecoderTest to use Truth's Expect

This means multiple failures are all logged, instead of the test
stopping when the first assertion fails. Makes tests like this with
lots of independent assertions much easier to work with.

I limited the expect to a single assertCues() call, otherwise
the error message gets very long and is hard to read, but I
still think this is an improvement.

PiperOrigin-RevId: 277523300
This commit is contained in:
ibaker 2019-10-30 16:41:21 +00:00 committed by Oliver Woodman
parent b3f94e3768
commit d29d452617
2 changed files with 44 additions and 28 deletions

View file

@ -22,7 +22,9 @@ import androidx.test.ext.junit.runners.AndroidJUnit4;
import com.google.android.exoplayer2.text.Cue;
import com.google.android.exoplayer2.text.Subtitle;
import com.google.android.exoplayer2.text.SubtitleDecoderException;
import com.google.common.truth.Expect;
import java.util.List;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@ -81,6 +83,8 @@ public final class Mp4WebvttDecoderTest {
0x76, 0x74, 0x74
};
@Rule public final Expect expect = Expect.create();
// Positive tests.
@Test
@ -132,28 +136,33 @@ public final class Mp4WebvttDecoderTest {
* @param subtitle The {@link Subtitle} to check.
* @param expectedCues The expected {@link Cue}s.
*/
private static void assertMp4WebvttSubtitleEquals(Subtitle subtitle, Cue... expectedCues) {
private void assertMp4WebvttSubtitleEquals(Subtitle subtitle, Cue... expectedCues) {
assertThat(subtitle.getEventTimeCount()).isEqualTo(1);
assertThat(subtitle.getEventTime(0)).isEqualTo(0);
List<Cue> subtitleCues = subtitle.getCues(0);
assertThat(subtitleCues).hasSize(expectedCues.length);
for (int i = 0; i < subtitleCues.size(); i++) {
assertCueEquals(expectedCues[i], subtitleCues.get(i));
assertCuesEqual(expectedCues[i], subtitleCues.get(i));
}
}
/**
* Asserts that two cues are equal.
*/
private static void assertCueEquals(Cue expected, Cue actual) {
assertThat(actual.line).isEqualTo(expected.line);
assertThat(actual.lineAnchor).isEqualTo(expected.lineAnchor);
assertThat(actual.lineType).isEqualTo(expected.lineType);
assertThat(actual.position).isEqualTo(expected.position);
assertThat(actual.positionAnchor).isEqualTo(expected.positionAnchor);
assertThat(actual.size).isEqualTo(expected.size);
assertThat(actual.text.toString()).isEqualTo(expected.text.toString());
assertThat(actual.textAlignment).isEqualTo(expected.textAlignment);
}
/** Asserts that two cues are equal. */
private void assertCuesEqual(Cue expected, Cue actual) {
expect.withMessage("Cue.line").that(actual.line).isEqualTo(expected.line);
expect.withMessage("Cue.lineAnchor").that(actual.lineAnchor).isEqualTo(expected.lineAnchor);
expect.withMessage("Cue.lineType").that(actual.lineType).isEqualTo(expected.lineType);
expect.withMessage("Cue.position").that(actual.position).isEqualTo(expected.position);
expect
.withMessage("Cue.positionAnchor")
.that(actual.positionAnchor)
.isEqualTo(expected.positionAnchor);
expect.withMessage("Cue.size").that(actual.size).isEqualTo(expected.size);
expect.withMessage("Cue.text").that(actual.text.toString()).isEqualTo(expected.text.toString());
expect
.withMessage("Cue.textAlignment")
.that(actual.textAlignment)
.isEqualTo(expected.textAlignment);
assertThat(expect.hasFailures()).isFalse();
}
}

View file

@ -16,7 +16,6 @@
package com.google.android.exoplayer2.text.webvtt;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
import static org.junit.Assert.fail;
import android.graphics.Typeface;
@ -33,8 +32,10 @@ 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.common.truth.Expect;
import java.io.IOException;
import java.util.List;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
@ -54,6 +55,8 @@ public class WebvttDecoderTest {
private static final String WITH_BOM = "webvtt/with_bom";
private static final String EMPTY_FILE = "webvtt/empty";
@Rule public final Expect expect = Expect.create();
@Test
public void testDecodeEmpty() throws IOException {
WebvttDecoder decoder = new WebvttDecoder();
@ -404,7 +407,7 @@ public class WebvttDecoderTest {
return (Spanned) sub.getCues(timeUs).get(0).text;
}
private static void assertCue(
private void assertCue(
WebvttSubtitle subtitle, int eventTimeIndex, long startTimeUs, long endTimeUs, String text) {
assertCue(
subtitle,
@ -421,7 +424,7 @@ public class WebvttDecoderTest {
/* size= */ 1.0f);
}
private static void assertCue(
private void assertCue(
WebvttSubtitle subtitle,
int eventTimeIndex,
long startTimeUs,
@ -434,23 +437,27 @@ public class WebvttDecoderTest {
float position,
@Cue.AnchorType int positionAnchor,
float size) {
assertWithMessage("startTimeUs")
expect
.withMessage("startTimeUs")
.that(subtitle.getEventTime(eventTimeIndex))
.isEqualTo(startTimeUs);
assertWithMessage("endTimeUs")
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);
assertWithMessage("cue.text").that(cue.text.toString()).isEqualTo(text);
assertWithMessage("cue.textAlignment").that(cue.textAlignment).isEqualTo(textAlignment);
assertWithMessage("cue.line").that(cue.line).isEqualTo(line);
assertWithMessage("cue.lineType").that(cue.lineType).isEqualTo(lineType);
assertWithMessage("cue.lineAnchor").that(cue.lineAnchor).isEqualTo(lineAnchor);
assertWithMessage("cue.position").that(cue.position).isEqualTo(position);
assertWithMessage("cue.positionAnchor").that(cue.positionAnchor).isEqualTo(positionAnchor);
assertWithMessage("cue.size").that(cue.size).isEqualTo(size);
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);
assertThat(expect.hasFailures()).isFalse();
}
}