From 63062a9c107575920c2e31f509e4880b15165f87 Mon Sep 17 00:00:00 2001 From: ibaker Date: Mon, 27 Nov 2023 07:13:56 -0800 Subject: [PATCH] Make `CueSerializationTest` more realistic Serializing bitmap cues is currently broken, but this test is incorrectly passing. This change makes two changes to introduce the same failure (both changes are necessary, each one alone still passes): 1. Move from Robolectric to an instrumentation test. 2. Trigger the `Bitmap` to be serialized using a file descriptor, either by calling `Bitmap.asShared` in the test when constructing the `Cue`, or constructing the `Bitmap` from a 'real' image byte array instead a 1x1 token image. Issue: androidx/media#836 PiperOrigin-RevId: 585643486 --- libraries/extractor/build.gradle | 8 ++++- .../src/androidTest/AndroidManifest.xml | 33 +++++++++++++++++++ .../extractor/text/CueSerializationTest.java | 20 +++++++++-- 3 files changed, 58 insertions(+), 3 deletions(-) create mode 100644 libraries/extractor/src/androidTest/AndroidManifest.xml rename libraries/extractor/src/{test => androidTest}/java/androidx/media3/extractor/text/CueSerializationTest.java (87%) diff --git a/libraries/extractor/build.gradle b/libraries/extractor/build.gradle index 080f8f9719..e4dad3c42a 100644 --- a/libraries/extractor/build.gradle +++ b/libraries/extractor/build.gradle @@ -22,7 +22,10 @@ android { } } - sourceSets.test.assets.srcDir '../test_data/src/test/assets/' + sourceSets { + androidTest.assets.srcDir '../test_data/src/test/assets' + test.assets.srcDir '../test_data/src/test/assets/' + } publishing { singleVariant('release') { @@ -44,6 +47,9 @@ dependencies { testImplementation project(modulePrefix + 'test-utils') testImplementation project(modulePrefix + 'test-data') testImplementation 'org.robolectric:robolectric:' + robolectricVersion + androidTestImplementation 'androidx.test:runner:' + androidxTestRunnerVersion + androidTestImplementation project(modulePrefix + 'test-utils') + androidTestImplementation 'com.linkedin.dexmaker:dexmaker:' + dexmakerVersion } ext { diff --git a/libraries/extractor/src/androidTest/AndroidManifest.xml b/libraries/extractor/src/androidTest/AndroidManifest.xml new file mode 100644 index 0000000000..6339266515 --- /dev/null +++ b/libraries/extractor/src/androidTest/AndroidManifest.xml @@ -0,0 +1,33 @@ + + + + + + + + + + + + diff --git a/libraries/extractor/src/test/java/androidx/media3/extractor/text/CueSerializationTest.java b/libraries/extractor/src/androidTest/java/androidx/media3/extractor/text/CueSerializationTest.java similarity index 87% rename from libraries/extractor/src/test/java/androidx/media3/extractor/text/CueSerializationTest.java rename to libraries/extractor/src/androidTest/java/androidx/media3/extractor/text/CueSerializationTest.java index 75b1ef155c..9e09993597 100644 --- a/libraries/extractor/src/test/java/androidx/media3/extractor/text/CueSerializationTest.java +++ b/libraries/extractor/src/androidTest/java/androidx/media3/extractor/text/CueSerializationTest.java @@ -18,7 +18,9 @@ package androidx.media3.extractor.text; import static com.google.common.truth.Truth.assertThat; import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.graphics.Color; +import android.os.Bundle; import android.text.Layout; import android.text.Spannable; import android.text.SpannableString; @@ -28,18 +30,26 @@ import android.text.style.StrikethroughSpan; import androidx.media3.common.text.Cue; import androidx.media3.common.text.RubySpan; import androidx.media3.common.text.TextAnnotation; +import androidx.media3.test.utils.TestUtil; import androidx.media3.test.utils.truth.SpannedSubject; +import androidx.test.core.app.ApplicationProvider; import androidx.test.ext.junit.runners.AndroidJUnit4; import com.google.common.collect.ImmutableList; +import org.junit.Ignore; import org.junit.Test; import org.junit.runner.RunWith; /** * Test of {@link Cue} serialization and deserialization using {@link CueEncoder} and {@link * CueDecoder}. + * + *

This needs to be an instrumentation test because Robolectric's handling of serializing a + * {@link Bundle} containing a {@link Bitmap} is not realistic, leading to real failures not being + * caught by the test (e.g. https://github.com/androidx/media/issues/836). */ @RunWith(AndroidJUnit4.class) public class CueSerializationTest { + @Test public void serializingCueWithoutSpans() { CueEncoder encoder = new CueEncoder(); @@ -86,10 +96,16 @@ public class CueSerializationTest { } @Test - public void serializingBitmapCue() { + @Ignore("Currently broken: https://github.com/androidx/media/issues/836") + public void serializingBitmapCue() throws Exception { CueEncoder encoder = new CueEncoder(); CueDecoder decoder = new CueDecoder(); - Bitmap bitmap = Bitmap.createBitmap(1, 1, Bitmap.Config.ARGB_8888); + + byte[] imageData = + TestUtil.getByteArray( + ApplicationProvider.getApplicationContext(), + "media/png/non-motion-photo-shortened.png"); + Bitmap bitmap = BitmapFactory.decodeByteArray(imageData, 0, imageData.length); Cue bitmapCue = new Cue.Builder().setBitmap(bitmap).build(); // encoding and decoding