Fix OneTouchPlayActionTest failure on playback devices
Playback devices have HdmiProperties.cec_device_types() set to 'playback' and as a consequence, initializing HdmiControlService will automatically initialize a local playback device. This local playback device interferes with the playback device that is added in tests. Concretely, in the failing test the <Report Power Status> messages was being fed to the local playback device, instead of the test one. To resolve this, HdmiControlService is initialized with empty local devices, practically ignoring HdmiProperties.cec_device_types(). This will also avoid interference with other local devices while running these unit tests on f.e. a TV panel device. Also, isActiveSource() doesn't guarantee that oneTouchPlay() was executed, since the active source might have been set in a different method. We should additionally check if the correct CEC messages were sent. Bug: 187909454 Test: atest OneTouchPlayActionTest on cuttlefish and ADT3 Change-Id: I4599a240fa8a32f47a23c1f183d41e0d280152c3
This commit is contained in:
@@ -37,7 +37,6 @@ import android.os.IThermalService;
|
||||
import android.os.Looper;
|
||||
import android.os.PowerManager;
|
||||
import android.os.test.TestLooper;
|
||||
import android.provider.Settings;
|
||||
|
||||
import androidx.test.InstrumentationRegistry;
|
||||
import androidx.test.filters.SmallTest;
|
||||
@@ -51,6 +50,7 @@ import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
|
||||
/** Tests for {@link OneTouchPlayAction} */
|
||||
@SmallTest
|
||||
@@ -69,6 +69,7 @@ public class OneTouchPlayActionTest {
|
||||
private Context mContextSpy;
|
||||
private HdmiControlService mHdmiControlService;
|
||||
private FakeNativeWrapper mNativeWrapper;
|
||||
private FakeHdmiCecConfig mHdmiCecConfig;
|
||||
|
||||
private TestLooper mTestLooper = new TestLooper();
|
||||
private ArrayList<HdmiCecLocalDevice> mLocalDevices = new ArrayList<>();
|
||||
@@ -88,6 +89,7 @@ public class OneTouchPlayActionTest {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
|
||||
mContextSpy = spy(new ContextWrapper(InstrumentationRegistry.getTargetContext()));
|
||||
mHdmiCecConfig = new FakeHdmiCecConfig(mContextSpy);
|
||||
|
||||
setHdmiControlEnabled(hdmiControlEnabled);
|
||||
|
||||
@@ -97,7 +99,7 @@ public class OneTouchPlayActionTest {
|
||||
when(mContextSpy.getSystemService(PowerManager.class)).thenReturn(powerManager);
|
||||
when(mIPowerManagerMock.isInteractive()).thenReturn(true);
|
||||
|
||||
mHdmiControlService = new HdmiControlService(mContextSpy) {
|
||||
mHdmiControlService = new HdmiControlService(mContextSpy, Collections.emptyList()) {
|
||||
@Override
|
||||
AudioManager getAudioManager() {
|
||||
return new AudioManager() {
|
||||
@@ -131,7 +133,7 @@ public class OneTouchPlayActionTest {
|
||||
|
||||
Looper looper = mTestLooper.getLooper();
|
||||
mHdmiControlService.setIoLooper(looper);
|
||||
mHdmiControlService.setHdmiCecConfig(new FakeHdmiCecConfig(mContextSpy));
|
||||
mHdmiControlService.setHdmiCecConfig(mHdmiCecConfig);
|
||||
mNativeWrapper = new FakeNativeWrapper();
|
||||
HdmiCecController hdmiCecController = HdmiCecController.createWithNativeWrapper(
|
||||
this.mHdmiControlService, mNativeWrapper, mHdmiControlService.getAtomWriter());
|
||||
@@ -476,7 +478,7 @@ public class OneTouchPlayActionTest {
|
||||
mTestLooper.dispatchAll();
|
||||
|
||||
assertThat(callback.hasResult()).isFalse();
|
||||
assertThat(playbackDevice.isActiveSource()).isFalse();
|
||||
mNativeWrapper.clearResultMessages();
|
||||
|
||||
setHdmiControlEnabled(true);
|
||||
mHdmiControlService.allocateLogicalAddress(mLocalDevices, INITIATED_BY_ENABLE_CEC);
|
||||
@@ -495,6 +497,12 @@ public class OneTouchPlayActionTest {
|
||||
assertThat(mHdmiControlService.isAddressAllocated()).isTrue();
|
||||
assertThat(callback.getResult()).isEqualTo(HdmiControlManager.RESULT_SUCCESS);
|
||||
assertThat(playbackDevice.isActiveSource()).isTrue();
|
||||
HdmiCecMessage activeSource = HdmiCecMessageBuilder.buildActiveSource(
|
||||
playbackDevice.mAddress, mPhysicalAddress);
|
||||
HdmiCecMessage textViewOn = HdmiCecMessageBuilder.buildTextViewOn(playbackDevice.mAddress,
|
||||
ADDR_TV);
|
||||
assertThat(mNativeWrapper.getResultMessages()).contains(activeSource);
|
||||
assertThat(mNativeWrapper.getResultMessages()).contains(textViewOn);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -524,6 +532,12 @@ public class OneTouchPlayActionTest {
|
||||
|
||||
assertThat(callback.getResult()).isEqualTo(HdmiControlManager.RESULT_SUCCESS);
|
||||
assertThat(playbackDevice.isActiveSource()).isTrue();
|
||||
HdmiCecMessage activeSource = HdmiCecMessageBuilder.buildActiveSource(
|
||||
playbackDevice.mAddress, mPhysicalAddress);
|
||||
HdmiCecMessage textViewOn = HdmiCecMessageBuilder.buildTextViewOn(playbackDevice.mAddress,
|
||||
ADDR_TV);
|
||||
assertThat(mNativeWrapper.getResultMessages()).contains(activeSource);
|
||||
assertThat(mNativeWrapper.getResultMessages()).contains(textViewOn);
|
||||
}
|
||||
|
||||
@Test
|
||||
@@ -599,8 +613,8 @@ public class OneTouchPlayActionTest {
|
||||
}
|
||||
|
||||
private void setHdmiControlEnabled(boolean enabled) {
|
||||
int value = enabled ? 1 : 0;
|
||||
Settings.Global.putInt(mContextSpy.getContentResolver(),
|
||||
Settings.Global.HDMI_CONTROL_ENABLED, value);
|
||||
int value = enabled ? HdmiControlManager.HDMI_CEC_CONTROL_ENABLED :
|
||||
HdmiControlManager.HDMI_CEC_CONTROL_DISABLED;
|
||||
mHdmiCecConfig.setIntValue(HdmiControlManager.CEC_SETTING_NAME_HDMI_CEC_ENABLED, value);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user