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.Cue;
import com.google.android.exoplayer2.text.Subtitle; import com.google.android.exoplayer2.text.Subtitle;
import com.google.android.exoplayer2.text.SubtitleDecoderException; import com.google.android.exoplayer2.text.SubtitleDecoderException;
import com.google.common.truth.Expect;
import java.util.List; import java.util.List;
import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
@ -81,6 +83,8 @@ public final class Mp4WebvttDecoderTest {
0x76, 0x74, 0x74 0x76, 0x74, 0x74
}; };
@Rule public final Expect expect = Expect.create();
// Positive tests. // Positive tests.
@Test @Test
@ -132,28 +136,33 @@ public final class Mp4WebvttDecoderTest {
* @param subtitle The {@link Subtitle} to check. * @param subtitle The {@link Subtitle} to check.
* @param expectedCues The expected {@link Cue}s. * @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.getEventTimeCount()).isEqualTo(1);
assertThat(subtitle.getEventTime(0)).isEqualTo(0); assertThat(subtitle.getEventTime(0)).isEqualTo(0);
List<Cue> subtitleCues = subtitle.getCues(0); List<Cue> subtitleCues = subtitle.getCues(0);
assertThat(subtitleCues).hasSize(expectedCues.length); assertThat(subtitleCues).hasSize(expectedCues.length);
for (int i = 0; i < subtitleCues.size(); i++) { 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. */
* Asserts that two cues are equal. private void assertCuesEqual(Cue expected, Cue actual) {
*/ expect.withMessage("Cue.line").that(actual.line).isEqualTo(expected.line);
private static void assertCueEquals(Cue expected, Cue actual) { expect.withMessage("Cue.lineAnchor").that(actual.lineAnchor).isEqualTo(expected.lineAnchor);
assertThat(actual.line).isEqualTo(expected.line); expect.withMessage("Cue.lineType").that(actual.lineType).isEqualTo(expected.lineType);
assertThat(actual.lineAnchor).isEqualTo(expected.lineAnchor); expect.withMessage("Cue.position").that(actual.position).isEqualTo(expected.position);
assertThat(actual.lineType).isEqualTo(expected.lineType); expect
assertThat(actual.position).isEqualTo(expected.position); .withMessage("Cue.positionAnchor")
assertThat(actual.positionAnchor).isEqualTo(expected.positionAnchor); .that(actual.positionAnchor)
assertThat(actual.size).isEqualTo(expected.size); .isEqualTo(expected.positionAnchor);
assertThat(actual.text.toString()).isEqualTo(expected.text.toString()); expect.withMessage("Cue.size").that(actual.size).isEqualTo(expected.size);
assertThat(actual.textAlignment).isEqualTo(expected.textAlignment); 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; package com.google.android.exoplayer2.text.webvtt;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertWithMessage;
import static org.junit.Assert.fail; import static org.junit.Assert.fail;
import android.graphics.Typeface; 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.testutil.TestUtil;
import com.google.android.exoplayer2.text.Cue; import com.google.android.exoplayer2.text.Cue;
import com.google.android.exoplayer2.text.SubtitleDecoderException; import com.google.android.exoplayer2.text.SubtitleDecoderException;
import com.google.common.truth.Expect;
import java.io.IOException; import java.io.IOException;
import java.util.List; import java.util.List;
import org.junit.Rule;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; 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 WITH_BOM = "webvtt/with_bom";
private static final String EMPTY_FILE = "webvtt/empty"; private static final String EMPTY_FILE = "webvtt/empty";
@Rule public final Expect expect = Expect.create();
@Test @Test
public void testDecodeEmpty() throws IOException { public void testDecodeEmpty() throws IOException {
WebvttDecoder decoder = new WebvttDecoder(); WebvttDecoder decoder = new WebvttDecoder();
@ -404,7 +407,7 @@ public class WebvttDecoderTest {
return (Spanned) sub.getCues(timeUs).get(0).text; 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) { WebvttSubtitle subtitle, int eventTimeIndex, long startTimeUs, long endTimeUs, String text) {
assertCue( assertCue(
subtitle, subtitle,
@ -421,7 +424,7 @@ public class WebvttDecoderTest {
/* size= */ 1.0f); /* size= */ 1.0f);
} }
private static void assertCue( private void assertCue(
WebvttSubtitle subtitle, WebvttSubtitle subtitle,
int eventTimeIndex, int eventTimeIndex,
long startTimeUs, long startTimeUs,
@ -434,23 +437,27 @@ public class WebvttDecoderTest {
float position, float position,
@Cue.AnchorType int positionAnchor, @Cue.AnchorType int positionAnchor,
float size) { float size) {
assertWithMessage("startTimeUs") expect
.withMessage("startTimeUs")
.that(subtitle.getEventTime(eventTimeIndex)) .that(subtitle.getEventTime(eventTimeIndex))
.isEqualTo(startTimeUs); .isEqualTo(startTimeUs);
assertWithMessage("endTimeUs") expect
.withMessage("endTimeUs")
.that(subtitle.getEventTime(eventTimeIndex + 1)) .that(subtitle.getEventTime(eventTimeIndex + 1))
.isEqualTo(endTimeUs); .isEqualTo(endTimeUs);
List<Cue> cues = subtitle.getCues(subtitle.getEventTime(eventTimeIndex)); List<Cue> cues = subtitle.getCues(subtitle.getEventTime(eventTimeIndex));
assertThat(cues).hasSize(1); assertThat(cues).hasSize(1);
// Assert cue properties. // Assert cue properties.
Cue cue = cues.get(0); Cue cue = cues.get(0);
assertWithMessage("cue.text").that(cue.text.toString()).isEqualTo(text); expect.withMessage("cue.text").that(cue.text.toString()).isEqualTo(text);
assertWithMessage("cue.textAlignment").that(cue.textAlignment).isEqualTo(textAlignment); expect.withMessage("cue.textAlignment").that(cue.textAlignment).isEqualTo(textAlignment);
assertWithMessage("cue.line").that(cue.line).isEqualTo(line); expect.withMessage("cue.line").that(cue.line).isEqualTo(line);
assertWithMessage("cue.lineType").that(cue.lineType).isEqualTo(lineType); expect.withMessage("cue.lineType").that(cue.lineType).isEqualTo(lineType);
assertWithMessage("cue.lineAnchor").that(cue.lineAnchor).isEqualTo(lineAnchor); expect.withMessage("cue.lineAnchor").that(cue.lineAnchor).isEqualTo(lineAnchor);
assertWithMessage("cue.position").that(cue.position).isEqualTo(position); expect.withMessage("cue.position").that(cue.position).isEqualTo(position);
assertWithMessage("cue.positionAnchor").that(cue.positionAnchor).isEqualTo(positionAnchor); expect.withMessage("cue.positionAnchor").that(cue.positionAnchor).isEqualTo(positionAnchor);
assertWithMessage("cue.size").that(cue.size).isEqualTo(size); expect.withMessage("cue.size").that(cue.size).isEqualTo(size);
assertThat(expect.hasFailures()).isFalse();
} }
} }