diff --git a/media/tests/AudioPolicyTest/Android.bp b/media/tests/AudioPolicyTest/Android.bp
index 95d1c6ccb67cc..fcf91f0794427 100644
--- a/media/tests/AudioPolicyTest/Android.bp
+++ b/media/tests/AudioPolicyTest/Android.bp
@@ -10,15 +10,11 @@ package {
android_test {
name: "audiopolicytest",
srcs: ["**/*.java"],
- libs: [
- "android.test.runner",
- "android.test.base",
- ],
static_libs: [
- "mockito-target-minus-junit4",
+ "androidx.test.ext.junit",
"androidx.test.rules",
- "android-ex-camera2",
- "testng",
+ "guava",
+ "platform-test-annotations",
],
platform_apis: true,
certificate: "platform",
diff --git a/media/tests/AudioPolicyTest/AndroidManifest.xml b/media/tests/AudioPolicyTest/AndroidManifest.xml
index a7ab8286cdca4..f696735eb62d9 100644
--- a/media/tests/AudioPolicyTest/AndroidManifest.xml
+++ b/media/tests/AudioPolicyTest/AndroidManifest.xml
@@ -24,7 +24,7 @@
-
@@ -33,11 +33,6 @@
-
-
diff --git a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioManagerTest.java b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioManagerTest.java
index 27cf9434b34d8..94df40da16c1c 100644
--- a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioManagerTest.java
+++ b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioManagerTest.java
@@ -16,28 +16,57 @@
package com.android.audiopolicytest;
+import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
+
+import static com.android.audiopolicytest.AudioVolumeTestUtil.DEFAULT_ATTRIBUTES;
+import static com.android.audiopolicytest.AudioVolumeTestUtil.incrementVolumeIndex;
+
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
-import static org.testng.Assert.assertThrows;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertTrue;
import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.AudioSystem;
import android.media.audiopolicy.AudioProductStrategy;
import android.media.audiopolicy.AudioVolumeGroup;
+import android.platform.test.annotations.Presubmit;
import android.util.Log;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
import com.google.common.primitives.Ints;
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
import java.util.List;
-public class AudioManagerTest extends AudioVolumesTestBase {
+@Presubmit
+@RunWith(AndroidJUnit4.class)
+public class AudioManagerTest {
private static final String TAG = "AudioManagerTest";
+ private AudioManager mAudioManager;
+
+ @Rule
+ public final AudioVolumesTestRule rule = new AudioVolumesTestRule();
+
+ @Before
+ public void setUp() {
+ mAudioManager = getApplicationContext().getSystemService(AudioManager.class);
+ }
+
//-----------------------------------------------------------------
// Test getAudioProductStrategies and validate strategies
//-----------------------------------------------------------------
- public void testGetAndValidateProductStrategies() throws Exception {
+ @Test
+ public void testGetAndValidateProductStrategies() {
List audioProductStrategies =
mAudioManager.getAudioProductStrategies();
assertTrue(audioProductStrategies.size() > 0);
@@ -101,8 +130,8 @@ public class AudioManagerTest extends AudioVolumesTestBase {
//-----------------------------------------------------------------
// Test getAudioVolumeGroups and validate volume groups
//-----------------------------------------------------------------
-
- public void testGetAndValidateVolumeGroups() throws Exception {
+ @Test
+ public void testGetAndValidateVolumeGroups() {
List audioVolumeGroups = mAudioManager.getAudioVolumeGroups();
assertTrue(audioVolumeGroups.size() > 0);
@@ -118,7 +147,7 @@ public class AudioManagerTest extends AudioVolumesTestBase {
// for each volume group attributes, find the matching product strategy and ensure
// it is linked the considered volume group
for (final AudioAttributes aa : avgAttributes) {
- if (aa.equals(sDefaultAttributes)) {
+ if (aa.equals(DEFAULT_ATTRIBUTES)) {
// Some volume groups may not have valid attributes, used for internal
// volume management like patch/rerouting
// so bailing out strategy retrieval from attributes
@@ -180,6 +209,7 @@ public class AudioManagerTest extends AudioVolumesTestBase {
//-----------------------------------------------------------------
// Test Volume per Attributes setter/getters
//-----------------------------------------------------------------
+ @Test
public void testSetGetVolumePerAttributesWithInvalidAttributes() throws Exception {
AudioAttributes nullAttributes = null;
@@ -197,7 +227,8 @@ public class AudioManagerTest extends AudioVolumesTestBase {
nullAttributes, 0 /*index*/, 0/*flags*/));
}
- public void testSetGetVolumePerAttributes() throws Exception {
+ @Test
+ public void testSetGetVolumePerAttributes() {
for (int usage : AudioAttributes.SDK_USAGES) {
if (usage == AudioAttributes.USAGE_UNKNOWN) {
continue;
@@ -248,12 +279,14 @@ public class AudioManagerTest extends AudioVolumesTestBase {
//-----------------------------------------------------------------
// Test register/unregister VolumeGroupCallback
//-----------------------------------------------------------------
- public void testVolumeGroupCallback() throws Exception {
+ @Test
+ public void testVolumeGroupCallback() {
List audioVolumeGroups = mAudioManager.getAudioVolumeGroups();
assertTrue(audioVolumeGroups.size() > 0);
AudioVolumeGroupCallbackHelper vgCbReceiver = new AudioVolumeGroupCallbackHelper();
- mAudioManager.registerVolumeGroupCallback(mContext.getMainExecutor(), vgCbReceiver);
+ mAudioManager.registerVolumeGroupCallback(getApplicationContext().getMainExecutor(),
+ vgCbReceiver);
final List publicStreams = Ints.asList(AudioManager.getPublicStreamTypes());
try {
@@ -273,7 +306,7 @@ public class AudioManagerTest extends AudioVolumesTestBase {
// Set the volume per attributes (if valid) and wait the callback
for (final AudioAttributes aa : avgAttributes) {
- if (aa.equals(sDefaultAttributes)) {
+ if (aa.equals(DEFAULT_ATTRIBUTES)) {
// Some volume groups may not have valid attributes, used for internal
// volume management like patch/rerouting
// so bailing out strategy retrieval from attributes
diff --git a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioPolicyTest.java b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioPolicyTestActivity.java
similarity index 91%
rename from media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioPolicyTest.java
rename to media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioPolicyTestActivity.java
index e0c7b223a2e47..e31c01aae31e8 100644
--- a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioPolicyTest.java
+++ b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioPolicyTestActivity.java
@@ -19,9 +19,9 @@ package com.android.audiopolicytest;
import android.app.Activity;
import android.os.Bundle;
-public class AudioPolicyTest extends Activity {
+public class AudioPolicyTestActivity extends Activity {
- public AudioPolicyTest() {
+ public AudioPolicyTestActivity() {
}
/** Called when the activity is first created. */
diff --git a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioProductStrategyTest.java b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioProductStrategyTest.java
index 0e918d13e042a..b66545a6558e5 100644
--- a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioProductStrategyTest.java
+++ b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioProductStrategyTest.java
@@ -16,25 +16,43 @@
package com.android.audiopolicytest;
+import static com.android.audiopolicytest.AudioVolumeTestUtil.INVALID_ATTRIBUTES;
+
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.AudioSystem;
import android.media.audiopolicy.AudioProductStrategy;
import android.media.audiopolicy.AudioVolumeGroup;
+import android.platform.test.annotations.Presubmit;
import android.util.Log;
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
import java.util.List;
-public class AudioProductStrategyTest extends AudioVolumesTestBase {
+@Presubmit
+@RunWith(AndroidJUnit4.class)
+public class AudioProductStrategyTest {
private static final String TAG = "AudioProductStrategyTest";
+ @Rule
+ public final AudioVolumesTestRule rule = new AudioVolumesTestRule();
+
//-----------------------------------------------------------------
// Test getAudioProductStrategies and validate strategies
//-----------------------------------------------------------------
- public void testGetProductStrategies() throws Exception {
+ @Test
+ public void testGetProductStrategies() {
List audioProductStrategies =
AudioProductStrategy.getAudioProductStrategies();
@@ -65,6 +83,7 @@ public class AudioProductStrategyTest extends AudioVolumesTestBase {
//-----------------------------------------------------------------
// Test stream to/from attributes conversion
//-----------------------------------------------------------------
+ @Test
public void testAudioAttributesFromStreamTypes() throws Exception {
List audioProductStrategies =
AudioProductStrategy.getAudioProductStrategies();
@@ -81,7 +100,7 @@ public class AudioProductStrategyTest extends AudioVolumesTestBase {
// hosting this stream type; Bailing out the test, just ensure that any request
// for reciproque API with the unknown attributes would return default stream
// for volume control, aka STREAM_MUSIC.
- if (aaFromStreamType.equals(sInvalidAttributes)) {
+ if (aaFromStreamType.equals(INVALID_ATTRIBUTES)) {
assertEquals(AudioSystem.STREAM_MUSIC,
AudioProductStrategy.getLegacyStreamTypeForStrategyWithAudioAttributes(
aaFromStreamType));
@@ -139,7 +158,8 @@ public class AudioProductStrategyTest extends AudioVolumesTestBase {
}
}
- public void testAudioAttributesToStreamTypes() throws Exception {
+ @Test
+ public void testAudioAttributesToStreamTypes() {
List audioProductStrategies =
AudioProductStrategy.getAudioProductStrategies();
diff --git a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumeGroupChangeHandlerTest.java b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumeGroupChangeHandlerTest.java
index 221f1f7fef175..82394a2eb420e 100644
--- a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumeGroupChangeHandlerTest.java
+++ b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumeGroupChangeHandlerTest.java
@@ -16,21 +16,48 @@
package com.android.audiopolicytest;
+import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
+
+import static com.android.audiopolicytest.AudioVolumeTestUtil.DEFAULT_ATTRIBUTES;
+import static com.android.audiopolicytest.AudioVolumeTestUtil.incrementVolumeIndex;
+
import static org.junit.Assert.assertEquals;
-import static org.testng.Assert.assertThrows;
+import static org.junit.Assert.assertThrows;
+import static org.junit.Assert.assertTrue;
import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.audiopolicy.AudioVolumeGroup;
import android.media.audiopolicy.AudioVolumeGroupChangeHandler;
+import android.platform.test.annotations.Presubmit;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
import java.util.ArrayList;
import java.util.List;
-public class AudioVolumeGroupChangeHandlerTest extends AudioVolumesTestBase {
+@Presubmit
+@RunWith(AndroidJUnit4.class)
+public class AudioVolumeGroupChangeHandlerTest {
private static final String TAG = "AudioVolumeGroupChangeHandlerTest";
- public void testRegisterInvalidCallback() throws Exception {
+ @Rule
+ public final AudioVolumesTestRule rule = new AudioVolumesTestRule();
+
+ private AudioManager mAudioManager;
+
+ @Before
+ public void setUp() {
+ mAudioManager = getApplicationContext().getSystemService(AudioManager.class);
+ }
+
+ @Test
+ public void testRegisterInvalidCallback() {
final AudioVolumeGroupChangeHandler audioAudioVolumeGroupChangedHandler =
new AudioVolumeGroupChangeHandler();
@@ -42,7 +69,8 @@ public class AudioVolumeGroupChangeHandlerTest extends AudioVolumesTestBase {
});
}
- public void testUnregisterInvalidCallback() throws Exception {
+ @Test
+ public void testUnregisterInvalidCallback() {
final AudioVolumeGroupChangeHandler audioAudioVolumeGroupChangedHandler =
new AudioVolumeGroupChangeHandler();
@@ -58,7 +86,8 @@ public class AudioVolumeGroupChangeHandlerTest extends AudioVolumesTestBase {
audioAudioVolumeGroupChangedHandler.unregisterListener(cb);
}
- public void testRegisterUnregisterCallback() throws Exception {
+ @Test
+ public void testRegisterUnregisterCallback() {
final AudioVolumeGroupChangeHandler audioAudioVolumeGroupChangedHandler =
new AudioVolumeGroupChangeHandler();
@@ -72,7 +101,8 @@ public class AudioVolumeGroupChangeHandlerTest extends AudioVolumesTestBase {
audioAudioVolumeGroupChangedHandler.unregisterListener(validCb);
}
- public void testCallbackReceived() throws Exception {
+ @Test
+ public void testCallbackReceived() {
final AudioVolumeGroupChangeHandler audioAudioVolumeGroupChangedHandler =
new AudioVolumeGroupChangeHandler();
@@ -90,7 +120,7 @@ public class AudioVolumeGroupChangeHandlerTest extends AudioVolumesTestBase {
List avgAttributes = audioVolumeGroup.getAudioAttributes();
// Set the volume per attributes (if valid) and wait the callback
- if (avgAttributes.size() == 0 || avgAttributes.get(0).equals(sDefaultAttributes)) {
+ if (avgAttributes.size() == 0 || avgAttributes.get(0).equals(DEFAULT_ATTRIBUTES)) {
// Some volume groups may not have valid attributes, used for internal
// volume management like patch/rerouting
// so bailing out strategy retrieval from attributes
@@ -118,7 +148,8 @@ public class AudioVolumeGroupChangeHandlerTest extends AudioVolumesTestBase {
}
}
- public void testMultipleCallbackReceived() throws Exception {
+ @Test
+ public void testMultipleCallbackReceived() {
final AudioVolumeGroupChangeHandler audioAudioVolumeGroupChangedHandler =
new AudioVolumeGroupChangeHandler();
@@ -144,7 +175,7 @@ public class AudioVolumeGroupChangeHandlerTest extends AudioVolumesTestBase {
List avgAttributes = audioVolumeGroup.getAudioAttributes();
// Set the volume per attributes (if valid) and wait the callback
- if (avgAttributes.size() == 0 || avgAttributes.get(0).equals(sDefaultAttributes)) {
+ if (avgAttributes.size() == 0 || avgAttributes.get(0).equals(DEFAULT_ATTRIBUTES)) {
// Some volume groups may not have valid attributes, used for internal
// volume management like patch/rerouting
// so bailing out strategy retrieval from attributes
diff --git a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumeGroupTest.java b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumeGroupTest.java
index 84b24b8fcab3f..188098336d61f 100644
--- a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumeGroupTest.java
+++ b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumeGroupTest.java
@@ -16,22 +16,51 @@
package com.android.audiopolicytest;
+import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
+
+import static com.android.audiopolicytest.AudioVolumeTestUtil.DEFAULT_ATTRIBUTES;
+
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotEquals;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertTrue;
import android.media.AudioAttributes;
+import android.media.AudioManager;
import android.media.AudioSystem;
import android.media.audiopolicy.AudioProductStrategy;
import android.media.audiopolicy.AudioVolumeGroup;
+import android.platform.test.annotations.Presubmit;
+
+import androidx.test.ext.junit.runners.AndroidJUnit4;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
import java.util.List;
-public class AudioVolumeGroupTest extends AudioVolumesTestBase {
+@Presubmit
+@RunWith(AndroidJUnit4.class)
+public class AudioVolumeGroupTest {
private static final String TAG = "AudioVolumeGroupTest";
+ @Rule
+ public final AudioVolumesTestRule rule = new AudioVolumesTestRule();
+
+ private AudioManager mAudioManager;
+
+ @Before
+ public void setUp() {
+ mAudioManager = getApplicationContext().getSystemService(AudioManager.class);
+ }
+
//-----------------------------------------------------------------
// Test getAudioVolumeGroups and validate groud id
//-----------------------------------------------------------------
- public void testGetVolumeGroupsFromNonServiceCaller() throws Exception {
+ @Test
+ public void testGetVolumeGroupsFromNonServiceCaller() {
// The transaction behind getAudioVolumeGroups will fail. Check is done at binder level
// with policy service. Error is not reported, the list is just empty.
// Request must come from service components
@@ -44,7 +73,8 @@ public class AudioVolumeGroupTest extends AudioVolumesTestBase {
//-----------------------------------------------------------------
// Test getAudioVolumeGroups and validate groud id
//-----------------------------------------------------------------
- public void testGetVolumeGroups() throws Exception {
+ @Test
+ public void testGetVolumeGroups() {
// Through AudioManager, the transaction behind getAudioVolumeGroups will succeed
final List audioVolumeGroup = mAudioManager.getAudioVolumeGroups();
assertNotNull(audioVolumeGroup);
@@ -67,7 +97,7 @@ public class AudioVolumeGroupTest extends AudioVolumesTestBase {
// for each volume group attributes, find the matching product strategy and ensure
// it is linked the considered volume group
for (final AudioAttributes aa : avgAttributes) {
- if (aa.equals(sDefaultAttributes)) {
+ if (aa.equals(DEFAULT_ATTRIBUTES)) {
// Some volume groups may not have valid attributes, used for internal
// volume management like patch/rerouting
// so bailing out strategy retrieval from attributes
diff --git a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumeTestUtil.java b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumeTestUtil.java
new file mode 100644
index 0000000000000..42b249fd07b87
--- /dev/null
+++ b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumeTestUtil.java
@@ -0,0 +1,37 @@
+/*
+ * Copyright (C) 2022 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 com.android.audiopolicytest;
+
+import android.media.AudioAttributes;
+import android.media.audiopolicy.AudioProductStrategy;
+
+class AudioVolumeTestUtil {
+ // Default matches the invalid (empty) attributes from native.
+ // The difference is the input source default which is not aligned between native and java
+ public static final AudioAttributes DEFAULT_ATTRIBUTES =
+ AudioProductStrategy.getDefaultAttributes();
+ public static final AudioAttributes INVALID_ATTRIBUTES = new AudioAttributes.Builder().build();
+
+ public static int resetVolumeIndex(int indexMin, int indexMax) {
+ return (indexMax + indexMin) / 2;
+ }
+
+ public static int incrementVolumeIndex(int index, int indexMin, int indexMax) {
+ return (index + 1 > indexMax) ? resetVolumeIndex(indexMin, indexMax) : ++index;
+ }
+
+}
diff --git a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumesTestBase.java b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumesTestRule.java
similarity index 74%
rename from media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumesTestBase.java
rename to media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumesTestRule.java
index b30ef307855d9..fc3b198c4cad6 100644
--- a/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumesTestBase.java
+++ b/media/tests/AudioPolicyTest/src/com/android/audiopolicytest/AudioVolumesTestRule.java
@@ -16,35 +16,36 @@
package com.android.audiopolicytest;
+import static androidx.test.core.app.ApplicationProvider.getApplicationContext;
+
+import static com.android.audiopolicytest.AudioVolumeTestUtil.DEFAULT_ATTRIBUTES;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertTrue;
+
import android.content.Context;
import android.content.pm.PackageManager;
import android.media.AudioAttributes;
import android.media.AudioManager;
import android.media.audiopolicy.AudioProductStrategy;
import android.media.audiopolicy.AudioVolumeGroup;
-import android.test.ActivityInstrumentationTestCase2;
+
+import androidx.test.core.app.ActivityScenario;
+
+import org.junit.After;
+import org.junit.Before;
+import org.junit.rules.ExternalResource;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-public class AudioVolumesTestBase extends ActivityInstrumentationTestCase2 {
- public AudioManager mAudioManager;
- Context mContext;
+final class AudioVolumesTestRule extends ExternalResource {
+ private AudioManager mAudioManager;
+ private Context mContext;
private Map mOriginalStreamVolumes = new HashMap<>();
private Map mOriginalVolumeGroupVolumes = new HashMap<>();
- // Default matches the invalid (empty) attributes from native.
- // The difference is the input source default which is not aligned between native and java
- public static final AudioAttributes sDefaultAttributes =
- AudioProductStrategy.getDefaultAttributes();
-
- public static final AudioAttributes sInvalidAttributes = new AudioAttributes.Builder().build();
-
- public AudioVolumesTestBase() {
- super("com.android.audiopolicytest", AudioPolicyTest.class);
- }
-
/**
*
Note: must be called with shell permission (MODIFY_AUDIO_ROUTING)
*/
@@ -56,14 +57,14 @@ public class AudioVolumesTestBase extends ActivityInstrumentationTestCase2