Inject mocks in RemoteVolumeControllerTest via constructor
This fix avoids the test wrongfully initializing real components before the tests can modify mockable fields, which causes NPEs. Bug: 318078730 Test: atest RemoteVolumeGroupControllerTest Change-Id: I350e3e2e45eadb0f9737ba5d4b45c9f80e3355fb
This commit is contained in:
@@ -16,6 +16,8 @@
|
|||||||
|
|
||||||
package com.android.settings.notification;
|
package com.android.settings.notification;
|
||||||
|
|
||||||
|
import android.annotation.NonNull;
|
||||||
|
import android.annotation.Nullable;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
import android.content.Intent;
|
import android.content.Intent;
|
||||||
import android.media.MediaRouter2Manager;
|
import android.media.MediaRouter2Manager;
|
||||||
@@ -53,6 +55,7 @@ public class RemoteVolumeGroupController extends BasePreferenceController implem
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
static final String SWITCHER_PREFIX = "OUTPUT_SWITCHER";
|
static final String SWITCHER_PREFIX = "OUTPUT_SWITCHER";
|
||||||
|
|
||||||
|
@Nullable
|
||||||
private PreferenceCategory mPreferenceCategory;
|
private PreferenceCategory mPreferenceCategory;
|
||||||
private final List<RoutingSessionInfo> mRoutingSessionInfos = new ArrayList<>();
|
private final List<RoutingSessionInfo> mRoutingSessionInfos = new ArrayList<>();
|
||||||
|
|
||||||
@@ -61,6 +64,7 @@ public class RemoteVolumeGroupController extends BasePreferenceController implem
|
|||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
MediaRouter2Manager mRouterManager;
|
MediaRouter2Manager mRouterManager;
|
||||||
|
|
||||||
|
// Called via reflection from BasePreferenceController#createInstance().
|
||||||
public RemoteVolumeGroupController(Context context, String preferenceKey) {
|
public RemoteVolumeGroupController(Context context, String preferenceKey) {
|
||||||
super(context, preferenceKey);
|
super(context, preferenceKey);
|
||||||
if (mLocalMediaManager == null) {
|
if (mLocalMediaManager == null) {
|
||||||
@@ -71,6 +75,19 @@ public class RemoteVolumeGroupController extends BasePreferenceController implem
|
|||||||
mRouterManager = MediaRouter2Manager.getInstance(context);
|
mRouterManager = MediaRouter2Manager.getInstance(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
/* package */ RemoteVolumeGroupController(
|
||||||
|
@NonNull Context context,
|
||||||
|
@NonNull String preferenceKey,
|
||||||
|
@NonNull LocalMediaManager localMediaManager,
|
||||||
|
@NonNull MediaRouter2Manager mediaRouter2Manager) {
|
||||||
|
super(context, preferenceKey);
|
||||||
|
mLocalMediaManager = localMediaManager;
|
||||||
|
mRouterManager = mediaRouter2Manager;
|
||||||
|
mLocalMediaManager.registerCallback(this);
|
||||||
|
mLocalMediaManager.startScan();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public int getAvailabilityStatus() {
|
public int getAvailabilityStatus() {
|
||||||
if (mRoutingSessionInfos.isEmpty()) {
|
if (mRoutingSessionInfos.isEmpty()) {
|
||||||
|
@@ -103,9 +103,9 @@ public class RemoteVolumeGroupControllerTest {
|
|||||||
mContext = spy(RuntimeEnvironment.application);
|
mContext = spy(RuntimeEnvironment.application);
|
||||||
doReturn(mMediaSessionManager).when(mContext).getSystemService(
|
doReturn(mMediaSessionManager).when(mContext).getSystemService(
|
||||||
Context.MEDIA_SESSION_SERVICE);
|
Context.MEDIA_SESSION_SERVICE);
|
||||||
mController = new RemoteVolumeGroupController(mContext, KEY_REMOTE_VOLUME_GROUP);
|
mController =
|
||||||
mController.mLocalMediaManager = mLocalMediaManager;
|
new RemoteVolumeGroupController(
|
||||||
mController.mRouterManager = mRouterManager;
|
mContext, KEY_REMOTE_VOLUME_GROUP, mLocalMediaManager, mRouterManager);
|
||||||
mPreferenceCategory = spy(new PreferenceCategory(mContext));
|
mPreferenceCategory = spy(new PreferenceCategory(mContext));
|
||||||
mPreferenceCategory.setKey(mController.getPreferenceKey());
|
mPreferenceCategory.setKey(mController.getPreferenceKey());
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user