Commit d29d4526 by ibaker Committed by Oliver Woodman

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
parent b3f94e37
...@@ -22,7 +22,9 @@ import androidx.test.ext.junit.runners.AndroidJUnit4; ...@@ -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 { ...@@ -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 { ...@@ -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();
} }
} }
...@@ -16,7 +16,6 @@ ...@@ -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; ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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 { ...@@ -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();
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment