mirror of
https://github.com/androidx/media.git
synced 2025-04-30 06:46:50 +08:00
Setup the initial instrumentation tests for transformer.
Due to sharding, each test should be in a separate class. PiperOrigin-RevId: 409142436
This commit is contained in:
parent
1a60b6bea6
commit
52cd543689
@ -12,15 +12,26 @@
|
|||||||
// See the License for the specific language governing permissions and
|
// See the License for the specific language governing permissions and
|
||||||
// limitations under the License.
|
// limitations under the License.
|
||||||
apply from: "$gradle.ext.androidxMediaSettingsDir/common_library_config.gradle"
|
apply from: "$gradle.ext.androidxMediaSettingsDir/common_library_config.gradle"
|
||||||
|
|
||||||
android {
|
android {
|
||||||
|
|
||||||
|
defaultConfig {
|
||||||
|
// The following argument makes the Android Test Orchestrator run its
|
||||||
|
// "pm clear" command after each test invocation. This command ensures
|
||||||
|
// that the app's state is completely cleared between tests.
|
||||||
|
testInstrumentationRunnerArguments clearPackageData: 'true'
|
||||||
|
multiDexEnabled true
|
||||||
|
}
|
||||||
|
|
||||||
buildTypes {
|
buildTypes {
|
||||||
debug {
|
debug {
|
||||||
testCoverageEnabled = true
|
testCoverageEnabled = true
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
sourceSets.test.assets.srcDir '../test_data/src/test/assets/'
|
sourceSets {
|
||||||
|
androidTest.assets.srcDir '../test_data/src/test/assets/' //copybara:media3-only
|
||||||
|
test.assets.srcDir '../test_data/src/test/assets/'
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
@ -33,6 +44,10 @@ dependencies {
|
|||||||
testImplementation project(modulePrefix + 'test-utils')
|
testImplementation project(modulePrefix + 'test-utils')
|
||||||
testImplementation project(modulePrefix + 'test-data')
|
testImplementation project(modulePrefix + 'test-data')
|
||||||
testImplementation 'org.robolectric:robolectric:' + robolectricVersion
|
testImplementation 'org.robolectric:robolectric:' + robolectricVersion
|
||||||
|
testImplementation 'com.google.truth:truth:' + truthVersion
|
||||||
|
androidTestImplementation 'junit:junit:' + junitVersion
|
||||||
|
androidTestImplementation 'androidx.test:runner:' + androidxTestRunnerVersion
|
||||||
|
androidTestImplementation project(modulePrefix + 'test-utils')
|
||||||
}
|
}
|
||||||
|
|
||||||
ext {
|
ext {
|
||||||
|
37
libraries/transformer/src/androidTest/AndroidManifest.xml
Normal file
37
libraries/transformer/src/androidTest/AndroidManifest.xml
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!-- Copyright (C) 2016 The Android Open Source Project
|
||||||
|
|
||||||
|
Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
you may not use this file except in compliance with the License.
|
||||||
|
You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:tools="http://schemas.android.com/tools"
|
||||||
|
package="androidx.media3.transformer">
|
||||||
|
|
||||||
|
<uses-permission android:name="android.permission.INTERNET"/>
|
||||||
|
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
|
||||||
|
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
|
||||||
|
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
|
||||||
|
<uses-permission android:name="android.permission.FOREGROUND_SERVICE"/>
|
||||||
|
<uses-sdk/>
|
||||||
|
|
||||||
|
<application
|
||||||
|
android:allowBackup="false"
|
||||||
|
tools:ignore="MissingApplicationIcon,HardcodedDebugMode"
|
||||||
|
android:usesCleartextTraffic="true"/>
|
||||||
|
|
||||||
|
<instrumentation
|
||||||
|
android:targetPackage="androidx.media3.transformer"
|
||||||
|
android:name="androidx.test.runner.AndroidJUnitRunner"/>
|
||||||
|
|
||||||
|
</manifest>
|
@ -0,0 +1,91 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2021 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import android.net.Uri;
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
import androidx.media3.common.MediaItem;
|
||||||
|
import androidx.media3.common.util.Assertions;
|
||||||
|
import androidx.test.platform.app.InstrumentationRegistry;
|
||||||
|
import java.io.File;
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.util.concurrent.CountDownLatch;
|
||||||
|
import java.util.concurrent.atomic.AtomicReference;
|
||||||
|
import org.checkerframework.checker.nullness.compatqual.NullableType;
|
||||||
|
|
||||||
|
/** Utility methods for instrumentation tests. */
|
||||||
|
/* package */ final class AndroidTestUtil {
|
||||||
|
public static final String MP4_ASSET_URI = "asset:///media/mp4/sample.mp4";
|
||||||
|
public static final String SEF_ASSET_URI = "asset:///media/mp4/sample_sef_slow_motion.mp4";
|
||||||
|
|
||||||
|
/** Transforms the {@code uriString} with the {@link Transformer}. */
|
||||||
|
public static void runTransformer(Context context, Transformer transformer, String uriString)
|
||||||
|
throws Exception {
|
||||||
|
AtomicReference<@NullableType Exception> exceptionReference = new AtomicReference<>();
|
||||||
|
CountDownLatch countDownLatch = new CountDownLatch(1);
|
||||||
|
|
||||||
|
Transformer testTransformer =
|
||||||
|
transformer
|
||||||
|
.buildUpon()
|
||||||
|
.setListener(
|
||||||
|
new Transformer.Listener() {
|
||||||
|
@Override
|
||||||
|
public void onTransformationCompleted(MediaItem inputMediaItem) {
|
||||||
|
countDownLatch.countDown();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onTransformationError(MediaItem inputMediaItem, Exception exception) {
|
||||||
|
exceptionReference.set(exception);
|
||||||
|
countDownLatch.countDown();
|
||||||
|
}
|
||||||
|
})
|
||||||
|
.build();
|
||||||
|
|
||||||
|
Uri uri = Uri.parse(uriString);
|
||||||
|
File externalCacheFile = createExternalCacheFile(uri, context);
|
||||||
|
try {
|
||||||
|
InstrumentationRegistry.getInstrumentation()
|
||||||
|
.runOnMainSync(
|
||||||
|
() -> {
|
||||||
|
try {
|
||||||
|
testTransformer.startTransformation(
|
||||||
|
MediaItem.fromUri(uri), externalCacheFile.getAbsolutePath());
|
||||||
|
} catch (IOException e) {
|
||||||
|
exceptionReference.set(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
countDownLatch.await();
|
||||||
|
@Nullable Exception exception = exceptionReference.get();
|
||||||
|
if (exception != null) {
|
||||||
|
throw exception;
|
||||||
|
}
|
||||||
|
} finally {
|
||||||
|
externalCacheFile.delete();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private static File createExternalCacheFile(Uri uri, Context context) throws IOException {
|
||||||
|
File file = new File(context.getExternalCacheDir(), "transformer-" + uri.hashCode());
|
||||||
|
Assertions.checkState(
|
||||||
|
!file.exists() || file.delete(), "Could not delete the previous transformer output file");
|
||||||
|
Assertions.checkState(file.createNewFile(), "Could not create the transformer output file");
|
||||||
|
return file;
|
||||||
|
}
|
||||||
|
|
||||||
|
private AndroidTestUtil() {}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2021 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI;
|
||||||
|
import static androidx.media3.transformer.AndroidTestUtil.runTransformer;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
/** {@link Transformer} instrumentation test for removing audio. */
|
||||||
|
@RunWith(AndroidJUnit4.class)
|
||||||
|
public class RemoveAudioTransformationTest {
|
||||||
|
@Test
|
||||||
|
public void removeAudioTransform() throws Exception {
|
||||||
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
|
Transformer transformer =
|
||||||
|
new Transformer.Builder().setContext(context).setRemoveAudio(true).build();
|
||||||
|
runTransformer(context, transformer, MP4_ASSET_URI);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2021 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI;
|
||||||
|
import static androidx.media3.transformer.AndroidTestUtil.runTransformer;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
/** {@link Transformer} instrumentation test for removing video. */
|
||||||
|
@RunWith(AndroidJUnit4.class)
|
||||||
|
public class RemoveVideoTransformationTest {
|
||||||
|
@Test
|
||||||
|
public void removeVideoTransform() throws Exception {
|
||||||
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
|
Transformer transformer =
|
||||||
|
new Transformer.Builder().setContext(context).setRemoveVideo(true).build();
|
||||||
|
runTransformer(context, transformer, MP4_ASSET_URI);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,37 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2021 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
|
import static androidx.media3.transformer.AndroidTestUtil.SEF_ASSET_URI;
|
||||||
|
import static androidx.media3.transformer.AndroidTestUtil.runTransformer;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
/** {@link Transformer} instrumentation test for SEF. */
|
||||||
|
@RunWith(AndroidJUnit4.class)
|
||||||
|
public class SefTransformationTest {
|
||||||
|
@Test
|
||||||
|
public void sefTransform() throws Exception {
|
||||||
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
|
Transformer transformer =
|
||||||
|
new Transformer.Builder().setContext(context).setFlattenForSlowMotion(true).build();
|
||||||
|
runTransformer(context, transformer, SEF_ASSET_URI);
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,36 @@
|
|||||||
|
/*
|
||||||
|
* Copyright 2021 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
package androidx.media3.transformer;
|
||||||
|
|
||||||
|
import static androidx.media3.transformer.AndroidTestUtil.MP4_ASSET_URI;
|
||||||
|
import static androidx.media3.transformer.AndroidTestUtil.runTransformer;
|
||||||
|
|
||||||
|
import android.content.Context;
|
||||||
|
import androidx.test.core.app.ApplicationProvider;
|
||||||
|
import androidx.test.ext.junit.runners.AndroidJUnit4;
|
||||||
|
import org.junit.Test;
|
||||||
|
import org.junit.runner.RunWith;
|
||||||
|
|
||||||
|
/** {@link Transformer} instrumentation test. */
|
||||||
|
@RunWith(AndroidJUnit4.class)
|
||||||
|
public class TransformationTest {
|
||||||
|
@Test
|
||||||
|
public void transform() throws Exception {
|
||||||
|
Context context = ApplicationProvider.getApplicationContext();
|
||||||
|
Transformer transformer = new Transformer.Builder().setContext(context).build();
|
||||||
|
runTransformer(context, transformer, MP4_ASSET_URI);
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user