From d29d45261713d3622995446e6f1249fb17376b8a Mon Sep 17 00:00:00 2001 From: ibaker Date: Wed, 30 Oct 2019 16:41:21 +0000 Subject: [PATCH] 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 --- .../text/webvtt/Mp4WebvttDecoderTest.java | 39 ++++++++++++------- .../text/webvtt/WebvttDecoderTest.java | 33 +++++++++------- 2 files changed, 44 insertions(+), 28 deletions(-) diff --git a/library/core/src/test/java/com/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoderTest.java b/library/core/src/test/java/com/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoderTest.java index 341c3eb41b..015ee7e23a 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoderTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/text/webvtt/Mp4WebvttDecoderTest.java @@ -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 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(); + } } diff --git a/library/core/src/test/java/com/google/android/exoplayer2/text/webvtt/WebvttDecoderTest.java b/library/core/src/test/java/com/google/android/exoplayer2/text/webvtt/WebvttDecoderTest.java index a879a38b8d..06ac4d825c 100644 --- a/library/core/src/test/java/com/google/android/exoplayer2/text/webvtt/WebvttDecoderTest.java +++ b/library/core/src/test/java/com/google/android/exoplayer2/text/webvtt/WebvttDecoderTest.java @@ -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 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(); } }